[Scummvm-git-logs] scummvm master -> 6e82f01ee4db629aaf7a969426509ff881586824

dreammaster noreply at scummvm.org
Sat Jul 25 11:32:43 UTC 2026


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

Summary:
c84f2358d8 MADS: NEBULAR: In progress fixing anim background scrolling
0d0a16db01 MADS: NEBULAR: Flush keys when exiting animview
fe790661c4 MADS: NEBULAR: Fix crash on fallback talk to action
c82078f085 MADS: NEBULAR: Refactor out the VM thunk class
ced9db8cc7 MADS: NEBULAR: Refactor out Game and Resources thunk classes
a3bcab39f4 MADS: NEBULAR: Refactor Action out of thunks
32b83e6206 MADS: NEBULAR: Refactor Globals thunk
ef05808e7a MADS: NEBULAR: Refactor the Sprites thunk
4e11351716 MADS: NEBULAR: Removed top level Scene functions and reference fields
f6e6e1978f MADS: NEBULAR: Refactor KernelMessages thunk
344464d3f6 MADS: NEBULAR: Refactor Animation thunk
a494dfee3b MADS: NEBULAR: Refactored Sequences thunk
89ce28f662 MADS: NEBULAR: Refactor remainder of Scene thunk
1d9ee3a89b MADS: NEBULAR: Refactoring thunk enums
6e82f01ee4 MADS: NEBULAR: Remove now empty thunks.cpp


Commit: c84f2358d87108710a2bfbee4097f5f9f5a6a0eb
    https://github.com/scummvm/scummvm/commit/c84f2358d87108710a2bfbee4097f5f9f5a6a0eb
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:52+10:00

Commit Message:
MADS: NEBULAR: In progress fixing anim background scrolling

Changed paths:
    engines/mads/core/anim.h


diff --git a/engines/mads/core/anim.h b/engines/mads/core/anim.h
index eb89daf805f..537b7830707 100644
--- a/engines/mads/core/anim.h
+++ b/engines/mads/core/anim.h
@@ -199,7 +199,7 @@ struct SegmentBuf {
 
 	int    speech;
 
-	word   misc[10];
+	int16  misc[10];
 
 	int    num_sprite_changes;
 	word   sprite_change_frame[AA_MAX_CHANGES];
@@ -380,7 +380,7 @@ struct AnimFile {
 	uint16 font_auto_spacing;
 	uint16 background_type;                 /* black, or room, or whatever    */
 	uint16 background_room;                 /* room number to load            */
-	uint16 misc[10];                        /* see MISC_ defines above        */
+	int16 misc[10];                         /* see MISC_ defines above        */
 	char background_name[13];            /* if needed                      */
 	char series_name[AA_MAX_SERIES][13]; /* filenames for all your series  */
 	char sound_file_name[13];


Commit: 0d0a16db01f7a64e3bdcbe4e25e8843b58c0a0a8
    https://github.com/scummvm/scummvm/commit/0d0a16db01f7a64e3bdcbe4e25e8843b58c0a0a8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:52+10:00

Commit Message:
MADS: NEBULAR: Flush keys when exiting animview

Changed paths:
    engines/mads/animview/animview.cpp
    engines/mads/mads.cpp


diff --git a/engines/mads/animview/animview.cpp b/engines/mads/animview/animview.cpp
index 4263d0973ad..cfa9ee37529 100644
--- a/engines/mads/animview/animview.cpp
+++ b/engines/mads/animview/animview.cpp
@@ -645,6 +645,8 @@ void animview_main(const char *resName) {
 	}
 
 	animate();
+
+	g_engine->flushKeys();
 }
 
 } // namespace AnimView
diff --git a/engines/mads/mads.cpp b/engines/mads/mads.cpp
index a9468ae30c7..a87156c3235 100644
--- a/engines/mads/mads.cpp
+++ b/engines/mads/mads.cpp
@@ -378,6 +378,7 @@ void MADSEngine::flushKeys() {
 	pollEvents();
 
 	_keyEvents.clear();
+	_mouseButtons = 0;
 }
 
 int MADSEngine::getMouseState(int &x, int &y) {


Commit: fe790661c45a61e038f2e1cdccdf376735a1a217
    https://github.com/scummvm/scummvm/commit/fe790661c45a61e038f2e1cdccdf376735a1a217
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:52+10:00

Commit Message:
MADS: NEBULAR: Fix crash on fallback talk to action

Changed paths:
    engines/mads/nebular/nebular.cpp


diff --git a/engines/mads/nebular/nebular.cpp b/engines/mads/nebular/nebular.cpp
index cfa2c35f675..09132ff4374 100644
--- a/engines/mads/nebular/nebular.cpp
+++ b/engines/mads/nebular/nebular.cpp
@@ -576,11 +576,10 @@ void RexNebularEngine::global_error_code() {
 		if (!global[kTalkInanimateCount]) {
 			text_show(2);
 		} else {
-			Common::String tmpMsg = "\"Greetings, ";
-			tmpMsg += vocab_string(inter_main_noun);
-			tmpMsg += "!\"";
+			static char msg[32];
+			Common::sprintf_s(msg, "\"Greetings, %s!\"", vocab_string(inter_main_noun));
 			kernel_message_purge();
-			kernel_message_add(const_cast<char *>(tmpMsg.c_str()), 0, 0, 0x1110, 120, 34, 0);
+			kernel_message_add(msg, 0, 0, 0x1110, 120, 0, 34);
 		}
 	} else if (player_said_3(give, door, ceiling) || player_said_2(close, chair))
 		text_show(3);


Commit: c82078f085ef2238e0d16d787d9a885ac1c94b94
    https://github.com/scummvm/scummvm/commit/c82078f085ef2238e0d16d787d9a885ac1c94b94
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:52+10:00

Commit Message:
MADS: NEBULAR: Refactor out the VM thunk class

Changed paths:
    engines/mads/nebular/rooms/forcefield.cpp
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room212.cpp
    engines/mads/nebular/rooms/room213.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room322.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room354.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room366.cpp
    engines/mads/nebular/rooms/room387.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room390.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room409.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room502.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room707.cpp
    engines/mads/nebular/rooms/room711.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room807.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/section1.cpp
    engines/mads/nebular/rooms/section2.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/rooms/forcefield.cpp b/engines/mads/nebular/rooms/forcefield.cpp
index 567ab1ef145..4fcec6584db 100644
--- a/engines/mads/nebular/rooms/forcefield.cpp
+++ b/engines/mads/nebular/rooms/forcefield.cpp
@@ -65,10 +65,10 @@ void handle_forcefield(Forcefield *force, int16 *sprites) {
 	if (!force->_flag || (_scene->_frameStartTime < force->_timer) || (force->_vertical + force->_horizontal >= 5))
 		return;
 
-	if (_vm->getRandomNumber(1, 1000) <= (200 + ((40 - (force->_vertical + force->_horizontal)) << 5))) {
+	if (g_engine->getRandomNumber(1, 1000) <= (200 + ((40 - (force->_vertical + force->_horizontal)) << 5))) {
 		int id = -1;
 		for (int i = 0; i < 100; i++) {
-			int randIdx = _vm->getRandomNumber(0, 39);
+			int randIdx = g_engine->getRandomNumber(0, 39);
 			if (force->_seqId[randIdx] < 0) {
 				id = randIdx;
 				break;
@@ -86,7 +86,7 @@ void handle_forcefield(Forcefield *force, int16 *sprites) {
 
 		int speedX, speedY;
 		int posX, posY;
-		int randVal = _vm->getRandomNumber(1, 100);
+		int randVal = g_engine->getRandomNumber(1, 100);
 		int spriteId;
 		bool mirror;
 
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index ec4549d4aa1..f650beb4825 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -54,7 +54,7 @@ static void room_101_say_dang() {
 		_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 6, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 21);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
-		_vm->_sound->command(17);
+		g_engine->_soundManager->command(17, 0);
 		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 3, 2, 0, 0);
 		break;
 
@@ -66,7 +66,7 @@ static void room_101_say_dang() {
 		break;
 
 	case 73:
-		_vm->_dialogs->show(10117);
+		text_show(10117);
 		_game._player._stepEnabled = true;
 		break;
 
@@ -149,14 +149,14 @@ static void room_101_daemon() {
 	if (local._oldSpecial != _game._player._special) {
 		local._oldSpecial = _game._player._special;
 		if (local._oldSpecial)
-			_vm->_sound->command(39);
+			g_engine->_soundManager->command(39, 0);
 		else
-			_vm->_sound->command(11);
+			g_engine->_soundManager->command(11, 0);
 	}
 
 	switch (_game._trigger) {
 	case 70:
-		_vm->_sound->command(9);
+		g_engine->_soundManager->command(9, 0);
 		break;
 
 	case 71:
@@ -225,7 +225,7 @@ static void room_101_pre_parser() {
 				_globals._sequenceIndexes[11] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 1, 17);
-				_vm->_sound->command(16);
+				g_engine->_soundManager->command(16, 0);
 				break;
 
 			case 1:
@@ -254,7 +254,7 @@ static void room_101_pre_parser() {
 				_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 1, 0, 0);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				_game._player._stepEnabled = false;
-				_vm->_sound->command(20);
+				g_engine->_soundManager->command(20, 0);
 			}
 			break;
 
@@ -272,7 +272,7 @@ static void room_101_pre_parser() {
 
 static void room_101_parser() {
 	if (_action._lookFlag) {
-		_vm->_dialogs->show(10125);
+		text_show(10125);
 		_action._inProgress = false;
 		return;
 	}
@@ -298,7 +298,7 @@ static void room_101_parser() {
 				return;
 
 			case 1:
-				_vm->_sound->command(16);
+				g_engine->_soundManager->command(16, 0);
 				break;
 
 			case 2:
@@ -319,7 +319,7 @@ static void room_101_parser() {
 				break;
 			}
 		} else {
-			_vm->_dialogs->show(10131);
+			text_show(10131);
 			_action._inProgress = false;
 			return;
 		}
@@ -332,7 +332,7 @@ static void room_101_parser() {
 			_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			_game._player._stepEnabled = false;
-			_vm->_sound->command(20);
+			g_engine->_soundManager->command(20, 0);
 			break;
 
 		case 1:
@@ -358,8 +358,8 @@ static void room_101_parser() {
 		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[14], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
 		_scene->_hotspots.activate(words_shield_modulator, false);
-		_vm->_dialogs->showItem(OBJ_SHIELD_MODULATOR, 10120);
-		_vm->_sound->command(22);
+		object_examine(OBJ_SHIELD_MODULATOR, 10120, 0);
+		g_engine->_soundManager->command(22, 0);
 		_action._inProgress = false;
 		return;
 	}
@@ -367,18 +367,18 @@ static void room_101_parser() {
 	if (player_said_2(look, shield_access_panel) || (player_said_2(look, shield_modulator) && !_game._objects.isInInventory(OBJ_SHIELD_MODULATOR))) {
 		if (local._panelOpened) {
 			if (_game._objects.isInRoom(OBJ_SHIELD_MODULATOR))
-				_vm->_dialogs->show(10128);
+				text_show(10128);
 			else
-				_vm->_dialogs->show(10129);
+				text_show(10129);
 		} else
-			_vm->_dialogs->show(10127);
+			text_show(10127);
 
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(open, shield_access_panel) && local._panelOpened) {
-		_vm->_dialogs->show(10130);
+		text_show(10130);
 		_action._inProgress = false;
 		return;
 	}
@@ -394,7 +394,7 @@ static void room_101_parser() {
 				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 21);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_vm->_sound->command(17);
+				g_engine->_soundManager->command(17, 0);
 				break;
 
 			case 1:
@@ -426,133 +426,133 @@ static void room_101_parser() {
 	}
 
 	if (player_said_2(look, chair)) {
-		_vm->_dialogs->show(10101);
+		text_show(10101);
 		_action._inProgress = false;
 		return;
 	}
 
 	if ((player_said_1(look) || player_said_1(peer_through)) && (player_said_1(front_window) || player_said_1(outside))) {
-		_vm->_dialogs->show(10102);
+		text_show(10102);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, hull) || player_said_2(look, outer_hull) || player_said_2(examine, hull) || player_said_2(examine, outer_hull)) {
-		_vm->_dialogs->show(10103);
+		text_show(10103);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, fuzzy_dice)) {
-		_vm->_dialogs->show(10104);
+		text_show(10104);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, mirror) || player_said_2(look_in, mirror)) {
-		_vm->_dialogs->show(10105);
+		text_show(10105);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, curtains)) {
-		_vm->_dialogs->show(10106);
+		text_show(10106);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, plastic_jesus)) {
-		_vm->_dialogs->show(10107);
+		text_show(10107);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, escape_hatch) || (player_said_2(open, escape_hatch) && !_game._objects.isInInventory(OBJ_REBREATHER))) {
-		_vm->_dialogs->show(10109);
+		text_show(10109);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(open, escape_hatch)) {
-		_vm->_dialogs->show(10110);
+		text_show(10110);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, target_computer)) {
-		_vm->_dialogs->show(10111);
+		text_show(10111);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, library_computer)) {
-		_vm->_dialogs->show(10126);
+		text_show(10126);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, damage_control_panel)) {
-		_vm->_dialogs->show(10112);
+		text_show(10112);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, navigation_controls)) {
-		_vm->_dialogs->show(10113);
+		text_show(10113);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, engineering_controls)) {
-		_vm->_dialogs->show(10114);
+		text_show(10114);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, weapons_display)) {
-		_vm->_dialogs->show(10115);
+		text_show(10115);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, shield_status_panel)) {
-		_vm->_dialogs->show(10116);
+		text_show(10116);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(take, plastic_jesus)) {
-		_vm->_dialogs->show(10118);
+		text_show(10118);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(take, fuzzy_dice)) {
-		_vm->_dialogs->show(10119);
+		text_show(10119);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(open, damage_control_panel)) {
-		_vm->_dialogs->show(10121);
+		text_show(10121);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(open, curtains)) {
-		_vm->_dialogs->show(10122);
+		text_show(10122);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(close, curtains)) {
-		_vm->_dialogs->show(10123);
+		text_show(10123);
 		_action._inProgress = false;
 		return;
 	}
 
 	if ((player_said_1(look) || player_said_1(play)) && player_said_1(video_game)) {
-		_vm->_dialogs->show(10124);
+		text_show(10124);
 		_action._inProgress = false;
 		return;
 	}
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index aeaeb996949..7486540fb60 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -47,7 +47,7 @@ static Scratch local;
 static void addRandomMessage() {
 	_scene->_kernelMessages.reset();
 	_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-	int quoteId = _vm->getRandomNumber(65, 69);
+	int quoteId = g_engine->getRandomNumber(65, 69);
 	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 73, 120, _game.getQuote(quoteId));
 	local._activeMsgFl = true;
 }
@@ -110,8 +110,8 @@ static void room_102_init() {
 		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 5);
-		_vm->_sound->command(24);
-		_vm->_sound->command(28);
+		g_engine->_soundManager->command(24, 0);
+		g_engine->_soundManager->command(28, 0);
 	}
 
 	local._fridgeOpenedFl = false;
@@ -124,7 +124,7 @@ static void room_102_init() {
 	_game.loadQuoteSet(0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0);
 
 	if (_scene->_priorSceneId == 101)
-		_vm->_sound->command(20);
+		g_engine->_soundManager->command(20, 0);
 }
 
 static void room_102_daemon() {
@@ -145,9 +145,9 @@ static void room_102_daemon() {
 			_game._player._visible = false;
 
 			_globals[kWaterInAPuddle] = true;
-			_vm->_sound->command(24);
+			g_engine->_soundManager->command(24, 0);
 		} else {
-			_vm->_sound->command(23);
+			g_engine->_soundManager->command(23, 0);
 			_scene->_sequences.addTimer(48, _game._trigger + 1);
 		}
 	}
@@ -162,12 +162,12 @@ static void room_102_daemon() {
 		local._fridgeCommentCount++;
 		if (local._fridgeCommentCount > 16384) {
 			local._fridgeOpenedDescr = true;
-			_vm->_dialogs->show(10213);
+			text_show(10213);
 		}
 	}
 
 	if (!local._activeMsgFl && (_game._player._playerPos == Common::Point(177, 114)) && (_game._player._facing == FACING_NORTH)
-		&& (_vm->getRandomNumber(1, 5000) == 1)) {
+		&& (g_engine->getRandomNumber(1, 5000) == 1)) {
 		_scene->_kernelMessages.reset();
 		local._activeMsgFl = false;
 		addRandomMessage();
@@ -190,7 +190,7 @@ static void room_102_pre_parser() {
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
 				_game._player._stepEnabled = false;
-				_vm->_sound->command(20);
+				g_engine->_soundManager->command(20, 0);
 			}
 			break;
 
@@ -214,7 +214,7 @@ static void room_102_pre_parser() {
 
 static void room_102_parser() {
 	if (_action._lookFlag) {
-		_vm->_dialogs->show(10234);
+		text_show(10234);
 		_action._inProgress = false;
 		return;
 	}
@@ -231,7 +231,7 @@ static void room_102_parser() {
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
 			}
 			_game._player._stepEnabled = false;
-			_vm->_sound->command(20);
+			g_engine->_soundManager->command(20, 0);
 			_action._inProgress = false;
 			return;
 
@@ -265,9 +265,9 @@ static void room_102_parser() {
 
 	if (player_said_2(look, refrigerator) || player_said_2(open, refrigerator)) {
 		if (_game._objects.isInRoom(OBJ_BURGER))
-			_vm->_dialogs->show(10230);
+			text_show(10230);
 		else
-			_vm->_dialogs->show(10229);
+			text_show(10229);
 
 		local._fridgeFirstOpenFl = false;
 		_action._inProgress = false;
@@ -276,7 +276,7 @@ static void room_102_parser() {
 
 	if (player_said_2(walkto, refrigerator) && justOpenedFl) {
 		local._fridgeFirstOpenFl = false;
-		int quoteId = _vm->getRandomNumber(59, 63);
+		int quoteId = g_engine->getRandomNumber(59, 63);
 		const char *curQuote = _game.getQuote(quoteId);
 		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, -1);
 		_scene->_kernelMessages.reset();
@@ -289,13 +289,13 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(close, refrigerator)) {
-		_vm->_dialogs->show(10213);
+		text_show(10213);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(take, refrigerator)) {
-		_vm->_dialogs->show(8);
+		text_show(8);
 		_action._inProgress = false;
 		return;
 	}
@@ -306,7 +306,7 @@ static void room_102_parser() {
 			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			_game._player._stepEnabled = false;
-			_vm->_sound->command(20);
+			g_engine->_soundManager->command(20, 0);
 			break;
 
 		case 1:
@@ -333,67 +333,67 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(look, weight_machine)) {
-		_vm->_dialogs->show(10212);
+		text_show(10212);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, engineering_section)) {
-		_vm->_dialogs->show(10205);
+		text_show(10205);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, door)) {
-		_vm->_dialogs->show(10204);
+		text_show(10204);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(stare_at, ceiling) || player_said_2(look, ceiling)) {
-		_vm->_dialogs->show(10203);
+		text_show(10203);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(stare_at, overhead_lamp) || player_said_2(look, overhead_lamp)) {
-		_vm->_dialogs->show(10202);
+		text_show(10202);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, robo_kitchen)) {
-		_vm->_dialogs->show(10215);
+		text_show(10215);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_3(put, burger, robo_kitchen) && _game._objects.isInInventory(OBJ_BURGER)) {
-		_vm->_dialogs->show(10216);
+		text_show(10216);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(put, refrigerator) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
-		_vm->_dialogs->show(10217);
+		text_show(10217);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_3(put, dead_fish, robo_kitchen) || player_said_3(put, stuffed_fish, robo_kitchen)) {
-		_vm->_dialogs->show(10230);
+		text_show(10230);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(open, robo_kitchen)) {
-		_vm->_dialogs->show(10218);
+		text_show(10218);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, closet)) {
-		_vm->_dialogs->show(10219);
+		text_show(10219);
 		_action._inProgress = false;
 		return;
 	}
@@ -401,12 +401,12 @@ static void room_102_parser() {
 	if ((player_said_1(ladder) || player_said_1(hatchway)) && (player_said_1(look) || player_said_1(climb_up) || player_said_1(climb_through))) {
 		if (_game._objects.isInInventory(OBJ_REBREATHER)) {
 			if (!player_said_1(climb_up) && !player_said_1(climb_through)) {
-				_vm->_dialogs->show(10231);
+				text_show(10231);
 				_action._inProgress = false;
 				return;
 			}
 		} else if (player_said_1(look) || (_game._difficulty != DIFFICULTY_HARD)) {
-			_vm->_dialogs->show(10222);
+			text_show(10222);
 			_action._inProgress = false;
 			return;
 		}
@@ -421,25 +421,25 @@ static void room_102_parser() {
 			break;
 
 		case 1:
-			_vm->_sound->command(24);
+			g_engine->_soundManager->command(24, 0);
 			_scene->_sequences.addTimer(48, 2);
 			break;
 
 		case 2:
 		case 3:
 		case 4:
-			_vm->_sound->command(23);
+			g_engine->_soundManager->command(23, 0);
 			_scene->_sequences.addTimer(48, _game._trigger + 1);
 			break;
 
 		case 5:
-			_vm->_sound->command(24);
+			g_engine->_soundManager->command(24, 0);
 			_scene->_sequences.addTimer(48, _game._trigger + 1);
 			break;
 
 		case 6:
 			if (_game._objects.isInInventory(OBJ_REBREATHER) && !_game._visitedScenes.exists(106))
-				_vm->_dialogs->show(10237);
+				text_show(10237);
 			_scene->_nextSceneId = 106;
 			break;
 
@@ -451,60 +451,60 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(look, power_status_panel)) {
-		_vm->_dialogs->show(10226);
+		text_show(10226);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, window) || player_said_2(look_through, window)) {
-		_vm->_dialogs->show(10227);
+		text_show(10227);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, doorway) || player_said_2(walkto, doorway)) {
-		_vm->_dialogs->show(10228);
+		text_show(10228);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, drawer) || ((player_said_2(close, drawer) || player_said_2(push, drawer)) && !local._drawerDescrFl)) {
-		_vm->_dialogs->show(10220);
+		text_show(10220);
 		local._drawerDescrFl = true;
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(close, drawer) || player_said_2(push, drawer)) {
-		_vm->_dialogs->show(10221);
+		text_show(10221);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(open, drawer)) {
-		_vm->_dialogs->show(10236);
+		text_show(10236);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, chair) || (player_said_2(sit_in, chair) && !local._chairDescrFl)) {
 		local._chairDescrFl = true;
-		_vm->_dialogs->show(10210);
+		text_show(10210);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(sit_in, chair)) {
-		_vm->_dialogs->show(10211);
+		text_show(10211);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, medicine_cabinet)) {
 		if (_globals[kMedicineCabinetOpen])
-			_vm->_dialogs->show(10207);
+			text_show(10207);
 		else
-			_vm->_dialogs->show(10206);
+			text_show(10206);
 
 		_action._inProgress = false;
 		return;
@@ -517,7 +517,7 @@ static void room_102_parser() {
 			_globals._sequenceIndexes[8] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			_game._player._stepEnabled = false;
-			_vm->_sound->command(21);
+			g_engine->_soundManager->command(21, 0);
 			break;
 
 		case 1:
@@ -527,7 +527,7 @@ static void room_102_parser() {
 		case 2:
 			_game._player._stepEnabled = true;
 			_globals[kMedicineCabinetOpen] = false;
-			_vm->_dialogs->show(10209);
+			text_show(10209);
 			break;
 
 		default:
@@ -543,7 +543,7 @@ static void room_102_parser() {
 			_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			_game._player._stepEnabled = false;
-			_vm->_sound->command(21);
+			g_engine->_soundManager->command(21, 0);
 			break;
 
 		case 1:
@@ -556,9 +556,9 @@ static void room_102_parser() {
 			_game._player._stepEnabled = true;
 			_globals[kMedicineCabinetOpen] = true;
 			if (_globals[kMedicineCabinetVirgin]) {
-				_vm->_dialogs->show(10208);
+				text_show(10208);
 			} else {
-				_vm->_dialogs->show(10207);
+				text_show(10207);
 			}
 			_globals[kMedicineCabinetVirgin] = false;
 			break;
@@ -586,8 +586,8 @@ static void room_102_parser() {
 			_scene->_hotspots.activate(words_binoculars, false);
 			_game._player._visible = true;
 			_game._player._stepEnabled = true;
-			_vm->_sound->command(22);
-			_vm->_dialogs->showItem(OBJ_BINOCULARS, 10201);
+			g_engine->_soundManager->command(22, 0);
+			object_examine(OBJ_BINOCULARS, 10201, 0);
 			break;
 
 		default:
@@ -599,11 +599,11 @@ static void room_102_parser() {
 
 	if (player_said_2(take, burger) && _game._objects.isInRoom(OBJ_BURGER)) {
 		if (_game._trigger == 0) {
-			_vm->_dialogs->showItem(OBJ_BURGER, 10235);
+			object_examine(OBJ_BURGER, 10235, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 			_game._objects.addToInventory(OBJ_BURGER);
 			_scene->_hotspots.activate(words_burger, false);
-			_vm->_sound->command(22);
+			g_engine->_soundManager->command(22, 0);
 			_game._player._visible = true;
 			_game._player._stepEnabled = true;
 		}
@@ -612,38 +612,38 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(take, poster)) {
-		_vm->_dialogs->show(10224);
+		text_show(10224);
 		_action._inProgress = false;
 		return;
 	}
 
 	if ((player_said_1(push) || player_said_1(pull)) && player_said_1(weight_machine)) {
-		_vm->_dialogs->show(10225);
+		text_show(10225);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, floor)) {
-		_vm->_dialogs->show(10232);
+		text_show(10232);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, binoculars) && !_game._objects.isInInventory(OBJ_BINOCULARS)) {
-		_vm->_dialogs->show(10233);
+		text_show(10233);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, burger) && (_action._mainObjectSource == CAT_HOTSPOT)) {
-		_vm->_dialogs->show(801);
+		text_show(801);
 		_action._inProgress = false;
 	}
 }
 
 static void room_102_error() {
 	if (player_said_2(put, robo_kitchen) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
-		_vm->_dialogs->show(10217);
+		text_show(10217);
 		_action._inProgress = false;
 	}
 }
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 2c032e5f532..89eaab8d879 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -21,6 +21,7 @@
 
 #include "math/utils.h"
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -73,12 +74,12 @@ static void room_103_init() {
 	if (_game._objects.isInRoom(OBJ_TIMER_MODULE))
 		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6);
 	else
-		_vm->_game->_scene._hotspots.activate(371, false);
+		_game->_scene._hotspots.activate(371, false);
 
 	if (_game._objects.isInRoom(OBJ_REBREATHER))
 		_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 6);
 	else
-		_vm->_game->_scene._hotspots.activate(289, false);
+		_game->_scene._hotspots.activate(289, false);
 
 	if (_globals[kTurkeyExploded]) {
 		_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6);
@@ -97,7 +98,7 @@ static void room_103_init() {
 
 	section_1_music();
 
-	_vm->_game->loadQuoteSet(70, 51, 71, 7, 73, 0);
+	_game->loadQuoteSet(70, 51, 71, 7, 73, 0);
 
 	if (!_game._visitedScenes._sceneRevisited) {
 		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(70));
@@ -105,32 +106,32 @@ static void room_103_init() {
 	}
 
 	if (_scene->_priorSceneId == 102)
-		_vm->_sound->command(20);
+		g_engine->_soundManager->command(20, 0);
 
-	_vm->_palette->setEntry(252, 63, 63, 10);
-	_vm->_palette->setEntry(253, 45, 45, 10);
+	pal_change_color(252, 63, 63, 10);
+	pal_change_color(253, 45, 45, 10);
 	local._updateClock = _scene->_frameStartTime;
 }
 
 static void room_103_daemon() {
-	switch (_vm->_game->_trigger) {
+	switch (_game->_trigger) {
 	case 70:
-		_vm->_game->_player._stepEnabled = true;
+		_game->_player._stepEnabled = true;
 		break;
 
 	case 72:
 	{
-		Common::Point pt = _vm->_game->_player._playerPos;
+		Common::Point pt = _game->_player._playerPos;
 		int dist = Math::hypotenuse(pt.x - 58, pt.y - 93);
-		_vm->_sound->command(27, (dist * -128 / 378) + 127);
+		g_engine->_soundManager->command(27, (dist * -128 / 378) + 127);
 	}
 	break;
 
 	case 73:
 	{
-		Common::Point pt = _vm->_game->_player._playerPos;
+		Common::Point pt = _game->_player._playerPos;
 		int dist = Math::hypotenuse(pt.x - 266, pt.y - 81);
-		_vm->_sound->command(27, (dist * -127 / 378) + 127);
+		g_engine->_soundManager->command(27, (dist * -127 / 378) + 127);
 	}
 	break;
 
@@ -139,19 +140,19 @@ static void room_103_daemon() {
 	}
 
 	if (_scene->_frameStartTime >= local._updateClock) {
-		Common::Point pt = _vm->_game->_player._playerPos;
+		Common::Point pt = _game->_player._playerPos;
 		int dist = Math::hypotenuse(pt.x - 79, pt.y - 137);
-		_vm->_sound->command(29, (dist * -127 / 378) + 127);
+		g_engine->_soundManager->command(29, (dist * -127 / 378) + 127);
 
-		pt = _vm->_game->_player._playerPos;
+		pt = _game->_player._playerPos;
 		dist = Math::hypotenuse(pt.x - 69, pt.y - 80);
-		_vm->_sound->command(30, (dist * -127 / 378) + 127);
+		g_engine->_soundManager->command(30, (dist * -127 / 378) + 127);
 
-		pt = _vm->_game->_player._playerPos;
+		pt = _game->_player._playerPos;
 		dist = Math::hypotenuse(pt.x - 266, pt.y - 138);
-		_vm->_sound->command(32, (dist * -127 / 378) + 127);
+		g_engine->_soundManager->command(32, (dist * -127 / 378) + 127);
 
-		local._updateClock = _scene->_frameStartTime + _vm->_game->_player._ticksAmount;
+		local._updateClock = _scene->_frameStartTime + _game->_player._ticksAmount;
 	}
 }
 
@@ -161,18 +162,18 @@ static void room_103_pre_parser() {
 
 static void room_103_parser() {
 	if (_action._savedFields._lookFlag)
-		_vm->_dialogs->show(10322);
+		text_show(10322);
 	else if (player_said_2(walk_through, door)) {
-		switch (_vm->_game->_trigger) {
+		switch (_game->_trigger) {
 		case 0:
 			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			_game._player._stepEnabled = false;
-			_vm->_sound->command(20);
+			g_engine->_soundManager->command(20, 0);
 			break;
 
 		case 1:
-			_vm->_sound->command(1);
+			g_engine->_soundManager->command(1, 0);
 			_scene->_nextSceneId = 102;
 			_game._player._stepEnabled = true;
 			break;
@@ -181,15 +182,15 @@ static void room_103_parser() {
 			break;
 		}
 	} else if (player_said_2(take, timer_module) && _game._objects.isInRoom(OBJ_TIMER_MODULE)) {
-		switch (_vm->_game->_trigger) {
+		switch (_game->_trigger) {
 		case 0:
 			_scene->changeVariant(1);
 			_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 3, 2);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[13]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_vm->_game->_player._visible = false;
-			_vm->_game->_player._stepEnabled = false;
+			_game->_player._visible = false;
+			_game->_player._stepEnabled = false;
 			break;
 
 		case 1:
@@ -197,28 +198,28 @@ static void room_103_parser() {
 			break;
 
 		case 2:
-			_vm->_sound->command(22);
+			g_engine->_soundManager->command(22, 0);
 			_game._objects.addToInventory(OBJ_TIMER_MODULE);
 			_scene->changeVariant(0);
 			_scene->drawElements(kTransitionNone, false);
 			_scene->_hotspots.activate(371, false);
-			_vm->_game->_player._visible = true;
-			_vm->_game->_player._stepEnabled = true;
-			_vm->_dialogs->showItem(OBJ_TIMER_MODULE, 805);
+			_game->_player._visible = true;
+			_game->_player._stepEnabled = true;
+			object_examine(OBJ_TIMER_MODULE, 805, 0);
 			break;
 
 		default:
 			break;
 		}
 	} else if (player_said_2(take, rebreather) && _game._objects.isInRoom(OBJ_REBREATHER)) {
-		switch (_vm->_game->_trigger) {
+		switch (_game->_trigger) {
 		case 0:
 			_globals._sequenceIndexes[12] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[12], false, 3, 2);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[12]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_SPRITE, 6, 1);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_vm->_game->_player._visible = false;
-			_vm->_game->_player._stepEnabled = false;
+			_game->_player._visible = false;
+			_game->_player._stepEnabled = false;
 			break;
 
 		case 1:
@@ -226,34 +227,34 @@ static void room_103_parser() {
 			break;
 
 		case 2:
-			_vm->_sound->command(22);
+			g_engine->_soundManager->command(22, 0);
 			_game._objects.addToInventory(OBJ_REBREATHER);
 			_scene->_hotspots.activate(289, false);
-			_vm->_game->_player._visible = true;
-			_vm->_game->_player._stepEnabled = true;
-			_vm->_dialogs->showItem(OBJ_REBREATHER, 804);
+			_game->_player._visible = true;
+			_game->_player._stepEnabled = true;
+			object_examine(OBJ_REBREATHER, 804, 0);
 			break;
 
 		default:
 			break;
 		}
 	} else if (player_said_2(look, tasty_turkey))
-		_vm->_dialogs->show(10301);
+		text_show(10301);
 	else if (player_said_2(take, tasty_turkey)) {
 		// Take Turkey
-		if (!_vm->_game->_trigger)
-			_vm->_sound->command(31);
+		if (!_game->_trigger)
+			g_engine->_soundManager->command(31, 0);
 
-		if (_vm->_game->_trigger < 2) {
-			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, _vm->_game->_trigger < 1 ? 1 : 0);
-			if (_vm->_game->_trigger) {
+		if (_game->_trigger < 2) {
+			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, _game->_trigger < 1 ? 1 : 0);
+			if (_game->_trigger) {
 				// Lock the turkey into a permanent "exploded" frame
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], -2, -2);
 
 				// Rex says "Gads.."
 				const char *msg = _game.getQuote(51);
 				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 0, 60, msg);
-				_scene->_sequences.addTimer(120, _vm->_game->_trigger + 1);
+				_scene->_sequences.addTimer(120, _game->_trigger + 1);
 			} else {
 				// Initial turky explosion
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
@@ -266,13 +267,13 @@ static void room_103_parser() {
 
 		if (_game._trigger == 2) {
 			// Show exposition dialog at end of sequence
-			_vm->_dialogs->show(10302);
+			text_show(10302);
 			_scene->_hotspots.activate(362, false);
 		}
 	} else if (player_said_2(look, oven))
-		_vm->_dialogs->show(!_globals[kTurkeyExploded] ? 10323 : 10303);
+		text_show(!_globals[kTurkeyExploded] ? 10323 : 10303);
 	else if (player_said_2(talkto, auxiliary_power)) {
-		switch (_vm->_game->_trigger) {
+		switch (_game->_trigger) {
 		case 0:
 		{
 			_game._player._stepEnabled = false;
@@ -295,44 +296,44 @@ static void room_103_parser() {
 
 		case 3:
 			_game._player._stepEnabled = true;
-			_vm->_dialogs->show(10306);
+			text_show(10306);
 			break;
 
 		default:
 			break;
 		}
 	} else if (player_said_2(look, auxiliary_power))
-		_vm->_dialogs->show(10304);
+		text_show(10304);
 	else if (player_said_2(look, big_pipes))
-		_vm->_dialogs->show(10307);
+		text_show(10307);
 	else if (player_said_2(look, burnt_out_warp_coil))
-		_vm->_dialogs->show(10308);
+		text_show(10308);
 	else if (player_said_2(take, shovel))
-		_vm->_dialogs->show(10309);
+		text_show(10309);
 	else if (player_said_2(take, coal))
-		_vm->_dialogs->show(10310);
+		text_show(10310);
 	else if (player_said_2(look, furnace))
-		_vm->_dialogs->show(10312);
+		text_show(10312);
 	else if (player_said_2(open, furnace))
-		_vm->_dialogs->show(10313);
+		text_show(10313);
 	else if (player_said_2(close, auxiliary_power))
-		_vm->_dialogs->show(10314);
+		text_show(10314);
 	else if (player_said_2(look, shield_generator))
-		_vm->_dialogs->show(10315);
+		text_show(10315);
 	else if (player_said_2(look, hyperdrive_jump_unit))
-		_vm->_dialogs->show(10316);
+		text_show(10316);
 	else if (player_said_2(look, pressure_gauge))
-		_vm->_dialogs->show(10317);
+		text_show(10317);
 	else if (player_said_2(look, engineering_controls))
-		_vm->_dialogs->show(10318);
+		text_show(10318);
 	else if (player_said_2(look, rebreather) && _game._objects.isInInventory(OBJ_REBREATHER))
-		_vm->_dialogs->show(10319);
+		text_show(10319);
 	else if (player_said_2(look, timer_module) && _game._objects.isInInventory(OBJ_TIMER_MODULE))
-		_vm->_dialogs->show(10320);
+		text_show(10320);
 	else if (player_said_2(look, floor))
-		_vm->_dialogs->show(10321);
+		text_show(10321);
 	else if (player_said_2(look, workbench))
-		_vm->_dialogs->show(_game._objects.isInInventory(OBJ_TIMER_MODULE) ? 10324 : 10325);
+		text_show(_game._objects.isInInventory(OBJ_TIMER_MODULE) ? 10324 : 10325);
 	else
 		return;
 
@@ -341,7 +342,7 @@ static void room_103_parser() {
 
 void room_103_error() {
 	if (player_said_1(auxiliary_power) && !player_said_1(walkto)) {
-		_vm->_dialogs->show(10305);
+		text_show(10305);
 		_action._inProgress = false;
 	} else if (player_said_3(put, coal, furnace)) {
 		const char *msg = _game.getQuote(73);
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 06d05d0b45b..722e66c8b3c 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -52,7 +52,7 @@ static void room_104_init() {
 	_game.loadQuoteSet(0x35, 0x34, 0);
 	local._kargShootingFl = false;
 
-	if (_vm->getRandomNumber(1, 3) == 1) {
+	if (g_engine->getRandomNumber(1, 3) == 1) {
 		_scene->loadAnimation(Resources::formatName(104, 'B', -1, EXT_AA, ""), 0);
 		local._kargShootingFl = true;
 	}
@@ -86,7 +86,7 @@ static void room_104_daemon() {
 				_game._player._stepEnabled = false;
 				_game._player._visible = false;
 				_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 0));
-				_vm->_palette->refreshSceneColors();
+				kernel_new_palette();
 				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], mirrorFl, 7, 1, 0, 0);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(198, 143));
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
@@ -101,7 +101,7 @@ static void room_104_daemon() {
 				break;
 
 			case 2:
-				_vm->_dialogs->show(10406);
+				text_show(10406);
 				_scene->_reloadSceneFlag = true;
 				break;
 
@@ -119,7 +119,7 @@ static void room_104_daemon() {
 				_game._player._stepEnabled = false;
 				_game._player._visible = false;
 				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 1));
-				_vm->_palette->refreshSceneColors();
+				kernel_new_palette();
 				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(198, 143));
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4);
@@ -143,7 +143,7 @@ static void room_104_daemon() {
 				break;
 
 			case 3:
-				_vm->_dialogs->show(10406);
+				text_show(10406);
 				_scene->_reloadSceneFlag = true;
 				break;
 
@@ -161,7 +161,7 @@ static void room_104_daemon() {
 				_game._player._stepEnabled = false;
 				_game._player._visible = false;
 				_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('a', 2));
-				_vm->_palette->refreshSceneColors();
+				kernel_new_palette();
 				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 8, 1, 0, 0);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(198, 143));
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 4);
@@ -178,7 +178,7 @@ static void room_104_daemon() {
 				break;
 
 			case 2:
-				_vm->_dialogs->show(10406);
+				text_show(10406);
 				_scene->_reloadSceneFlag = true;
 				break;
 
@@ -191,7 +191,7 @@ static void room_104_daemon() {
 		}
 
 		if (!_game._trigger)
-			_vm->_sound->command(34);
+			g_engine->_soundManager->command(34, 0);
 	}
 
 	if (_game._player._moving && (_scene->_rails.getNext() > 0)) {
@@ -219,15 +219,15 @@ static void room_104_pre_parser() {
 
 static void room_104_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(10405);
+		text_show(10405);
 	else if (player_said_2(look, curious_weed_patch))
-		_vm->_dialogs->show(10404);
+		text_show(10404);
 	else if (player_said_2(look, surface))
-		_vm->_dialogs->show(10403);
+		text_show(10403);
 	else if (player_said_2(look, cliff_face))
-		_vm->_dialogs->show(10401);
+		text_show(10401);
 	else if (player_said_2(look, ocean_floor))
-		_vm->_dialogs->show(10402);
+		text_show(10402);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index e1766e06647..588bf240f9a 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -75,9 +75,9 @@ static void room_105_daemon() {
 			_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('m', 0));
 			_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('m', 2));
 			_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('m', 3));
-			_vm->_sound->command(33);
+			g_engine->_soundManager->command(33, 0);
 			_scene->clearSequenceList();
-			_vm->_palette->refreshSceneColors();
+			kernel_new_palette();
 
 			_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 8);
@@ -109,7 +109,7 @@ static void room_105_daemon() {
 		break;
 
 		case 3:
-			_vm->_dialogs->show(10507);
+			text_show(10507);
 			_scene->_reloadSceneFlag = true;
 			_scene->_sequences.addTimer(90, 4);
 			break;
@@ -142,38 +142,38 @@ static void room_105_pre_parser() {
 
 static void room_105_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(10512);
+		text_show(10512);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn105]) {
 		if (_game._objects.isInInventory(OBJ_DEAD_FISH)) {
-			int randVal = _vm->getRandomNumber(74, 76);
+			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 			_game._objects.addToInventory(OBJ_DEAD_FISH);
 			_globals[kFishIn105] = false;
-			_vm->_dialogs->showItem(OBJ_DEAD_FISH, 802, 0);
+			object_examine(OBJ_DEAD_FISH, 802, 0);
 		}
 	} else if (player_said_2(look, western_cliff_face))
-		_vm->_dialogs->show(10501);
+		text_show(10501);
 	else if (player_said_2(look, cliff_face))
-		_vm->_dialogs->show(10502);
+		text_show(10502);
 	else if (player_said_2(look, ocean_floor))
-		_vm->_dialogs->show(10503);
+		text_show(10503);
 	else if (player_said_2(look, medical_waste))
-		_vm->_dialogs->show(10504);
+		text_show(10504);
 	else if (player_said_2(take, medical_waste))
-		_vm->_dialogs->show(10505);
+		text_show(10505);
 	else if (player_said_2(look, mine))
-		_vm->_dialogs->show(10506);
+		text_show(10506);
 	else if (player_said_2(look, dead_fish))
-		_vm->_dialogs->show(10508);
+		text_show(10508);
 	else if (player_said_2(look, surface))
-		_vm->_dialogs->show(10509);
+		text_show(10509);
 	else if (player_said_2(look, open_area_to_south))
-		_vm->_dialogs->show(10510);
+		text_show(10510);
 	else if (player_said_2(look, rocks))
-		_vm->_dialogs->show(10511);
+		text_show(10511);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index a7cc83f5898..6b3e1d18791 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -195,7 +195,7 @@ static void room_106_pre_parser() {
 
 static void room_106_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(10614);
+		text_show(10614);
 	else if (player_said_2(swim_to, main_airlock)) {
 		_game._player._stepEnabled = false;
 		_game._player._prepareWalkPos = Common::Point(95, 72);
@@ -205,31 +205,31 @@ static void room_106_parser() {
 		_game._player._frameNumber = 9;
 		local._backToShipFl = true;
 	} else if (player_said_2(look, anemone) || player_said_2(look_at, anemone))
-		_vm->_dialogs->show(10601);
+		text_show(10601);
 	else if (player_said_2(take, anemone))
-		_vm->_dialogs->show(10602);
+		text_show(10602);
 	else if (player_said_2(look, seaweed) || player_said_2(look, seaweed_bank))
-		_vm->_dialogs->show(10603);
+		text_show(10603);
 	else if (player_said_2(take, seaweed) || player_said_2(take, seaweed_bank))
-		_vm->_dialogs->show(10604);
+		text_show(10604);
 	else if (player_said_2(look, open_area_to_east))
-		_vm->_dialogs->show(10605);
+		text_show(10605);
 	else if (player_said_2(look, pile_of_rocks) || player_said_2(look_at, pile_of_rocks))
-		_vm->_dialogs->show(10606);
+		text_show(10606);
 	else if (player_said_1(pile_of_rocks) && (player_said_1(push) || player_said_1(pull) || player_said_1(take)))
-		_vm->_dialogs->show(10607);
+		text_show(10607);
 	else if (player_said_2(look, ship) || player_said_2(look_at, ship))
-		_vm->_dialogs->show(10608);
+		text_show(10608);
 	else if (player_said_2(look, main_airlock))
-		_vm->_dialogs->show(10609);
+		text_show(10609);
 	else if (player_said_2(open, main_airlock))
-		_vm->_dialogs->show(10610);
+		text_show(10610);
 	else if (player_said_2(close, main_airlock))
-		_vm->_dialogs->show(10611);
+		text_show(10611);
 	else if (player_said_2(look, sea_cliff))
-		_vm->_dialogs->show(10612);
+		text_show(10612);
 	else if (player_said_2(look, ocean_floor))
-		_vm->_dialogs->show(10613);
+		text_show(10613);
 	else
 		return;
 
@@ -255,7 +255,7 @@ void room_106_preload() {
 	if ((_scene->_priorSceneId == 102) && !_game._objects.isInInventory(OBJ_REBREATHER) && !_scene->_roomChanged)
 		*player.series_name = '\0';
 
-	_vm->_dialogs->_defaultPosition.y = 100;
+	text_default_y = 100;
 
 }
 
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index eef0836edec..ecd301b4974 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -66,7 +66,7 @@ static void room_107_init() {
 	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
 		_game._player._playerPos = Common::Point(223, 151);
 
-	if (((_scene->_priorSceneId == 105) || (_scene->_priorSceneId == 106)) && (_vm->getRandomNumber(1, 3) == 1)) {
+	if (((_scene->_priorSceneId == 105) || (_scene->_priorSceneId == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
 		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(Resources::formatName(105, 'R', 1, EXT_SS, ""));
 		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], true, 4, 0, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[0], Common::Point(270, 150));
@@ -78,7 +78,7 @@ static void room_107_init() {
 	_game.loadQuoteSet(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
 	local._shootingFl = false;
 
-	if (_vm->getRandomNumber(1, 3) == 1) {
+	if (g_engine->getRandomNumber(1, 3) == 1) {
 		_scene->loadAnimation(Resources::formatName(107, 'B', -1, EXT_AA, ""), 0);
 		local._shootingFl = true;
 	}
@@ -103,38 +103,38 @@ static void room_107_pre_parser() {
 
 static void room_107_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(10708);
+		text_show(10708);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn107]) {
 		if (_game._objects.isInInventory(OBJ_DEAD_FISH)) {
-			int randVal = _vm->getRandomNumber(74, 76);
+			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 			_game._objects.addToInventory(OBJ_DEAD_FISH);
 			_globals[kFishIn107] = false;
-			_vm->_dialogs->showItem(OBJ_DEAD_FISH, 802);
+			object_examine(OBJ_DEAD_FISH, 802, 0);
 		}
 	} else if (player_said_2(swim_towards, northern_sea_cliff))
 		_scene->_nextSceneId = 105;
 	else if (player_said_2(look, northern_sea_cliff))
-		_vm->_dialogs->show(10701);
+		text_show(10701);
 	else if (player_said_2(look, dead_fish) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(10702);
+		text_show(10702);
 	else if (player_said_2(look, bush_like_formation))
-		_vm->_dialogs->show(10703);
+		text_show(10703);
 	else if (player_said_2(look, rock))
-		_vm->_dialogs->show(10704);
+		text_show(10704);
 	else if (player_said_2(look, seaweed))
-		_vm->_dialogs->show(10705);
+		text_show(10705);
 	else if (player_said_2(look, open_area_to_south))
-		_vm->_dialogs->show(10706);
+		text_show(10706);
 	else if (player_said_2(look, cliff_face))
-		_vm->_dialogs->show(10707);
+		text_show(10707);
 	else if (player_said_2(look, manta_ray))
-		_vm->_dialogs->show(10709);
+		text_show(10709);
 	else if (player_said_2(take, manta_ray))
-		_vm->_dialogs->show(10710);
+		text_show(10710);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index 77d31950899..9dfb53ee329 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -76,40 +76,40 @@ static void room_108_pre_parser() {
 
 static void room_108_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(10812);
+		text_show(10812);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn108]) {
 		if (_game._objects.isInInventory(OBJ_DEAD_FISH)) {
-			int randVal = _vm->getRandomNumber(74, 76);
+			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 			_game._objects.addToInventory(OBJ_DEAD_FISH);
 			_globals[kFishIn108] = false;
-			_vm->_dialogs->showItem(OBJ_DEAD_FISH, 10808);
+			object_examine(OBJ_DEAD_FISH, 10808, 0);
 		}
 	} else if (player_said_2(swim_towards, open_area_to_north))
 		_scene->_nextSceneId = 107;
 	else if (player_said_2(look, cliff_face))
-		_vm->_dialogs->show(10801);
+		text_show(10801);
 	else if (player_said_2(look, ocean_floor))
-		_vm->_dialogs->show(10802);
+		text_show(10802);
 	else if (player_said_2(look, odd_rock_formation))
-		_vm->_dialogs->show(10803);
+		text_show(10803);
 	else if (player_said_2(take, odd_rock_formation))
-		_vm->_dialogs->show(10804);
+		text_show(10804);
 	else if (player_said_2(look, rocks))
-		_vm->_dialogs->show(10805);
+		text_show(10805);
 	else if (player_said_2(take, rocks))
-		_vm->_dialogs->show(10806);
+		text_show(10806);
 	else if (player_said_2(look, dead_fish))
-		_vm->_dialogs->show(10807);
+		text_show(10807);
 	else if (player_said_2(look, overhang_to_east))
-		_vm->_dialogs->show(10809);
+		text_show(10809);
 	else if (player_said_2(look, open_area_to_north))
-		_vm->_dialogs->show(10810);
+		text_show(10810);
 	else if (player_said_2(look, surface))
-		_vm->_dialogs->show(10811);
+		text_show(10811);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 0ea040a8c87..679ce96a5d8 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -21,6 +21,7 @@
 
 #include "mads/core/game.h"
 #include "mads/core/himem.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -99,8 +100,8 @@ static void room_109_init() {
 		_game._objects.addToInventory(OBJ_STUFFED_FISH);
 	}
 
-	_vm->_palette->setEntry(252, 50, 50, 63);
-	_vm->_palette->setEntry(253, 30, 30, 50);
+	pal_change_color(252, 50, 50, 63);
+	pal_change_color(253, 30, 30, 50);
 
 	_game.loadQuoteSet(0x53, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0);
 	local._eatingFirstFish = (!_game._visitedScenes._sceneRevisited) && (_scene->_priorSceneId < 110);
@@ -130,7 +131,7 @@ static void room_109_daemon() {
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 
 				local._eatingRex = true;
-				_vm->_sound->command(34);
+				g_engine->_soundManager->command(34, 0);
 			}
 		} else {
 			switch (_game._trigger) {
@@ -155,7 +156,7 @@ static void room_109_daemon() {
 		local._beforeEatingRex = true;
 		_scene->_sprites.remove(_globals._spriteIndexes[6]);
 		_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('H', 0));
-		_vm->_palette->refreshSceneColors();
+		kernel_new_palette();
 	}
 
 	if (_game._player._moving && (_scene->_rails.getNext() > 0) && _globals[kHoovicAlive] && !_globals[kHoovicSated] && !local._hungryFl && !local._beforeEatingRex) {
@@ -173,7 +174,7 @@ static void room_109_daemon() {
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[10], _globals._sequenceIndexes[9]);
 		local._eatingFirstFish = false;
 		_game._player._stepEnabled = true;
-		_vm->_sound->command(34);
+		g_engine->_soundManager->command(34, 0);
 	}
 
 	if (_game._trigger == 72)
@@ -187,7 +188,7 @@ static void room_109_daemon() {
 		_scene->_spriteSlots.clear();
 		_scene->_spriteSlots.fullRefresh();
 
-		int randVal = _vm->getRandomNumber(85, 88);
+		int randVal = g_engine->getRandomNumber(85, 88);
 		int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
 		_scene->_kernelMessages.setQuoted(idx, 4, true);
 		_scene->_kernelMessages._entries[idx]._frameTimer = _scene->_frameStartTime + 4;
@@ -219,7 +220,7 @@ static void room_109_pre_parser() {
 
 static void room_109_parser() {
 	if (_action._lookFlag) {
-		_vm->_dialogs->show(10912);
+		text_show(10912);
 		_action._inProgress = false;
 		return;
 	}
@@ -255,7 +256,7 @@ static void room_109_parser() {
 							break;
 						}
 
-						_vm->_palette->refreshSceneColors();
+						kernel_new_palette();
 						break;
 
 					case 1:
@@ -296,12 +297,12 @@ static void room_109_parser() {
 
 						_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 4);
 						_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, local._hoovicTrigger);
-						_vm->_sound->command(34);
+						g_engine->_soundManager->command(34, 0);
 						break;
 
 					case 3:
 						_scene->loadAnimation(Resources::formatName(109, 'H', 2, EXT_AA, ""), 4);
-						_vm->_sound->command(35);
+						g_engine->_soundManager->command(35, 0);
 						_globals[kHoovicAlive] = false;
 						break;
 
@@ -334,7 +335,7 @@ static void room_109_parser() {
 								}
 
 								if (_globals[kHoovicFishEaten] >= threshold) {
-									int randVal = _vm->getRandomNumber(83, 84);
+									int randVal = g_engine->getRandomNumber(83, 84);
 									_scene->_kernelMessages.add(Common::Point(230, 24), 0xFDFC, 0, 0, 120, _game.getQuote(randVal));
 									_globals[kHoovicFishEaten] = 0;
 									_globals[kHoovicSated] = 1;
@@ -385,7 +386,7 @@ static void room_109_parser() {
 						_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
 						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
 						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
-						_vm->_dialogs->show(10915);
+						text_show(10915);
 					}
 					break;
 
@@ -410,30 +411,30 @@ static void room_109_parser() {
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_game._objects.addToInventory(OBJ_BURGER);
 	} else if (player_said_2(look, ocean_floor))
-		_vm->_dialogs->show(10901);
+		text_show(10901);
 	else if (player_said_2(look, coral))
-		_vm->_dialogs->show(10902);
+		text_show(10902);
 	else if ((player_said_1(take) || player_said_1(pull)) && player_said_1(coral))
-		_vm->_dialogs->show(10903);
+		text_show(10903);
 	else if (player_said_2(look, rocks))
-		_vm->_dialogs->show(10904);
+		text_show(10904);
 	else if (player_said_2(take, rocks))
-		_vm->_dialogs->show(10905);
+		text_show(10905);
 	else if (player_said_2(look, cave_wall))
-		_vm->_dialogs->show(10906);
+		text_show(10906);
 	else if (player_said_2(look, tunnel)) {
 		if (_globals[kHoovicAlive])
-			_vm->_dialogs->show(10907);
+			text_show(10907);
 		else
-			_vm->_dialogs->show(10913);
+			text_show(10913);
 	} else if (player_said_2(look, small_hole))
-		_vm->_dialogs->show(10908);
+		text_show(10908);
 	else if (player_said_2(look, overhang_to_west))
-		_vm->_dialogs->show(10911);
+		text_show(10911);
 	else if (player_said_2(put, small_hole))
-		_vm->_dialogs->show(10910);
+		text_show(10910);
 	else if (player_said_2(look, dead_purple_monster))
-		_vm->_dialogs->show(10914);
+		text_show(10914);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 6d00b33f8b3..5f89ba4dbfd 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -133,21 +133,21 @@ static void room_110_parser() {
 			break;
 		}
 	} else if ((_action._lookFlag) || player_said_2(look, cave))
-		_vm->_dialogs->show(11001);
+		text_show(11001);
 	else if (player_said_2(look, cave_ceiling) || player_said_2(look_at, cave_ceiling))
-		_vm->_dialogs->show(11002);
+		text_show(11002);
 	else if (player_said_2(look, rocks))
-		_vm->_dialogs->show(11003);
+		text_show(11003);
 	else if (player_said_2(take, rocks))
-		_vm->_dialogs->show(11004);
+		text_show(11004);
 	else if (player_said_2(look, tunnel))
-		_vm->_dialogs->show(11005);
+		text_show(11005);
 	else if (player_said_2(look, cave_entrance))
-		_vm->_dialogs->show(11006);
+		text_show(11006);
 	else if (player_said_2(look, fungoids))
-		_vm->_dialogs->show(11007);
+		text_show(11007);
 	else if (player_said_2(take, fungoids))
-		_vm->_dialogs->show(11008);
+		text_show(11008);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index 83e2f02c25a..05601f542b1 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -82,7 +82,7 @@ static void room_111_init() {
 		local._launch1Fl = true;
 		local._launched2Fl = true;
 
-		_vm->_sound->command(36);
+		g_engine->_soundManager->command(36, 0);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		_game._player._playerPos = Common::Point(300, 130);
 		_game._player._facing = FACING_WEST;
@@ -112,7 +112,7 @@ static void room_111_daemon() {
 		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 20);
 	}
 
-	if (!local._launch1Fl && (_vm->getRandomNumber(1, 5000) == 1)) {
+	if (!local._launch1Fl && (g_engine->getRandomNumber(1, 5000) == 1)) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 5, 1, 0, 0);
 		local._launch1Fl = true;
@@ -120,7 +120,7 @@ static void room_111_daemon() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 	}
 
-	if (!local._launched2Fl && (_vm->getRandomNumber(1, 30000) == 1)) {
+	if (!local._launched2Fl && (g_engine->getRandomNumber(1, 30000) == 1)) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
 		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 5, 1, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
@@ -129,10 +129,10 @@ static void room_111_daemon() {
 	}
 
 	if (_game._trigger == 73)
-		_vm->_sound->command(37);
+		g_engine->_soundManager->command(37, 0);
 
 	if (local._rexDivingFl && (_scene->_animation[0]->getCurrentFrame() >= 9)) {
-		_vm->_sound->command(36);
+		g_engine->_soundManager->command(36, 0);
 		local._rexDivingFl = false;
 	}
 }
@@ -160,17 +160,17 @@ static void room_111_parser() {
 			break;
 		}
 	} else if (player_said_2(look, cave_floor))
-		_vm->_dialogs->show(11101);
+		text_show(11101);
 	else if (player_said_2(look, pool))
-		_vm->_dialogs->show(11102);
+		text_show(11102);
 	else if (player_said_2(look, cave_entrance))
-		_vm->_dialogs->show(11103);
+		text_show(11103);
 	else if (player_said_2(look, stalagmites))
-		_vm->_dialogs->show(11104);
+		text_show(11104);
 	else if (player_said_2(look, large_stalagmite))
-		_vm->_dialogs->show(11105);
+		text_show(11105);
 	else if ((player_said_1(pull) || player_said_1(take)) && (player_said_1(stalagmites) || player_said_1(large_stalagmite)))
-		_vm->_dialogs->show(11106);
+		text_show(11106);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index a67649c18d0..bd476a55b07 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -106,8 +107,8 @@ static void room_201_init() {
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
 		local._pterodactylFlag = false;
 		_game._player.walk(Common::Point(157, 143), FACING_NORTH);
-		_vm->_palette->setEntry(252, 45, 63, 45);
-		_vm->_palette->setEntry(253, 20, 45, 20);
+		pal_change_color(252, 45, 63, 45);
+		pal_change_color(253, 20, 45, 20);
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 2, 0, 120, _game.getQuote(90));
 	} else
 		local._pterodactylFlag = true;
@@ -119,12 +120,12 @@ static void room_201_init() {
 }
 
 static void room_201_daemon() {
-	if (local._pterodactylFlag && (_vm->getRandomNumber(5000) == 9)) {
+	if (local._pterodactylFlag && (g_engine->getRandomNumber(5000) == 9)) {
 		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 5, 1, 6, 0);
 		int idx = _scene->_dynamicHotspots.add(words_swooping_creature, words_walkto, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(270, 80), FACING_EAST);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 8);
-		_vm->_sound->command(14);
+		g_engine->_soundManager->command(14, 0);
 		local._pterodactylFlag = false;
 	}
 
@@ -133,7 +134,7 @@ static void room_201_daemon() {
 		_game._player._visible = false;
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 12, 16);
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 1, 0, 0);
-		_vm->_sound->command(42);
+		g_engine->_soundManager->command(42, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 3, 81);
@@ -159,7 +160,7 @@ static void room_201_daemon() {
 	}
 
 	if (_game._trigger == 74) {
-		_vm->_sound->command(40);
+		g_engine->_soundManager->command(40, 0);
 
 		_scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, _game.getQuote(91));
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 0, 0, 0);
@@ -186,8 +187,8 @@ static void room_201_daemon() {
 	}
 
 	if (_game._trigger == 78) {
-		_vm->_sound->command(40);
-		_vm->_dialogs->show(20114);
+		g_engine->_soundManager->command(40, 0);
+		text_show(20114);
 		_scene->_reloadSceneFlag = true;
 	}
 }
@@ -206,34 +207,34 @@ static void room_201_parser() {
 				_scene->_nextSceneId = 213;
 			}
 		} else if (player_said_2(look, grassy_field)) {
-			_vm->_dialogs->show(20101);
+			text_show(20101);
 		} else if (player_said_2(look, rocks)) {
-			_vm->_dialogs->show(20102);
+			text_show(20102);
 		} else if (player_said_2(look, thorny_bush)) {
-			_vm->_dialogs->show(20103);
+			text_show(20103);
 		} else if (player_said_2(look, sky)) {
-			_vm->_dialogs->show(20104);
+			text_show(20104);
 		} else if (player_said_2(look, water)) {
-			_vm->_dialogs->show(20105);
+			text_show(20105);
 		} else if (player_said_2(look, island_in_distance)) {
-			_vm->_dialogs->show(20106);
+			text_show(20106);
 		} else if (player_said_2(look, weather_station)) {
-			_vm->_dialogs->show(20107);
+			text_show(20107);
 		} else if (player_said_2(look, path)) {
-			_vm->_dialogs->show(20108);
+			text_show(20108);
 		} else if (player_said_2(look, field_to_south)) {
-			_vm->_dialogs->show(20110);
+			text_show(20110);
 		} else if (player_said_2(look, strange_device)) {
 			if (_globals[kMeteorologistEverSeen])
-				_vm->_dialogs->show(20112);
+				text_show(20112);
 			else
-				_vm->_dialogs->show(20109);
+				text_show(20109);
 		} else if (player_said_2(look, teleporter)) {
-			_vm->_dialogs->show(20113);
+			text_show(20113);
 		} else
 			return;
 	} else {
-		_vm->_dialogs->show(20111);
+		text_show(20111);
 	}
 	_action._inProgress = false;
 }
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index 212523c3905..2b3206ecedd 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -167,7 +167,7 @@ static void room_202_init() {
 }
 
 static void setRandomKernelMessage() {
-	int vocabId = _vm->getRandomNumber(92, 96);
+	int vocabId = g_engine->getRandomNumber(92, 96);
 	_scene->_kernelMessages.reset();
 	_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 70, 120, _game.getQuote(vocabId));
@@ -224,10 +224,10 @@ static int subStep4(int randVal) {
 }
 
 static void room_202_daemon() {
-	if (!local._activeMsgFl && (_game._player._playerPos == Common::Point(77, 105)) && (_game._player._facing == FACING_NORTH) && (_vm->getRandomNumber(999) == 0)) {
+	if (!local._activeMsgFl && (_game._player._playerPos == Common::Point(77, 105)) && (_game._player._facing == FACING_NORTH) && (g_engine->getRandomNumber(999) == 0)) {
 		_scene->_kernelMessages.reset();
 		local._activeMsgFl = false;
-		if (_vm->getRandomNumber(4) == 0)
+		if (g_engine->getRandomNumber(4) == 0)
 			setRandomKernelMessage();
 	}
 
@@ -235,8 +235,8 @@ static void room_202_daemon() {
 		local._activeMsgFl = false;
 
 	if (_game._trigger == 71) {
-		_vm->_sound->command(3);
-		_vm->_sound->command(9);
+		g_engine->_soundManager->command(3, 0);
+		g_engine->_soundManager->command(9, 0);
 
 		local._meteoClock1 = _scene->_frameStartTime + 15 * 60;
 
@@ -270,7 +270,7 @@ static void room_202_daemon() {
 
 	switch (_game._trigger) {
 	case 90:
-		_vm->_sound->command(41);
+		g_engine->_soundManager->command(41, 0);
 		_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 		_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], true, 6, 1, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
@@ -315,14 +315,14 @@ static void room_202_daemon() {
 	}
 
 	if (!_scene->_animation[0] && (_globals[kMeteorologistStatus] != METEOROLOGIST_GONE) && (local._meteoClock2 <= _scene->_frameStartTime) && (local._meteoClock1 <= _scene->_frameStartTime)) {
-		int randVal = _vm->getRandomNumber(1, 500);
+		int randVal = g_engine->getRandomNumber(1, 500);
 		int threshold = 1;
 		if (local._ladderTopFl)
 			threshold += 25;
 		if (!_globals[kMeteorologistEverSeen])
 			threshold += 25;
 		if (threshold >= randVal) {
-			_vm->_sound->command(17);
+			g_engine->_soundManager->command(17, 0);
 			_scene->loadAnimation(formAnimName('M', -1), 71);
 			local._toStationFl = true;
 			local._toTeleportFl = false;
@@ -341,7 +341,7 @@ static void room_202_daemon() {
 			if ((_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER) || _globals[kLadderBroken]) {
 				_scene->_nextSceneId = 213;
 			} else {
-				_vm->_dialogs->show(20201);
+				text_show(20201);
 				_scene->_reloadSceneFlag = true;
 			}
 		}
@@ -370,7 +370,7 @@ static void room_202_daemon() {
 	}
 
 	local._meteoFrame = _scene->_animation[0]->getCurrentFrame();
-	int randVal = _vm->getRandomNumber(1, 1000);
+	int randVal = g_engine->getRandomNumber(1, 1000);
 	int frameStep = -1;
 
 	switch (_scene->_animation[0]->getCurrentFrame()) {
@@ -420,14 +420,14 @@ static void room_202_daemon() {
 }
 
 static void room_202_pre_parser() {
-	auto &gplayer = _vm->_game->_player;
+	auto &gplayer = _game->_player;
 
 	if (gplayer._needToWalk)
 		_scene->_kernelMessages.reset();
 
 	if (local._ladderTopFl && (player_said_2(climb_down, ladder) || gplayer._needToWalk)) {
 		if (_game._trigger == 0) {
-			_vm->_sound->command(29);
+			g_engine->_soundManager->command(29, 0);
 			gplayer._readyToWalk = false;
 			gplayer._stepEnabled = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
@@ -457,7 +457,7 @@ static void room_202_pre_parser() {
 
 static void room_202_parser() {
 	if (_action._lookFlag) {
-		_vm->_dialogs->show(20219);
+		text_show(20219);
 		return;
 	}
 
@@ -478,7 +478,7 @@ static void room_202_parser() {
 		switch (_game._trigger) {
 		case 0:
 			if (_game._objects.isInInventory(OBJ_BONES)) {
-				_vm->_dialogs->show(20221);
+				text_show(20221);
 			} else {
 				_game._player._stepEnabled = false;
 				_game._player._visible = false;
@@ -501,10 +501,10 @@ static void room_202_parser() {
 			if (_game._objects.isInInventory(OBJ_BONE)) {
 				_game._objects.removeFromInventory(OBJ_BONE, NOWHERE);
 				_game._objects.addToInventory(OBJ_BONES);
-				_vm->_dialogs->showItem(OBJ_BONES, 20218);
+				object_examine(OBJ_BONES, 20218, 0);
 			} else {
 				_game._objects.addToInventory(OBJ_BONE);
-				_vm->_dialogs->showItem(OBJ_BONE, 20218);
+				object_examine(OBJ_BONE, 20218, 0);
 			}
 			_scene->changeVariant(_globals[kBone202Status]);
 			_game._player._stepEnabled = true;
@@ -518,7 +518,7 @@ static void room_202_parser() {
 	} else if (player_said_2(climb_up, ladder) && !_globals[kLadderBroken]) {
 		switch (_game._trigger) {
 		case 0:
-			_vm->_sound->command(29);
+			g_engine->_soundManager->command(29, 0);
 			local._meteoClock1 = _scene->_frameStartTime;
 			_game._player._visible = false;
 			_game._player._stepEnabled = false;
@@ -572,7 +572,7 @@ static void room_202_parser() {
 				break;
 			case 2:
 				if (!_scene->_animation[0] && !local._meteorologistSpecial) {
-					_vm->_dialogs->show(20222);
+					text_show(20222);
 				}
 				_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 				_globals._sequenceIndexes[10] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
@@ -626,7 +626,7 @@ static void room_202_parser() {
 				break;
 			case 2:
 				if (!_scene->_animation[0])
-					_vm->_dialogs->show(20222);
+					text_show(20222);
 				local._meteorologistSpecial = false;
 				_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 				_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
@@ -648,41 +648,41 @@ static void room_202_parser() {
 	} else if (player_said_2(walk_inside, hut)) {
 		setRandomKernelMessage();
 	} else if (player_said_2(look, rocks)) {
-		_vm->_dialogs->show(20202);
+		text_show(20202);
 	} else if (player_said_2(look, fire_pit)) {
-		_vm->_dialogs->show(20203);
+		text_show(20203);
 	} else if (player_said_2(look, grass)) {
-		_vm->_dialogs->show(20204);
+		text_show(20204);
 	} else if (player_said_2(look, field_to_north)) {
 		if ((_globals[kMeteorologistStatus] == METEOROLOGIST_ABSENT) || (_globals[kMeteorologistStatus] == METEOROLOGIST_GONE))
-			_vm->_dialogs->show(20205);
+			text_show(20205);
 		else if (_globals[kMeteorologistStatus] == METEOROLOGIST_PRESENT)
-			_vm->_dialogs->show(20220);
+			text_show(20220);
 	} else if (player_said_2(look, watch_tower)) {
-		_vm->_dialogs->show(20206);
+		text_show(20206);
 	} else if (player_said_2(look, tall_grass)) {
-		_vm->_dialogs->show(20207);
+		text_show(20207);
 	} else if (player_said_2(look, trees)) {
-		_vm->_dialogs->show(20208);
+		text_show(20208);
 	} else if (player_said_2(look, tree)) {
-		_vm->_dialogs->show(20209);
+		text_show(20209);
 	} else if (player_said_2(look, sky)) {
-		_vm->_dialogs->show(20210);
+		text_show(20210);
 	} else if (player_said_2(look, hut)) {
 		if ((_game._player._playerPos == Common::Point(77, 105)) && (_game._player._facing == FACING_NORTH))
-			_vm->_dialogs->show(20212);
+			text_show(20212);
 		else
-			_vm->_dialogs->show(20211);
+			text_show(20211);
 	} else if (player_said_2(look, strange_device)) {
-		_vm->_dialogs->show(20213);
+		text_show(20213);
 	} else if (player_said_2(look, ocean_in_distance)) {
-		_vm->_dialogs->show(20214);
+		text_show(20214);
 	} else if (player_said_2(look, skull)) {
-		_vm->_dialogs->show(20215);
+		text_show(20215);
 	} else if (player_said_2(take, skull)) {
-		_vm->_dialogs->show(20216);
+		text_show(20216);
 	} else if (player_said_2(look, bones) && _action._commandSource == 4) {
-		_vm->_dialogs->show(20217);
+		text_show(20217);
 	} else {
 		return;
 	}
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 337b5aa0938..9df6df556f9 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -20,6 +20,8 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/mouse.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -64,18 +66,18 @@ static void room_203_init() {
 
 	if (!local._rhotundaEatFl) {
 		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('b', -1));
-		if (_vm->getRandomNumber(1, 3) == 2) {
+		if (g_engine->getRandomNumber(1, 3) == 2) {
 			_globals._spriteIndexes[15] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 9, 1, 0, 0);
 			int idx = _scene->_dynamicHotspots.add(words_yellow_bird, words_look_at, _globals._spriteIndexes[15], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
-			_vm->_sound->command(14);
+			g_engine->_soundManager->command(14, 0);
 		}
 	}
 
 	_game.loadQuoteSet(0x67, 0x68, 0x69, 0x6A, 0x5A, 0);
 
 	if (local._rhotundaEatFl) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(_vm->getRandomNumber(103, 106)));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(g_engine->getRandomNumber(103, 106)));
 	}
 
 	section_2_music();
@@ -96,10 +98,11 @@ static void room_203_daemon() {
 	if (_game._trigger == 0) {
 		_game._player._visible = false;
 		_game._player._stepEnabled = false;
-		_vm->_palette->lock();
+		pal_lock();
 		_scene->_kernelMessages.reset();
 		_scene->resetScene();
-		_vm->_events->setCursor2(CURSOR_WAIT);
+		cursor_id = CURSOR_WAIT;
+		mouse_cursor_sprite(cursor, CURSOR_WAIT);
 		_scene->loadAnimation(Resources::formatName(203, 'a', -1, EXT_AA, ""), 81);
 	} else if (_game._trigger == 81) {
 		_scene->_nextSceneId = 208;
@@ -120,23 +123,23 @@ static void room_203_pre_parser() {
 
 static void room_203_parser() {
 	if (_action._savedFields._lookFlag) {
-		_vm->_dialogs->show(20307);
+		text_show(20307);
 	} else if (player_said_2(walk_towards, field_to_south)) {
 		_scene->_nextSceneId = 208;
 	} else if (player_said_2(walk_towards, field_to_north)) {
 		_scene->_nextSceneId = 202;
 	} else if (player_said_2(look, sky)) {
-		_vm->_dialogs->show(20301);
+		text_show(20301);
 	} else if (player_said_2(look, cliff_face)) {
-		_vm->_dialogs->show(20302);
+		text_show(20302);
 	} else if (player_said_2(look, palm_tree)) {
-		_vm->_dialogs->show(20303);
+		text_show(20303);
 	} else if (player_said_2(look, field_to_north)) {
-		_vm->_dialogs->show(20304);
+		text_show(20304);
 	} else if (player_said_2(look, grassy_field)) {
-		_vm->_dialogs->show(20305);
+		text_show(20305);
 	} else if (player_said_2(look, boulders)) {
-		_vm->_dialogs->show(20305);
+		text_show(20305);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index da0bb9e048c..ca0384fdccd 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/rooms/dialog.h"
@@ -87,12 +88,12 @@ static void room_205_init() {
 	if (!_game._visitedScenes._sceneRevisited)
 		local._dialog1.set(0x5A, 0x74, 0x75, 0x77, 0);
 
-	_vm->_palette->setEntry(250, 63, 50, 20);
-	_vm->_palette->setEntry(251, 50, 40, 15);
-	_vm->_palette->setEntry(252, 63, 63, 40);
-	_vm->_palette->setEntry(253, 50, 50, 30);
+	pal_change_color(250, 63, 50, 20);
+	pal_change_color(251, 50, 40, 15);
+	pal_change_color(252, 63, 63, 40);
+	pal_change_color(253, 50, 50, 30);
 
-	local._chickenTime = _vm->_game->_scene._frameStartTime;
+	local._chickenTime = _game->_scene._frameStartTime;
 
 	if (_globals[kSexOfRex] == SEX_FEMALE)
 		_scene->_kernelMessages.initRandomMessages(3,
@@ -123,29 +124,29 @@ static void room_205_daemon() {
 	if (_globals[kSexOfRex] == SEX_FEMALE) {
 		_scene->_kernelMessages.randomServer();
 
-		if (_vm->_game->_scene._frameStartTime >= local._chickenTime) {
+		if (_game->_scene._frameStartTime >= local._chickenTime) {
 			int chanceMinor = _scene->_kernelMessages.checkRandom() + 1;
 			if (_scene->_kernelMessages.generateRandom(100, chanceMinor))
-				_vm->_sound->command(28);
+				g_engine->_soundManager->command(28, 0);
 
-			local._chickenTime = _vm->_game->_scene._frameStartTime + 2;
+			local._chickenTime = _game->_scene._frameStartTime + 2;
 		}
 	}
 
-	if (_vm->_game->_scene._frameStartTime - local._lastFishTime > 1300) {
+	if (_game->_scene._frameStartTime - local._lastFishTime > 1300) {
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(
 			_globals._spriteIndexes[6], false, 5, 1, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, _globals._sequenceIndexes[6],
 			Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
-		local._lastFishTime = _vm->_game->_scene._frameStartTime;
+		local._lastFishTime = _game->_scene._frameStartTime;
 	}
 
 	if (_game._trigger == 73)
 		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 0, 60, _game.getQuote(112));
 
 	if (_game._trigger == 74) {
-		_vm->_sound->command(26);
+		g_engine->_soundManager->command(26, 0);
 		_scene->_kernelMessages.add(Common::Point(106, 90), 0x1110, 32, 0, 60, _game.getQuote(113));
 	}
 
@@ -195,7 +196,7 @@ static void room_205_parser() {
 			case 0x78:
 				handleWomanSpeech(0x7B);
 				local._dialog1.write(_action._activeAction._verbId, false);
-				_vm->_dialogs->show(20501);
+				text_show(20501);
 				break;
 
 			case 0x76:
@@ -222,9 +223,9 @@ static void room_205_parser() {
 				local._dialog1.start();
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(20502);
+		text_show(20502);
 	else if (player_said_3(look, binoculars, opposite_bank))
-		_vm->_dialogs->show(20518);
+		text_show(20518);
 	else if (player_said_2(talkto, native_woman)) {
 		if (_game._trigger == 0) {
 			_game._player._stepEnabled = false;
@@ -239,7 +240,7 @@ static void room_205_parser() {
 	} else if (player_said_2(give, native_woman) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
 		if (_game._trigger == 0) {
 			_game._player._stepEnabled = false;
-			int rndVal = _vm->getRandomNumber(0xAC, 0xAE);
+			int rndVal = g_engine->getRandomNumber(0xAC, 0xAE);
 			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 1, 120, _game.getQuote(rndVal));
 		} else if (_game._trigger == 1)
 			_game._player._stepEnabled = true;
@@ -247,20 +248,20 @@ static void room_205_parser() {
 		if (_game._trigger == 0) {
 			_game._player._visible = false;
 			_game._player._stepEnabled = false;
-			_vm->_palette->lock();
+			pal_lock();
 			_scene->_kernelMessages.reset();
 			_game._player.removePlayerSprites();
 			_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('a', 0));
-			_vm->_palette->refreshSceneColors();
+			kernel_new_palette();
 			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], -1);
-			_vm->_sound->command(27);
+			g_engine->_soundManager->command(27, 0);
 		} else if (_game._trigger == 1) {
 			if (_scene->_animation[0] != nullptr)
 				_scene->_animation[0]->resetSpriteSetsCount();
 
-			_vm->_dialogs->show(20516);
+			text_show(20516);
 			_scene->_reloadSceneFlag = true;
 		}
 	} else {
@@ -276,39 +277,39 @@ static void room_205_parser() {
 			_game._objects.addToInventory(OBJ_CHICKEN);
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 			_scene->_hotspots.activate(words_chicken_on_spit, false);
-			_vm->_dialogs->showItem(OBJ_CHICKEN, 812);
+			object_examine(OBJ_CHICKEN, 812, 0);
 		} else if (player_said_2(take, chicken_on_spit) && (!_globals[kChickenPermitted]))
 			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 0, 120, _game.getQuote(0x80));
 		else if (player_said_2(look, native_woman))
-			_vm->_dialogs->show(20503);
+			text_show(20503);
 		else if (player_said_2(look, hut))
-			_vm->_dialogs->show(20504);
+			text_show(20504);
 		else if (player_said_2(look, chicken) && (_action._mainObjectSource == CAT_HOTSPOT))
-			_vm->_dialogs->show(20505);
+			text_show(20505);
 		else if (player_said_2(take, chicken) && (_action._mainObjectSource == CAT_HOTSPOT))
-			_vm->_dialogs->show(20506);
+			text_show(20506);
 		else if (player_said_2(look, chicken_on_spit))
-			_vm->_dialogs->show(20507);
+			text_show(20507);
 		else if (player_said_2(look, fire_pit))
-			_vm->_dialogs->show(20508);
+			text_show(20508);
 		else if (player_said_2(take, fire_pit))
-			_vm->_dialogs->show(20509);
+			text_show(20509);
 		else if (player_said_2(look, stream))
-			_vm->_dialogs->show(20510);
+			text_show(20510);
 		else if (player_said_2(look, opposite_bank))
-			_vm->_dialogs->show(20511);
+			text_show(20511);
 		else if (_game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))
 			&& (player_said_2(give, stream) || player_said_2(throw, stream)
 				|| player_said_2(give, piranha) || player_said_2(throw, piranha)))
-			_vm->_dialogs->show(20512);
+			text_show(20512);
 		else if (player_said_2(look, piranha))
-			_vm->_dialogs->show(20513);
+			text_show(20513);
 		else if (player_said_2(look, twinkifruit_bush))
-			_vm->_dialogs->show(20514);
+			text_show(20514);
 		else if (player_said_2(take, twinkifruit_bush))
-			_vm->_dialogs->show(20515);
+			text_show(20515);
 		else if (player_said_2(take, native_woman))
-			_vm->_dialogs->show(20517);
+			text_show(20517);
 		else
 			return;
 	}
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index 6001b0b2638..1a647b9664d 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -59,7 +59,7 @@ static void room_207_init() {
 	if (!_game._visitedScenes._sceneRevisited) {
 		var2 = 1;
 	} else {
-		var2 = _vm->getRandomNumber(4) + 1;
+		var2 = g_engine->getRandomNumber(4) + 1;
 	}
 
 	if (var2 > 2)
@@ -104,7 +104,7 @@ static void room_207_init() {
 static void moveVulture() {
 	_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
-	_vm->_sound->command(43);
+	g_engine->_soundManager->command(43, 0);
 	local._vultureFl = false;
 	local._vultureTime = _game._player._priorTimer;
 	_scene->_dynamicHotspots.remove(local._vultureHotspotId);
@@ -171,7 +171,7 @@ static void room_207_pre_parser() {
 
 static void room_207_parser() {
 	if (_action._savedFields._lookFlag)
-		_vm->_dialogs->show(20711);
+		text_show(20711);
 	else if (player_said_2(walk_through, doorway))
 		_scene->_nextSceneId = 214;
 	else {
@@ -191,33 +191,33 @@ static void room_207_parser() {
 		}
 
 		if (player_said_2(look, dense_forest))
-			_vm->_dialogs->show(20701);
+			text_show(20701);
 		else if (player_said_2(look, hedge))
-			_vm->_dialogs->show(20702);
+			text_show(20702);
 		else if (player_said_2(look, skull_and_crossbones))
-			_vm->_dialogs->show(20703);
+			text_show(20703);
 		else if (player_said_2(look, cauldron))
-			_vm->_dialogs->show(20704);
+			text_show(20704);
 		else if (player_said_2(look, witchdoctor_hut))
-			_vm->_dialogs->show(20705);
+			text_show(20705);
 		else if (player_said_2(look, path_to_west))
-			_vm->_dialogs->show(20706);
+			text_show(20706);
 		else if (player_said_2(look, mountains))
-			_vm->_dialogs->show(20707);
+			text_show(20707);
 		else if (player_said_2(look, aloe_plant))
-			_vm->_dialogs->show(20708);
+			text_show(20708);
 		else if (player_said_2(look, lawn))
-			_vm->_dialogs->show(20709);
+			text_show(20709);
 		else if (player_said_2(look, vulture))
-			_vm->_dialogs->show(20710);
+			text_show(20710);
 		else if (player_said_2(take, skull_and_crossbones))
-			_vm->_dialogs->show(20712);
+			text_show(20712);
 		else if (player_said_2(take, aloe_plant))
-			_vm->_dialogs->show(20713);
+			text_show(20713);
 		else if (player_said_2(look, spider))
-			_vm->_dialogs->show(20714);
+			text_show(20714);
 		else if (player_said_2(take, spider))
-			_vm->_dialogs->show(20715);
+			text_show(20715);
 		else
 			return;
 	}
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index a3d93721cf4..54c34706bf8 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -109,8 +110,8 @@ static void room_208_init() {
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 	}
 
-	_vm->_palette->setEntry(16, 0, 0, 63);
-	_vm->_palette->setEntry(17, 0, 0, 45);
+	pal_change_color(16, 0, 0, 63);
+	pal_change_color(17, 0, 0, 45);
 
 	section_2_music();
 }
@@ -155,7 +156,7 @@ static void room_208_daemon() {
 }
 
 static void room_208_pre_parser() {
-	auto &gplayer = _vm->_game->_player;
+	auto &gplayer = _game->_player;
 
 	if (player_said_1(look) && gplayer._readyToWalk)
 		gplayer._needToWalk = true;
@@ -193,7 +194,7 @@ static void subAction(int mode) {
 		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldSeq);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-		_vm->_sound->command(20);
+		g_engine->_soundManager->command(20, 0);
 	}
 	break;
 
@@ -216,17 +217,17 @@ static void subAction(int mode) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 			_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
 			_game._objects.removeFromInventory(OBJ_TWINKIFRUIT, 1);
-			_vm->_sound->command(34);
+			g_engine->_soundManager->command(34, 0);
 			break;
 
 		case 4:
 			_game._objects.removeFromInventory(OBJ_BURGER, 1);
-			_vm->_sound->command(33);
+			g_engine->_soundManager->command(33, 0);
 			break;
 
 		case 5:
 			_game._objects.removeFromInventory(OBJ_DEAD_FISH, 1);
-			_vm->_sound->command(33);
+			g_engine->_soundManager->command(33, 0);
 			break;
 
 		default:
@@ -267,7 +268,7 @@ static void room_208_parser() {
 	else if (player_said_2(take, pile_of_leaves) && (!_globals[kLeavesStatus] || _game._trigger)) {
 		subAction(1);
 		if (_game._player._stepEnabled)
-			_vm->_dialogs->showItem(OBJ_BIG_LEAVES, 0x326, 0);
+			object_examine(OBJ_BIG_LEAVES, 0x326, 0);
 	} else if (player_said_3(put, big_leaves, deep_pit) && (_globals[kLeavesStatus] == 1 || _game._trigger))
 		subAction(2);
 	else if (player_said_3(put, twinkifruit, leaf_covered_pit)) {
@@ -280,48 +281,48 @@ static void room_208_parser() {
 	} else if (player_said_3(put, burger, leaf_covered_pit)) {
 		subAction(4);
 		if (_game._player._stepEnabled)
-			_vm->_dialogs->show(20812);
+			text_show(20812);
 	} else if (player_said_3(put, dead_fish, leaf_covered_pit)) {
 		subAction(5);
 		if (_game._player._stepEnabled)
-			_vm->_dialogs->show(20812);
+			text_show(20812);
 	} else if (player_said_2(look, cumulous_cloud))
-		_vm->_dialogs->show(20801);
+		text_show(20801);
 	else if (player_said_2(look, open_area_to_west))
-		_vm->_dialogs->show(20802);
+		text_show(20802);
 	else if (player_said_2(look, thorny_bush))
-		_vm->_dialogs->show(20803);
+		text_show(20803);
 	else if (player_said_2(look, rocks))
-		_vm->_dialogs->show(20804);
+		text_show(20804);
 	else if (player_said_2(look, small_cactus))
-		_vm->_dialogs->show(20805);
+		text_show(20805);
 	else if (player_said_2(take, small_cactus))
-		_vm->_dialogs->show(20806);
+		text_show(20806);
 	else if (player_said_2(look, grassland_to_east))
-		_vm->_dialogs->show(20807);
+		text_show(20807);
 	else if (player_said_2(look, deep_pit))
-		_vm->_dialogs->show(20808);
+		text_show(20808);
 	else if (player_said_2(look, pile_of_leaves))
-		_vm->_dialogs->show(20809);
+		text_show(20809);
 	else if (player_said_2(look, leaf_covered_pit)) {
 		if (_game._difficulty == DIFFICULTY_EASY)
-			_vm->_dialogs->show(20810);
+			text_show(20810);
 		else
-			_vm->_dialogs->show(20811);
+			text_show(20811);
 	} else if (player_said_2(look, tree) || player_said_2(look, trees))
-		_vm->_dialogs->show(20813);
+		text_show(20813);
 	else if (player_said_2(take, leaf_covered_pit))
-		_vm->_dialogs->show(20814);
+		text_show(20814);
 	else if (player_said_2(look, huge_legs))
-		_vm->_dialogs->show(20815);
+		text_show(20815);
 	else if (player_said_2(take, huge_legs) || player_said_2(pull, huge_legs))
-		_vm->_dialogs->show(20816);
+		text_show(20816);
 	else if (_action._savedFields._lookFlag && (_globals[kRhotundaStatus] == 1))
-		_vm->_dialogs->show(20819);
+		text_show(20819);
 	else if (_action._savedFields._lookFlag && (_globals[kLeavesStatus] == 2))
-		_vm->_dialogs->show(20818);
+		text_show(20818);
 	else if (_action._savedFields._lookFlag)
-		_vm->_dialogs->show(20817);
+		text_show(20817);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index d676addcaf5..c906290b781 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -74,7 +75,7 @@ static void initPauseCounterThreshold() {
 	switch (_game._trigger) {
 	case 226:
 		_scene->_sequences.addTimer(1, 124);
-		local._pauseCounterThreshold = _vm->getRandomNumber(7, 12);
+		local._pauseCounterThreshold = g_engine->getRandomNumber(7, 12);
 		local._pauseMode = 2;
 		local._pauseCounter = 0;
 		break;
@@ -86,7 +87,7 @@ static void initPauseCounterThreshold() {
 static void handlePeek() {
 	switch (_game._trigger) {
 	case 133:
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 134);
@@ -141,7 +142,7 @@ static void handleVerticalMove() {
 
 	case 141:
 	{
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		int oldIdx = _globals._sequenceIndexes[3];
 		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
@@ -170,7 +171,7 @@ static void handleVerticalMove() {
 static void handleLookStay() {
 	switch (_game._trigger) {
 	case 145:
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 2;
 		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
@@ -276,7 +277,7 @@ static void handleBlink() {
 static void handleGetBinoculars() {
 	switch (_game._trigger) {
 	case 161:
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 3;
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
@@ -316,7 +317,7 @@ static void handleGetBinoculars() {
 		break;
 
 	case 165:
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		break;
 
 	default:
@@ -374,7 +375,7 @@ static void handleBinocularScan() {
 	case 172:
 	{
 		int oldIdx = _globals._sequenceIndexes[3];
-		int randAction = _vm->getRandomNumber(1, 2);
+		int randAction = g_engine->getRandomNumber(1, 2);
 		switch (randAction) {
 		case 1:
 			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
@@ -444,7 +445,7 @@ static void handleJumpInTree() {
 
 	case 179:
 	{
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		int oldIdx = _globals._sequenceIndexes[3];
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 53, 61);
@@ -500,7 +501,7 @@ static void handleTongue() {
 
 	case 185:
 	{
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		int oldIdx = _globals._sequenceIndexes[3];
 		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 6, 20, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 38, 39);
@@ -549,7 +550,7 @@ static void handleStandFromPeek() {
 
 	case 192:
 	{
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		int oldIdx = _globals._sequenceIndexes[6];
 		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldIdx);
@@ -605,7 +606,7 @@ static void handleStandBlink() {
 static void handleJumpAndHide() {
 	switch (_game._trigger) {
 	case 196:
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 1;
 		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 8, 1, 0, 0);
@@ -627,7 +628,7 @@ static void handleJumpAndHide() {
 static void handleMonkeyEating() {
 	switch (_game._trigger) {
 	case 199:
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 14);
@@ -697,7 +698,7 @@ static void handleMonkeyEating() {
 
 	case 207:
 	{
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		int msgIndex = _scene->_kernelMessages.add(Common::Point(180, 25), 0xFDFC, 0, 0, 90, _game.getQuote(130));
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 
@@ -742,7 +743,7 @@ static void handleMonkeyFall() {
 	switch (_game._trigger) {
 	case 219:
 	{
-		_vm->_sound->command(25);
+		g_engine->_soundManager->command(25, 0);
 		_scene->_sprites.remove(_globals._spriteIndexes[7]);
 		_scene->_sprites.remove(_globals._spriteIndexes[6]);
 		_scene->_sprites.remove(_globals._spriteIndexes[5]);
@@ -765,7 +766,7 @@ static void handleMonkeyFall() {
 
 	case 220:
 	{
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 90, _game.getQuote(159));
 		_scene->_hotspots.activate(227, false);
 		int oldIdx = _globals._sequenceIndexes[3];
@@ -810,7 +811,7 @@ static void handleMonkeyFall() {
 
 	case 223:
 		_scene->loadAnimation(Resources::formatName(209, 'e', -1, EXT_AA, ""), 224);
-		_vm->_sound->command(38);
+		g_engine->_soundManager->command(38, 0);
 		break;
 
 	case 224:
@@ -818,7 +819,7 @@ static void handleMonkeyFall() {
 		local._fallFl = false;
 		local._counter = 0;
 		local._pauseMode = 0;
-		_vm->_dialogs->show(20910);
+		text_show(20910);
 		_game._player._stepEnabled = true;
 		break;
 
@@ -860,7 +861,7 @@ static void handleMonkey1() {
 
 	case 215:
 	{
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		_scene->loadAnimation(Resources::formatName(209, 'a', -1, EXT_AA, ""), 251);
 		int oldIdx = _globals._sequenceIndexes[7];
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
@@ -895,7 +896,7 @@ static void handleMonkey2() {
 	switch (_game._trigger) {
 	case 251:
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, _game.getQuote(137));
-		_vm->_sound->command(22);
+		g_engine->_soundManager->command(22, 0);
 		_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 11, 1, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[12], Common::Point(111, 133));
 		_scene->_sequences.setScale(_globals._sequenceIndexes[12], 79);
@@ -943,11 +944,11 @@ static void handleDodge() {
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
 		_scene->_sequences.addTimer(25, 243);
-		_vm->_sound->command(24);
+		g_engine->_soundManager->command(24, 0);
 		break;
 
 	case 243:
-		_vm->_sound->command(18);
+		g_engine->_soundManager->command(18, 0);
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
 		local._playingAnimFl = false;
@@ -982,8 +983,8 @@ static void room_209_init() {
 	_game.loadQuoteSet(0x82, 0x83, 0x84, 0x9C, 0x97, 0x95, 0x99, 0x9E, 0x98, 0x9B, 0xA0, 0x96, 0x9F,
 		0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x94, 0x89, 0x85, 0x8A, 0x86, 0x87, 0x88, 0);
 
-	_vm->_palette->setEntry(252, 63, 44, 30);
-	_vm->_palette->setEntry(253, 63, 20, 22);
+	pal_change_color(252, 63, 44, 30);
+	pal_change_color(253, 63, 20, 22);
 
 	if (_game._objects.isInRoom(OBJ_PLANT_STALK)) {
 		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
@@ -1040,7 +1041,7 @@ static void room_209_init() {
 
 static void room_209_daemon() {
 	if (!local._playingAnimFl && !local._pitchFl && !local._fallFl && !local._dodgeFl && (local._pauseMode == 0) && (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
-		int randAction = _vm->getRandomNumber(1, 50);
+		int randAction = g_engine->getRandomNumber(1, 50);
 		switch (randAction) {
 		case 1:
 			if ((local._monkeyPosition == 1) && (local._counter < 2)) {
@@ -1340,7 +1341,7 @@ static void room_209_daemon() {
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
-				_vm->_sound->command(23);
+				g_engine->_soundManager->command(23, 0);
 			}
 			break;
 
@@ -1392,7 +1393,7 @@ static void room_209_daemon() {
 			break;
 
 		case 239:
-			_vm->_sound->command(23);
+			g_engine->_soundManager->command(23, 0);
 			break;
 
 		default:
@@ -1433,7 +1434,7 @@ static void room_209_pre_parser() {
 
 static void room_209_parser() {
 	if (_action._lookFlag) {
-		_vm->_dialogs->show(20912);
+		text_show(20912);
 		_action._inProgress = false;
 		return;
 	}
@@ -1580,7 +1581,7 @@ static void room_209_parser() {
 		if (player_said_2(look, monkey)) {
 			local._pitchFl = true;
 			_game._player._stepEnabled = false;
-			_vm->_dialogs->show(20914);
+			text_show(20914);
 			_action._inProgress = false;
 			return;
 		}
@@ -1606,7 +1607,7 @@ static void room_209_parser() {
 			_game._player._visible = true;
 			_game._player._stepEnabled = true;
 			_scene->_sequences.addTimer(4, 3);
-			_vm->_dialogs->showItem(OBJ_PLANT_STALK, 0x328);
+			object_examine(OBJ_PLANT_STALK, 0x328, 0);
 			break;
 
 		case 3:
@@ -1644,7 +1645,7 @@ static void room_209_parser() {
 			break;
 
 		case 3:
-			_vm->_dialogs->showItem(OBJ_BINOCULARS, 0x51AF);
+			object_examine(OBJ_BINOCULARS, 0x51AF, 0);
 			_scene->_sprites.remove(_globals._spriteIndexes[10]);
 			break;
 
@@ -1656,69 +1657,69 @@ static void room_209_parser() {
 	}
 
 	if (player_said_2(look, sky)) {
-		_vm->_dialogs->show(20901);
+		text_show(20901);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, bamboo_like_plant)) {
-		_vm->_dialogs->show(20902);
+		text_show(20902);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, mountainside)) {
-		_vm->_dialogs->show(20903);
+		text_show(20903);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, grassy_field)) {
-		_vm->_dialogs->show(20904);
+		text_show(20904);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, field_to_west)) {
-		_vm->_dialogs->show(20905);
+		text_show(20905);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, rocky_area_to_north)) {
-		_vm->_dialogs->show(20906);
+		text_show(20906);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, plant_stalk) && (_action._savedFields._mainObjectSource == 4)) {
-		_vm->_dialogs->show(20907);
+		text_show(20907);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_3(give, twinkifruit, monkey) || player_said_3(throw, twinkifruit, monkey)) {
-		_vm->_dialogs->show(20909);
+		text_show(20909);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, trees)) {
-		_vm->_dialogs->show(20913);
+		text_show(20913);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(throw, monkey) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
 		if (!player_said_1(poison_darts)) {
-			_vm->_dialogs->show(20915);
+			text_show(20915);
 		}
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_3(throw, poison_darts, monkey)) {
-		_vm->_dialogs->show(20916);
+		text_show(20916);
 		_action._inProgress = false;
 		return;
 	}
@@ -1726,27 +1727,27 @@ static void room_209_parser() {
 	if (player_said_2(look, palm_tree)) {
 		if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
 			if (local._monkeyPosition == 1)
-				_vm->_dialogs->show(20917);
+				text_show(20917);
 			else
-				_vm->_dialogs->show(20918);
+				text_show(20918);
 		} else {
 			if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
-				_vm->_dialogs->show(20917);
+				text_show(20917);
 			else
-				_vm->_dialogs->show(20919);
+				text_show(20919);
 		}
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(look, melon_mush)) {
-		_vm->_dialogs->show(20920);
+		text_show(20920);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(take, melon_mush)) {
-		_vm->_dialogs->show(20921);
+		text_show(20921);
 		_action._inProgress = false;
 		return;
 	}
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 171ec2a4d3c..94c75f709d9 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/rooms/dialog.h"
@@ -176,9 +177,9 @@ static void setDialogNode(int node) {
 
 			int quote;
 			if (_game._storyMode == STORYMODE_NAUGHTY)
-				quote = _vm->getRandomNumber(199, 201);
+				quote = g_engine->getRandomNumber(199, 201);
 			else
-				quote = _vm->getRandomNumber(197, 198);
+				quote = g_engine->getRandomNumber(197, 198);
 
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(quote, 0, 360);
@@ -337,7 +338,7 @@ static void setDialogNode(int node) {
 			local._twinkleAnimationType = 2;
 			_globals[kCurtainOpen] = true;
 			_game._player._visible = false;
-			_vm->_palette->lock();
+			pal_lock();
 			_scene->_kernelMessages.reset();
 			_scene->freeAnimation();
 			_scene->resetScene();
@@ -719,8 +720,8 @@ static void room_210_init() {
 			_scene->_animation[0]->setCurrentFrame(131);
 	}
 
-	_vm->_palette->setEntry(252, 63, 63, 10);
-	_vm->_palette->setEntry(253, 45, 45, 5);
+	pal_change_color(252, 63, 63, 10);
+	pal_change_color(253, 45, 45, 5);
 
 	section_2_music();
 }
@@ -730,7 +731,7 @@ static void room_210_daemon() {
 		if (local._twinklesCurrentFrame != _scene->_animation[0]->getCurrentFrame()) {
 			local._twinklesCurrentFrame = _scene->_animation[0]->getCurrentFrame();
 			int reset_frame = -1;
-			int random = _vm->getRandomNumber(1, 1000);
+			int random = g_engine->getRandomNumber(1, 1000);
 
 			switch (local._twinklesCurrentFrame) {
 			case 31:
@@ -903,7 +904,7 @@ static void room_210_pre_parser() {
 
 static void room_210_parser() {
 	if (player_said_3(look, binoculars, hut_to_north)) {
-		_vm->_dialogs->show(21017);
+		text_show(21017);
 	} else if (_game._screenObjects._inputMode == kInputConversation) {
 		handleConversations();
 	} else if (player_said_2(talkto, native_woman) ||
@@ -965,7 +966,7 @@ static void room_210_parser() {
 		switch (_game._trigger) {
 		case 0:
 		{
-			int quote = _vm->getRandomNumber(172, 174);
+			int quote = g_engine->getRandomNumber(172, 174);
 			local._shouldMoveHead = true;
 			_game._player._stepEnabled = false;
 			handleTwinklesSpeech(quote, 0, 120);
@@ -1033,38 +1034,38 @@ static void room_210_parser() {
 	} else if (player_said_2(look, hut)) {
 		if (_globals[kTwinklesStatus] == TWINKLES_GONE) {
 			if (_game._storyMode == STORYMODE_NAUGHTY)
-				_vm->_dialogs->show(21003);
+				text_show(21003);
 			else
-				_vm->_dialogs->show(21002);
+				text_show(21002);
 		} else {
-			_vm->_dialogs->show(21001);
+			text_show(21001);
 		}
 	} else if (player_said_2(look, bra)) {
-		_vm->_dialogs->show(21004);
+		text_show(21004);
 	} else if (player_said_2(look, hotpants)) {
-		_vm->_dialogs->show(21005);
+		text_show(21005);
 	} else if (player_said_2(take, hotpants) || player_said_2(take, bra)) {
-		_vm->_dialogs->show(21006);
+		text_show(21006);
 	} else if (player_said_2(look, stream)) {
-		_vm->_dialogs->show(21007);
+		text_show(21007);
 	} else if (player_said_2(look, bushy_fern)) {
-		_vm->_dialogs->show(21008);
+		text_show(21008);
 	} else if (player_said_2(look, village_path)) {
-		_vm->_dialogs->show(21009);
+		text_show(21009);
 	} else if (player_said_2(look, native_woman)) {
-		_vm->_dialogs->show(21010);
+		text_show(21010);
 	} else if (player_said_2(shoot, native_woman) || player_said_2(hose_down, native_woman)) {
-		_vm->_dialogs->show(21011);
+		text_show(21011);
 	} else if (player_said_2(look, path_to_north)) {
-		_vm->_dialogs->show(21012);
+		text_show(21012);
 	} else if (player_said_2(look, curtain)) {
-		_vm->_dialogs->show(21013);
+		text_show(21013);
 	} else if (player_said_2(look, clothesline)) {
-		_vm->_dialogs->show(21014);
+		text_show(21014);
 	} else if (player_said_2(take, clothesline)) {
-		_vm->_dialogs->show(21015);
+		text_show(21015);
 	} else if (player_said_2(look, hut_to_north)) {
-		_vm->_dialogs->show(21016);
+		text_show(21016);
 	} else {
 		// Not handled
 		return;
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index f7b25b91969..ae93c1671a8 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -61,7 +62,7 @@ static void room_211_init() {
 		_game._player._facing = FACING_SOUTHWEST;
 	}
 
-	if (_vm->getRandomNumber(1, 8) == 1) {
+	if (g_engine->getRandomNumber(1, 8) == 1) {
 		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(202, 126));
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 8);
@@ -72,8 +73,8 @@ static void room_211_init() {
 	if (_scene->_roomChanged)
 		_game._objects.addToInventory(OBJ_BINOCULARS);
 
-	_vm->_palette->setEntry(252, 63, 44, 30);
-	_vm->_palette->setEntry(253, 63, 20, 22);
+	pal_change_color(252, 63, 44, 30);
+	pal_change_color(253, 63, 20, 22);
 	_game.loadQuoteSet(0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 1, 0);
 
 	if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
@@ -81,7 +82,7 @@ static void room_211_init() {
 			Common::Rect(0, 0, 54, 30), 13, 2, 0xFDFC, 60,
 			151, 152, 153, 154, 0);
 
-	local._monkeyTime = _vm->_game->_scene._frameStartTime;
+	local._monkeyTime = _game->_scene._frameStartTime;
 	local._scrollY = 30;
 
 	local._ambushFl = false;
@@ -94,12 +95,12 @@ static void room_211_daemon() {
 	if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
 		_scene->_kernelMessages.randomServer();
 
-		if (!local._ambushFl && !local._wakeFl && (_vm->_game->_scene._frameStartTime >= local._monkeyTime)) {
+		if (!local._ambushFl && !local._wakeFl && (_game->_scene._frameStartTime >= local._monkeyTime)) {
 			int chanceMinor = _scene->_kernelMessages.checkRandom() * 4 + 1;
 			if (_scene->_kernelMessages.generateRandom(80, chanceMinor))
-				_vm->_sound->command(18);
+				g_engine->_soundManager->command(18, 0);
 
-			local._monkeyTime = _vm->_game->_scene._frameStartTime + 2;
+			local._monkeyTime = _game->_scene._frameStartTime + 2;
 		}
 
 		if ((_game._player._playerPos == Common::Point(52, 132)) && (_game._player._facing == FACING_WEST) && !_game._player._moving &&
@@ -113,7 +114,7 @@ static void room_211_daemon() {
 					_game._player._visible = false;
 					_scene->_kernelMessages.reset();
 					_scene->loadAnimation(formAnimName('A', -1), 90);
-					_vm->_sound->command(19);
+					g_engine->_soundManager->command(19, 0);
 					int count = (int)_game._objects._inventoryList.size();
 					for (int idx = 0; idx < count; idx++) {
 						if ((_game._objects._inventoryList[idx] == OBJ_BINOCULARS) && (_scene->_userInterface._selectedInvIndex != idx))
@@ -123,7 +124,7 @@ static void room_211_daemon() {
 				break;
 
 			case 90:
-				_vm->_sound->command(10);
+				g_engine->_soundManager->command(10, 0);
 				_game._player._stepEnabled = true;
 				_game._player._visible = true;
 				_game._player._playerPos = Common::Point(49, 133);
@@ -281,39 +282,39 @@ static void room_211_pre_parser() {
 
 static void room_211_parser() {
 	if (_action._lookFlag && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
-		_vm->_dialogs->show(21111);
+		text_show(21111);
 	else if (player_said_3(look, binoculars, palm_tree))
-		_vm->_dialogs->show(21116);
+		text_show(21116);
 	else if (player_said_2(look, bushy_fern))
-		_vm->_dialogs->show(21101);
+		text_show(21101);
 	else if (player_said_2(look, jungle_path))
-		_vm->_dialogs->show(21102);
+		text_show(21102);
 	else if (player_said_2(look, palm_tree)) {
 		if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
 			if (_game._storyMode == STORYMODE_NAUGHTY)
-				_vm->_dialogs->show(21103);
+				text_show(21103);
 			else
-				_vm->_dialogs->show(21104);
+				text_show(21104);
 		} else {
-			_vm->_dialogs->show(21105);
+			text_show(21105);
 		}
 	} else if (player_said_2(look, thick_undergrowth)) {
 		if (_game._storyMode == STORYMODE_NAUGHTY)
-			_vm->_dialogs->show(21106);
+			text_show(21106);
 		else
-			_vm->_dialogs->show(21107);
+			text_show(21107);
 	} else if (player_said_2(look, jungle))
-		_vm->_dialogs->show(21108);
+		text_show(21108);
 	else if (player_said_2(look, path_to_northeast))
-		_vm->_dialogs->show(21109);
+		text_show(21109);
 	else if (player_said_2(look, path_to_west))
-		_vm->_dialogs->show(21110);
+		text_show(21110);
 	else if (player_said_2(look, slithering_snake))
-		_vm->_dialogs->show(21113);
+		text_show(21113);
 	else if (player_said_2(take, slithering_snake))
-		_vm->_dialogs->show(21114);
+		text_show(21114);
 	else if (player_said_2(look, rocks))
-		_vm->_dialogs->show(21115);
+		text_show(21115);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room212.cpp b/engines/mads/nebular/rooms/room212.cpp
index 39072fce165..439e85c1d59 100644
--- a/engines/mads/nebular/rooms/room212.cpp
+++ b/engines/mads/nebular/rooms/room212.cpp
@@ -54,27 +54,27 @@ static void room_212_pre_parser() {
 
 static void room_212_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(21209);
+		text_show(21209);
 	else if (player_said_1(walk_towards) && (player_said_1(field_to_north) || player_said_1(mountains)))
 		_scene->_nextSceneId = 208;
 	else if (player_said_2(walk_towards, cave))
 		_scene->_nextSceneId = 111;
 	else if (player_said_2(look, grass))
-		_vm->_dialogs->show(21201);
+		text_show(21201);
 	else if (player_said_2(look, rocks))
-		_vm->_dialogs->show(21202);
+		text_show(21202);
 	else if (player_said_2(look, cave_entrance))
-		_vm->_dialogs->show(21203);
+		text_show(21203);
 	else if (player_said_2(look, sky))
-		_vm->_dialogs->show(21204);
+		text_show(21204);
 	else if (player_said_2(look, field_to_north))
-		_vm->_dialogs->show(21205);
+		text_show(21205);
 	else if (player_said_2(look, trees))
-		_vm->_dialogs->show(21206);
+		text_show(21206);
 	else if (player_said_2(look, plants))
-		_vm->_dialogs->show(21207);
+		text_show(21207);
 	else if (player_said_2(look, mountains))
-		_vm->_dialogs->show(21208);
+		text_show(21208);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room213.cpp b/engines/mads/nebular/rooms/room213.cpp
index d7004aab085..f9bef821789 100644
--- a/engines/mads/nebular/rooms/room213.cpp
+++ b/engines/mads/nebular/rooms/room213.cpp
@@ -56,15 +56,15 @@ static void room_213_parser() {
 	}
 
 	if (player_said_2(look, control_panel))
-		_vm->_dialogs->show(21301);
+		text_show(21301);
 	else if (player_said_2(look, keypad) || player_said_2(inspect, keypad))
-		_vm->_dialogs->show(21302);
+		text_show(21302);
 	else if (player_said_2(look, display))
-		_vm->_dialogs->show(21303);
+		text_show(21303);
 	else if (player_said_2(look, viewport) || player_said_2(peer_through, viewport))
-		_vm->_dialogs->show(21304);
+		text_show(21304);
 	else if (player_said_2(look, device))
-		_vm->_dialogs->show(21305);
+		text_show(21305);
 	else if (player_said_2(look, 0_key) || player_said_2(look, 1_key)
 		|| player_said_2(look, 2_key) || player_said_2(look, 3_key)
 		|| player_said_2(look, 4_key) || player_said_2(look, 5_key)
@@ -72,7 +72,7 @@ static void room_213_parser() {
 		|| player_said_2(look, 8_key) || player_said_2(look, 9_key)
 		|| player_said_2(look, smile_key) || player_said_2(look, frown_key)
 		|| player_said_2(look, enter_key))
-		_vm->_dialogs->show(21306);
+		text_show(21306);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index 79c9b538021..61d5dc8342f 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -115,7 +115,7 @@ static void room_214_daemon() {
 
 static void room_214_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(21427);
+		text_show(21427);
 	else if (player_said_2(walk_outside, hut))
 		_scene->_nextSceneId = 207;
 	else if (player_said_2(take, poison_darts) && (_game._trigger || _game._objects.isInRoom(OBJ_POISON_DARTS))) {
@@ -144,7 +144,7 @@ static void room_214_parser() {
 
 		case 3:
 			_game._player._stepEnabled = true;
-			_vm->_dialogs->showItem(OBJ_POISON_DARTS, 0x53A5);
+			object_examine(OBJ_POISON_DARTS, 0x53A5, 0);
 			break;
 
 		default:
@@ -176,67 +176,67 @@ static void room_214_parser() {
 
 		case 3:
 			_game._player._stepEnabled = true;
-			_vm->_dialogs->showItem(OBJ_BLOWGUN, 0x329);
+			object_examine(OBJ_BLOWGUN, 0x329, 0);
 			break;
 
 		default:
 			break;
 		}
 	} else if (player_said_2(look, window))
-		_vm->_dialogs->show(21401);
+		text_show(21401);
 	else if (player_said_2(look, experiment_cage))
-		_vm->_dialogs->show(21402);
+		text_show(21402);
 	else if (player_said_2(look, captive_creature))
-		_vm->_dialogs->show(21403);
+		text_show(21403);
 	else if (player_said_2(look, bear_rug))
-		_vm->_dialogs->show(21404);
+		text_show(21404);
 	else if (player_said_2(look, trophy))
-		_vm->_dialogs->show(21405);
+		text_show(21405);
 	else if (player_said_2(look, large_bowl)) {
 		if (_game._storyMode == STORYMODE_NAUGHTY) {
-			_vm->_dialogs->show(21406);
+			text_show(21406);
 		} else {
-			_vm->_dialogs->show(21407);
+			text_show(21407);
 		}
 	} else if (player_said_2(look, specimen_jars))
-		_vm->_dialogs->show(21408);
+		text_show(21408);
 	else if (player_said_2(take, large_bowl) || player_said_2(take, specimen_jars))
-		_vm->_dialogs->show(21409);
+		text_show(21409);
 	else if (player_said_2(look, shrunken_heads))
-		_vm->_dialogs->show(21410);
+		text_show(21410);
 	else if (player_said_2(take, shrunken_heads) || player_said_2(take, large_heads))
-		_vm->_dialogs->show(21411);
+		text_show(21411);
 	else if (player_said_2(look, large_heads))
-		_vm->_dialogs->show(21428);
+		text_show(21428);
 	else if (player_said_2(look, poison_darts) && (_action._savedFields._mainObjectSource == 4))
-		_vm->_dialogs->show(21412);
+		text_show(21412);
 	else if (player_said_2(open, experiment_cage))
-		_vm->_dialogs->show(21414);
+		text_show(21414);
 	else if (player_said_2(talkto, captive_creature))
-		_vm->_dialogs->show(21415);
+		text_show(21415);
 	else if (player_said_3(give, twinkifruit, captive_creature))
-		_vm->_dialogs->show(21416);
+		text_show(21416);
 	else if (player_said_3(shoot, blowgun, captive_creature) || player_said_3(hose_down, blowgun, captive_creature))
-		_vm->_dialogs->show(21417);
+		text_show(21417);
 	else if (player_said_2(look, big_heads))
-		_vm->_dialogs->show(21418);
+		text_show(21418);
 	else if (player_said_2(take, big_heads))
-		_vm->_dialogs->show(21419);
+		text_show(21419);
 	else if (player_said_2(take, bear_rug))
-		_vm->_dialogs->show(21420);
+		text_show(21420);
 	else if (player_said_2(look, floor_of_hut))
-		_vm->_dialogs->show(21421);
+		text_show(21421);
 	else if (player_said_2(look, blowgun))
-		_vm->_dialogs->show(21422);
+		text_show(21422);
 	else if (player_said_2(look, table)) {
 		if (_game._objects.isInRoom(OBJ_POISON_DARTS) && _game._objects.isInRoom(OBJ_BLOWGUN)) {
-			_vm->_dialogs->show(21423);
+			text_show(21423);
 		} else if (_game._objects.isInRoom(OBJ_POISON_DARTS) && !_game._objects.isInRoom(OBJ_BLOWGUN)) {
-			_vm->_dialogs->show(21424);
+			text_show(21424);
 		} else if (!_game._objects.isInRoom(OBJ_POISON_DARTS) && _game._objects.isInRoom(OBJ_BLOWGUN)) {
-			_vm->_dialogs->show(21425);
+			text_show(21425);
 		} else {
-			_vm->_dialogs->show(21426);
+			text_show(21426);
 		}
 	} else
 		return;
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index 464107a51b7..c3094ee81bd 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -76,7 +76,7 @@ static void room_215_daemon() {
 
 static void room_215_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(21509);
+		text_show(21509);
 	else if (player_said_2(take, twinkifruit)) {
 		if (!_game._objects.isInInventory(OBJ_TWINKIFRUIT) || _game._trigger) {
 			switch (_game._trigger) {
@@ -91,14 +91,14 @@ static void room_215_parser() {
 					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					_game._objects.addToInventory(OBJ_TWINKIFRUIT);
-					_vm->_dialogs->showItem(OBJ_TWINKIFRUIT, 0x5404);
+					object_examine(OBJ_TWINKIFRUIT, 0x5404, 0);
 				}
 				break;
 
 			case 1:
 				if (!_game._objects.isInInventory(OBJ_TWINKIFRUIT)) {
 					_game._objects.addToInventory(OBJ_TWINKIFRUIT);
-					_vm->_dialogs->showItem(OBJ_TWINKIFRUIT, 0x5404);
+					object_examine(OBJ_TWINKIFRUIT, 0x5404, 0);
 				}
 				break;
 
@@ -112,36 +112,36 @@ static void room_215_parser() {
 				break;
 			}
 		} else {
-			int idx = _vm->getRandomNumber(169, 170);
+			int idx = g_engine->getRandomNumber(169, 170);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(idx));
 		}
 	} else if (player_said_2(walk_outside, hut))
 		_scene->_nextSceneId = 210;
 	else if (player_said_2(look, bear_rug))
-		_vm->_dialogs->show(21501);
+		text_show(21501);
 	else if (player_said_2(look, bed))
-		_vm->_dialogs->show(21502);
+		text_show(21502);
 	else if (player_said_2(look, welcome_mat))
-		_vm->_dialogs->show(21503);
+		text_show(21503);
 	else if (player_said_2(look, love_altar))
-		_vm->_dialogs->show(21504);
+		text_show(21504);
 	else if (player_said_2(look, window))
-		_vm->_dialogs->show(21505);
+		text_show(21505);
 	else if (player_said_2(look, picture))
-		_vm->_dialogs->show(21506);
+		text_show(21506);
 	else if (player_said_2(look, twinkifruit) && (_action._savedFields._mainObjectSource == 4))
-		_vm->_dialogs->show(21507);
+		text_show(21507);
 	else if (player_said_2(take, bear_rug))
-		_vm->_dialogs->show(21510);
+		text_show(21510);
 	else if (player_said_2(take, love_altar))
-		_vm->_dialogs->show(21511);
+		text_show(21511);
 	else if (player_said_2(look, bag_of_twinkifruits))
-		_vm->_dialogs->show(21512);
+		text_show(21512);
 	else if (player_said_2(take, bag_of_twinkifruits))
-		_vm->_dialogs->show(21513);
+		text_show(21513);
 	else if (player_said_2(take, welcome_mat))
-		_vm->_dialogs->show(21514);
+		text_show(21514);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index 52a6a0b8e3d..39138785362 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -53,8 +54,8 @@ static void room_304_init() {
 
 		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 150, 0, 3, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
-		_vm->_palette->setEntry(252, 45, 63, 45);
-		_vm->_palette->setEntry(253, 20, 45, 20);
+		pal_change_color(252, 45, 63, 45);
+		pal_change_color(253, 20, 45, 20);
 
 		if (_globals[kSexOfRex] == REX_MALE)
 			_game._player._playerPos = Common::Point(111, 117);
@@ -104,7 +105,7 @@ static void room_304_daemon() {
 
 		case 72:
 		{
-			_vm->_sound->command(43);
+			g_engine->_soundManager->command(43, 0);
 			int sprIdx = _scene->_sequences.addSpriteCycle(local._explosionSpriteId, false, 8, 1, 0, 0);
 			_scene->_sequences.setAnimRange(sprIdx, 5, -2);
 			_scene->_sequences.setDepth(sprIdx, 1);
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index e0f5ac1119c..0c602c4b89a 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -56,7 +57,7 @@ static Scratch local;
 
 static void handleRexDialog(int quote) {
 	const char *curQuote = _game.getQuote(quote);
-	if (_vm->_font->getWidth(curQuote, _scene->_textSpacing) > 200) {
+	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		_game.splitQuote(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
@@ -309,9 +310,9 @@ static void room_307_init() {
 
 	if (_scene->_priorSceneId == RETURNING_FROM_DIALOG) {
 		if (local._grateOpenedFl)
-			_vm->_sound->command(10);
+			g_engine->_soundManager->command(10, 0);
 		else
-			_vm->_sound->command(3);
+			g_engine->_soundManager->command(3, 0);
 	} else {
 		local._afterPeeingFl = false;
 		local._duringPeeingFl = false;
@@ -327,17 +328,17 @@ static void room_307_init() {
 			_game._player._playerPos = Common::Point(156, 113);
 			_game._player._facing = FACING_NORTH;
 			local._animationMode = 1;
-			_vm->_sound->command(11);
+			g_engine->_soundManager->command(11, 0);
 			_scene->loadAnimation(formAnimName('a', -1), 60);
 		} else if (_scene->_priorSceneId == 387) {
 			_game._player._playerPos = Common::Point(129, 108);
 			_game._player._facing = FACING_NORTH;
-			_vm->_sound->command(3);
+			g_engine->_soundManager->command(3, 0);
 			local._grateOpenedFl = true;
 		} else {
 			_game._player._playerPos = Common::Point(159, 109);
 			_game._player._facing = FACING_SOUTH;
-			_vm->_sound->command(3);
+			g_engine->_soundManager->command(3, 0);
 		}
 	}
 
@@ -354,8 +355,8 @@ static void room_307_init() {
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
 	}
 
-	_vm->_palette->setEntry(252, 63, 30, 20);
-	_vm->_palette->setEntry(253, 45, 15, 12);
+	pal_change_color(252, 63, 30, 20);
+	pal_change_color(253, 45, 15, 12);
 
 	section_3_music();
 
@@ -369,12 +370,12 @@ static void room_307_daemon() {
 	if ((local._animationMode == 1) && (_scene->_animation[0] != nullptr)) {
 		if (_scene->_animation[0]->getCurrentFrame() == 126) {
 			local._forcefield._flag = false;
-			_vm->_sound->command(5);
+			g_engine->_soundManager->command(5, 0);
 		}
 
 		if (_scene->_animation[0]->getCurrentFrame() == 194) {
 			local._forcefield._flag = true;
-			_vm->_sound->command(24);
+			g_engine->_soundManager->command(24, 0);
 		}
 	}
 
@@ -393,7 +394,7 @@ static void room_307_daemon() {
 		_game._player._stepEnabled = true;
 		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
 		local._animationMode = 0;
-		_vm->_sound->command(9);
+		g_engine->_soundManager->command(9, 0);
 	}
 
 	if ((local._lastFrameTime != _scene->_frameStartTime) && !local._duringPeeingFl) {
@@ -413,7 +414,7 @@ static void room_307_daemon() {
 				_game._player._stepEnabled = false;
 				_game._player.walk(Common::Point(151, 119), FACING_SOUTHEAST);
 				local._animationMode = 2;
-				_vm->_sound->command(11);
+				g_engine->_soundManager->command(11, 0);
 				_scene->loadAnimation(formAnimName('b', -1), 70);
 			}
 			local._guardTime = 0;
@@ -427,7 +428,7 @@ static void room_307_daemon() {
 				local._prisonerMessageId++;
 				if (local._prisonerMessageId > 0x10A)
 					local._prisonerMessageId = 0x104;
-			} else if (_globals[kKnowsBuddyBeast] && (local._dialog2.read(0) > 1) && (_vm->getRandomNumber(1, 3) == 1)) {
+			} else if (_globals[kKnowsBuddyBeast] && (local._dialog2.read(0) > 1) && (g_engine->getRandomNumber(1, 3) == 1)) {
 				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, _game.getQuote(267));
 				_scene->_kernelMessages.setQuoted(idx, 4, true);
 			}
@@ -441,7 +442,7 @@ static void room_307_daemon() {
 	if (_game._trigger == 81) {
 		local._prisonerTimer = 0;
 		if (local._activePrisonerFl && (local._guardTime > 2600))
-			local._guardTime = 3000 - _vm->getRandomNumber(1, 800);
+			local._guardTime = 3000 - g_engine->getRandomNumber(1, 800);
 
 		local._activePrisonerFl = false;
 	}
@@ -449,7 +450,7 @@ static void room_307_daemon() {
 
 static void room_307_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(30715);
+		text_show(30715);
 	else if (_game._screenObjects._inputMode == kInputConversation)
 		handleDialog();
 	else if (player_said_2(talkto, cell_wall) || player_said_2(talkto, wall) || player_said_2(talkto, toilet)) {
@@ -517,7 +518,7 @@ static void room_307_parser() {
 		break;
 
 		case 4:
-			_vm->_sound->command(26);
+			g_engine->_soundManager->command(26, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 			_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 2);
 			_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
@@ -526,7 +527,7 @@ static void room_307_parser() {
 			break;
 
 		case 5:
-			_vm->_sound->command(10);
+			g_engine->_soundManager->command(10, 0);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(241));
 			_scene->_sequences.addTimer(120, 6);
@@ -640,12 +641,12 @@ static void room_307_parser() {
 			}
 		}
 	} else if (player_said_2(use, toilet) && (_game._storyMode != STORYMODE_NAUGHTY))
-		_vm->_dialogs->show(30723);
+		text_show(30723);
 	else if (player_said_2(use, toilet)) {
 		if (!local._afterPeeingFl) {
 			switch (_game._trigger) {
 			case 0:
-				_vm->_sound->command(25);
+				g_engine->_soundManager->command(25, 0);
 				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 0));
 				local._duringPeeingFl = true;
 				_game._player._stepEnabled = false;
@@ -694,40 +695,40 @@ static void room_307_parser() {
 		}
 	} else if (player_said_2(look, air_vent)) {
 		if (!local._grateOpenedFl)
-			_vm->_dialogs->show(30710);
+			text_show(30710);
 		else
-			_vm->_dialogs->show(30711);
+			text_show(30711);
 	} else if (player_said_2(look, bed))
-		_vm->_dialogs->show(30712);
+		text_show(30712);
 	else if (player_said_2(look, sink))
-		_vm->_dialogs->show(30713);
+		text_show(30713);
 	else if (player_said_2(look, toilet))
-		_vm->_dialogs->show(30714);
+		text_show(30714);
 	else if (player_said_2(sharpen, scalpel))
-		_vm->_dialogs->show(30716);
+		text_show(30716);
 	else if (player_said_2(look, cell_wall))
-		_vm->_dialogs->show(30717);
+		text_show(30717);
 	else if (player_said_2(look, light))
-		_vm->_dialogs->show(30718);
+		text_show(30718);
 	else if (player_said_2(walk_into, corridor)) {
 		switch (local._fieldCollisionCounter) {
 		case 0:
-			_vm->_dialogs->show(30719);
+			text_show(30719);
 			local._fieldCollisionCounter = 1;
 			break;
 
 		case 1:
-			_vm->_dialogs->show(30720);
+			text_show(30720);
 			local._fieldCollisionCounter = 2;
 			break;
 
 		case 2:
-			_vm->_dialogs->show(30721);
+			text_show(30721);
 			local._fieldCollisionCounter = 3;
 			break;
 
 		case 3:
-			_vm->_dialogs->show(30722);
+			text_show(30722);
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index f1337515ced..ed196e87633 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -49,8 +50,8 @@ static void room_308_init() {
 	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('b', 0));
 	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
 
-	_vm->_palette->setEntry(252, 63, 30, 20);
-	_vm->_palette->setEntry(253, 45, 15, 12);
+	pal_change_color(252, 63, 30, 20);
+	pal_change_color(253, 45, 15, 12);
 
 	_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index abdff05f604..e1fe041127e 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -61,12 +62,12 @@ static void room_309_init() {
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
 	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 3, 70);
 
-	_vm->_palette->setEntry(252, 63, 37, 26);
-	_vm->_palette->setEntry(253, 45, 24, 17);
-	_vm->_palette->setEntry(16, 63, 63, 63);
-	_vm->_palette->setEntry(17, 45, 45, 45);
-	_vm->_palette->setEntry(250, 63, 20, 20);
-	_vm->_palette->setEntry(251, 45, 10, 10);
+	pal_change_color(252, 63, 37, 26);
+	pal_change_color(253, 45, 24, 17);
+	pal_change_color(16, 63, 63, 63);
+	pal_change_color(17, 45, 45, 45);
+	pal_change_color(250, 63, 20, 20);
+	pal_change_color(251, 45, 10, 10);
 
 	_game._player._visible = false;
 	_game._player._stepEnabled = false;
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index cfd450e2802..874556cc38e 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -189,7 +189,7 @@ static void room_311_daemon() {
 
 static void room_311_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(31119);
+		text_show(31119);
 	else if (local._checkGuardFl) {
 		local._checkGuardFl = false;
 		_scene->_kernelMessages.reset();
@@ -293,25 +293,25 @@ static void room_311_parser() {
 			break;
 		}
 	} else if (player_said_2(look, desk))
-		_vm->_dialogs->show(31110);
+		text_show(31110);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(31111);
+		text_show(31111);
 	else if (player_said_2(look, lighting_fixture) || player_said_2(stare_at, lighting_fixture))
-		_vm->_dialogs->show(31112);
+		text_show(31112);
 	else if (player_said_2(look, lights) || player_said_2(stare_at, lights))
-		_vm->_dialogs->show(31113);
+		text_show(31113);
 	else if (player_said_2(take, lights))
-		_vm->_dialogs->show(31114);
+		text_show(31114);
 	else if (player_said_2(look, light) || player_said_2(stare_at, light))
-		_vm->_dialogs->show(31115);
+		text_show(31115);
 	else if (player_said_2(take, light))
-		_vm->_dialogs->show(31116);
+		text_show(31116);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(31117);
+		text_show(31117);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(31118);
+		text_show(31118);
 	else if (player_said_2(look, air_vent))
-		_vm->_dialogs->show(31120);
+		text_show(31120);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index d444cf24adf..1a9ac5c7dd8 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -83,13 +83,13 @@ static void room_313_parser() {
 	else if (player_said_2(crawl_to, security_station)) {
 		if (_globals[kSexOfRex] == REX_FEMALE) {
 			_globals[kSexOfRex] = REX_MALE;
-			_vm->_dialogs->show(31301);
+			text_show(31301);
 		}
 		_scene->_nextSceneId = 391;
 	} else if (player_said_2(crawl_to, equipment_room)) {
 		if (_globals[kSexOfRex] == REX_FEMALE) {
 			_globals[kSexOfRex] = REX_MALE;
-			_vm->_dialogs->show(31301);
+			text_show(31301);
 		}
 		_scene->_nextSceneId = 366;
 	} else if (!player_said_2(crawl_down, air_shaft))
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 13aae897412..10b312ec810 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -293,7 +293,7 @@ static void room_316_init() {
 		_game._player._facing = FACING_SOUTH;
 		_game._player._stepEnabled = false;
 		_game._player._visible = false;
-		_vm->_sound->command(44);
+		g_engine->_soundManager->command(44, 0);
 		int spriteIdx = (_globals[kSexOfRex] == REX_MALE) ? 1 : 2;
 		_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[spriteIdx], false, 6, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
@@ -401,9 +401,9 @@ static void room_316_parser() {
 		switch (_game._trigger) {
 		case 0:
 			if (_globals[kCityFlooded]) {
-				_vm->_dialogs->show(31623);
+				text_show(31623);
 			} else {
-				_vm->_sound->command(45);
+				g_engine->_soundManager->command(45, 0);
 				_game._player._stepEnabled = false;
 				_game._player._visible = false;
 				if (_globals[kSexOfRex] == REX_MALE) {
@@ -452,35 +452,35 @@ static void room_316_parser() {
 			break;
 		}
 	} else if (player_said_2(look, platform))
-		_vm->_dialogs->show(31610);
+		text_show(31610);
 	else if (player_said_2(look, strange_device)) {
 		if (_game._visitedScenes.exists(321))
-			_vm->_dialogs->show(31612);
+			text_show(31612);
 		else
-			_vm->_dialogs->show(31611);
+			text_show(31611);
 	} else if (player_said_2(look, controls))
-		_vm->_dialogs->show(31613);
+		text_show(31613);
 	else if (player_said_2(look, equipment))
-		_vm->_dialogs->show(31614);
+		text_show(31614);
 	else if (player_said_2(look, panel))
-		_vm->_dialogs->show(31615);
+		text_show(31615);
 	else if (player_said_2(look, monitor))
-		_vm->_dialogs->show(31616);
+		text_show(31616);
 	else if (player_said_2(look, ramp))
-		_vm->_dialogs->show(31617);
+		text_show(31617);
 	else if (player_said_2(look, air_vent))
-		_vm->_dialogs->show(31618);
+		text_show(31618);
 	else if (player_said_2(look, corridor_to_east)) {
 		if (!_globals[kAfterHavoc]) {
 			if (_game._difficulty != DIFFICULTY_EASY)
-				_vm->_dialogs->show(31620);
+				text_show(31620);
 			else
-				_vm->_dialogs->show(31619);
+				text_show(31619);
 		}
 	} else if (player_said_2(look, floor))
-		_vm->_dialogs->show(31621);
+		text_show(31621);
 	else if (player_said_2(look, support))
-		_vm->_dialogs->show(31622);
+		text_show(31622);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index aa2f559359b..89b28d61a76 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -20,6 +20,9 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/mcga.h"
+#include "mads/core/pal.h"
+#include "mads/core/timer.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -54,7 +57,7 @@ static void handleRexDialogs(int quote) {
 	_scene->_kernelMessages.reset();
 
 	const char *curQuote = _game.getQuote(quote);
-	if (_vm->_font->getWidth(curQuote, _scene->_textSpacing) > 200) {
+	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		_game.splitQuote(curQuote, subQuote1, subQuote2);
 
@@ -76,7 +79,7 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 
 	int maxWidth = 0;
 	for (int i = 0; i < quoteNum; i++) {
-		maxWidth = MAX(maxWidth, _vm->_font->getWidth(_game.getQuote(curQuoteId), -1));
+		maxWidth = MAX(maxWidth, _scene->_kernelMessages._talkFont->getWidth(_game.getQuote(curQuoteId), -1));
 		curQuoteId++;
 	}
 
@@ -111,7 +114,7 @@ static void handleDialog() {
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], synxIdx);
-		_vm->_sound->command(3);
+		g_engine->_soundManager->command(3, 0);
 		_scene->_userInterface.setup(kInputBuildingSentences);
 		_game._player._stepEnabled = true;
 	} else {
@@ -302,14 +305,14 @@ static void room_318_init() {
 	}
 
 	local._internTalkingFl = false;
-	_vm->_palette->setEntry(252, 63, 63, 10);
-	_vm->_palette->setEntry(253, 45, 45, 05);
+	pal_change_color(252, 63, 63, 10);
+	pal_change_color(253, 45, 45, 05);
 
-	local._dropTimer = _vm->_game->_scene._frameStartTime;
+	local._dropTimer = _game->_scene._frameStartTime;
 	section_3_music();
 
 	if (local._dialogFl)
-		_vm->_sound->command(15);
+		g_engine->_soundManager->command(15, 0);
 }
 
 static void room_318_daemon() {
@@ -353,7 +356,7 @@ static void room_318_daemon() {
 					nextFrame = 184;
 				} else if (!local._internTalkingFl) {
 					nextFrame = 0;
-				} else if (_vm->getRandomNumber(1, 100) <= 50) {
+				} else if (g_engine->getRandomNumber(1, 100) <= 50) {
 					nextFrame = 151;
 				} else {
 					nextFrame = 167;
@@ -379,7 +382,7 @@ static void room_318_daemon() {
 
 	switch (_game._trigger) {
 	case 60:
-		_vm->_sound->command(3);
+		g_engine->_soundManager->command(3, 0);
 		local._animMode = 2;
 		_scene->_reloadSceneFlag = true;
 		break;
@@ -397,7 +400,7 @@ static void room_318_daemon() {
 		break;
 
 	case 64:
-		_vm->_sound->command(3);
+		g_engine->_soundManager->command(3, 0);
 		_scene->_nextSceneId = 307;
 		break;
 
@@ -405,7 +408,7 @@ static void room_318_daemon() {
 		break;
 	}
 
-	uint32 tmpFrame = _vm->_events->getFrameCounter();
+	uint32 tmpFrame = timer_read();
 	long diffFrame = tmpFrame - local._lastFrameCounter;
 	local._lastFrameCounter = tmpFrame;
 
@@ -431,17 +434,17 @@ static void room_318_daemon() {
 			local._internCounter++;
 
 		if (local._internCounter >= 3600) {
-			_vm->_sound->command(59);
-			_vm->_screen->_shakeCountdown = 20;
+			g_engine->_soundManager->command(59, 0);
+			mcga_shakes = 20;
 			local._internWalkingFl = true;
 		}
 	}
 
-	if ((_vm->_game->_scene._frameStartTime - local._dropTimer) > 600) {
-		_vm->_sound->command(51);
+	if ((_game->_scene._frameStartTime - local._dropTimer) > 600) {
+		g_engine->_soundManager->command(51, 0);
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
-		local._dropTimer = _vm->_game->_scene._frameStartTime;
+		local._dropTimer = _game->_scene._frameStartTime;
 	}
 }
 
@@ -465,9 +468,9 @@ static void room_318_parser() {
 		case 0:
 		{
 			local._dialogFl = true;
-			_vm->_sound->command(15);
+			g_engine->_soundManager->command(15, 0);
 			_game._player._stepEnabled = false;
-			handleRexDialogs(_vm->getRandomNumber(0x18C, 0x18E));
+			handleRexDialogs(g_engine->getRandomNumber(0x18C, 0x18E));
 
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 80);
@@ -519,7 +522,7 @@ static void room_318_parser() {
 				handleInternDialog(0x190, 1, 120);
 			else {
 				_game._objects.addToInventory(OBJ_SCALPEL);
-				_vm->_dialogs->showItem(OBJ_SCALPEL, 0x7C5D);
+				object_examine(OBJ_SCALPEL, 0x7C5D, 0);
 				_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 			}
 			break;
@@ -555,10 +558,10 @@ static void room_318_parser() {
 
 		if (player_said_2(take, tape_player)) {
 			if (_game._objects.isInRoom(OBJ_AUDIO_TAPE)) {
-				_vm->_dialogs->showItem(OBJ_AUDIO_TAPE, 0x7C5B);
+				object_examine(OBJ_AUDIO_TAPE, 0x7C5B, 0);
 				_game._objects.addToInventory(OBJ_AUDIO_TAPE);
 			} else
-				_vm->_dialogs->show(31834);
+				text_show(31834);
 
 			_action._inProgress = false;
 			return;
@@ -566,84 +569,84 @@ static void room_318_parser() {
 
 		if (player_said_2(look, tape_player)) {
 			if (_game._objects.isInRoom(OBJ_AUDIO_TAPE))
-				_vm->_dialogs->show(31833);
+				text_show(31833);
 			else
-				_vm->_dialogs->show(31834);
+				text_show(31834);
 
 			_action._inProgress = false;
 			return;
 		}
 
 		if (player_said_2(walk_into, doctors_office)) {
-			_vm->_dialogs->show(31831);
+			text_show(31831);
 			_action._inProgress = false;
 			return;
 		}
 
 		if (player_said_2(look, gurney)) {
-			_vm->_dialogs->show(31823);
+			text_show(31823);
 			_action._inProgress = false;
 			return;
 		}
 
 		if (player_said_2(look, instrument_table)) {
-			_vm->_dialogs->show(31825);
+			text_show(31825);
 			_action._inProgress = false;
 			return;
 		}
 	} else { // Not visible
 		if (player_said_2(look, gurney)) {
-			_vm->_dialogs->show(31822);
+			text_show(31822);
 			_action._inProgress = false;
 			return;
 		}
 
 		if (player_said_2(look, instrument_table)) {
-			_vm->_dialogs->show(31824);
+			text_show(31824);
 			_action._inProgress = false;
 			return;
 		}
 	}
 
 	if (player_said_2(look, wall))
-		_vm->_dialogs->show(31810);
+		text_show(31810);
 	else if (player_said_2(look, floor))
-		_vm->_dialogs->show(31811);
+		text_show(31811);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(31812);
+		text_show(31812);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(31813);
+		text_show(31813);
 	else if (player_said_2(look, faucet))
-		_vm->_dialogs->show(31814);
+		text_show(31814);
 	else if (player_said_2(look, sink))
-		_vm->_dialogs->show(31815);
+		text_show(31815);
 	else if (player_said_2(look, conveyor_belt))
-		_vm->_dialogs->show(31816);
+		text_show(31816);
 	else if (player_said_2(look, large_blade))
-		_vm->_dialogs->show(31817);
+		text_show(31817);
 	else if (player_said_2(look, monitor))
-		_vm->_dialogs->show(31818);
+		text_show(31818);
 	else if (player_said_2(look, cabinets))
-		_vm->_dialogs->show(31819);
+		text_show(31819);
 	else if (player_said_2(look, equipment))
-		_vm->_dialogs->show(31820);
+		text_show(31820);
 	else if (player_said_2(look, shelf))
-		_vm->_dialogs->show(31821);
+		text_show(31821);
 	else if (player_said_2(open, cabinets))
-		_vm->_dialogs->show(31829);
+		text_show(31829);
 	else if (player_said_2(look, intern))
-		_vm->_dialogs->show(31830);
+		text_show(31830);
 	else if (player_said_2(look, professor))
-		_vm->_dialogs->show(31832);
+		text_show(31832);
 	else if (player_said_2(look, professors_gurney))
-		_vm->_dialogs->show(31836);
+		text_show(31836);
 	else if (_action._lookFlag) {
 		if (_game._player._visible || _game._objects.isInInventory(OBJ_SCALPEL))
-			_vm->_dialogs->show(31828);
+			text_show(31828);
 		else if (local._internVisibleFl)
-			_vm->_dialogs->show(31826);
+			text_show(31826);
 		else
-			_vm->_dialogs->show(31827);
+			text_show(31827);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index 9762d3881dd..81d39c687e1 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/magic.h"
 #include "mads/core/mcga.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -58,7 +59,7 @@ static void handleRexDialogues(int quote) {
 	_scene->_kernelMessages.reset();
 
 	const char *curQuote = _game.getQuote(quote);
-	if (_vm->_font->getWidth(curQuote, _scene->_textSpacing) > 200) {
+	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		_game.splitQuote(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
@@ -117,8 +118,8 @@ static void room_319_init() {
 		0x17E, 0x17F, 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, 0x188,
 		0x189, 0x18A, 0x18B, 0);
 
-	_vm->_palette->setEntry(252, 63, 30, 2);
-	_vm->_palette->setEntry(253, 45, 15, 1);
+	pal_change_color(252, 63, 30, 2);
+	pal_change_color(253, 45, 15, 1);
 
 	local._slachePosY = 0;
 	local._slacheInitFl = false;
@@ -273,22 +274,22 @@ static void room_319_daemon() {
 
 		if (local._animMode == 2) {
 			if (local._animFrame == 13)
-				_vm->_screen->_shakeCountdown = 40;
+				mcga_shakes = 40;
 
 			if (local._animFrame == 16)
-				_vm->_screen->_shakeCountdown = 1;
+				mcga_shakes = 1;
 		}
 
 		if (local._animMode == 3) {
 			if (local._animFrame == 11)
-				_vm->_screen->_shakeCountdown = 60;
+				mcga_shakes = 60;
 
 			if (local._animFrame == 18)
-				_vm->_screen->_shakeCountdown = 1;
+				mcga_shakes = 1;
 		}
 
 		if ((local._animMode == 4) && (local._animFrame == 16))
-			_vm->_screen->_shakeCountdown = 80;
+			mcga_shakes = 80;
 
 		if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
 			_scene->_animation[0]->setCurrentFrame(nextFrame);
@@ -312,7 +313,7 @@ static void room_319_daemon() {
 
 		local._animFrame = _scene->_animation[0]->getCurrentFrame();
 		local._slacheTalkingFl = true;
-		_vm->_screen->_shakeCountdown = 1;
+		mcga_shakes = 1;
 
 		for (int i = 0; i <= 1; i++) {
 			int oldIdx = _globals._sequenceIndexes[i];
@@ -332,11 +333,11 @@ static void room_319_daemon() {
 	}
 
 	case 72:
-		_vm->_palette->setColorFlags(0xFF, 0, 0);
-		_vm->_palette->setColorValues(0, 0, 0);
-		_vm->_palette->fadeOut(master_palette, nullptr, 18, 228,
+		magic_set_color_flags(0xFF, 0, 0);
+		magic_set_color_values(0, 0, 0);
+		magic_fade_to_grey(master_palette, nullptr, 18, 228,
 			248, 0, 1, 16);
-		_vm->_screen->_shakeCountdown = 1;
+		mcga_shakes = 1;
 		_scene->_reloadSceneFlag = true;
 		break;
 
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index 0cfc5c3a63d..819254c0868 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -20,6 +20,8 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/mcga.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -184,8 +186,8 @@ static void room_320_init() {
 	setRightView(_globals[kRightView320]);
 	setLeftView(0);
 
-	_vm->_palette->setEntry(252, 63, 30, 20);
-	_vm->_palette->setEntry(253, 45, 15, 10);
+	pal_change_color(252, 63, 30, 20);
+	pal_change_color(253, 45, 15, 10);
 
 	section_3_music();
 }
@@ -198,7 +200,7 @@ static void room_320_daemon() {
 			case 95:
 				local._blinkFl = true;
 				setLeftView(9);
-				_vm->_sound->command(41);
+				g_engine->_soundManager->command(41, 0);
 				break;
 
 			case 139:
@@ -212,8 +214,8 @@ static void room_320_daemon() {
 
 			case 417:
 			case 457:
-				_vm->_screen->_shakeCountdown = 40;
-				_vm->_sound->command(59);
+				mcga_shakes = 40;
+				g_engine->_soundManager->command(59, 0);
 				break;
 
 			case 430:
@@ -236,7 +238,7 @@ static void room_320_daemon() {
 
 static void room_320_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(32011);
+		text_show(32011);
 	else if ((player_said_1(press) || player_said_1(push)) &&
 		(player_said_1(left_1_key) || player_said_1(left_2_key) || player_said_1(left_3_key) || player_said_1(left_4_key) ||
 			player_said_1(green_button) || player_said_1(red_button) || player_said_1(right_1_key) || player_said_1(right_2_key) ||
@@ -257,25 +259,25 @@ static void room_320_parser() {
 
 		case 1:
 			if (local._buttonId >= 6) {
-				_vm->_sound->command(60);
+				g_engine->_soundManager->command(60, 0);
 				setRightView(local._buttonId - 6);
 			}
 			if (local._buttonId == 4) {
-				_vm->_sound->command(38);
+				g_engine->_soundManager->command(38, 0);
 				if (local._leftItemId == 3)
 					setLeftView(0);
 				else
 					setLeftView(3);
 			}
 			if (local._buttonId == 5) {
-				_vm->_sound->command(38);
+				g_engine->_soundManager->command(38, 0);
 				if (local._leftItemId == 1)
 					setLeftView(2);
 				else
 					setLeftView(1);
 			}
 			if (local._buttonId <= 3) {
-				_vm->_sound->command(60);
+				g_engine->_soundManager->command(60, 0);
 				setLeftView(local._buttonId + 5);
 			}
 			break;
@@ -297,7 +299,7 @@ static void room_320_parser() {
 					_game.loadQuoteSet(0xFE, 0);
 					_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 					_scene->loadAnimation(formAnimName('a', -1), 70);
-					_vm->_sound->command(17);
+					g_engine->_soundManager->command(17, 0);
 				}
 			}
 			break;
@@ -308,37 +310,37 @@ static void room_320_parser() {
 	} else if (player_said_2(leave, security_station))
 		_scene->_nextSceneId = 311;
 	else if (player_said_2(look, right_monitor))
-		_vm->_dialogs->show(32001);
+		text_show(32001);
 	else if (player_said_2(look, left_monitor))
-		_vm->_dialogs->show(32002);
+		text_show(32002);
 	else if (player_said_2(look, desk))
-		_vm->_dialogs->show(32003);
+		text_show(32003);
 	else if (player_said_2(look, security_station))
-		_vm->_dialogs->show(32004);
+		text_show(32004);
 	else if (player_said_2(look, mug))
-		_vm->_dialogs->show(32005);
+		text_show(32005);
 	else if (player_said_2(look, doughnut))
-		_vm->_dialogs->show(32006);
+		text_show(32006);
 	else if (player_said_2(look, magazine))
-		_vm->_dialogs->show(32007);
+		text_show(32007);
 	else if (player_said_2(look, paper_football))
-		_vm->_dialogs->show(32008);
+		text_show(32008);
 	else if (player_said_2(look, newspaper))
-		_vm->_dialogs->show(32009);
+		text_show(32009);
 	else if (player_said_2(look, clipboard))
-		_vm->_dialogs->show(32010);
+		text_show(32010);
 	else if (player_said_2(take, mug))
-		_vm->_dialogs->show(32012);
+		text_show(32012);
 	else if (player_said_2(take, clipboard))
-		_vm->_dialogs->show(32013);
+		text_show(32013);
 	else if (player_said_2(take, doughnut) || player_said_2(eat, doughnut))
-		_vm->_dialogs->show(32014);
+		text_show(32014);
 	else if (player_said_2(take, paper_football))
-		_vm->_dialogs->show(32015);
+		text_show(32015);
 	else if (player_said_2(take, magazine))
-		_vm->_dialogs->show(32016);
+		text_show(32016);
 	else if (player_said_2(take, newspaper))
-		_vm->_dialogs->show(32017);
+		text_show(32017);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room322.cpp b/engines/mads/nebular/rooms/room322.cpp
index 080bc4f5fa4..2efcd372e5d 100644
--- a/engines/mads/nebular/rooms/room322.cpp
+++ b/engines/mads/nebular/rooms/room322.cpp
@@ -41,10 +41,10 @@ static void room_322_init() {
 	teleporter_init();
 
 	// The original is using scene3xx_section_3_music()
-	if (!_vm->_musicFlag)
-		_vm->_sound->command(2);
+	if (!config_file.music_flag)
+		g_engine->_soundManager->command(2, 0);
 	else
-		_vm->_sound->command(10);
+		g_engine->_soundManager->command(10, 0);
 }
 
 static void room_322_daemon() {
@@ -53,7 +53,7 @@ static void room_322_daemon() {
 
 static void room_322_parser() {
 	if (_action._lookFlag) {
-		_vm->_dialogs->show(32214);
+		text_show(32214);
 		_action._inProgress = false;
 		return;
 	}
@@ -64,11 +64,11 @@ static void room_322_parser() {
 	}
 
 	if (player_said_2(look, viewport) || player_said_2(peer_through, viewport))
-		_vm->_dialogs->show(32210);
+		text_show(32210);
 	else if (player_said_2(look, keypad))
-		_vm->_dialogs->show(32211);
+		text_show(32211);
 	else if (player_said_2(look, display))
-		_vm->_dialogs->show(32212);
+		text_show(32212);
 	else if (player_said_2(look, 0_key) || player_said_2(look, 1_key)
 		|| player_said_2(look, 2_key) || player_said_2(look, 3_key)
 		|| player_said_2(look, 4_key) || player_said_2(look, 5_key)
@@ -76,9 +76,9 @@ static void room_322_parser() {
 		|| player_said_2(look, 8_key) || player_said_2(look, 9_key)
 		|| player_said_2(look, smile_key) || player_said_2(look, enter_key)
 		|| player_said_2(look, frown_key))
-		_vm->_dialogs->show(32213);
+		text_show(32213);
 	else if (player_said_2(look, device))
-		_vm->_dialogs->show(32214);
+		text_show(32214);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index 39fa7e35637..8c14be527c4 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -113,7 +113,7 @@ static void room_351_daemon() {
 
 static void room_351_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(35121);
+		text_show(35121);
 	else if (player_said_2(step_into, teleporter))
 		_scene->_nextSceneId = 322;
 	else if (player_said_2(walk_down, corridor_to_south))
@@ -146,7 +146,7 @@ static void room_351_parser() {
 			case 2:
 				_game._player._visible = true;
 				_game._player._stepEnabled = true;
-				_vm->_dialogs->showItem(OBJ_CREDIT_CHIP, 0x32F);
+				object_examine(OBJ_CREDIT_CHIP, 0x32F, 0);
 				break;
 
 			default:
@@ -154,30 +154,30 @@ static void room_351_parser() {
 			}
 		}
 	} else if (player_said_2(look, view_screen))
-		_vm->_dialogs->show(35110);
+		text_show(35110);
 	else if (player_said_2(look, rip_in_floor))
-		_vm->_dialogs->show(35111);
+		text_show(35111);
 	else if (player_said_2(look, fire_hydrant))
-		_vm->_dialogs->show(35112);
+		text_show(35112);
 	else if (player_said_2(look, guard)) {
 		if (_game._objects[0xF]._roomNumber == 351)
-			_vm->_dialogs->show(35114);
+			text_show(35114);
 		else
-			_vm->_dialogs->show(35113);
+			text_show(35113);
 	} else if (player_said_2(look, equipment))
-		_vm->_dialogs->show(35115);
+		text_show(35115);
 	else if (player_said_2(look, desk))
-		_vm->_dialogs->show(35116);
+		text_show(35116);
 	else if (player_said_2(look, machine))
-		_vm->_dialogs->show(35117);
+		text_show(35117);
 	else if (player_said_2(look, teleporter))
-		_vm->_dialogs->show(35118);
+		text_show(35118);
 	else if (player_said_2(look, control_panel))
-		_vm->_dialogs->show(35119);
+		text_show(35119);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(35120);
+		text_show(35120);
 	else if (player_said_2(look, pole))
-		_vm->_dialogs->show(35122);
+		text_show(35122);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index f6fe7036e41..674ab031f37 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -201,7 +201,7 @@ static void room_352_pre_parser() {
 			if (_game._player._needToWalk) {
 				_game._player._stepEnabled = false;
 				_scene->_sequences.remove(local._commonSequenceIdx);
-				_vm->_sound->command(20);
+				g_engine->_soundManager->command(20, 0);
 				local._commonSequenceIdx = _scene->_sequences.addReverseSpriteCycle(local._commonSpriteIndex, false, 6, 1, 0, 0);
 				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				_scene->_sequences.setDepth(local._commonSequenceIdx, 15);
@@ -238,7 +238,7 @@ static void room_352_pre_parser() {
 
 static void room_352_parser() {
 	if (_action._lookFlag) {
-		_vm->_dialogs->show(35225);
+		text_show(35225);
 		_action._inProgress = false;
 		return;
 	}
@@ -261,7 +261,7 @@ static void room_352_parser() {
 
 			case 1:
 			{
-				_vm->_sound->command(21);
+				g_engine->_soundManager->command(21, 0);
 				_globals._sequenceIndexes[12] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[12], false, 7, 2, 20, 0);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[12], FACING_NORTH);
 				int oldIdx = local._commonSequenceIdx;
@@ -272,7 +272,7 @@ static void room_352_parser() {
 			break;
 
 			case 2:
-				_vm->_sound->command(22);
+				g_engine->_soundManager->command(22, 0);
 				_scene->_sequences.remove(local._commonSequenceIdx);
 				local._commonSequenceIdx = _scene->_sequences.startPingPongCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
 				_scene->_sequences.setAnimRange(local._commonSequenceIdx, 1, 3);
@@ -353,7 +353,7 @@ static void room_352_parser() {
 			case 2:
 				_game._player._visible = true;
 				_game._player._stepEnabled = true;
-				_vm->_dialogs->showItem(OBJ_GUARDS_ARM, 0x899C);
+				object_examine(OBJ_GUARDS_ARM, 0x899C, 0);
 				break;
 
 			default:
@@ -382,7 +382,7 @@ static void room_352_parser() {
 
 			case 1:
 			{
-				_vm->_sound->command(21);
+				g_engine->_soundManager->command(21, 0);
 				_globals._sequenceIndexes[12] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[12], false, 7, 2, 20, 0);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 8);
 				int oldIdx = local._commonSequenceIdx;
@@ -393,7 +393,7 @@ static void room_352_parser() {
 			break;
 
 			case 2:
-				_vm->_sound->command(23);
+				g_engine->_soundManager->command(23, 0);
 				_scene->_sequences.remove(local._commonSequenceIdx);
 				local._commonSequenceIdx = _scene->_sequences.addReverseSpriteCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
 				_scene->_sequences.setAnimRange(local._commonSequenceIdx, 1, 4);
@@ -409,7 +409,7 @@ static void room_352_parser() {
 				else
 					local._commonSpriteIndex = _globals._spriteIndexes[1];
 
-				_vm->_sound->command(20);
+				g_engine->_soundManager->command(20, 0);
 				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 6, 1, 0, 0);
 				_scene->_sequences.setDepth(local._commonSequenceIdx, 15);
 				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 4);
@@ -527,60 +527,60 @@ static void room_352_parser() {
 
 			_game._player._visible = true;
 			_game._player._stepEnabled = true;
-			_vm->_dialogs->showItem(OBJ_TAPE_PLAYER, 35227);
+			object_examine(OBJ_TAPE_PLAYER, 35227, 0);
 			break;
 
 		default:
 			break;
 		}
 	} else if (player_said_2(look, scanner))
-		_vm->_dialogs->show(35210);
+		text_show(35210);
 	else if (player_said_2(look, monitor)) {
 		if (_game._storyMode == STORYMODE_NAUGHTY)
-			_vm->_dialogs->show(35211);
+			text_show(35211);
 		else
-			_vm->_dialogs->show(35212);
+			text_show(35212);
 	} else if (player_said_2(look, display))
-		_vm->_dialogs->show(35213);
+		text_show(35213);
 	else if (player_said_2(look, statue))
-		_vm->_dialogs->show(35214);
+		text_show(35214);
 	else if (player_said_2(look, tape_player) && (_action._savedFields._mainObjectSource == 4))
-		_vm->_dialogs->show(35215);
+		text_show(35215);
 	else if (player_said_2(look, air_vent))
-		_vm->_dialogs->show(35216);
+		text_show(35216);
 	else if (player_said_2(look, guards_arm2) && (_action._savedFields._mainObjectSource == 4))
-		_vm->_dialogs->show(35217);
+		text_show(35217);
 	else if (player_said_2(look, ironing_board))
-		_vm->_dialogs->show(35218);
+		text_show(35218);
 	else if (player_said_2(look, clock))
-		_vm->_dialogs->show(35219);
+		text_show(35219);
 	else if (player_said_2(look, gauge))
-		_vm->_dialogs->show(35220);
+		text_show(35220);
 	else if (player_said_2(look, vault)) {
 		if (!local._vaultOpenFl)
-			_vm->_dialogs->show(35221);
+			text_show(35221);
 	} else if (player_said_2(look, your_stuff))
-		_vm->_dialogs->show(35222);
+		text_show(35222);
 	else if (player_said_2(look, other_stuff))
-		_vm->_dialogs->show(35223);
+		text_show(35223);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(35224);
+		text_show(35224);
 	else if (player_said_2(take, other_stuff))
-		_vm->_dialogs->show(35226);
+		text_show(35226);
 	else if (player_said_2(look, desk))
-		_vm->_dialogs->show(35229);
+		text_show(35229);
 	else if (player_said_2(look, guard))
-		_vm->_dialogs->show(35230);
+		text_show(35230);
 	else if (player_said_2(look, doorway))
-		_vm->_dialogs->show(35231);
+		text_show(35231);
 	else if (player_said_2(look, table))
-		_vm->_dialogs->show(35232);
+		text_show(35232);
 	else if (player_said_2(look, projector))
-		_vm->_dialogs->show(35233);
+		text_show(35233);
 	else if (player_said_2(look, support))
-		_vm->_dialogs->show(35234);
+		text_show(35234);
 	else if (player_said_2(look, security_monitor))
-		_vm->_dialogs->show(35235);
+		text_show(35235);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index fc7c8469cf7..95df71379c7 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -53,27 +53,27 @@ static void room_353_init() {
 
 static void room_353_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(35315);
+		text_show(35315);
 	else if (player_said_2(walk_through, doorway))
 		_scene->_nextSceneId = 352;
 	else if (player_said_2(walk_down, corridor_to_south))
 		_scene->_nextSceneId = 354;
 	else if (player_said_2(look, rock_chunk))
-		_vm->_dialogs->show(35310);
+		text_show(35310);
 	else if (player_said_2(look, pipes) || player_said_2(look, pipe))
-		_vm->_dialogs->show(35311);
+		text_show(35311);
 	else if (player_said_2(look, broken_beam))
-		_vm->_dialogs->show(35312);
+		text_show(35312);
 	else if (player_said_2(look, doorway))
-		_vm->_dialogs->show(35313);
+		text_show(35313);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(35314);
+		text_show(35314);
 	else if (player_said_2(look, floor))
-		_vm->_dialogs->show(35316);
+		text_show(35316);
 	else if (player_said_2(look, ceiling))
-		_vm->_dialogs->show(35317);
+		text_show(35317);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(35318);
+		text_show(35318);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room354.cpp b/engines/mads/nebular/rooms/room354.cpp
index f9817bfad22..651fcf41ee7 100644
--- a/engines/mads/nebular/rooms/room354.cpp
+++ b/engines/mads/nebular/rooms/room354.cpp
@@ -61,7 +61,7 @@ static void room_354_pre_parser() {
 
 static void room_354_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(35414);
+		text_show(35414);
 	else if (player_said_2(walk_down, corridor_to_north)) {
 		_game._player.startWalking(Common::Point(208, 0), FACING_NORTHEAST);
 		_game._player._walkOffScreenSceneId = 353;
@@ -72,25 +72,25 @@ static void room_354_parser() {
 	else if (player_said_2(walk_down, corridor_to_south))
 		_scene->_nextSceneId = 401;
 	else if (player_said_2(look, controls))
-		_vm->_dialogs->show(35410);
+		text_show(35410);
 	else if (player_said_2(look, signal))
-		_vm->_dialogs->show(35411);
+		text_show(35411);
 	else if (player_said_2(look, catwalk))
-		_vm->_dialogs->show(35412);
+		text_show(35412);
 	else if (player_said_2(look, air_duct))
-		_vm->_dialogs->show(35413);
+		text_show(35413);
 	else if (player_said_2(look, corridor_to_north))
-		_vm->_dialogs->show(35415);
+		text_show(35415);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(35416);
+		text_show(35416);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(35417);
+		text_show(35417);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(35418);
+		text_show(35418);
 	else if (player_said_2(look, debris))
-		_vm->_dialogs->show(35419);
+		text_show(35419);
 	else if (player_said_2(look, guard))
-		_vm->_dialogs->show(35420);
+		text_show(35420);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index 79ddc0686b1..ccd22bbf71d 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -58,33 +58,33 @@ static void room_357_pre_parser() {
 
 static void room_357_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(35715);
+		text_show(35715);
 	else if (player_said_2(look, air_vent))
-		_vm->_dialogs->show(35710);
+		text_show(35710);
 	else if (player_said_2(climb_into, air_vent))
-		_vm->_dialogs->show(35711);
+		text_show(35711);
 	else if (player_said_2(look, bed))
-		_vm->_dialogs->show(35712);
+		text_show(35712);
 	else if (player_said_2(look, sink))
-		_vm->_dialogs->show(35713);
+		text_show(35713);
 	else if (player_said_2(look, toilet))
-		_vm->_dialogs->show(35714);
+		text_show(35714);
 	else if (player_said_2(look, cell_wall))
-		_vm->_dialogs->show(35716);
+		text_show(35716);
 	else if (player_said_2(look, light))
-		_vm->_dialogs->show(35717);
+		text_show(35717);
 	else if (player_said_2(look, rip_in_floor))
-		_vm->_dialogs->show(35718);
+		text_show(35718);
 	else if (player_said_2(look, debris))
-		_vm->_dialogs->show(35719);
+		text_show(35719);
 	else if (player_said_2(take, debris))
-		_vm->_dialogs->show(35720);
+		text_show(35720);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(35721);
+		text_show(35721);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(35722);
+		text_show(35722);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(35723);
+		text_show(35723);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index 271ad38fb7f..bd32329a506 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -55,21 +55,21 @@ static void room_358_pre_parser() {
 
 static void room_358_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(35815);
+		text_show(35815);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(35810);
+		text_show(35810);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(35811);
+		text_show(35811);
 	else if (player_said_2(look, bed))
-		_vm->_dialogs->show(35812);
+		text_show(35812);
 	else if (player_said_2(look, sink))
-		_vm->_dialogs->show(35813);
+		text_show(35813);
 	else if (player_said_2(look, toilet))
-		_vm->_dialogs->show(35814);
+		text_show(35814);
 	else if (player_said_2(look, corridor) || player_said_2(look, wall))
-		_vm->_dialogs->show(35816);
+		text_show(35816);
 	else if (player_said_2(look, air_vent))
-		_vm->_dialogs->show(35817);
+		text_show(35817);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index 81e00f2d619..722b5717f43 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -76,16 +76,16 @@ static void room_359_pre_parser() {
 static void room_359_parser() {
 	if (_action._lookFlag) {
 		if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
-			_vm->_dialogs->show(35914);
+			text_show(35914);
 		else
-			_vm->_dialogs->show(35915);
+			text_show(35915);
 	} else if (player_said_2(take, security_card)) {
 		if (_game._trigger || !_game._objects.isInInventory(OBJ_SECURITY_CARD)) {
 			switch (_game._trigger) {
 			case 0:
 				_game._player._stepEnabled = false;
 				_game._player._visible = false;
-				_vm->_dialogs->show(35920);
+				text_show(35920);
 				if (_globals[kSexOfRex] == REX_MALE) {
 					_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 4, 2, 0, 0);
 					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
@@ -103,9 +103,9 @@ static void room_359_parser() {
 			case 1:
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_scene->_dynamicHotspots.remove(local._cardHotspotId);
-				_vm->_sound->command(57);
+				g_engine->_soundManager->command(57, 0);
 				_game._objects.addToInventory(OBJ_SECURITY_CARD);
-				_vm->_dialogs->showItem(OBJ_SECURITY_CARD, 0x330);
+				object_examine(OBJ_SECURITY_CARD, 0x330, 0);
 				_scene->changeVariant(1);
 				break;
 
@@ -124,43 +124,43 @@ static void room_359_parser() {
 			}
 		}
 	} else if (player_said_2(look, bloody_cell_wall))
-		_vm->_dialogs->show(35910);
+		text_show(35910);
 	else if (player_said_2(look, bed))
-		_vm->_dialogs->show(35911);
+		text_show(35911);
 	else if (player_said_2(look, sink))
-		_vm->_dialogs->show(35912);
+		text_show(35912);
 	else if (player_said_2(look, toilet))
-		_vm->_dialogs->show(35913);
+		text_show(35913);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(35916);
+		text_show(35916);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(35917);
+		text_show(35917);
 	else if (player_said_2(look, limb))
-		_vm->_dialogs->show(35918);
+		text_show(35918);
 	else if (player_said_2(take, limb))
-		_vm->_dialogs->show(35919);
+		text_show(35919);
 	else if (player_said_2(look, security_card) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(35921);
+		text_show(35921);
 	else if (player_said_2(look, blood_stain)) {
 		if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
-			_vm->_dialogs->show(35922);
+			text_show(35922);
 		else
-			_vm->_dialogs->show(35923);
+			text_show(35923);
 	} else if (player_said_2(look, wall_board))
-		_vm->_dialogs->show(35924);
+		text_show(35924);
 	else if (player_said_2(take, wall_board))
-		_vm->_dialogs->show(35925);
+		text_show(35925);
 	else if (player_said_2(look, rip_in_floor))
-		_vm->_dialogs->show(35926);
+		text_show(35926);
 	else if (player_said_2(look, corridor))
-		_vm->_dialogs->show(35927);
+		text_show(35927);
 	else if (player_said_2(look, floor)) {
 		if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
-			_vm->_dialogs->show(35928);
+			text_show(35928);
 		else
-			_vm->_dialogs->show(35929);
+			text_show(35929);
 	} else if (player_said_2(open, air_vent) || player_said_2(look, air_vent))
-		_vm->_dialogs->show(36016);
+		text_show(36016);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index 9a4542cc5cf..f5c75da9ed0 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -55,23 +55,23 @@ static void room_360_pre_parser() {
 
 static void room_360_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(36015);
+		text_show(36015);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(36010);
+		text_show(36010);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(36011);
+		text_show(36011);
 	else if (player_said_2(look, bed))
-		_vm->_dialogs->show(36012);
+		text_show(36012);
 	else if (player_said_2(look, sink))
-		_vm->_dialogs->show(36013);
+		text_show(36013);
 	else if (player_said_2(look, toilet))
-		_vm->_dialogs->show(36014);
+		text_show(36014);
 	else if (player_said_2(look, air_vent))
-		_vm->_dialogs->show(36016);
+		text_show(36016);
 	else if (player_said_2(look, corridor))
-		_vm->_dialogs->show(36017);
+		text_show(36017);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(36018);
+		text_show(36018);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 610d0561c10..517c20b5f9b 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -380,7 +380,7 @@ static void room_361_pre_parser() {
 
 static void room_361_parser() {
 	if (_action._lookFlag)
-		_vm->_dialogs->show(36119);
+		text_show(36119);
 	else if (player_said_2(sit_at, desk)) {
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.addQuote(252, 0, 120);
@@ -390,25 +390,25 @@ static void room_361_parser() {
 		else
 			handleRexAction();
 	} else if (player_said_2(look, desk))
-		_vm->_dialogs->show(36110);
+		text_show(36110);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(36111);
+		text_show(36111);
 	else if (player_said_2(look, lighting_fixture) || player_said_2(stare_at, lighting_fixture))
-		_vm->_dialogs->show(36112);
+		text_show(36112);
 	else if (player_said_2(look, lights) || player_said_2(stare_at, lights))
-		_vm->_dialogs->show(36113);
+		text_show(36113);
 	else if (player_said_2(take, lights))
-		_vm->_dialogs->show(36114);
+		text_show(36114);
 	else if (player_said_2(look, light_bulb) || player_said_2(stare_at, light_bulb))
-		_vm->_dialogs->show(36115);
+		text_show(36115);
 	else if (player_said_2(take, light_bulb))
-		_vm->_dialogs->show(36116);
+		text_show(36116);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(36117);
+		text_show(36117);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(36118);
+		text_show(36118);
 	else if (player_said_2(look, air_vent))
-		_vm->_dialogs->show(36120);
+		text_show(36120);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room366.cpp b/engines/mads/nebular/rooms/room366.cpp
index a7cd8a6ae52..5d182ffcdc1 100644
--- a/engines/mads/nebular/rooms/room366.cpp
+++ b/engines/mads/nebular/rooms/room366.cpp
@@ -42,15 +42,15 @@ static void room_366_parser() {
 		_scene->_nextSceneId = 302;
 	else if (player_said_2(open, grate)) {
 		if (_game._visitedScenes.exists(316))
-			_vm->_dialogs->show(36612);
+			text_show(36612);
 		else
-			_vm->_dialogs->show(36613);
+			text_show(36613);
 		_scene->_nextSceneId = 316;
 	} else if (player_said_2(look_through, grate)) {
 		if (_game._visitedScenes.exists(321))
-			_vm->_dialogs->show(36611);
+			text_show(36611);
 		else
-			_vm->_dialogs->show(36610);
+			text_show(36610);
 	} else {
 		return;
 	}
diff --git a/engines/mads/nebular/rooms/room387.cpp b/engines/mads/nebular/rooms/room387.cpp
index b851b4db872..9159bd84389 100644
--- a/engines/mads/nebular/rooms/room387.cpp
+++ b/engines/mads/nebular/rooms/room387.cpp
@@ -42,9 +42,9 @@ static void room_387_parser() {
 	if (player_said_2(return_to, air_shaft))
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(look_through, grate))
-		_vm->_dialogs->show(38710);
+		text_show(38710);
 	else if (player_said_2(open, grate))
-		_vm->_dialogs->show(38711);
+		text_show(38711);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index f2b3e75aee5..7fb02f3613c 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -42,8 +43,8 @@ static void room_388_init() {
 	}
 
 	_game._player._visible = false;
-	_vm->_palette->setEntry(252, 63, 30, 20);
-	_vm->_palette->setEntry(253, 45, 15, 12);
+	pal_change_color(252, 63, 30, 20);
+	pal_change_color(253, 45, 15, 12);
 	_game.loadQuoteSet(0x154, 0x155, 0x156, 0x157, 0x158, 0);
 
 	section_3_music();
@@ -76,11 +77,11 @@ static void room_388_parser() {
 		}
 	} else if (player_said_2(look_through, grate)) {
 		if (_globals[kAfterHavoc])
-			_vm->_dialogs->show(38811);
+			text_show(38811);
 		else
-			_vm->_dialogs->show(38810);
+			text_show(38810);
 	} else if (player_said_2(open, grate))
-		_vm->_dialogs->show(38812);
+		text_show(38812);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index adfca5d713f..dba79a715f8 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -55,8 +56,8 @@ static void room_389_init() {
 			247, 248, 249, 0);
 	}
 
-	_vm->_palette->setEntry(252, 63, 37, 26);
-	_vm->_palette->setEntry(253, 45, 24, 17);
+	pal_change_color(252, 63, 37, 26);
+	pal_change_color(253, 45, 24, 17);
 	_game._player._visible = false;
 	_game.loadQuoteSet(0xF7, 0xF8, 0xF9, 0x159, 0x15A, 0x15B, 0);
 
@@ -96,16 +97,16 @@ static void room_389_parser() {
 	} else if (player_said_2(look_through, grate)) {
 		if (_globals[kAfterHavoc]) {
 			if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
-				_vm->_dialogs->show(38911);
+				text_show(38911);
 			else
-				_vm->_dialogs->show(38912);
+				text_show(38912);
 		} else
-			_vm->_dialogs->show(38910);
+			text_show(38910);
 	} else if (player_said_2(open, grate)) {
 		if (_globals[kAfterHavoc])
-			_vm->_dialogs->show(38914);
+			text_show(38914);
 		else
-			_vm->_dialogs->show(38913);
+			text_show(38913);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room390.cpp b/engines/mads/nebular/rooms/room390.cpp
index 9a8e02118a7..74f3e155f8b 100644
--- a/engines/mads/nebular/rooms/room390.cpp
+++ b/engines/mads/nebular/rooms/room390.cpp
@@ -42,9 +42,9 @@ static void room_390_parser() {
 	if (player_said_2(return_to, air_shaft))
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(look_through, grate))
-		_vm->_dialogs->show(39010);
+		text_show(39010);
 	else if (player_said_2(open, grate))
-		_vm->_dialogs->show(39011);
+		text_show(39011);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index 0e7b08600db..ca5ed752fbe 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -42,9 +42,9 @@ static void room_391_parser() {
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(open, grate)) {
 		if (_globals[kKickedIn391Grate])
-			_vm->_dialogs->show(39113);
+			text_show(39113);
 		else {
-			_vm->_dialogs->show(39112);
+			text_show(39112);
 			_globals[kKickedIn391Grate] = true;
 		}
 
@@ -54,9 +54,9 @@ static void room_391_parser() {
 			_scene->_nextSceneId = 311;
 	} else if (player_said_2(look_through, grate)) {
 		if (_globals[kAfterHavoc])
-			_vm->_dialogs->show(39111);
+			text_show(39111);
 		else
-			_vm->_dialogs->show(39110);
+			text_show(39110);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index 47e8a5ec506..6a12cf8f772 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -43,16 +43,16 @@ static void room_399_parser() {
 	else if (player_said_2(look_through, grate)) {
 		if (_globals[kAfterHavoc]) {
 			if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
-				_vm->_dialogs->show(38911);
+				text_show(38911);
 			else
-				_vm->_dialogs->show(38912);
+				text_show(38912);
 		} else
-			_vm->_dialogs->show(38910);
+			text_show(38910);
 	} else if (player_said_2(open, grate)) {
 		if (_globals[kAfterHavoc])
-			_vm->_dialogs->show(38914);
+			text_show(38914);
 		else
-			_vm->_dialogs->show(38913);
+			text_show(38913);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index 0022c4bd236..912f800666e 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -86,7 +86,7 @@ static void room_401_daemon() {
 		else if (dist < 1)
 			dist = 1;
 
-		_vm->_sound->command(12, dist);
+		g_engine->_soundManager->command(12, dist);
 		local._timer = _scene->_frameStartTime + _game._player._ticksAmount;
 	}
 
@@ -123,10 +123,10 @@ static void room_401_parser() {
 			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
-			_vm->_sound->command(21);
+			g_engine->_soundManager->command(21, 0);
 			_scene->loadAnimation(formAnimName('s', 1), 70);
 			_globals[kHasBeenScanned] = true;
-			_vm->_sound->command(22);
+			g_engine->_soundManager->command(22, 0);
 			int idx = _scene->_kernelMessages.add(Common::Point(153, 46), 0x1110, 32, 0, 60, _game.getQuote(0x1D4));
 			_scene->_kernelMessages.setQuoted(idx, 4, true);
 		}
@@ -135,9 +135,9 @@ static void room_401_parser() {
 			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
-			_vm->_sound->command(21);
+			g_engine->_soundManager->command(21, 0);
 			_scene->loadAnimation(formAnimName('s', 2), 80);
-			_vm->_sound->command(23);
+			g_engine->_soundManager->command(23, 0);
 			_globals[kHasBeenScanned] = true;
 		}
 	}
@@ -149,19 +149,19 @@ static void room_401_parser() {
 		_scene->_nextSceneId = 354;
 	else if (player_said_2(look, scanner)) {
 		if (_globals[kHasBeenScanned])
-			_vm->_dialogs->show(40111);
+			text_show(40111);
 		else
-			_vm->_dialogs->show(40110);
+			text_show(40110);
 	} else if (player_said_2(look, bar))
-		_vm->_dialogs->show(40112);
+		text_show(40112);
 	else if (player_said_2(look, sign))
-		_vm->_dialogs->show(40113);
+		text_show(40113);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(40114);
+		text_show(40114);
 	else if (player_said_2(look, corridor_to_north))
-		_vm->_dialogs->show(40115);
+		text_show(40115);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(40116);
+		text_show(40116);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 775d0a4157e..5e29c78eadd 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -122,7 +123,7 @@ static void handleConversation1() {
 	{
 		int quoteId = 0;
 		int quotePosX = 0;
-		switch (_vm->getRandomNumber(1, 3)) {
+		switch (g_engine->getRandomNumber(1, 3)) {
 		case 1:
 			quoteId = 0x1E4;
 			local._bartenderCurrentQuestion = 4;
@@ -245,7 +246,7 @@ static void handleConversation2() {
 	}
 
 	if (_action._activeAction._verbId != 0x21C) {
-		switch (_vm->getRandomNumber(1, 3)) {
+		switch (g_engine->getRandomNumber(1, 3)) {
 		case 1:
 			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 100);
@@ -401,7 +402,7 @@ static void handleDialogs() {
 		_scene->_kernelMessages.reset();
 		_game._player._stepEnabled = false;
 		const char *curQuote = _game.getQuote(_action._activeAction._verbId);
-		if (_vm->_font->getWidth(curQuote, _scene->_textSpacing) > 200) {
+		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 			static char subQuote1[34], subQuote2[34];
 			_game.splitQuote(curQuote, subQuote1, subQuote2);
 			_scene->_kernelMessages.add(Common::Point(230, 42), 0x1110, 32, 0, 140, subQuote1);
@@ -485,10 +486,10 @@ static void room_402_init() {
 		0x215, 0x237, 0x216, 0x219, 0x21A, 0x21B, 0x21C, 0x21D, 0x220, 0x223, 0x224, 0x227, 0x22A, 0x22D, 0x230, 0x233,
 		0x234, 0x235, 0x236, 0x238, 0x239, 0x23A, 0x23D, 0x23E, 0x23F, 0);
 
-	_vm->_palette->setEntry(250, 47, 41, 40);
-	_vm->_palette->setEntry(251, 50, 63, 55);
-	_vm->_palette->setEntry(252, 38, 34, 25);
-	_vm->_palette->setEntry(253, 45, 41, 35);
+	pal_change_color(250, 47, 41, 40);
+	pal_change_color(251, 50, 63, 55);
+	pal_change_color(252, 38, 34, 25);
+	pal_change_color(253, 45, 41, 35);
 
 	local._dialog1.setup(0x60, 0x214, 0x215, 0x237, 0);
 	local._dialog2.setup(0x61, 0x216, 0x219, 0x21A, 0x21B, 0x21D, 0x220, 0x223, 0x224, 0x227, 0x22A, 0x22D, 0x230, 0x21C, 0);
@@ -680,12 +681,12 @@ static void room_402_daemon() {
 		_game._player._visible = true;
 		_scene->_sequences.remove(_globals._sequenceIndexes[15]);
 		_game._objects.addToInventory(OBJ_CREDIT_CHIP);
-		_vm->_dialogs->showItem(OBJ_CREDIT_CHIP, 40242);
+		object_examine(OBJ_CREDIT_CHIP, 40242, 0);
 		_game._player._stepEnabled = true;
 	}
 
-	if ((_vm->getRandomNumber(1, 1500) == 1) && (!local._activeTeleporter) && (_game._player._playerPos.x < 150)) {
-		_vm->_sound->command(30);
+	if ((g_engine->getRandomNumber(1, 1500) == 1) && (!local._activeTeleporter) && (_game._player._playerPos.x < 150)) {
+		g_engine->_soundManager->command(30, 0);
 		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 13, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 11);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
@@ -754,18 +755,18 @@ static void room_402_daemon() {
 		int seqIdx = _globals._sequenceIndexes[7];
 		switch (local._roxMode) {
 		case 20:
-			_vm->_sound->command(57);
+			g_engine->_soundManager->command(57, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[15]);
 			_game._objects.addToInventory(OBJ_CREDIT_CHIP);
-			_vm->_dialogs->showItem(OBJ_CREDIT_CHIP, 40242);
+			object_examine(OBJ_CREDIT_CHIP, 40242, 0);
 			break;
 
 		case 22:
-			_vm->_sound->command(57);
+			g_engine->_soundManager->command(57, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
 			_game._objects.addToInventory(OBJ_ALIEN_LIQUOR);
 			_globals[kBottleDisplayed] = false;
-			_vm->_dialogs->showItem(OBJ_ALIEN_LIQUOR, 40241);
+			object_examine(OBJ_ALIEN_LIQUOR, 40241, 0);
 			break;
 
 		case 21:
@@ -1056,14 +1057,14 @@ static void room_402_daemon() {
 			local._bigBeatFl = true;
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-			_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, _vm->getRandomNumber(1, 4));
+			_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, g_engine->getRandomNumber(1, 4));
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
 			_scene->_sequences.addTimer(60, 54);
 		}
 	}
 
 	if (local._bartenderReady) {
-		if (_vm->getRandomNumber(1, 250) == 1) {
+		if (g_engine->getRandomNumber(1, 250) == 1) {
 			if (local._bartenderLooksLeft) {
 				_scene->_sequences.remove(_globals._sequenceIndexes[11]);
 				local._bartenderLooksLeft = false;
@@ -1075,7 +1076,7 @@ static void room_402_daemon() {
 				local._bartenderSteady = false;
 			}
 
-			switch (_vm->getRandomNumber(1, 3)) {
+			switch (g_engine->getRandomNumber(1, 3)) {
 			case 1:
 			{
 				_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[10], false, 4);
@@ -1138,7 +1139,7 @@ static void room_402_daemon() {
 
 	case 78:
 	{
-		_vm->_sound->command(57);
+		g_engine->_soundManager->command(57, 0);
 		int seqIdx = _globals._sequenceIndexes[7];
 		_game._objects.addToInventory(OBJ_REPAIR_LIST);
 		_scene->_sequences.remove(_globals._sequenceIndexes[14]);
@@ -1161,7 +1162,7 @@ static void room_402_daemon() {
 	break;
 
 	case 180:
-		_vm->_dialogs->showItem(OBJ_REPAIR_LIST, 40240);
+		object_examine(OBJ_REPAIR_LIST, 40240, 0);
 		_game._player._stepEnabled = true;
 		break;
 
@@ -1176,7 +1177,7 @@ static void room_402_daemon() {
 		local._bartenderReady = false;
 	}
 
-	if (_vm->getRandomNumber(1, 25) == 1) {
+	if (g_engine->getRandomNumber(1, 25) == 1) {
 		if (local._lightOn) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[0]);
 			local._lightOn = false;
@@ -1186,7 +1187,7 @@ static void room_402_daemon() {
 		}
 	}
 
-	if (!local._blowingSmoke && (_vm->getRandomNumber(1, 300) == 1)) {
+	if (!local._blowingSmoke && (g_engine->getRandomNumber(1, 300) == 1)) {
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 14);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
@@ -1211,8 +1212,8 @@ static void room_402_daemon() {
 	}
 
 	if (!local._leftWomanMoving) {
-		if (_vm->getRandomNumber(1, 1000) == 1) {
-			switch (_vm->getRandomNumber(1, 2)) {
+		if (g_engine->getRandomNumber(1, 1000) == 1) {
+			switch (g_engine->getRandomNumber(1, 2)) {
 			case 1:
 				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 12, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 8);
@@ -1238,7 +1239,7 @@ static void room_402_daemon() {
 		int seqIdx = _globals._sequenceIndexes[2];
 		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 9);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], seqIdx);
-		_scene->_sequences.addTimer(_vm->getRandomNumber(60, 250), 34);
+		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 250), 34);
 	}
 	break;
 
@@ -1252,7 +1253,7 @@ static void room_402_daemon() {
 	case 35:
 		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 2);
-		_scene->_sequences.addTimer(_vm->getRandomNumber(60, 300), 36);
+		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 300), 36);
 		break;
 
 	case 36:
@@ -1275,8 +1276,8 @@ static void room_402_daemon() {
 	}
 
 	if (!local._rightWomanMoving) {
-		if (_vm->getRandomNumber(1, 300) == 1) {
-			switch (_vm->getRandomNumber(1, 4)) {
+		if (g_engine->getRandomNumber(1, 300) == 1) {
+			switch (g_engine->getRandomNumber(1, 4)) {
 			case 1:
 				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4);
@@ -1315,7 +1316,7 @@ static void room_402_daemon() {
 		local._rightWomanMoving = false;
 
 	if (_scene->_animation[0]->getCurrentFrame() == 1) {
-		switch (_vm->getRandomNumber(1, 50)) {
+		switch (g_engine->getRandomNumber(1, 50)) {
 		case 1:
 			_scene->_animation[0]->setCurrentFrame(2);
 			break;
@@ -1511,7 +1512,7 @@ static void room_402_daemon() {
 		break;
 
 	case 65:
-		_vm->_sound->command(30);
+		g_engine->_soundManager->command(30, 0);
 		_globals._sequenceIndexes[16] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[16], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[16], 1, 6);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[16], 9);
@@ -1610,7 +1611,7 @@ static void room_402_daemon() {
 	}
 
 	if (local._helgaReady) {
-		int rndVal = _vm->getRandomNumber(1, 1000);
+		int rndVal = g_engine->getRandomNumber(1, 1000);
 		if (rndVal < 6)
 			switch (rndVal) {
 			case 1:
@@ -1673,7 +1674,7 @@ static void room_402_daemon() {
 		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 19);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.addTimer(_vm->getRandomNumber(60, 120), 81);
+		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 120), 81);
 	}
 
 	if (_game._trigger == 81) {
@@ -1758,28 +1759,28 @@ static void room_402_daemon() {
 		if (!local._activeArrow1) {
 			_globals._sequenceIndexes[17] = _scene->_sequences.startCycle(_globals._spriteIndexes[17], false, 1);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[17], 1);
-			_scene->_sequences.addTimer(_vm->getRandomNumber(10, 15), 49);
+			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 49);
 			local._activeArrow1 = true;
 		}
 
 		if (!local._activeArrow2) {
 			_globals._sequenceIndexes[18] = _scene->_sequences.startCycle(_globals._spriteIndexes[18], false, 1);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[18], 1);
-			_scene->_sequences.addTimer(_vm->getRandomNumber(10, 15), 50);
+			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 50);
 			local._activeArrow2 = true;
 		}
 
 		if (!local._activeArrow3) {
 			_globals._sequenceIndexes[19] = _scene->_sequences.startCycle(_globals._spriteIndexes[19], false, 1);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[19], 1);
-			_scene->_sequences.addTimer(_vm->getRandomNumber(10, 15), 51);
+			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 51);
 			local._activeArrow3 = true;
 		}
 	}
 
 	if (_game._trigger == 49) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[17]);
-		_scene->_sequences.addTimer(_vm->getRandomNumber(10, 15), 45);
+		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 45);
 	}
 
 	if (_game._trigger == 45)
@@ -1787,7 +1788,7 @@ static void room_402_daemon() {
 
 	if (_game._trigger == 50) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[18]);
-		_scene->_sequences.addTimer(_vm->getRandomNumber(10, 15), 46);
+		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 46);
 	}
 
 	if (_game._trigger == 46)
@@ -1795,7 +1796,7 @@ static void room_402_daemon() {
 
 	if (_game._trigger == 51) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[19]);
-		_scene->_sequences.addTimer(_vm->getRandomNumber(10, 15), 47);
+		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 47);
 	}
 
 	if (_game._trigger == 47)
@@ -1870,7 +1871,7 @@ static void room_402_parser() {
 		_game._player._visible = true;
 		_scene->_sequences.addTimer(20, 167);
 	} else if (_game._trigger == 167) {
-		_vm->_dialogs->showItem(OBJ_REPAIR_LIST, 40240);
+		object_examine(OBJ_REPAIR_LIST, 40240, 0);
 		_game._player._stepEnabled = true;
 	} else if (_game._screenObjects._inputMode == kInputConversation)
 		handleDialogs();
@@ -1883,7 +1884,7 @@ static void room_402_parser() {
 		case 0:
 		{
 			_game._player._stepEnabled = false;
-			int random = _vm->getRandomNumber(1, 3);
+			int random = g_engine->getRandomNumber(1, 3);
 			if (local._helgaTalkMode == 0)
 				random = 1;
 
@@ -2113,66 +2114,66 @@ static void room_402_parser() {
 			break;
 		}
 	} else if (player_said_2(look, dance_floor))
-		_vm->_dialogs->show(40210);
+		text_show(40210);
 	else if (player_said_2(look, teleporter)) {
 		if (_globals[kSomeoneHasExploded])
-			_vm->_dialogs->show(40212);
+			text_show(40212);
 		else
-			_vm->_dialogs->show(40211);
+			text_show(40211);
 	} else if (player_said_2(look, bar))
-		_vm->_dialogs->show(40213);
+		text_show(40213);
 	else if (player_said_2(look, bartender))
-		_vm->_dialogs->show(40214);
+		text_show(40214);
 	else if (player_said_2(look, woman_in_alcove))
-		_vm->_dialogs->show(40215);
+		text_show(40215);
 	else if (player_said_2(look, woman_on_balcony))
-		_vm->_dialogs->show(40216);
+		text_show(40216);
 	else if (player_said_2(look, woman_in_chair))
-		_vm->_dialogs->show(40217);
+		text_show(40217);
 	else if (player_said_2(look, repair_woman))
-		_vm->_dialogs->show(40218);
+		text_show(40218);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(40219);
+		text_show(40219);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(40220);
+		text_show(40220);
 	else if (player_said_2(look, women))
-		_vm->_dialogs->show(40221);
+		text_show(40221);
 	else if (player_said_2(push, repair_woman) || player_said_2(pull, repair_woman))
-		_vm->_dialogs->show(40222);
+		text_show(40222);
 	else if (player_said_2(talkto, women))
-		_vm->_dialogs->show(40223);
+		text_show(40223);
 	else if (player_said_2(talkto, woman_on_balcony))
-		_vm->_dialogs->show(40224);
+		text_show(40224);
 	else if (player_said_2(look, railing))
-		_vm->_dialogs->show(40225);
+		text_show(40225);
 	else if (player_said_2(look, table))
-		_vm->_dialogs->show(40226);
+		text_show(40226);
 	else if (player_said_2(take, table))
-		_vm->_dialogs->show(40227);
+		text_show(40227);
 	else if (player_said_2(look, sign))
-		_vm->_dialogs->show(40228);
+		text_show(40228);
 	else if (player_said_2(take, sign))
-		_vm->_dialogs->show(40229);
+		text_show(40229);
 	else if (player_said_2(look, bar_stool))
-		_vm->_dialogs->show(40230);
+		text_show(40230);
 	else if (player_said_2(take, bar_stool))
-		_vm->_dialogs->show(40231);
+		text_show(40231);
 	else if (player_said_2(look, cactus))
-		_vm->_dialogs->show(40232);
+		text_show(40232);
 	else if (player_said_2(take, cactus))
-		_vm->_dialogs->show(40233);
+		text_show(40233);
 	else if (player_said_2(look, disco_ball))
-		_vm->_dialogs->show(40234);
+		text_show(40234);
 	else if (player_said_2(look, upper_dance_floor))
-		_vm->_dialogs->show(40235);
+		text_show(40235);
 	else if (player_said_2(look, tree))
-		_vm->_dialogs->show(40236);
+		text_show(40236);
 	else if (player_said_2(look, plant))
-		_vm->_dialogs->show(40237);
+		text_show(40237);
 	else if (player_said_2(take, plant))
-		_vm->_dialogs->show(40238);
+		text_show(40238);
 	else if (player_said_2(look, repair_list) && _game._objects.isInRoom(OBJ_REPAIR_LIST))
-		_vm->_dialogs->show(40239);
+		text_show(40239);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index 8b9962628ce..3c7060d685f 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -76,7 +76,7 @@ static void room_405_daemon() {
 
 	if (_game._trigger == 81) {
 		_game._player._stepEnabled = true;
-		_vm->_dialogs->show(40525);
+		text_show(40525);
 	}
 
 	if (_game._trigger == 70) {
@@ -84,7 +84,7 @@ static void room_405_daemon() {
 		_game._player._visible = true;
 		_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-		_vm->_sound->command(19);
+		g_engine->_soundManager->command(19, 0);
 	}
 
 	if (_game._trigger == 71) {
@@ -103,7 +103,7 @@ static void room_405_daemon() {
 		_game._player._stepEnabled = true;
 		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2],
 			false, 1);
-		_vm->_sound->command(19);
+		g_engine->_soundManager->command(19, 0);
 	}
 }
 
@@ -157,36 +157,36 @@ static void room_405_parser() {
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[3], _game._player._playerPos);
 		_scene->_sequences.setScale(_globals._sequenceIndexes[3], 87);
 	} else if (player_said_2(look, cannon_balls))
-		_vm->_dialogs->show(40510);
+		text_show(40510);
 	else if (player_said_2(take, cannon_balls))
-		_vm->_dialogs->show(40511);
+		text_show(40511);
 	else if (player_said_2(look, water_fountain))
-		_vm->_dialogs->show(40512);
+		text_show(40512);
 	else if (player_said_2(look, backboard) || player_said_2(look, hoop))
-		_vm->_dialogs->show(40513);
+		text_show(40513);
 	else if (player_said_2(look, light))
-		_vm->_dialogs->show(40514);
+		text_show(40514);
 	else if (player_said_2(look, card_slot))
-		_vm->_dialogs->show(40515);
+		text_show(40515);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(40516);
+		text_show(40516);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(40517);
+		text_show(40517);
 	else if (player_said_2(look, monitor))
-		_vm->_dialogs->show(40518);
+		text_show(40518);
 	else if (player_said_2(look, corridor) || _action._lookFlag)
-		_vm->_dialogs->show(40519);
+		text_show(40519);
 	else if (player_said_2(look, wide_door)) {
 		if (_globals[kArmoryDoorOpen])
-			_vm->_dialogs->show(40521);
+			text_show(40521);
 		else
-			_vm->_dialogs->show(40520);
+			text_show(40520);
 	} else if (player_said_2(look, door))
-		_vm->_dialogs->show(40522);
+		text_show(40522);
 	else if (player_said_2(look, coach_lamp))
-		_vm->_dialogs->show(40523);
+		text_show(40523);
 	else if (player_said_2(look, support))
-		_vm->_dialogs->show(40524);
+		text_show(40524);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index df471253278..27c132c2889 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -76,7 +76,7 @@ static void room_406_init() {
 		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 3, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
-		_vm->_sound->command(19);
+		g_engine->_soundManager->command(19, 0);
 	}
 
 	_game.loadQuoteSet(0x24F, 0);
@@ -94,7 +94,7 @@ static void room_406_daemon() {
 		_scene->_nextSceneId = 411;
 
 	if (_game._trigger == 100) {
-		_vm->_dialogs->show(40622);
+		text_show(40622);
 		local._hitStorageDoor = true;
 	}
 
@@ -106,7 +106,7 @@ static void room_406_daemon() {
 
 	if (_game._trigger == 111) {
 		_game._player._stepEnabled = true;
-		_vm->_dialogs->show(40613);
+		text_show(40613);
 	}
 
 	if (_game._trigger == 70) {
@@ -114,7 +114,7 @@ static void room_406_daemon() {
 		_game._player._visible = true;
 		_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 4, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-		_vm->_sound->command(19);
+		g_engine->_soundManager->command(19, 0);
 	}
 
 	if (_game._trigger == 71) {
@@ -130,7 +130,7 @@ static void room_406_daemon() {
 		_game._player._stepEnabled = true;
 		_game._player._priorTimer = _scene->_frameStartTime + _game._player._ticksAmount;
 		_game._player._visible = true;
-		_vm->_sound->command(19);
+		g_engine->_soundManager->command(19, 0);
 	}
 }
 
@@ -155,7 +155,7 @@ static void room_406_parser() {
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 3, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
-		_vm->_sound->command(19);
+		g_engine->_soundManager->command(19, 0);
 	} else if (player_said_2(walk_through, door) && _globals[kStorageDoorOpen] && (_game._player._targetPos.x < 100))
 		_scene->_nextSceneId = 410;
 	else if (player_said_2(walk_through, door) && !_globals[kStorageDoorOpen] && (_game._player._targetPos.x < 100)) {
@@ -194,42 +194,42 @@ static void room_406_parser() {
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], _game._player._playerPos);
 		_scene->_sequences.setScale(_globals._sequenceIndexes[2], 87);
 	} else if (player_said_2(look, trash))
-		_vm->_dialogs->show(40610);
+		text_show(40610);
 	else if (player_said_2(take, trash))
-		_vm->_dialogs->show(40611);
+		text_show(40611);
 	else if (player_said_2(look, card_slot))
-		_vm->_dialogs->show(40612);
+		text_show(40612);
 	else if (player_said_2(look, fire_extinguisher))
-		_vm->_dialogs->show(40614);
+		text_show(40614);
 	else if (player_said_2(take, fire_extinguisher))
-		_vm->_dialogs->show(40615);
+		text_show(40615);
 	else if (player_said_2(look, corridor_to_east))
-		_vm->_dialogs->show(40616);
+		text_show(40616);
 	else if (player_said_2(look, corridor_to_west))
-		_vm->_dialogs->show(40617);
+		text_show(40617);
 	else if (player_said_2(look, corridor) || _action._lookFlag)
-		_vm->_dialogs->show(40618);
+		text_show(40618);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(40619);
+		text_show(40619);
 	else if (player_said_2(look, door)) {
 		if (_globals[kStorageDoorOpen])
-			_vm->_dialogs->show(40621);
+			text_show(40621);
 		else
-			_vm->_dialogs->show(40620);
+			text_show(40620);
 	} else if (player_said_2(look, monitor))
-		_vm->_dialogs->show(40623);
+		text_show(40623);
 	else if (player_said_2(look, signpost))
-		_vm->_dialogs->show(40624);
+		text_show(40624);
 	else if (player_said_2(take, signpost))
-		_vm->_dialogs->show(40625);
+		text_show(40625);
 	else if (player_said_2(look, boulder))
-		_vm->_dialogs->show(40626);
+		text_show(40626);
 	else if (player_said_2(take, boulder))
-		_vm->_dialogs->show(40627);
+		text_show(40627);
 	else if (player_said_2(look, sign))
-		_vm->_dialogs->show(40628);
+		text_show(40628);
 	else if (player_said_2(take, sign))
-		_vm->_dialogs->show(40629);
+		text_show(40629);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room407.cpp b/engines/mads/nebular/rooms/room407.cpp
index 2b19fe4c3b0..b6f41613ca8 100644
--- a/engines/mads/nebular/rooms/room407.cpp
+++ b/engines/mads/nebular/rooms/room407.cpp
@@ -102,20 +102,20 @@ static void room_407_parser() {
 			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
-			_vm->_sound->command(21);
+			g_engine->_soundManager->command(21, 0);
 			_scene->loadAnimation(formAnimName('s', 1), 70);
 			_globals[kHasBeenScanned] = true;
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, _game.getQuote(592));
-			_vm->_sound->command(22);
+			g_engine->_soundManager->command(22, 0);
 		}
 
 		if (_globals[kSexOfRex] == REX_FEMALE) {
 			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
-			_vm->_sound->command(21);
+			g_engine->_soundManager->command(21, 0);
 			_scene->loadAnimation(formAnimName('s', 2), 80);
-			_vm->_sound->command(23);
+			g_engine->_soundManager->command(23, 0);
 			_globals[kHasBeenScanned] = true;
 		}
 	}
@@ -126,17 +126,17 @@ static void room_407_parser() {
 		_scene->_nextSceneId = 318;
 	else if (player_said_2(look, scanner)) {
 		if (_globals[kHasBeenScanned])
-			_vm->_dialogs->show(40711);
+			text_show(40711);
 		else
-			_vm->_dialogs->show(40710);
+			text_show(40710);
 	} else if (player_said_2(look, door))
-		_vm->_dialogs->show(40712);
+		text_show(40712);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(40713);
+		text_show(40713);
 	else if (player_said_2(look, corridor_to_north))
-		_vm->_dialogs->show(40714);
+		text_show(40714);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(40715);
+		text_show(40715);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index cb147150a01..5a92fa2b9d4 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -58,11 +58,11 @@ static void room_408_pre_parser() {
 static void room_408_parser() {
 	if (player_said_2(walk_into, corridor_to_south)) {
 		_scene->_nextSceneId = 405;
-		_vm->_sound->command(58);
+		g_engine->_soundManager->command(58, 0);
 	} else if (player_said_2(take, target_module) && (_game._objects.isInRoom(OBJ_TARGET_MODULE) || _game._trigger)) {
 		switch (_game._trigger) {
 		case 0:
-			_vm->_sound->command(57);
+			g_engine->_soundManager->command(57, 0);
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
 			_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], true, 7, 2, 0, 0);
@@ -75,7 +75,7 @@ static void room_408_parser() {
 		case 1:
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_game._objects.addToInventory(OBJ_TARGET_MODULE);
-			_vm->_dialogs->showItem(OBJ_TARGET_MODULE, 40847);
+			object_examine(OBJ_TARGET_MODULE, 40847, 0);
 			break;
 
 		case 2:
@@ -92,84 +92,84 @@ static void room_408_parser() {
 			break;
 		}
 	} else if (player_said_2(look, armored_vehicle))
-		_vm->_dialogs->show(40810);
+		text_show(40810);
 	else if (player_said_2(take, armored_vehicle) || player_said_2(take, anvil) || player_said_2(take, two_ton_weight))
-		_vm->_dialogs->show(40811);
+		text_show(40811);
 	else if (player_said_2(look, missile))
-		_vm->_dialogs->show(40812);
+		text_show(40812);
 	else if (player_said_2(take, missile))
-		_vm->_dialogs->show(40813);
+		text_show(40813);
 	else if (player_said_2(look, grenade))
-		_vm->_dialogs->show(40814);
+		text_show(40814);
 	else if (player_said_2(take, grenade))
-		_vm->_dialogs->show(40815);
+		text_show(40815);
 	else if (player_said_2(take, pin) || player_said_2(pull, pin))
-		_vm->_dialogs->show(40816);
+		text_show(40816);
 	else if (player_said_2(look, blimp))
-		_vm->_dialogs->show(40817);
+		text_show(40817);
 	else if (player_said_2(take, blimp))
-		_vm->_dialogs->show(40818);
+		text_show(40818);
 	else if (player_said_2(look, ammunition))
-		_vm->_dialogs->show(40819);
+		text_show(40819);
 	else if (player_said_2(take, ammunition))
-		_vm->_dialogs->show(40820);
+		text_show(40820);
 	else if (player_said_2(look, catapult))
-		_vm->_dialogs->show(40821);
+		text_show(40821);
 	else if (player_said_2(take, catapult))
-		_vm->_dialogs->show(40822);
+		text_show(40822);
 	else if (player_said_2(look, chest)) {
 		if (_game._objects.isInRoom(OBJ_TARGET_MODULE))
-			_vm->_dialogs->show(40823);
+			text_show(40823);
 		else
-			_vm->_dialogs->show(40824);
+			text_show(40824);
 	} else if (player_said_2(take, chest))
-		_vm->_dialogs->show(40825);
+		text_show(40825);
 	else if (player_said_2(look, suit_of_armor))
-		_vm->_dialogs->show(40826);
+		text_show(40826);
 	else if (player_said_2(take, suit_of_armor))
-		_vm->_dialogs->show(40827);
+		text_show(40827);
 	else if (player_said_2(look, escape_hatch))
-		_vm->_dialogs->show(40828);
+		text_show(40828);
 	else if (player_said_2(open, escape_hatch) || player_said_2(pull, escape_hatch))
-		_vm->_dialogs->show(40829);
+		text_show(40829);
 	else if (player_said_2(look, barrels))
-		_vm->_dialogs->show(40830);
+		text_show(40830);
 	else if (player_said_2(take, barrels))
-		_vm->_dialogs->show(40831);
+		text_show(40831);
 	else if (player_said_2(look, inflatable_raft))
-		_vm->_dialogs->show(40832);
+		text_show(40832);
 	else if (player_said_2(take, inflatable_raft))
-		_vm->_dialogs->show(40833);
+		text_show(40833);
 	else if (player_said_2(look, tomato))
-		_vm->_dialogs->show(40834);
+		text_show(40834);
 	else if (player_said_2(take, tomato))
-		_vm->_dialogs->show(40835);
+		text_show(40835);
 	else if (player_said_2(look, anvil))
-		_vm->_dialogs->show(40836);
+		text_show(40836);
 	else if (player_said_2(look, two_ton_weight))
-		_vm->_dialogs->show(40837);
+		text_show(40837);
 	else if (player_said_2(look, powder_container))
-		_vm->_dialogs->show(40838);
+		text_show(40838);
 	else if (player_said_2(look, powder_puff))
-		_vm->_dialogs->show(40839);
+		text_show(40839);
 	else if (player_said_2(take, powder_puff))
-		_vm->_dialogs->show(40840);
+		text_show(40840);
 	else if (player_said_2(look, carton))
-		_vm->_dialogs->show(40841);
+		text_show(40841);
 	else if (player_said_2(take, carton))
-		_vm->_dialogs->show(40842);
+		text_show(40842);
 	else if (player_said_2(open, carton))
-		_vm->_dialogs->show(40843);
+		text_show(40843);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(40844);
+		text_show(40844);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(40845);
+		text_show(40845);
 	else if (player_said_2(look, target_module) && _game._objects.isInRoom(OBJ_TARGET_MODULE))
-		_vm->_dialogs->show(40846);
+		text_show(40846);
 	else if (player_said_2(look, loading_ramp))
-		_vm->_dialogs->show(40848);
+		text_show(40848);
 	else if (player_said_2(open, chest))
-		_vm->_dialogs->show(40849);
+		text_show(40849);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room409.cpp b/engines/mads/nebular/rooms/room409.cpp
index 02ad474197c..e14b8fc3a71 100644
--- a/engines/mads/nebular/rooms/room409.cpp
+++ b/engines/mads/nebular/rooms/room409.cpp
@@ -49,26 +49,26 @@ static void room_409_parser() {
 	}
 
 	if (player_said_2(look, viewport))
-		_vm->_dialogs->show(40910);
+		text_show(40910);
 	else if (player_said_2(peer_through, viewport))
-		_vm->_dialogs->show(40910);
+		text_show(40910);
 	else if (player_said_2(look, keypad))
-		_vm->_dialogs->show(40911);
+		text_show(40911);
 	else if (player_said_2(inspect, keypad))
-		_vm->_dialogs->show(40911);
+		text_show(40911);
 	else if (player_said_2(look, display))
-		_vm->_dialogs->show(40912);
+		text_show(40912);
 	else if (player_said_2(look, 1_key) || player_said_2(look, 2_key)
 		|| player_said_2(look, 3_key) || player_said_2(look, 4_key)
 		|| player_said_2(look, 5_key) || player_said_2(look, 6_key)
 		|| player_said_2(look, 7_key) || player_said_2(look, 8_key)
 		|| player_said_2(look, 9_key) || player_said_2(look, 0_key)
 		|| player_said_2(look, smile_key) || player_said_2(look, frown_key))
-		_vm->_dialogs->show(40913);
+		text_show(40913);
 	else if (player_said_2(look, device))
-		_vm->_dialogs->show(40914);
+		text_show(40914);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(40914);
+		text_show(40914);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index 7680fd8992e..a67dd86d61d 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -53,28 +53,28 @@ static void room_410_init() {
 
 static void room_410_daemon() {
 	if (_scene->_animation[0]->getCurrentFrame() == 1) {
-		if (_vm->getRandomNumber(1, 30) == 1)
+		if (g_engine->getRandomNumber(1, 30) == 1)
 			_scene->_animation[0]->setCurrentFrame(2);
 		else
 			_scene->_animation[0]->setCurrentFrame(0);
 	}
 
 	if (_scene->_animation[0]->getCurrentFrame() == 9) {
-		if (_vm->getRandomNumber(1, 30) == 1)
+		if (g_engine->getRandomNumber(1, 30) == 1)
 			_scene->_animation[0]->setCurrentFrame(10);
 		else
 			_scene->_animation[0]->setCurrentFrame(8);
 	}
 
 	if (_scene->_animation[0]->getCurrentFrame() == 5) {
-		if (_vm->getRandomNumber(1, 30) == 1)
+		if (g_engine->getRandomNumber(1, 30) == 1)
 			_scene->_animation[0]->setCurrentFrame(6);
 		else
 			_scene->_animation[0]->setCurrentFrame(4);
 	}
 
 	if (_scene->_animation[0]->getCurrentFrame() == 3) {
-		if (_vm->getRandomNumber(1, 2) == 1)
+		if (g_engine->getRandomNumber(1, 2) == 1)
 			_scene->_animation[0]->setCurrentFrame(4);
 		else // == 2
 			_scene->_animation[0]->setCurrentFrame(8);
@@ -101,7 +101,7 @@ static void room_410_parser() {
 	else if (player_said_2(take, charge_cases) && (_game._objects.isInRoom(OBJ_CHARGE_CASES) || _game._trigger)) {
 		switch (_game._trigger) {
 		case 0:
-			_vm->_sound->command(57);
+			g_engine->_soundManager->command(57, 0);
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
 			_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 7, 2, 0, 0);
@@ -115,7 +115,7 @@ static void room_410_parser() {
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 			_scene->_hotspots.activate(words_charge_cases, false);
 			_game._objects.addToInventory(OBJ_CHARGE_CASES);
-			_vm->_dialogs->showItem(OBJ_CHARGE_CASES, 41032);
+			object_examine(OBJ_CHARGE_CASES, 41032, 0);
 			break;
 
 		case 2:
@@ -132,54 +132,54 @@ static void room_410_parser() {
 			break;
 		}
 	} else if (player_said_2(look, barrel))
-		_vm->_dialogs->show(41010);
+		text_show(41010);
 	else if (player_said_2(take, barrel))
-		_vm->_dialogs->show(41011);
+		text_show(41011);
 	else if (player_said_2(open, barrel))
-		_vm->_dialogs->show(41012);
+		text_show(41012);
 	else if (player_said_2(look, rug))
-		_vm->_dialogs->show(41013);
+		text_show(41013);
 	else if (player_said_2(take, rug))
-		_vm->_dialogs->show(41014);
+		text_show(41014);
 	else if (player_said_2(look, carton) || player_said_2(open, carton)) {
 		if (_game._objects.isInRoom(OBJ_CHARGE_CASES))
-			_vm->_dialogs->show(41015);
+			text_show(41015);
 		else
-			_vm->_dialogs->show(41016);
+			text_show(41016);
 	} else if (player_said_2(look, flour))
-		_vm->_dialogs->show(41017);
+		text_show(41017);
 	else if (player_said_2(take, flour))
-		_vm->_dialogs->show(41018);
+		text_show(41018);
 	else if (player_said_2(look, sacks))
-		_vm->_dialogs->show(41019);
+		text_show(41019);
 	else if (player_said_2(look, sack))
-		_vm->_dialogs->show(41019);
+		text_show(41019);
 	else if (player_said_2(open, sacks))
-		_vm->_dialogs->show(41020);
+		text_show(41020);
 	else if (player_said_2(open, sack))
-		_vm->_dialogs->show(41020);
+		text_show(41020);
 	else if (player_said_2(look, bucket_of_tar))
-		_vm->_dialogs->show(41021);
+		text_show(41021);
 	else if (player_said_2(take, bucket_of_tar))
-		_vm->_dialogs->show(41022);
+		text_show(41022);
 	else if (player_said_2(look, can))
-		_vm->_dialogs->show(41023);
+		text_show(41023);
 	else if (player_said_2(take, can))
-		_vm->_dialogs->show(41024);
+		text_show(41024);
 	else if (player_said_2(look, charge_cases) && _game._objects.isInRoom(OBJ_CHARGE_CASES))
-		_vm->_dialogs->show(41025);
+		text_show(41025);
 	else if (player_said_2(look, fence))
-		_vm->_dialogs->show(41027);
+		text_show(41027);
 	else if (player_said_2(look, shelves))
-		_vm->_dialogs->show(41028);
+		text_show(41028);
 	else if (player_said_2(look, rat))
-		_vm->_dialogs->show(41029);
+		text_show(41029);
 	else if (player_said_2(take, rat))
-		_vm->_dialogs->show(41030);
+		text_show(41030);
 	else if (player_said_2(throw, rat))
-		_vm->_dialogs->show(41031);
+		text_show(41031);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(41033);
+		text_show(41033);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index d9fa724964f..773a1d39679 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -341,32 +341,32 @@ static void room_411_init() {
 	} else if (!_game._objects[OBJ_CHARGE_CASES].getQuality(3)) {
 		switch (_globals[kNextIngredient]) {
 		case 1:
-			_vm->_sound->command(53);
+			g_engine->_soundManager->command(53, 0);
 			break;
 
 		case 2:
-			_vm->_sound->command(53);
-			_vm->_sound->command(54);
+			g_engine->_soundManager->command(53, 0);
+			g_engine->_soundManager->command(54, 0);
 			_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 15, 0, 0, 0);
 			break;
 
 		case 3:
-			_vm->_sound->command(53);
-			_vm->_sound->command(54);
-			_vm->_sound->command(55);
+			g_engine->_soundManager->command(53, 0);
+			g_engine->_soundManager->command(54, 0);
+			g_engine->_soundManager->command(55, 0);
 			_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 0, 0);
 			break;
 
 		case 4:
-			_vm->_sound->command(53);
-			_vm->_sound->command(54);
-			_vm->_sound->command(55);
-			_vm->_sound->command(56);
+			g_engine->_soundManager->command(53, 0);
+			g_engine->_soundManager->command(54, 0);
+			g_engine->_soundManager->command(55, 0);
+			g_engine->_soundManager->command(56, 0);
 			_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 0, 0);
 			break;
 
 		default:
-			_vm->_sound->command(10);
+			g_engine->_soundManager->command(10, 0);
 			break;
 		}
 	}
@@ -443,19 +443,19 @@ static void room_411_daemon() {
 					_game._objects.removeFromInventory(local._newIngredient, NOWHERE);
 					switch (_globals[kNextIngredient]) {
 					case 1:
-						_vm->_sound->command(53);
+						g_engine->_soundManager->command(53, 0);
 						break;
 
 					case 2:
-						_vm->_sound->command(54);
+						g_engine->_soundManager->command(54, 0);
 						break;
 
 					case 3:
-						_vm->_sound->command(55);
+						g_engine->_soundManager->command(55, 0);
 						break;
 
 					case 4:
-						_vm->_sound->command(56);
+						g_engine->_soundManager->command(56, 0);
 						break;
 
 					default:
@@ -497,7 +497,7 @@ static void room_411_daemon() {
 	}
 
 	if (_scene->_animation[0]->getCurrentFrame() == 86)
-		_vm->_sound->command(59);
+		g_engine->_soundManager->command(59, 0);
 }
 
 static void room_411_pre_parser() {
@@ -528,7 +528,7 @@ static void room_411_parser() {
 
 	if (player_said_2(walk_into, corridor_to_south)) {
 		_scene->_nextSceneId = 406;
-		_vm->_sound->command(10);
+		g_engine->_soundManager->command(10, 0);
 		_action._inProgress = false;
 		return;
 	}
@@ -538,8 +538,8 @@ static void room_411_parser() {
 		&& _game._objects.isInInventory(OBJ_CHARGE_CASES)) {
 		switch (_game._trigger) {
 		case 0:
-			_vm->_sound->command(10);
-			_vm->_sound->command(57);
+			g_engine->_soundManager->command(10, 0);
+			g_engine->_soundManager->command(57, 0);
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
 			_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 8, 1, 0, 0);
@@ -577,7 +577,7 @@ static void room_411_parser() {
 			_game._player._visible = true;
 			_game._player._stepEnabled = true;
 			_game._objects[OBJ_CHARGE_CASES].setQuality(3, 1);
-			_vm->_dialogs->showItem(OBJ_CHARGE_CASES, 41142);
+			object_examine(OBJ_CHARGE_CASES, 41142, 0);
 			break;
 
 		default:
@@ -586,7 +586,7 @@ static void room_411_parser() {
 		_action._inProgress = false;
 		return;
 	} else if (!_game._objects.isInInventory(OBJ_CHARGE_CASES) && player_said_2(take, explosives)) {
-		_vm->_dialogs->show(41143);
+		text_show(41143);
 		_action._inProgress = false;
 		return;
 	}
@@ -594,7 +594,7 @@ static void room_411_parser() {
 	if (player_said_2(take, petrox) && (_game._objects.isInRoom(OBJ_PETROX) || _game._trigger)) {
 		switch (_game._trigger) {
 		case 0:
-			_vm->_sound->command(57);
+			g_engine->_soundManager->command(57, 0);
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
 			_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], false, 7, 2, 0, 0);
@@ -607,7 +607,7 @@ static void room_411_parser() {
 		case 1:
 			_scene->_sequences.remove(_globals._sequenceIndexes[5]);
 			_game._objects.addToInventory(OBJ_PETROX);
-			_vm->_dialogs->showItem(OBJ_PETROX, 41120);
+			object_examine(OBJ_PETROX, 41120, 0);
 			break;
 
 		case 2:
@@ -631,7 +631,7 @@ static void room_411_parser() {
 	if (player_said_2(take, lecithin) && (_game._objects.isInRoom(OBJ_LECITHIN) || _game._trigger)) {
 		switch (_game._trigger) {
 		case 0:
-			_vm->_sound->command(57);
+			g_engine->_soundManager->command(57, 0);
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
 			_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], false, 7, 2, 0, 0);
@@ -644,7 +644,7 @@ static void room_411_parser() {
 		case 1:
 			_scene->_sequences.remove(_globals._sequenceIndexes[6]);
 			_game._objects.addToInventory(OBJ_LECITHIN);
-			_vm->_dialogs->showItem(OBJ_LECITHIN, 41124);
+			object_examine(OBJ_LECITHIN, 41124, 0);
 			break;
 
 		case 2:
@@ -665,7 +665,7 @@ static void room_411_parser() {
 	}
 
 	if (player_said_2(take, formaldehyde) && _game._objects.isInRoom(OBJ_FORMALDEHYDE) && (_game._trigger == 0)) {
-		_vm->_sound->command(57);
+		g_engine->_soundManager->command(57, 0);
 		_game._player._stepEnabled = false;
 		_game._player._visible = false;
 		_globals._sequenceIndexes[11] = _scene->_sequences.startCycle(_globals._spriteIndexes[11], false, 2);
@@ -686,7 +686,7 @@ static void room_411_parser() {
 	}
 
 	if (_game._trigger == 10)
-		_vm->_dialogs->showItem(OBJ_FORMALDEHYDE, 41124);
+		object_examine(OBJ_FORMALDEHYDE, 41124, 0);
 
 	if (player_said_1(put) && player_said_1(kettle)) {
 		if (player_said_1(petrox) ||
@@ -719,67 +719,67 @@ static void room_411_parser() {
 
 
 	if (player_said_2(look, monitor))
-		_vm->_dialogs->show(41110);
+		text_show(41110);
 	else if (player_said_2(look, air_purifier))
-		_vm->_dialogs->show(41111);
+		text_show(41111);
 	else if (player_said_2(look, lab_equipment))
-		_vm->_dialogs->show(41112);
+		text_show(41112);
 	else if (player_said_2(look, knife_switch))
-		_vm->_dialogs->show(41113);
+		text_show(41113);
 	else if (player_said_2(push, knife_switch) || player_said_2(pull, knife_switch))
-		_vm->_dialogs->show(41114);
+		text_show(41114);
 	else if (player_said_2(look, toxic_waste))
-		_vm->_dialogs->show(41115);
+		text_show(41115);
 	else if (player_said_2(take, toxic_waste))
-		_vm->_dialogs->show(41116);
+		text_show(41116);
 	else if (player_said_2(look, drawing_board))
-		_vm->_dialogs->show(41117);
+		text_show(41117);
 	else if (player_said_2(look, experiment))
-		_vm->_dialogs->show(41118);
+		text_show(41118);
 	else if (player_said_2(look, petrox) && _game._objects.isInRoom(OBJ_PETROX))
-		_vm->_dialogs->show(41119);
+		text_show(41119);
 	else if (player_said_2(look, alcove))
-		_vm->_dialogs->show(41121);
+		text_show(41121);
 	else if ((player_said_2(look, formaldehyde)) && (_game._objects.isInRoom(OBJ_FORMALDEHYDE)))
-		_vm->_dialogs->show(41122);
+		text_show(41122);
 	else if ((player_said_2(look, lecithin)) && (_game._objects.isInRoom(OBJ_LECITHIN)))
-		_vm->_dialogs->show(41123);
+		text_show(41123);
 	else if (player_said_2(look, kettle)) {
 		if (_globals[kNextIngredient] > 0 && !_game._objects[OBJ_CHARGE_CASES].getQuality(3)) {
-			_vm->_dialogs->show(41126);
+			text_show(41126);
 		} else if (_globals[kNextIngredient] == 0 || _game._objects[OBJ_CHARGE_CASES].getQuality(3)) {
-			_vm->_dialogs->show(41125);
+			text_show(41125);
 		}
 	} else if (player_said_2(look, explosives) && _game._objects[OBJ_CHARGE_CASES].getQuality(3) == 0) {
-		_vm->_dialogs->show(41127);
+		text_show(41127);
 	} else if (player_said_2(take, kettle))
-		_vm->_dialogs->show(41128);
+		text_show(41128);
 	else if (player_said_2(look, control_panel))
-		_vm->_dialogs->show(41129);
+		text_show(41129);
 	else if (player_said_2(look, mishap))
-		_vm->_dialogs->show(41130);
+		text_show(41130);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(41131);
+		text_show(41131);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(41132);
+		text_show(41132);
 	else if (player_said_2(look, air_horn))
-		_vm->_dialogs->show(41133);
+		text_show(41133);
 	else if (player_said_2(look, debris))
-		_vm->_dialogs->show(41134);
+		text_show(41134);
 	else if (player_said_2(look, heater))
-		_vm->_dialogs->show(41135);
+		text_show(41135);
 	else if (player_said_2(look, pipe))
-		_vm->_dialogs->show(41136);
+		text_show(41136);
 	else if (player_said_2(look, sink))
-		_vm->_dialogs->show(41137);
+		text_show(41137);
 	else if (player_said_2(put, sink))
-		_vm->_dialogs->show(41138);
+		text_show(41138);
 	else if (player_said_2(take, experiment))
-		_vm->_dialogs->show(41139);
+		text_show(41139);
 	else if (player_said_2(look, electrodes))
-		_vm->_dialogs->show(41140);
+		text_show(41140);
 	else if (player_said_2(take, electrodes))
-		_vm->_dialogs->show(41141);
+		text_show(41141);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index 1720bcef329..6fcb1fd351f 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -50,7 +50,7 @@ static void room_413_init() {
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		if (_globals[kSexOfRex] == REX_MALE) {
 			_scene->loadAnimation(Resources::formatName(413, 'd', 1, EXT_AA, ""), 78);
-			_vm->_sound->command(30);
+			g_engine->_soundManager->command(30, 0);
 			_game._player._visible = false;
 			_game._player._stepEnabled = false;
 			local._rexDeath = true;
@@ -65,7 +65,7 @@ static void room_413_init() {
 	if ((_globals[kTeleporterCommand]) && (!local._rexDeath)) {
 		switch (_globals[kTeleporterCommand]) {
 		case 1:
-			_vm->_sound->command(30);
+			g_engine->_soundManager->command(30, 0);
 			_game._player._visible = false;
 			_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 7, 1, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 19);
@@ -75,7 +75,7 @@ static void room_413_init() {
 
 		case 2:
 			_game._player._visible = false;
-			_vm->_sound->command(30);
+			g_engine->_soundManager->command(30, 0);
 			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 1, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 20);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 8);
@@ -106,7 +106,7 @@ static void room_413_daemon() {
 		_scene->_animation[0]->setCurrentFrame(37);
 
 	if (_scene->_animation[0] && _scene->_animation[0]->getCurrentFrame() == 21 && local._canMove) {
-		_vm->_sound->command(27);
+		g_engine->_soundManager->command(27, 0);
 		local._canMove = false;
 	}
 
@@ -150,27 +150,27 @@ static void room_413_parser() {
 	} else if (player_said_2(walk_into, corridor_to_south))
 		_scene->_nextSceneId = 405;
 	else if (player_said_2(look, wooden_statue))
-		_vm->_dialogs->show(41310);
+		text_show(41310);
 	else if (player_said_2(take, wooden_statue))
-		_vm->_dialogs->show(41311);
+		text_show(41311);
 	else if (player_said_2(look, conveyor_belt))
-		_vm->_dialogs->show(41312);
+		text_show(41312);
 	else if (player_said_2(put, conveyor_belt))
-		_vm->_dialogs->show(41313);
+		text_show(41313);
 	else if (player_said_2(look, teleporter))
-		_vm->_dialogs->show(41314);
+		text_show(41314);
 	else if (player_said_2(look, display))
-		_vm->_dialogs->show(41315);
+		text_show(41315);
 	else if (player_said_2(look, corridor_to_south))
-		_vm->_dialogs->show(41316);
+		text_show(41316);
 	else if (player_said_2(look, picture))
-		_vm->_dialogs->show(41317);
+		text_show(41317);
 	else if (player_said_2(look, plant))
-		_vm->_dialogs->show(41318);
+		text_show(41318);
 	else if (player_said_2(take, plant))
-		_vm->_dialogs->show(41319);
+		text_show(41319);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(41320);
+		text_show(41320);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 899e1795ad6..3d104ac24de 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -60,7 +60,7 @@ static void handleSlotActions() {
 		local._mainSequenceId = _scene->_sequences.startPingPongCycle(local._mainSpriteId, false, numTicks, 1, 0, 0);
 		_scene->_sequences.setAnimRange(local._mainSequenceId, 1, frameIndex);
 		_scene->_sequences.setMsgLayout(local._mainSequenceId);
-		_vm->_sound->command(10);
+		g_engine->_soundManager->command(10, 0);
 		_scene->_sequences.addSubEntry(local._mainSequenceId, SEQUENCE_TRIGGER_SPRITE, frameIndex, 1);
 		_scene->_sequences.addSubEntry(local._mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
@@ -142,7 +142,7 @@ static void room_501_init() {
 
 static void room_501_daemon() {
 	if (_game._trigger == 90)
-		_vm->_dialogs->show(50127);
+		text_show(50127);
 
 	if (_game._trigger >= 80) {
 		switch (_game._trigger) {
@@ -152,7 +152,7 @@ static void room_501_daemon() {
 			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 12, 6, 0, 0);
 			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
-			_vm->_sound->command(11);
+			g_engine->_soundManager->command(11, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
 			break;
 
@@ -165,7 +165,7 @@ static void room_501_daemon() {
 		case 82:
 			_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
-			_vm->_sound->command(12);
+			g_engine->_soundManager->command(12, 0);
 			local._doorHotspotid = _scene->_dynamicHotspots.add(words_door, words_walk_through, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(_globals._sequenceIndexes[3], Common::Point(282, 110), FACING_NORTH);
 			_scene->_dynamicHotspots.setCursor(local._doorHotspotid, CURSOR_GO_UP);
@@ -271,7 +271,7 @@ static void room_501_parser() {
 			break;
 		}
 	} else if (player_said_3(put, security_card, card_slot))
-		_vm->_dialogs->show(50113);
+		text_show(50113);
 	else if (player_said_3(put, fake_id, card_slot)) {
 		switch (_game._trigger) {
 		case 0:
@@ -284,7 +284,7 @@ static void room_501_parser() {
 		case 4:
 			if (_globals[kSexOfRex] == REX_MALE) {
 				_game._player._visible = false;
-				_vm->_sound->command(13);
+				g_engine->_soundManager->command(13, 0);
 				_scene->loadAnimation(formAnimName('G', 1), 5);
 			} else {
 				local._rexPunched = false;
@@ -330,7 +330,7 @@ static void room_501_parser() {
 			_scene->_dynamicHotspots.remove(local._doorHotspotid);
 			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
-			_vm->_sound->command(11);
+			g_engine->_soundManager->command(11, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 6);
 			break;
 
@@ -341,12 +341,12 @@ static void room_501_parser() {
 
 		case 7:
 		{
-			_vm->_sound->command(12);
+			g_engine->_soundManager->command(12, 0);
 			int syncIdx = _globals._sequenceIndexes[3];
 			_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
-			_vm->_sound->command(12);
+			g_engine->_soundManager->command(12, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 		}
 		break;
@@ -365,37 +365,37 @@ static void room_501_parser() {
 			break;
 		}
 	} else if (_action._lookFlag || player_said_2(look, street))
-		_vm->_dialogs->show(50121);
+		text_show(50121);
 	else if (player_said_2(look, door))
-		_vm->_dialogs->show(50110);
+		text_show(50110);
 	else if (player_said_2(look, card_slot))
-		_vm->_dialogs->show(50112);
+		text_show(50112);
 	else if (player_said_2(look, sign))
-		_vm->_dialogs->show(50114);
+		text_show(50114);
 	else if (player_said_2(take, sign))
-		_vm->_dialogs->show(50115);
+		text_show(50115);
 	else if (player_said_2(look, sidewalk_to_east))
-		_vm->_dialogs->show(50118);
+		text_show(50118);
 	else if (player_said_2(look, sidewalk_to_west) || player_said_2(look, street_to_west)
 		|| player_said_2(walk_down, sidewalk_to_west) || player_said_2(walk_down, street_to_west))
-		_vm->_dialogs->show(50119);
+		text_show(50119);
 	else if (player_said_2(look, building))
-		_vm->_dialogs->show(50120);
+		text_show(50120);
 	else if (player_said_2(open, door))
-		_vm->_dialogs->show(50122);
+		text_show(50122);
 	else if (player_said_2(look, fire_hydrant))
-		_vm->_dialogs->show(50123);
+		text_show(50123);
 	else if (player_said_2(open, fire_hydrant))
-		_vm->_dialogs->show(50124);
+		text_show(50124);
 	else if (player_said_2(look, equipment_overhead))
-		_vm->_dialogs->show(50125);
+		text_show(50125);
 	else if (player_said_2(look, pipes) || player_said_2(look, pipe))
-		_vm->_dialogs->show(50126);
+		text_show(50126);
 	else if (player_said_2(look, car)) {
 		if (!_game._visitedScenes.exists(504))
-			_vm->_dialogs->show(50116);
+			text_show(50116);
 		else
-			_vm->_dialogs->show(50117);
+			text_show(50117);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room502.cpp b/engines/mads/nebular/rooms/room502.cpp
index 66a832c0dfa..802b3d00e61 100644
--- a/engines/mads/nebular/rooms/room502.cpp
+++ b/engines/mads/nebular/rooms/room502.cpp
@@ -42,12 +42,12 @@ static void room_502_init() {
 	teleporter_init();
 
 	// The original uses scene5xx_section_5_music
-	if (!_vm->_musicFlag)
-		_vm->_sound->command(2);
+	if (!config_file.music_flag)
+		g_engine->_soundManager->command(2, 0);
 	else if (_scene->_priorSceneId == 503)
-		_vm->_sound->command(38);
+		g_engine->_soundManager->command(38, 0);
 	else
-		_vm->_sound->command(29);
+		g_engine->_soundManager->command(29, 0);
 }
 
 static void room_502_daemon() {
@@ -61,11 +61,11 @@ static void room_502_parser() {
 	}
 
 	if (player_said_2(look, viewport) || player_said_2(peer_through, viewport))
-		_vm->_dialogs->show(50210);
+		text_show(50210);
 	else if (player_said_2(look, keypad))
-		_vm->_dialogs->show(50211);
+		text_show(50211);
 	else if (player_said_2(look, display))
-		_vm->_dialogs->show(50212);
+		text_show(50212);
 	else if (player_said_2(look, 0_key) || player_said_2(look, 1_key)
 		|| player_said_2(look, 2_key) || player_said_2(look, 3_key)
 		|| player_said_2(look, 4_key) || player_said_2(look, 5_key)
@@ -73,9 +73,9 @@ static void room_502_parser() {
 		|| player_said_2(look, 8_key) || player_said_2(look, 9_key)
 		|| player_said_2(look, smile_key) || player_said_2(look, enter_key)
 		|| player_said_2(look, frown_key))
-		_vm->_dialogs->show(50213);
+		text_show(50213);
 	else if (player_said_2(look, device) || _action._lookFlag)
-		_vm->_dialogs->show(50214);
+		text_show(50214);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index abe20f17d66..725657f569d 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -86,11 +86,11 @@ static void room_503_parser() {
 				break;
 
 			case 1:
-				_vm->_sound->command(9);
+				g_engine->_soundManager->command(9, 0);
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_scene->_dynamicHotspots.remove(local._detonatorHotspotId);
 				_game._objects.addToInventory(OBJ_DETONATORS);
-				_vm->_dialogs->showItem(OBJ_DETONATORS, 50326);
+				object_examine(OBJ_DETONATORS, 50326, 0);
 				break;
 
 			case 2:
@@ -108,44 +108,44 @@ static void room_503_parser() {
 			}
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(50328);
+		text_show(50328);
 	else if (player_said_2(look, monitoring_equipment))
-		_vm->_dialogs->show(50310);
+		text_show(50310);
 	else if (player_said_2(look, photon_rifles))
-		_vm->_dialogs->show(50311);
+		text_show(50311);
 	else if (player_said_2(take, photon_rifles) || player_said_2(take, nuclear_slingshot))
-		_vm->_dialogs->show(50312);
+		text_show(50312);
 	else if (player_said_2(look, display_case))
-		_vm->_dialogs->show(50313);
+		text_show(50313);
 	else if (player_said_2(look, nuclear_slingshot))
-		_vm->_dialogs->show(50314);
+		text_show(50314);
 	else if (player_said_2(look, water_cooler))
-		_vm->_dialogs->show(50315);
+		text_show(50315);
 	else if (player_said_2(look, storage_box))
-		_vm->_dialogs->show(50316);
+		text_show(50316);
 	else if (player_said_2(open, storage_box))
-		_vm->_dialogs->show(50317);
+		text_show(50317);
 	else if (player_said_2(look, warning_label))
-		_vm->_dialogs->show(50318);
+		text_show(50318);
 	else if (player_said_2(look, desk))
-		_vm->_dialogs->show(50319);
+		text_show(50319);
 	else if (player_said_2(look, monitor))
-		_vm->_dialogs->show(50320);
+		text_show(50320);
 	else if (player_said_2(look, file_cabinets))
-		_vm->_dialogs->show(50322);
+		text_show(50322);
 	else if (player_said_2(look, box)) {
 		if (_game._objects.isInRoom(OBJ_DETONATORS))
-			_vm->_dialogs->show(50323);
+			text_show(50323);
 		else
-			_vm->_dialogs->show(50324);
+			text_show(50324);
 	} else if (player_said_2(look, detonators) && (_action._savedFields._mainObjectSource == 4))
-		_vm->_dialogs->show(50325);
+		text_show(50325);
 	else if (player_said_2(look, windows))
-		_vm->_dialogs->show(50327);
+		text_show(50327);
 	else if (player_said_2(open, display_case))
-		_vm->_dialogs->show(50329);
+		text_show(50329);
 	else if (player_said_2(throw, display_case) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId)))
-		_vm->_dialogs->show(50330);
+		text_show(50330);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index 90f4eb3857d..3c944ac4923 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -61,7 +61,7 @@ static void room_504_init() {
 	if ((_scene->_priorSceneId == 505) && (_globals[kHoverCarDestination] != _globals[kHoverCarLocation])) {
 		local._carAnimationMode = 1;
 		_scene->loadAnimation(formAnimName('A', -1));
-		_vm->_sound->command(14);
+		g_engine->_soundManager->command(14, 0);
 		_scene->_sequences.addTimer(1, 70);
 		_game._player._stepEnabled = false;
 	} else {
@@ -119,7 +119,7 @@ static void room_504_daemon() {
 			break;
 
 		case 71:
-			_vm->_sound->command(15);
+			g_engine->_soundManager->command(15, 0);
 			_scene->_nextSceneId = _globals[kHoverCarDestination];
 			break;
 
@@ -142,13 +142,13 @@ static void room_504_pre_parser() {
 
 static void room_504_parser() {
 	if (player_said_2(exit_from, car)) {
-		_vm->_sound->command(15);
+		g_engine->_soundManager->command(15, 0);
 		_scene->_nextSceneId = _globals[kHoverCarLocation];
 	} else if (player_said_2(activate, car_controls)) {
 		switch (_game._trigger) {
 		case 0:
 			_game._player._stepEnabled = false;
-			_vm->_sound->command(39);
+			g_engine->_soundManager->command(39, 0);
 			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
@@ -175,12 +175,12 @@ static void room_504_parser() {
 		case 3:
 			_scene->_sequences.remove(_globals._sequenceIndexes[5]);
 			if (_globals[kSexOfRex] == REX_MALE) {
-				_vm->_sound->command(34);
+				g_engine->_soundManager->command(34, 0);
 				_scene->_sequences.addTimer(60, 4);
 				_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 1);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 14);
 			} else {
-				_vm->_sound->command(40);
+				g_engine->_soundManager->command(40, 0);
 				_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 18, 0, 0, 0);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 14);
 				_scene->_sequences.addTimer(120, 5);
@@ -197,34 +197,34 @@ static void room_504_parser() {
 			_game._player._stepEnabled = true;
 			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
 			_globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, 1);
-			_vm->_dialogs->show(50421);
+			text_show(50421);
 			break;
 
 		default:
 			break;
 		}
 	} else if (_action._lookFlag || player_said_2(look, interior_of_car))
-		_vm->_dialogs->show(50412);
+		text_show(50412);
 	else if (player_said_2(look, glove_compartment))
-		_vm->_dialogs->show(50410);
+		text_show(50410);
 	else if (player_said_2(look, car_controls) || player_said_2(look, dashboard))
-		_vm->_dialogs->show(50411);
+		text_show(50411);
 	else if (player_said_2(look, scent_packet))
-		_vm->_dialogs->show(50413);
+		text_show(50413);
 	else if (player_said_2(look, soda_cans))
-		_vm->_dialogs->show(50414);
+		text_show(50414);
 	else if (player_said_2(look, kitty))
-		_vm->_dialogs->show(50415);
+		text_show(50415);
 	else if (player_said_2(look, windshield) || player_said_2(look_through, windshield))
-		_vm->_dialogs->show(50416);
+		text_show(50416);
 	else if (player_said_2(look, rearview_mirror))
-		_vm->_dialogs->show(50417);
+		text_show(50417);
 	else if (player_said_2(take, rearview_mirror))
-		_vm->_dialogs->show(50418);
+		text_show(50418);
 	else if (player_said_2(look, moldy_sock))
-		_vm->_dialogs->show(50419);
+		text_show(50419);
 	else if (player_said_2(take, moldy_sock))
-		_vm->_dialogs->show(50420);
+		text_show(50420);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room505.cpp b/engines/mads/nebular/rooms/room505.cpp
index 4725dc6a346..0550c6be6c5 100644
--- a/engines/mads/nebular/rooms/room505.cpp
+++ b/engines/mads/nebular/rooms/room505.cpp
@@ -88,7 +88,7 @@ static void room_505_init() {
 	_scene->_animation[0]->setCurrentFrame(86);
 
 	section_5_music();
-	_vm->_sound->command(16);
+	g_engine->_soundManager->command(16, 0);
 }
 
 static void room_505_daemon() {
@@ -118,7 +118,7 @@ static void room_505_daemon() {
 		{
 			int this_button;
 			int old_select;
-			_vm->_sound->command(17);
+			g_engine->_soundManager->command(17, 0);
 			old_select = local._selectedId;
 			if (local._frame == 15) {
 				this_button = 0x38A;
@@ -131,7 +131,7 @@ static void room_505_daemon() {
 			} else {
 				this_button = 0x2DE;
 				if ((_globals[kTimebombStatus] == TIMEBOMB_ACTIVATED) && (local._carLocations[local._selectedId] == 501))
-					_vm->_dialogs->show(431);
+					text_show(431);
 				else if (local._selectedId != local._homeSelectedId) {
 					local._nextButtonId = 0;
 					local._activeCars = true;
@@ -141,7 +141,7 @@ static void room_505_daemon() {
 					_scene->_sequences.remove(_globals._sequenceIndexes[13]);
 					_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 6, 1, 0, 0);
 					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 63);
-					_vm->_sound->command(18);
+					g_engine->_soundManager->command(18, 0);
 				}
 			}
 
@@ -284,9 +284,9 @@ static void room_505_parser() {
 	else if (player_said_2(return_to, inside_of_car))
 		_scene->_nextSceneId = 504;
 	else if (player_said_2(look, view_screen))
-		_vm->_dialogs->show(50510);
+		text_show(50510);
 	else if (player_said_2(look, control_panel))
-		_vm->_dialogs->show(50511);
+		text_show(50511);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index 6e592882ee1..b988c33d727 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -285,29 +285,29 @@ static void room_506_parser() {
 			break;
 		}
 	} else if (_action._lookFlag || player_said_2(look, street))
-		_vm->_dialogs->show(50618);
+		text_show(50618);
 	else if (player_said_2(look, restaurant))
-		_vm->_dialogs->show(50610);
+		text_show(50610);
 	else if (player_said_2(look, motel))
-		_vm->_dialogs->show(50611);
+		text_show(50611);
 	else if (player_said_2(look, cycle_shop))
-		_vm->_dialogs->show(50612);
+		text_show(50612);
 	else if (player_said_2(look, air_bike))
-		_vm->_dialogs->show(50613);
+		text_show(50613);
 	else if (player_said_2(take, air_bike))
-		_vm->_dialogs->show(50614);
+		text_show(50614);
 	else if (player_said_2(look, software_store))
-		_vm->_dialogs->show(50615);
+		text_show(50615);
 	else if (player_said_2(look, laboratory))
-		_vm->_dialogs->show(50616);
+		text_show(50616);
 	else if (player_said_2(look, street_to_west) || player_said_2(walk_down, street_to_west))
-		_vm->_dialogs->show(50617);
+		text_show(50617);
 	else if (player_said_2(look, software_store_sign))
-		_vm->_dialogs->show(50619);
+		text_show(50619);
 	else if (player_said_2(look, car))
-		_vm->_dialogs->show(50620);
+		text_show(50620);
 	else if (player_said_2(look, sky))
-		_vm->_dialogs->show(50621);
+		text_show(50621);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room507.cpp b/engines/mads/nebular/rooms/room507.cpp
index 75a975e190b..4e84d82103b 100644
--- a/engines/mads/nebular/rooms/room507.cpp
+++ b/engines/mads/nebular/rooms/room507.cpp
@@ -76,9 +76,9 @@ static void room_507_parser() {
 			case 1:
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_scene->_dynamicHotspots.remove(local._penlightHotspotId);
-				_vm->_sound->command(27);
+				g_engine->_soundManager->command(27, 0);
 				_game._objects.addToInventory(OBJ_PENLIGHT);
-				_vm->_dialogs->showItem(OBJ_PENLIGHT, 50730);
+				object_examine(OBJ_PENLIGHT, 50730, 0);
 				break;
 
 			case 2:
@@ -92,52 +92,52 @@ static void room_507_parser() {
 			}
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(50722);
+		text_show(50722);
 	else if (player_said_2(look, swirling_light))
-		_vm->_dialogs->show(50710);
+		text_show(50710);
 	else if (player_said_2(take, swirling_light))
-		_vm->_dialogs->show(50711);
+		text_show(50711);
 	else if (player_said_2(look, old_software))
-		_vm->_dialogs->show(50712);
+		text_show(50712);
 	else if (player_said_2(take, old_software))
-		_vm->_dialogs->show(50713);
+		text_show(50713);
 	else if (player_said_2(look, advertisement))
-		_vm->_dialogs->show(50714);
+		text_show(50714);
 	else if (player_said_2(look, advertising_poster))
-		_vm->_dialogs->show(50715);
+		text_show(50715);
 	else if (player_said_2(look, sign)) {
 		if (_scene->_customDest.x < 100)
-			_vm->_dialogs->show(50726);
+			text_show(50726);
 		else
-			_vm->_dialogs->show(50716);
+			text_show(50716);
 	} else if (player_said_2(look, hottest_software))
-		_vm->_dialogs->show(50717);
+		text_show(50717);
 	else if (player_said_2(look, software_shelf))
-		_vm->_dialogs->show(50718);
+		text_show(50718);
 	else if (player_said_2(look, sensor))
-		_vm->_dialogs->show(50719);
+		text_show(50719);
 	else if (player_said_2(look, cash_register))
-		_vm->_dialogs->show(50720);
+		text_show(50720);
 	else if (player_said_2(look, pad_of_paper))
-		_vm->_dialogs->show(50721);
+		text_show(50721);
 	else if (player_said_2(open, cash_register))
-		_vm->_dialogs->show(50723);
+		text_show(50723);
 	else if (player_said_2(look, bargain_vat))
-		_vm->_dialogs->show(50724);
+		text_show(50724);
 	else if (player_said_2(look, window))
-		_vm->_dialogs->show(50725);
+		text_show(50725);
 	else if (player_said_2(walk_behind, counter)) {
 		// WORKAROUND: Empty handling to prevent default "can't do that" dialogs showing
 	} else if (player_said_2(look, counter)) {
 		if (_game._objects.isInRoom(OBJ_PENLIGHT))
-			_vm->_dialogs->show(50728);
+			text_show(50728);
 		else
-			_vm->_dialogs->show(50727);
+			text_show(50727);
 	} else if (player_said_2(look, penlight) && !_game._objects.isInInventory(OBJ_PENLIGHT)) {
 		if (_game._objects.isInRoom(OBJ_PENLIGHT))
-			_vm->_dialogs->show(50729);
+			text_show(50729);
 	} else if (player_said_2(look, emergency_light))
-		_vm->_dialogs->show(50731);
+		text_show(50731);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index df3a075e0fc..8b3dc049899 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -77,9 +77,9 @@ static void room_508_init() {
 			_scene->_hotspots.activate(words_hole, true);
 			_scene->_hotspots.activate(words_laser_beam, true);
 		}
-		_vm->_sound->command(21);
+		g_engine->_soundManager->command(21, 0);
 	}
-	_vm->_sound->command(20);
+	g_engine->_soundManager->command(20, 0);
 
 	if (_scene->_priorSceneId == 515) {
 		_game._player._playerPos = Common::Point(57, 116);
@@ -105,10 +105,10 @@ static void room_508_pre_parser() {
 
 static void handlePedestral() {
 	if (!_globals[kLaserOn])
-		_vm->_dialogs->show(50835);
+		text_show(50835);
 
 	if (_globals[kLaserHoleIsThere])
-		_vm->_dialogs->show(50836);
+		text_show(50836);
 
 	if (_globals[kLaserOn] && !_globals[kLaserHoleIsThere]) {
 		switch (_game._trigger) {
@@ -145,7 +145,7 @@ static void handlePedestral() {
 			break;
 
 		case 4:
-			_vm->_dialogs->show(50834);
+			text_show(50834);
 			_globals[kLaserHoleIsThere] = true;
 			_scene->_nextSceneId = 515;
 			break;
@@ -176,7 +176,7 @@ static void room_508_parser() {
 				break;
 
 			case 3:
-				_vm->_sound->command(19);
+				g_engine->_soundManager->command(19, 0);
 				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 1, 0, 0);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 6);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
@@ -200,7 +200,7 @@ static void room_508_parser() {
 
 			case 6:
 			{
-				_vm->_sound->command(22);
+				g_engine->_soundManager->command(22, 0);
 				_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, -2);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 11);
 				int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
@@ -213,7 +213,7 @@ static void room_508_parser() {
 
 			case 7:
 				_globals[kLaserOn] = true;
-				_vm->_dialogs->show(50833);
+				text_show(50833);
 				_game._player._stepEnabled = true;
 				break;
 
@@ -221,7 +221,7 @@ static void room_508_parser() {
 				break;
 			}
 		} else {
-			_vm->_dialogs->show(50837);
+			text_show(50837);
 		}
 	} else if (player_said_3(reflect, rearview_mirror, laser_beam) || player_said_3(put, rearview_mirror, pedestal) || player_said_3(put, rearview_mirror, laser_beam)) {
 		local._chosenObject = 1;
@@ -230,59 +230,59 @@ static void room_508_parser() {
 		local._chosenObject = 2;
 		handlePedestral();
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(50822);
+		text_show(50822);
 	else if (player_said_2(look, target_area))
-		_vm->_dialogs->show(50810);
+		text_show(50810);
 	else if (player_said_2(look, spinach_patch_doll))
-		_vm->_dialogs->show(50811);
+		text_show(50811);
 	else if (player_said_2(take, spinach_patch_doll))
-		_vm->_dialogs->show(50812);
+		text_show(50812);
 	else if (player_said_2(look, sand_bags))
-		_vm->_dialogs->show(50816);
+		text_show(50816);
 	else if (player_said_2(take, sand_bags))
-		_vm->_dialogs->show(50817);
+		text_show(50817);
 	else if (player_said_2(look, control_station))
-		_vm->_dialogs->show(50818);
+		text_show(50818);
 	else if (player_said_2(look, monitor)) {
 		if (_globals[kLaserOn])
-			_vm->_dialogs->show(50820);
+			text_show(50820);
 		else
-			_vm->_dialogs->show(50819);
+			text_show(50819);
 	} else if (player_said_2(look, laser_cannon)) {
 		if (_globals[kLaserOn])
-			_vm->_dialogs->show(50822);
+			text_show(50822);
 		else
-			_vm->_dialogs->show(50821);
+			text_show(50821);
 	} else if (player_said_2(take, laser_cannon))
-		_vm->_dialogs->show(50823);
+		text_show(50823);
 	else if (player_said_2(look, lever)) {
 		if (_globals[kLaserOn])
-			_vm->_dialogs->show(50825);
+			text_show(50825);
 		else
-			_vm->_dialogs->show(50824);
+			text_show(50824);
 	} else if (player_said_2(push, lever))
-		_vm->_dialogs->show(50826);
+		text_show(50826);
 	else if (player_said_2(look, laser_beam)) {
 		if (_globals[kLaserHoleIsThere])
-			_vm->_dialogs->show(50828);
+			text_show(50828);
 		else
-			_vm->_dialogs->show(50827);
+			text_show(50827);
 	} else if (player_said_2(take, laser_beam))
-		_vm->_dialogs->show(50829);
+		text_show(50829);
 	else if (player_said_2(look, ceiling)) {
 		if (_globals[kLaserHoleIsThere])
-			_vm->_dialogs->show(50831);
+			text_show(50831);
 		else
-			_vm->_dialogs->show(50830);
+			text_show(50830);
 	} else if (player_said_2(look, wall))
-		_vm->_dialogs->show(50832);
+		text_show(50832);
 	else if (player_said_2(look, pedestal)) {
 		if (!_globals[kLaserOn])
-			_vm->_dialogs->show(50813);
+			text_show(50813);
 		else if (!_globals[kLaserHoleIsThere])
-			_vm->_dialogs->show(50814);
+			text_show(50814);
 		else
-			_vm->_dialogs->show(50815);
+			text_show(50815);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index 51a1c415145..b76e9336f73 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -265,18 +265,18 @@ static void room_511_parser() {
 						}
 					}
 				} else
-					_vm->_dialogs->show(51129);
+					text_show(51129);
 			} else
 				return;
 		} else {
-			_vm->_dialogs->show(51130);
+			text_show(51130);
 		}
 	} else if (player_said_3(tie, fishing_line, boat) ||
 		player_said_3(attach, fishing_line, boat)) {
 		if (_globals[kBoatRaised])
-			_vm->_dialogs->show(51131);
+			text_show(51131);
 		else if (_globals[kLineStatus] == 1)
-			_vm->_dialogs->show(51130);
+			text_show(51130);
 		else if (!_globals[kBoatRaised] && local._handingLine) {
 			if (_globals[kLineStatus] != 3) {
 				if (_game._trigger == 0) {
@@ -305,53 +305,53 @@ static void room_511_parser() {
 		}
 	} else if (player_said_2(look, street) || _action._lookFlag) {
 		if (_globals[kLineStatus] == 2)
-			_vm->_dialogs->show(51110);
+			text_show(51110);
 		else {
 			if (_globals[kLineStatus] == 3)
-				_vm->_dialogs->show(51111);
+				text_show(51111);
 			else
-				_vm->_dialogs->show(51112);
+				text_show(51112);
 		}
 	} else if (player_said_2(look, car))
-		_vm->_dialogs->show(51113);
+		text_show(51113);
 	else if (player_said_2(look, sidewalk))
-		_vm->_dialogs->show(51114);
+		text_show(51114);
 	else if (player_said_2(walk_down, sidewalk_to_east) || player_said_2(walk_down, sidewalk_to_west) || player_said_2(walk_down, street_to_east))
-		_vm->_dialogs->show(51115);
+		text_show(51115);
 	else if (player_said_2(look, pleasure_dome))
-		_vm->_dialogs->show(51116);
+		text_show(51116);
 	else if (player_said_2(look, ticket_booth))
-		_vm->_dialogs->show(51117);
+		text_show(51117);
 	else if (player_said_2(look, dome_entrance))
-		_vm->_dialogs->show(51118);
+		text_show(51118);
 	else if (player_said_3(unlock, padlock_key, dome_entrance) || player_said_3(unlock, door_key, dome_entrance))
-		_vm->_dialogs->show(51119);
+		text_show(51119);
 	else if ((player_said_1(put) || player_said_1(throw))
 		&& (player_said_1(timebomb) || player_said_1(bomb) || player_said_1(bombs))
 		&& player_said_1(dome_entrance))
-		_vm->_dialogs->show(51120);
+		text_show(51120);
 	else if (player_said_2(look, restaurant)) {
 		if (_globals[kBoatRaised])
-			_vm->_dialogs->show(51121);
+			text_show(51121);
 		else
-			_vm->_dialogs->show(51128);
+			text_show(51128);
 	} else if (player_said_2(look, porthole))
-		_vm->_dialogs->show(51122);
+		text_show(51122);
 	else if (player_said_2(look, fishing_line) && (_action._mainObjectSource == CAT_HOTSPOT) && (_globals[kLineStatus] == 2))
-		_vm->_dialogs->show(51126);
+		text_show(51126);
 	else if (player_said_2(look, fishing_line) && (_action._mainObjectSource == CAT_HOTSPOT) && (_globals[kLineStatus] == 3))
-		_vm->_dialogs->show(51133);
+		text_show(51133);
 	else if (player_said_2(look, statue))
-		_vm->_dialogs->show(51127);
+		text_show(51127);
 	else if (player_said_2(look, boat))
 		if (_globals[kBoatRaised])
-			_vm->_dialogs->show(51123);
+			text_show(51123);
 		else if (_globals[kLineStatus] != 3)
-			_vm->_dialogs->show(51124);
+			text_show(51124);
 		else
-			_vm->_dialogs->show(51125);
+			text_show(51125);
 	else if (player_said_2(look, fishing_line) && (_globals[kLineStatus] == 3))
-		_vm->_dialogs->show(51125);
+		text_show(51125);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index ce0f01d1609..b53e4cc1eee 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -108,11 +108,11 @@ static void room_512_parser() {
 				break;
 
 			case 1:
-				_vm->_sound->command(9);
+				g_engine->_soundManager->command(9, 0);
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_scene->_dynamicHotspots.remove(local._fishingRodHotspotId);
 				_game._objects.addToInventory(OBJ_FISHING_ROD);
-				_vm->_dialogs->showItem(OBJ_FISHING_ROD, 51217);
+				object_examine(OBJ_FISHING_ROD, 51217, 0);
 				break;
 
 			case 2:
@@ -129,7 +129,7 @@ static void room_512_parser() {
 		if (!_globals[kRegisterOpen]) {
 			switch (_game._trigger) {
 			case 0:
-				_vm->_dialogs->show(51236);
+				text_show(51236);
 				_game._player._stepEnabled = false;
 				_game._player._facing = FACING_NORTH;
 				_scene->_sequences.addTimer(15, 1);
@@ -160,7 +160,7 @@ static void room_512_parser() {
 					_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 3);
 					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 				}
-				_vm->_sound->command(23);
+				g_engine->_soundManager->command(23, 0);
 				break;
 
 			case 4:
@@ -185,7 +185,7 @@ static void room_512_parser() {
 				break;
 			}
 		} else
-			_vm->_dialogs->show(51239);
+			text_show(51239);
 	} else if (player_said_2(close, cash_register) && _globals[kRegisterOpen]) {
 		switch (_game._trigger) {
 		case 0:
@@ -252,9 +252,9 @@ static void room_512_parser() {
 					_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
 					_scene->_hotspots.activate(words_padlock_key, false);
 				}
-				_vm->_sound->command(9);
+				g_engine->_soundManager->command(9, 0);
 				_game._objects.addToInventory(OBJ_PADLOCK_KEY);
-				_vm->_dialogs->showItem(OBJ_PADLOCK_KEY, 51226);
+				object_examine(OBJ_PADLOCK_KEY, 51226, 0);
 				break;
 
 			case 2:
@@ -268,58 +268,58 @@ static void room_512_parser() {
 			}
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(51225);
+		text_show(51225);
 	else if (player_said_2(look, padlock_key) && _game._objects.isInRoom(OBJ_PADLOCK_KEY))
-		_vm->_dialogs->show(51215);
+		text_show(51215);
 	else if (player_said_2(look, fishing_rod) && (!_scene->_animation[0] ||
 		_scene->_animation[0]->getCurrentFrame() == 4))
-		_vm->_dialogs->show(51216);
+		text_show(51216);
 	else if (player_said_2(look, ships_wheel))
-		_vm->_dialogs->show(51218);
+		text_show(51218);
 	else if (player_said_2(take, ships_wheel))
-		_vm->_dialogs->show(51219);
+		text_show(51219);
 	else if (player_said_2(look, porthole) || player_said_2(peer_through, porthole))
-		_vm->_dialogs->show(51220);
+		text_show(51220);
 	else if (player_said_2(look, table))
-		_vm->_dialogs->show(51221);
+		text_show(51221);
 	else if (player_said_2(look, starfish))
-		_vm->_dialogs->show(51222);
+		text_show(51222);
 	else if (player_said_2(take, starfish))
-		_vm->_dialogs->show(51223);
+		text_show(51223);
 	else if (player_said_2(look, outside))
-		_vm->_dialogs->show(51224);
+		text_show(51224);
 	else if (player_said_2(look, poster))
-		_vm->_dialogs->show(51227);
+		text_show(51227);
 	else if (player_said_2(take, poster))
-		_vm->_dialogs->show(51228);
+		text_show(51228);
 	else if (player_said_2(look, trophy)) {
 		if (_game._visitedScenes.exists(604))
-			_vm->_dialogs->show(51229);
+			text_show(51229);
 		else
-			_vm->_dialogs->show(51230);
+			text_show(51230);
 	} else if (player_said_2(look, chair))
-		_vm->_dialogs->show(51231);
+		text_show(51231);
 	else if (player_said_2(look, rope))
-		_vm->_dialogs->show(51232);
+		text_show(51232);
 	else if (player_said_2(take, rope))
-		_vm->_dialogs->show(51233);
+		text_show(51233);
 	else if (player_said_2(look, lamp))
-		_vm->_dialogs->show(51234);
+		text_show(51234);
 	else if (player_said_2(walk_behind, counter)) {
 		// WORKAROUND: Empty handling to prevent default "can't do that" dialogs showing
 	} else if (player_said_2(look, counter))
-		_vm->_dialogs->show(51235);
+		text_show(51235);
 	else if (player_said_2(look, ice_chests))
-		_vm->_dialogs->show(51237);
+		text_show(51237);
 	else if (player_said_2(open, ice_chests))
-		_vm->_dialogs->show(51238);
+		text_show(51238);
 	else if (player_said_2(look, cash_register)) {
 		if (!_globals[kRegisterOpen])
-			_vm->_dialogs->show(51212);
+			text_show(51212);
 		else if (_game._objects.isInRoom(OBJ_PADLOCK_KEY))
-			_vm->_dialogs->show(51214);
+			text_show(51214);
 		else
-			_vm->_dialogs->show(51213);
+			text_show(51213);
 	} else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index a9a1688ac6e..043a53fb9c6 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -75,7 +75,7 @@ static void room_513_daemon() {
 		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 		_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
-		_vm->_sound->command(24);
+		g_engine->_soundManager->command(24, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
 		break;
 
@@ -87,7 +87,7 @@ static void room_513_daemon() {
 	case 82:
 		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
-		_vm->_sound->command(25);
+		g_engine->_soundManager->command(25, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
 		break;
 
@@ -184,7 +184,7 @@ static void room_513_parser() {
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
-			_vm->_sound->command(24);
+			g_engine->_soundManager->command(24, 0);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x278));
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
@@ -198,7 +198,7 @@ static void room_513_parser() {
 		case 3:
 			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
-			_vm->_sound->command(25);
+			g_engine->_soundManager->command(25, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 			break;
 
@@ -217,31 +217,31 @@ static void room_513_parser() {
 			break;
 		}
 	} else if ((_action._lookFlag) || player_said_2(look, street))
-		_vm->_dialogs->show(51318);
+		text_show(51318);
 	else if (player_said_2(look, elevator))
-		_vm->_dialogs->show(51310);
+		text_show(51310);
 	else if (player_said_2(look, elevator_door))
-		_vm->_dialogs->show(51311);
+		text_show(51311);
 	else if (player_said_2(look, card_slot))
-		_vm->_dialogs->show(51312);
+		text_show(51312);
 	else if (player_said_2(look, handicap_sign))
-		_vm->_dialogs->show(51313);
+		text_show(51313);
 	else if (player_said_2(look, bike_rack))
-		_vm->_dialogs->show(51314);
+		text_show(51314);
 	else if (player_said_2(look, building))
-		_vm->_dialogs->show(51315);
+		text_show(51315);
 	else if (player_said_2(look, sign))
-		_vm->_dialogs->show(51316);
+		text_show(51316);
 	else if (player_said_2(look, street_to_west) || player_said_2(walk_down, street_to_west))
-		_vm->_dialogs->show(51317);
+		text_show(51317);
 	else if (player_said_2(open, elevator_door) || player_said_2(open, elevator))
-		_vm->_dialogs->show(51319);
+		text_show(51319);
 	else if (player_said_2(look, car))
-		_vm->_dialogs->show(51321);
+		text_show(51321);
 	else if (player_said_2(look, brick_wall))
-		_vm->_dialogs->show(51322);
+		text_show(51322);
 	else if (player_said_3(put, security_card, card_slot))
-		_vm->_dialogs->show(51320);
+		text_show(51320);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room551.cpp b/engines/mads/nebular/rooms/room551.cpp
index 721ed7949c8..7fb5f7175cf 100644
--- a/engines/mads/nebular/rooms/room551.cpp
+++ b/engines/mads/nebular/rooms/room551.cpp
@@ -115,7 +115,7 @@ static void room_551_daemon() {
 			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 8);
 		}
-		_vm->_sound->command(28);
+		g_engine->_soundManager->command(28, 0);
 		_scene->_sequences.addTimer(60, 91);
 		break;
 
@@ -137,28 +137,28 @@ static void room_551_parser() {
 	if (player_said_2(step_into, teleporter))
 		_scene->_nextSceneId = 502;
 	else if ((_action._lookFlag))
-		_vm->_dialogs->show(55117);
+		text_show(55117);
 	else if (player_said_2(look, skeleton))
-		_vm->_dialogs->show(55110);
+		text_show(55110);
 	else if (player_said_2(look, elevator_shaft))
-		_vm->_dialogs->show(55111);
+		text_show(55111);
 	else if (player_said_2(walkto, elevator_shaft))
-		_vm->_dialogs->show(55112);
+		text_show(55112);
 	else if (player_said_2(look, building))
-		_vm->_dialogs->show(55113);
+		text_show(55113);
 	else if (player_said_2(look, teleporter))
-		_vm->_dialogs->show(55114);
+		text_show(55114);
 	else if (player_said_2(look, sidewalk_to_west)) {
 		if (_game._visitedScenes.exists(505))
-			_vm->_dialogs->show(55116);
+			text_show(55116);
 		else
-			_vm->_dialogs->show(55115);
+			text_show(55115);
 	} else if (player_said_2(look, sidewalk))
-		_vm->_dialogs->show(55118);
+		text_show(55118);
 	else if (player_said_2(look, equipment_overhead))
-		_vm->_dialogs->show(55119);
+		text_show(55119);
 	else if (player_said_2(look, railing))
-		_vm->_dialogs->show(55120);
+		text_show(55120);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index 784415caad9..65449d6a9e1 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -131,27 +131,27 @@ static void room_601_parser() {
 		}
 	} else if (_action._lookFlag || player_said_2(look, street)) {
 		if (!_globals[kLaserHoleIsThere])
-			_vm->_dialogs->show(60110);
+			text_show(60110);
 		else
-			_vm->_dialogs->show(60111);
+			text_show(60111);
 	} else if (player_said_2(look, car))
-		_vm->_dialogs->show(60112);
+		text_show(60112);
 	else if (player_said_2(look, papers))
-		_vm->_dialogs->show(60113);
+		text_show(60113);
 	else if (player_said_2(look, building))
-		_vm->_dialogs->show(60114);
+		text_show(60114);
 	else if (player_said_2(walk_down, street))
-		_vm->_dialogs->show(60115);
+		text_show(60115);
 	else if (player_said_2(look, balcony))
-		_vm->_dialogs->show(60116);
+		text_show(60116);
 	else if (player_said_2(look, entrance))
-		_vm->_dialogs->show(60117);
+		text_show(60117);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(60118);
+		text_show(60118);
 	else if (player_said_2(look, city))
-		_vm->_dialogs->show(60119);
+		text_show(60119);
 	else if (player_said_2(look, fountain))
-		_vm->_dialogs->show(60120);
+		text_show(60120);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index 5b9cdee905b..19f1c1d45ff 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -222,7 +222,7 @@ static void room_602_parser() {
 		|| player_said_3(reflect, compact_case, laser_beam) || player_said_3(reflect, rearview_mirror, laser_beam)) && (_globals[kSafeStatus] == 0)) {
 		switch (_game._trigger) {
 		case 0:
-			_vm->_dialogs->show(60230);
+			text_show(60230);
 			_game._player._stepEnabled = false;
 			_game._player._visible = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
@@ -272,7 +272,7 @@ static void room_602_parser() {
 		case 1:
 			_scene->_sequences.remove(_globals._sequenceIndexes[6]);
 			_scene->_hotspots.activate(words_door_key, false);
-			_vm->_sound->command(9);
+			g_engine->_soundManager->command(9, 0);
 			_game._objects.addToInventory(OBJ_DOOR_KEY);
 			break;
 
@@ -280,66 +280,66 @@ static void room_602_parser() {
 			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[5]);
 			_game._player._visible = true;
 			_game._player._stepEnabled = true;
-			_vm->_dialogs->showItem(OBJ_DOOR_KEY, 835);
+			object_examine(OBJ_DOOR_KEY, 835, 0);
 			break;
 
 		default:
 			break;
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(60210);
+		text_show(60210);
 	else if (player_said_2(look, floor))
-		_vm->_dialogs->show(60211);
+		text_show(60211);
 	else if (player_said_2(look, hallway))
-		_vm->_dialogs->show(60212);
+		text_show(60212);
 	else if (player_said_2(look, table))
-		_vm->_dialogs->show(60213);
+		text_show(60213);
 	else if (player_said_2(look, chair) || player_said_2(look, lounge_chair))
-		_vm->_dialogs->show(60214);
+		text_show(60214);
 	else if (player_said_2(look, neon_lights))
-		_vm->_dialogs->show(60215);
+		text_show(60215);
 	else if (player_said_2(look, fireplace))
-		_vm->_dialogs->show(60216);
+		text_show(60216);
 	else if (player_said_2(look, picture))
-		_vm->_dialogs->show(60217);
+		text_show(60217);
 	else if (player_said_2(look, lamp))
-		_vm->_dialogs->show(60218);
+		text_show(60218);
 	else if (player_said_2(look, masks))
-		_vm->_dialogs->show(60219);
+		text_show(60219);
 	else if (player_said_2(look, glass_block_wall))
-		_vm->_dialogs->show(60220);
+		text_show(60220);
 	else if (player_said_2(look, doorway))
-		_vm->_dialogs->show(60221);
+		text_show(60221);
 	else if (player_said_2(look, safe)) {
 		if (_globals[kSafeStatus] == 0)
-			_vm->_dialogs->show(60222);
+			text_show(60222);
 		else if (_globals[kSafeStatus] == 1) {
 			if (!_game._objects.isInRoom(OBJ_DOOR_KEY))
-				_vm->_dialogs->show(60223);
+				text_show(60223);
 			else
-				_vm->_dialogs->show(60224);
+				text_show(60224);
 		} else if (_globals[kSafeStatus] == 2)
-			_vm->_dialogs->show(60234);
+			text_show(60234);
 		else if (_game._objects.isInRoom(OBJ_DOOR_KEY))
-			_vm->_dialogs->show(60235);
+			text_show(60235);
 		else
-			_vm->_dialogs->show(60236);
+			text_show(60236);
 	} else if (player_said_3(unlock, door_key, safe) || player_said_3(unlock, padlock_key, safe))
-		_vm->_dialogs->show(60225);
+		text_show(60225);
 	else if (player_said_2(pull, safe))
-		_vm->_dialogs->show(60226);
+		text_show(60226);
 	else if (player_said_2(put, fireplace) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId)))
-		_vm->_dialogs->show(60227);
+		text_show(60227);
 	else if (player_said_2(look, hole))
-		_vm->_dialogs->show(60228);
+		text_show(60228);
 	else if (player_said_2(look, laser_beam))
-		_vm->_dialogs->show(60229);
+		text_show(60229);
 	else if (player_said_2(look, flower_box))
-		_vm->_dialogs->show(60231);
+		text_show(60231);
 	else if (player_said_3(throw, bomb, safe) || player_said_3(throw, bombs, safe))
-		_vm->_dialogs->show(60232);
+		text_show(60232);
 	else if (player_said_2(put, timebomb))
-		_vm->_dialogs->show(60233);
+		text_show(60233);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room603.cpp b/engines/mads/nebular/rooms/room603.cpp
index 868bd895823..c55278e35b9 100644
--- a/engines/mads/nebular/rooms/room603.cpp
+++ b/engines/mads/nebular/rooms/room603.cpp
@@ -81,11 +81,11 @@ static void room_603_parser() {
 				break;
 
 			case 1:
-				_vm->_sound->command(9);
+				g_engine->_soundManager->command(9, 0);
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_scene->_dynamicHotspots.remove(local._compactCaseHotspotId);
 				_game._objects.addToInventory(OBJ_COMPACT_CASE);
-				_vm->_dialogs->showItem(OBJ_COMPACT_CASE, 60330);
+				object_examine(OBJ_COMPACT_CASE, 60330, 0);
 				break;
 
 			case 2:
@@ -107,7 +107,7 @@ static void room_603_parser() {
 				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
 				_scene->_sequences.addTimer(15, 1);
 			} else if (_game._trigger == 1) {
-				_vm->_sound->command(9);
+				g_engine->_soundManager->command(9, 0);
 				_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 				_scene->_dynamicHotspots.remove(local._noteHotspotId);
 				_game._objects.addToInventory(OBJ_NOTE);
@@ -117,53 +117,53 @@ static void room_603_parser() {
 				_game._player._stepEnabled = true;
 			}
 		} else
-			_vm->_dialogs->show(60323);
+			text_show(60323);
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(60310);
+		text_show(60310);
 	else if (player_said_2(look, bed))
-		_vm->_dialogs->show(60311);
+		text_show(60311);
 	else if (player_said_2(look, wig_stand))
-		_vm->_dialogs->show(60312);
+		text_show(60312);
 	else if (player_said_2(take, wig_stand))
-		_vm->_dialogs->show(60313);
+		text_show(60313);
 	else if (player_said_2(look, review))
-		_vm->_dialogs->show(60314);
+		text_show(60314);
 	else if (player_said_2(look, souvenir_tickets))
-		_vm->_dialogs->show(60315);
+		text_show(60315);
 	else if (player_said_2(look, photograph))
-		_vm->_dialogs->show(60316);
+		text_show(60316);
 	else if (player_said_2(look, lamp))
-		_vm->_dialogs->show(60317);
+		text_show(60317);
 	else if (player_said_2(look, directors_slate) || player_said_2(look, crop) || player_said_2(look, megaphone))
-		_vm->_dialogs->show(60318);
+		text_show(60318);
 	else if (player_said_2(look, snapshot))
-		_vm->_dialogs->show(60319);
+		text_show(60319);
 	else if (player_said_2(take, snapshot))
-		_vm->_dialogs->show(60320);
+		text_show(60320);
 	else if (player_said_2(look, perfume))
-		_vm->_dialogs->show(60321);
+		text_show(60321);
 	else if (player_said_2(take, perfume))
-		_vm->_dialogs->show(60322);
+		text_show(60322);
 	else if (player_said_2(look, note)) {
 		if (_game._objects[OBJ_NOTE]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(60324);
+			text_show(60324);
 	} else if (player_said_2(look, corner_table)) {
 		if (_game._objects[OBJ_NOTE]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(60326);
+			text_show(60326);
 		else
-			_vm->_dialogs->show(60325);
+			text_show(60325);
 	} else if (player_said_2(look, vanity)) {
 		if (_game._objects[OBJ_COMPACT_CASE]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(60327);
+			text_show(60327);
 		else
-			_vm->_dialogs->show(60328);
+			text_show(60328);
 	} else if (player_said_2(look, compact_case) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(60329);
+		text_show(60329);
 	// For the next two checks, the second part of the check wasn't surrounded par parenthesis, which was obviously wrong
 	else if (player_said_1(look) && (player_said_1(bra) || player_said_1(boa) || player_said_1(slip)))
-		_vm->_dialogs->show(60331);
+		text_show(60331);
 	else if (player_said_1(take) && (player_said_1(bra) || player_said_1(boa) || player_said_1(slip)))
-		_vm->_dialogs->show(60332);
+		text_show(60332);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index d7d5ee8d818..29f561a1e6e 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -58,8 +59,8 @@ static void room_604_init() {
 	if (_scene->_roomChanged)
 		_game._objects.addToInventory(OBJ_TIMEBOMB);
 
-	_vm->_palette->setEntry(252, 63, 37, 26);
-	_vm->_palette->setEntry(253, 45, 24, 17);
+	pal_change_color(252, 63, 37, 26);
+	pal_change_color(253, 45, 24, 17);
 	local._animationActiveFl = false;
 
 	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
@@ -119,7 +120,7 @@ static void room_604_daemon() {
 			case 137:
 			case 174:
 			{
-				int randVal = _vm->getRandomNumber(1, 1000);
+				int randVal = g_engine->getRandomNumber(1, 1000);
 				if ((randVal <= 450) && (_game._player._special)) {
 					if (_game._player._special == 1)
 						nextMonsterFrame = 50;
@@ -158,7 +159,7 @@ static void room_604_daemon() {
 
 	if ((!local._monsterActive && !local._animationActiveFl) && (_scene->_frameStartTime > (local._monsterTimer + 4))) {
 		local._monsterTimer = _scene->_frameStartTime;
-		if ((_vm->getRandomNumber(1, 1000) < 25) || !_game._visitedScenes._sceneRevisited) {
+		if ((g_engine->getRandomNumber(1, 1000) < 25) || !_game._visitedScenes._sceneRevisited) {
 			local._monsterActive = true;
 			_scene->freeAnimation();
 			_scene->loadAnimation(formAnimName('m', -1));
@@ -200,11 +201,11 @@ static void handleBombActions() {
 		_game._player._visible = true;
 		_game._player._stepEnabled = true;
 		if (local._bombMode == 1) {
-			_vm->_dialogs->show(60421);
+			text_show(60421);
 			_globals[kTimebombStatus] = TIMEBOMB_ACTIVATED;
 			_globals[kTimebombTimer] = 0;
 		} else {
-			_vm->_dialogs->show(60423);
+			text_show(60423);
 			_globals[kTimebombStatus] = TIMEBOMB_DEACTIVATED;
 			_globals[kTimebombTimer] = 0;
 		}
@@ -258,7 +259,7 @@ static void room_604_parser() {
 		}
 	} else if ((player_said_2(put, ledge) || player_said_2(put, viewport) || player_said_2(throw, viewport))
 		&& (player_said_1(bomb) || player_said_1(bombs)))
-		_vm->_dialogs->show(60420);
+		text_show(60420);
 	else if (player_said_3(put, timebomb, ledge) || player_said_3(put, timebomb, viewport)) {
 		local._bombMode = 1;
 		if ((_game._difficulty == DIFFICULTY_HARD) || _globals[kWarnedFloodCity])
@@ -273,9 +274,9 @@ static void room_604_parser() {
 			// in the inventory.
 			handleBombActions();
 		else if (_game._difficulty == DIFFICULTY_EASY)
-			_vm->_dialogs->show(60424);
+			text_show(60424);
 		else {
-			_vm->_dialogs->show(60425);
+			text_show(60425);
 			_globals[kWarnedFloodCity] = true;
 		}
 	} else if (player_said_2(take, timebomb)) {
@@ -284,25 +285,25 @@ static void room_604_parser() {
 			handleBombActions();
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(60411);
+		text_show(60411);
 	else if (player_said_2(look, viewport)) {
 		if (local._monsterActive) {
-			_vm->_dialogs->show(60413);
+			text_show(60413);
 		} else {
-			_vm->_dialogs->show(60412);
+			text_show(60412);
 		}
 	} else if (player_said_2(look, wall))
-		_vm->_dialogs->show(60414);
+		text_show(60414);
 	else if (player_said_2(look, vent))
-		_vm->_dialogs->show(60415);
+		text_show(60415);
 	else if (player_said_2(look, indicator))
-		_vm->_dialogs->show(60416);
+		text_show(60416);
 	else if (player_said_2(look, sculpture))
-		_vm->_dialogs->show(60417);
+		text_show(60417);
 	else if (player_said_2(look, car))
-		_vm->_dialogs->show(60418);
+		text_show(60418);
 	else if (player_said_2(look, fountain))
-		_vm->_dialogs->show(60419);
+		text_show(60419);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room605.cpp b/engines/mads/nebular/rooms/room605.cpp
index 11aefc91a6a..59b17e8bef5 100644
--- a/engines/mads/nebular/rooms/room605.cpp
+++ b/engines/mads/nebular/rooms/room605.cpp
@@ -51,16 +51,16 @@ static void room_605_init() {
 	_scene->_sequences.addTimer(600, 70);
 	_scene->_userInterface.setup(kInputLimitedSentences);
 	section_6_music();
-	_vm->_sound->command(22);
+	g_engine->_soundManager->command(22, 0);
 }
 
 static void room_605_daemon() {
 	if (_game._trigger == 70) {
-		_vm->_sound->command(23);
+		g_engine->_soundManager->command(23, 0);
 		if (_globals[kResurrectRoom] >= 700)
-			_vm->_dialogs->show(60598);
+			text_show(60598);
 		else
-			_vm->_dialogs->show(60599);
+			text_show(60599);
 
 		_scene->_nextSceneId = _globals[kResurrectRoom];
 	}
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index 664fb77f27e..2bbb3abd2df 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -99,8 +100,8 @@ static void room_607_init() {
 	if (_scene->_roomChanged)
 		_game._objects.addToInventory(OBJ_BONES);
 
-	_vm->_palette->setEntry(252, 63, 44, 30);
-	_vm->_palette->setEntry(253, 63, 20, 22);
+	pal_change_color(252, 63, 44, 30);
+	pal_change_color(253, 63, 20, 22);
 	_game.loadQuoteSet(0x2F8, 0x2F7, 0x2F6, 0x2F9, 0x2FA, 0);
 }
 
@@ -116,7 +117,7 @@ static void room_607_daemon() {
 	}
 
 	if ((local._dogTimer >= 480) && !local._dogLoop && !local._shopAvailable && (_globals[kDogStatus] == DOG_LEFT) && !_game._player._special) {
-		_vm->_sound->command(14);
+		g_engine->_soundManager->command(14, 0);
 		local._dogLoop = true;
 		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 10, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
@@ -134,7 +135,7 @@ static void room_607_daemon() {
 	}
 
 	if (!local._dogEatsRex && (_game._difficulty != DIFFICULTY_EASY) && !local._animationActive && (_globals[kDogStatus] == DOG_PRESENT)
-		&& !local._dogBarking && (_vm->getRandomNumber(1, 50) == 10)) {
+		&& !local._dogBarking && (g_engine->getRandomNumber(1, 50) == 10)) {
 		local._dogBarking = true;
 		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 		_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 5, 8, 0, 0);
@@ -156,7 +157,7 @@ static void room_607_daemon() {
 
 	if (_game._trigger == 100) {
 		local._counter++;
-		_vm->_sound->command(12);
+		g_engine->_soundManager->command(12, 0);
 
 		if ((local._counter >= 1) && (local._counter <= 4)) {
 			Common::Point pos(0, 0);
@@ -245,7 +246,7 @@ static void room_607_daemon() {
 		break;
 
 		case 63:
-			_vm->_dialogs->show(60729);
+			text_show(60729);
 			local._animationActive = 0;
 			local._dogEatsRex = false;
 			_scene->_reloadSceneFlag = true;
@@ -254,7 +255,7 @@ static void room_607_daemon() {
 
 		case 64:
 			if (local._dogEatsRex && (local._animationActive == 1)) {
-				_vm->_sound->command(12);
+				g_engine->_soundManager->command(12, 0);
 				_scene->_sequences.addTimer(10, 64);
 			}
 			break;
@@ -427,49 +428,49 @@ static void room_607_parser() {
 		handleThrowingBone();
 	} else if (_action._lookFlag || player_said_2(look, street)) {
 		if ((_globals[kDogStatus] == DOG_PRESENT) || (_game._difficulty == DIFFICULTY_EASY))
-			_vm->_dialogs->show(60710);
+			text_show(60710);
 		else
-			_vm->_dialogs->show(60711);
+			text_show(60711);
 	} else if (player_said_2(look, wall))
-		_vm->_dialogs->show(60712);
+		text_show(60712);
 	else if (player_said_2(look, fence))
-		_vm->_dialogs->show(60713);
+		text_show(60713);
 	else if (player_said_2(look, car))
-		_vm->_dialogs->show(60714);
+		text_show(60714);
 	else if (player_said_2(look, manhole))
-		_vm->_dialogs->show(60715);
+		text_show(60715);
 	else if (player_said_2(look, fire_hydrant) && (_globals[kDogStatus] == DOG_PRESENT))
-		_vm->_dialogs->show(60716);
+		text_show(60716);
 	else if (player_said_2(look, sign))
-		_vm->_dialogs->show(60717);
+		text_show(60717);
 	else if (player_said_2(look, broken_window))
-		_vm->_dialogs->show(60718);
+		text_show(60718);
 	else if (player_said_2(look, garage_door))
-		_vm->_dialogs->show(60719);
+		text_show(60719);
 	else if (player_said_2(look, sidewalk))
-		_vm->_dialogs->show(60720);
+		text_show(60720);
 	else if (player_said_2(look, air_hose))
-		_vm->_dialogs->show(60721);
+		text_show(60721);
 	else if (player_said_2(look, auto_shop)) {
 		if (_globals[kDogStatus] == DOG_PRESENT)
-			_vm->_dialogs->show(60723);
+			text_show(60723);
 		else
-			_vm->_dialogs->show(60722);
+			text_show(60722);
 	} else if (player_said_2(look, side_entrance)) {
 		if (_globals[kDogStatus] == DOG_PRESENT)
-			_vm->_dialogs->show(60725);
+			text_show(60725);
 		else
-			_vm->_dialogs->show(60724);
+			text_show(60724);
 	} else if (player_said_2(look, obnoxious_dog))
-		_vm->_dialogs->show(60726);
+		text_show(60726);
 	else if (player_said_2(talkto, obnoxious_dog))
-		_vm->_dialogs->show(60727);
+		text_show(60727);
 	else if (player_said_2(look, barricade))
-		_vm->_dialogs->show(60728);
+		text_show(60728);
 	else if (player_said_2(walk_down, street))
-		_vm->_dialogs->show(60730);
+		text_show(60730);
 	else if (player_said_1(garage_door) && (player_said_1(open) || player_said_1(push) || player_said_1(pull)))
-		_vm->_dialogs->show(60731);
+		text_show(60731);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index ae2af30540f..52037868e46 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -266,8 +267,8 @@ static void room_608_init() {
 		_scene->loadAnimation(formAnimName('D', -1));
 	}
 
-	_vm->_palette->setEntry(252, 63, 44, 30);
-	_vm->_palette->setEntry(253, 63, 20, 22);
+	pal_change_color(252, 63, 44, 30);
+	pal_change_color(253, 63, 20, 22);
 
 	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		_game._player._playerPos = Common::Point(46, 132);
@@ -311,7 +312,7 @@ static void room_608_daemon() {
 		local._dogHitWindow = true;
 		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 11, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
-		_vm->_sound->command(14);
+		g_engine->_soundManager->command(14, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 		local._dogWindowTimer = 0;
 	}
@@ -321,7 +322,7 @@ static void room_608_daemon() {
 
 	if ((_game._difficulty == DIFFICULTY_HARD) && !local._animationMode && local._dogActiveFl && !local._dogFirstEncounter && !local._dogUnderCar) {
 		if (!local._dogBarkingFl) {
-			if (_vm->getRandomNumber(1, 50) == 10) {
+			if (g_engine->getRandomNumber(1, 50) == 10) {
 				local._dogBarkingFl = true;
 				_scene->_sequences.remove(_globals._sequenceIndexes[5]);
 				_globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], false, 5, 8, 0, 0);
@@ -343,7 +344,7 @@ static void room_608_daemon() {
 	}
 
 	if ((_game._trigger == 100) && local._dogBarkingFl) {
-		_vm->_sound->command(12);
+		g_engine->_soundManager->command(12, 0);
 		local._barkCount++;
 
 		if ((local._barkCount >= 1) && (local._barkCount <= 4)) {
@@ -460,7 +461,7 @@ static void room_608_daemon() {
 
 	if (local._dogUnderCar) {
 		if (!local._dogYelping) {
-			if (_vm->getRandomNumber(1, 50) == 10) {
+			if (g_engine->getRandomNumber(1, 50) == 10) {
 				local._dogYelping = true;
 				local._barkCount = 0;
 				_scene->_sequences.addTimer(12, 110);
@@ -473,12 +474,12 @@ static void room_608_daemon() {
 		local._dogYelping = false;
 
 	if (_game._trigger == 110) {
-		_vm->_sound->command(12);
+		g_engine->_soundManager->command(12, 0);
 		_scene->_kernelMessages.add(Common::Point(150, 97), 0xFDFC, 0, 0, 60, _game.getQuote(0x303));
 	}
 
 	if (_game._trigger == 111) {
-		_vm->_sound->command(12);
+		g_engine->_soundManager->command(12, 0);
 		_scene->_kernelMessages.add(Common::Point(183, 93), 0xFDFC, 0, 0, 60, _game.getQuote(0x303));
 	}
 
@@ -669,7 +670,7 @@ static void room_608_daemon() {
 
 		case 85:
 			if (local._rexBeingEaten && (local._animationMode == 1)) {
-				_vm->_sound->command(12);
+				g_engine->_soundManager->command(12, 0);
 				_scene->_sequences.addTimer(10, 85);
 			}
 			break;
@@ -718,7 +719,7 @@ static void room_608_parser() {
 				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			} else
-				_vm->_dialogs->show(60839);
+				text_show(60839);
 			break;
 
 		case 1:
@@ -792,7 +793,7 @@ static void room_608_parser() {
 				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			} else
-				_vm->_dialogs->show(60840);
+				text_show(60840);
 			break;
 
 		case 1:
@@ -842,7 +843,7 @@ static void room_608_parser() {
 			local._throwMode = 4;
 			handleThrowingBone();
 		} else
-			_vm->_dialogs->show(60841);
+			text_show(60841);
 	} else if (player_said_3(throw, bone, front_of_garage) || player_said_3(throw, bones, front_of_garage)) {
 		_game._player._stepEnabled = true;
 		if (local._dogActiveFl) {
@@ -853,7 +854,7 @@ static void room_608_parser() {
 			local._throwMode = 5;
 			handleThrowingBone();
 		} else
-			_vm->_dialogs->show(60841);
+			text_show(60841);
 	} else if (player_said_3(throw, bones, area_behind_car) || player_said_3(throw, bone, area_behind_car)
 		|| player_said_3(throw, bones, danger_zone) || player_said_3(throw, bone, danger_zone)) {
 		_game._player._stepEnabled = true;
@@ -866,9 +867,9 @@ static void room_608_parser() {
 				local._throwMode = 6;
 				handleThrowingBone();
 			} else
-				_vm->_dialogs->show(60841);
+				text_show(60841);
 		} else
-			_vm->_dialogs->show(60842);
+			text_show(60842);
 	} else if (player_said_2(take, polycement) && (_game._trigger || !_game._objects.isInInventory(OBJ_POLYCEMENT))) {
 		switch (_game._trigger) {
 		case 0:
@@ -881,7 +882,7 @@ static void room_608_parser() {
 			break;
 
 		case 1:
-			_vm->_sound->command(9);
+			g_engine->_soundManager->command(9, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 			_scene->_dynamicHotspots.remove(local._polycementHotspotId);
 			break;
@@ -891,7 +892,7 @@ static void room_608_parser() {
 			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
 			_game._player._visible = true;
 			_game._player._stepEnabled = true;
-			_vm->_dialogs->showItem(OBJ_POLYCEMENT, 60833);
+			object_examine(OBJ_POLYCEMENT, 60833, 0);
 			break;
 
 		default:
@@ -910,10 +911,10 @@ static void room_608_parser() {
 			break;
 
 		case 1:
-			_vm->_sound->command(9);
+			g_engine->_soundManager->command(9, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[12]);
 			_game._objects.addToInventory(OBJ_REARVIEW_MIRROR);
-			_vm->_dialogs->showItem(OBJ_REARVIEW_MIRROR, 60827);
+			object_examine(OBJ_REARVIEW_MIRROR, 60827, 0);
 			break;
 
 		case 2:
@@ -927,63 +928,63 @@ static void room_608_parser() {
 		}
 	} else if (_action._lookFlag) {
 		if (_game._difficulty != DIFFICULTY_HARD)
-			_vm->_dialogs->show(60810);
+			text_show(60810);
 		else if (_globals[kDogStatus] == DOG_DEAD)
-			_vm->_dialogs->show(60812);
+			text_show(60812);
 		else
-			_vm->_dialogs->show(60811);
+			text_show(60811);
 	} else if (player_said_1(look) && (player_said_1(muffler) || player_said_1(car_seat) || player_said_1(hubcap)
 		|| player_said_1(coils) || player_said_1(quarter_panel)))
-		_vm->_dialogs->show(60813);
+		text_show(60813);
 	else if (player_said_1(take) && (player_said_1(muffler) || player_said_1(car_seat) || player_said_1(hubcap)
 		|| player_said_1(coils) || player_said_1(quarter_panel)))
-		_vm->_dialogs->show(60814);
+		text_show(60814);
 	else if (player_said_2(look, garage_floor) || player_said_2(look, front_of_garage) || player_said_2(look, rear_of_garage)) {
 		if (local._dogActiveFl)
-			_vm->_dialogs->show(60815);
+			text_show(60815);
 		else
-			_vm->_dialogs->show(60816);
+			text_show(60816);
 	} else if (player_said_2(look, spare_ribs))
-		_vm->_dialogs->show(60817);
+		text_show(60817);
 	else if (player_said_2(take, spare_ribs)) {
 		if (_game._difficulty == DIFFICULTY_HARD)
-			_vm->_dialogs->show(60818);
+			text_show(60818);
 		else
-			_vm->_dialogs->show(60819);
+			text_show(60819);
 	} else if (player_said_2(look, up_button))
-		_vm->_dialogs->show(60820);
+		text_show(60820);
 	else if (player_said_2(look, down_button))
-		_vm->_dialogs->show(60821);
+		text_show(60821);
 	else if (player_said_2(look, trash_can))
-		_vm->_dialogs->show(60822);
+		text_show(60822);
 	else if (player_said_2(look, calendar))
-		_vm->_dialogs->show(60823);
+		text_show(60823);
 	else if (player_said_2(look, storage_box)) {
 		if (_game._objects[OBJ_REARVIEW_MIRROR]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(60825);
+			text_show(60825);
 		else
-			_vm->_dialogs->show(60824);
+			text_show(60824);
 	} else if (player_said_2(open, storage_box))
-		_vm->_dialogs->show(60826);
+		text_show(60826);
 	else if (player_said_2(look, rearview_mirror) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(60828);
+		text_show(60828);
 	else if (player_said_2(look, tool_box)) {
 		if (_game._objects[OBJ_POLYCEMENT]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(60829);
+			text_show(60829);
 		else
-			_vm->_dialogs->show(60830);
+			text_show(60830);
 	} else if (player_said_2(open, tool_box))
-		_vm->_dialogs->show(60831);
+		text_show(60831);
 	else if ((player_said_2(look, polycement)) && (_game._objects.isInRoom(OBJ_POLYCEMENT)))
-		_vm->_dialogs->show(60832);
+		text_show(60832);
 	else if (player_said_2(look, grease_can) || player_said_2(look, oil_can))
-		_vm->_dialogs->show(60834);
+		text_show(60834);
 	else if (player_said_2(look, car_lift))
-		_vm->_dialogs->show(60835);
+		text_show(60835);
 	else if (player_said_2(look, chair) || player_said_2(look, hat))
-		_vm->_dialogs->show(60836);
+		text_show(60836);
 	else if (player_said_2(look, danger_zone))
-		_vm->_dialogs->show(60838);
+		text_show(60838);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index b726b3a3511..0ca662a4785 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -328,28 +328,28 @@ static void room_609_parser() {
 			break;
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(60910);
+		text_show(60910);
 	else if (player_said_2(look, street))
-		_vm->_dialogs->show(60911);
+		text_show(60911);
 	else if (player_said_2(look, spot_a_pot))
-		_vm->_dialogs->show(60912);
+		text_show(60912);
 	else if (player_said_2(look, video_store))
-		_vm->_dialogs->show(60913);
+		text_show(60913);
 	else if (player_said_2(look, billboard))
-		_vm->_dialogs->show(60914);
+		text_show(60914);
 	else if (player_said_2(look, statue))
-		_vm->_dialogs->show(60915);
+		text_show(60915);
 	else if (player_said_2(look, car))
-		_vm->_dialogs->show(60916);
+		text_show(60916);
 	else if (player_said_2(look, newsstand))
-		_vm->_dialogs->show(60917);
+		text_show(60917);
 	else if (player_said_2(look, video_store_door)) {
 		if (!_globals[kBeenInVideoStore])
-			_vm->_dialogs->show(60918);
+			text_show(60918);
 		else
-			_vm->_dialogs->show(60919);
+			text_show(60919);
 	} else if (player_said_2(walk_down, street))
-		_vm->_dialogs->show(60730);
+		text_show(60730);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room610.cpp b/engines/mads/nebular/rooms/room610.cpp
index f01c6af129e..31b09fc56e8 100644
--- a/engines/mads/nebular/rooms/room610.cpp
+++ b/engines/mads/nebular/rooms/room610.cpp
@@ -113,11 +113,11 @@ static void room_610_parser() {
 				break;
 
 			case 1:
-				_vm->_sound->command(9);
+				g_engine->_soundManager->command(9, 0);
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_scene->_dynamicHotspots.remove(local._handsetHotspotId);
 				_game._objects.addToInventory(OBJ_PHONE_HANDSET);
-				_vm->_dialogs->showItem(OBJ_PHONE_HANDSET, 61017);
+				object_examine(OBJ_PHONE_HANDSET, 61017, 0);
 				break;
 
 			case 2:
@@ -156,58 +156,58 @@ static void room_610_parser() {
 			if ((_globals[kHandsetCellStatus] == 2) && (_game._difficulty == DIFFICULTY_HARD) && !_globals[kDurafailRecharged])
 				local._cellCharging = true;
 
-			_vm->_dialogs->show(61032);
+			text_show(61032);
 			break;
 
 		default:
 			break;
 		}
 	} else if (player_said_2(look, pippy_billboard))
-		_vm->_dialogs->show(61010);
+		text_show(61010);
 	else if (player_said_2(look, civilization_ad))
-		_vm->_dialogs->show(61011);
+		text_show(61011);
 	else if (player_said_2(look, marx_bros_poster))
-		_vm->_dialogs->show(61012);
+		text_show(61012);
 	else if (player_said_2(look, video_monitor))
-		_vm->_dialogs->show(61013);
+		text_show(61013);
 	else if (player_said_2(look, video_store))
-		_vm->_dialogs->show(61014);
+		text_show(61014);
 	else if (_action._lookFlag)
-		_vm->_dialogs->show(61015);
+		text_show(61015);
 	else if (player_said_2(look, logo))
-		_vm->_dialogs->show(61018);
+		text_show(61018);
 	else if (player_said_2(look, cement)) {
 		if (_game._visitedScenes.exists(601))
-			_vm->_dialogs->show(61020);
+			text_show(61020);
 		else
-			_vm->_dialogs->show(61019);
+			text_show(61019);
 	} else if (player_said_2(look, counter))
-		_vm->_dialogs->show(61021);
+		text_show(61021);
 	else if (player_said_2(look, phone_antenna))
-		_vm->_dialogs->show(61022);
+		text_show(61022);
 	else if (player_said_2(look, smelly_sneaker))
-		_vm->_dialogs->show(61023);
+		text_show(61023);
 	else if (player_said_2(take, smelly_sneaker))
-		_vm->_dialogs->show(61024);
+		text_show(61024);
 	else if (player_said_2(look, spotlight))
-		_vm->_dialogs->show(61025);
+		text_show(61025);
 	else if (player_said_2(look, phone_handset) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(61026);
+		text_show(61026);
 	else if (player_said_2(look, phone_cradle))
-		_vm->_dialogs->show(61027);
+		text_show(61027);
 	else if (player_said_2(look, return_slot))
-		_vm->_dialogs->show(61028);
+		text_show(61028);
 	else if (player_said_2(put, return_slot)
 		&& _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId)))
-		_vm->_dialogs->show(61029);
+		text_show(61029);
 	else if (player_said_1(classic_videos) || player_said_1(more_classic_videos) || player_said_1(drama_videos)
 		|| player_said_1(new_release_videos) || player_said_1(porno_videos) || player_said_1(educational_videos)
 		|| player_said_1(instructional_videos) || player_said_1(workout_videos) || player_said_1(foreign_videos)
 		|| player_said_1(adventure_videos) || player_said_1(comedy_videos)) {
 		if (player_said_1(look))
-			_vm->_dialogs->show(61030);
+			text_show(61030);
 		else if (player_said_1(take))
-			_vm->_dialogs->show(61031);
+			text_show(61031);
 		else
 			return;
 	} else
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index 32b24221c58..952db0b0940 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -144,12 +145,12 @@ static void displayHermitQuestions(int question) {
 	case 1:
 	{
 		const char *curQuote = _game.getQuote(0x281);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x282);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -158,12 +159,12 @@ static void displayHermitQuestions(int question) {
 	case 2:
 	{
 		const char *curQuote = _game.getQuote(0x283);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x284);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -172,7 +173,7 @@ static void displayHermitQuestions(int question) {
 	case 3:
 	{
 		const char *curQuote = _game.getQuote(0x285);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -181,7 +182,7 @@ static void displayHermitQuestions(int question) {
 	case 4:
 	{
 		const char *curQuote = _game.getQuote(0x286);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -190,17 +191,17 @@ static void displayHermitQuestions(int question) {
 	case 5:
 	{
 		const char *curQuote = _game.getQuote(0x297);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y - 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x298);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x299);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -209,12 +210,12 @@ static void displayHermitQuestions(int question) {
 	case 6:
 	{
 		const char *curQuote = _game.getQuote(0x29A);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x29B);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -223,12 +224,12 @@ static void displayHermitQuestions(int question) {
 	case 7:
 	{
 		const char *curQuote = _game.getQuote(0x2A0);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2A1);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -237,17 +238,17 @@ static void displayHermitQuestions(int question) {
 	case 8:
 	{
 		const char *curQuote = _game.getQuote(0x2A2);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2A3);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2A4);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -256,12 +257,12 @@ static void displayHermitQuestions(int question) {
 	case 9:
 	{
 		const char *curQuote = _game.getQuote(0x2A5);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2A6);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -270,17 +271,17 @@ static void displayHermitQuestions(int question) {
 	case 10:
 	{
 		const char *curQuote = _game.getQuote(0x2A8);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2A9);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2AA);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -289,22 +290,22 @@ static void displayHermitQuestions(int question) {
 	case 11:
 	{
 		const char *curQuote = _game.getQuote(0x2AB);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2AC);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2AD);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2AE);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -313,22 +314,22 @@ static void displayHermitQuestions(int question) {
 	case 12:
 	{
 		const char *curQuote = _game.getQuote(0x2AF);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2B0);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2B1);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2B2);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -337,22 +338,22 @@ static void displayHermitQuestions(int question) {
 	case 13:
 	{
 		const char *curQuote = _game.getQuote(0x2B3);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2B4);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2B5);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2B6);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
@@ -365,22 +366,22 @@ static void displayHermitQuestions(int question) {
 	case 14:
 	{
 		const char *curQuote = _game.getQuote(0x2BA);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2BB);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2BC);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2BD);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -389,22 +390,22 @@ static void displayHermitQuestions(int question) {
 	case 15:
 	{
 		const char *curQuote = _game.getQuote(0x2BE);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2BF);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C0);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C1);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -413,27 +414,27 @@ static void displayHermitQuestions(int question) {
 	case 16:
 	{
 		const char *curQuote = _game.getQuote(0x2C2);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C3);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C4);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C5);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C6);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -442,22 +443,22 @@ static void displayHermitQuestions(int question) {
 	case 17:
 	{
 		const char *curQuote = _game.getQuote(0x2C7);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C8);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2C9);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2CA);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -466,17 +467,17 @@ static void displayHermitQuestions(int question) {
 	case 18:
 	{
 		const char *curQuote = _game.getQuote(0x2CB);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2CC);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2CD);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -485,17 +486,17 @@ static void displayHermitQuestions(int question) {
 	case 19:
 	{
 		const char *curQuote = _game.getQuote(0x2CE);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2CF);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2D0);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -504,27 +505,27 @@ static void displayHermitQuestions(int question) {
 	case 20:
 	{
 		const char *curQuote = _game.getQuote(0x2E1);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2E2);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2E3);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2E4);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = _game.getQuote(0x2E5);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -533,27 +534,27 @@ static void displayHermitQuestions(int question) {
 	case 21:
 	{
 		const char *curQuote = _game.getQuote(0x2D3);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = _game.getQuote(0x2D4);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = _game.getQuote(0x2D5);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = _game.getQuote(0x2D6);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = _game.getQuote(0x2D7);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 800, curQuote);
 	}
@@ -562,22 +563,22 @@ static void displayHermitQuestions(int question) {
 	case 22:
 	{
 		const char *curQuote = _game.getQuote(0x2D8);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = _game.getQuote(0x2D9);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = _game.getQuote(0x2DA);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = _game.getQuote(0x2DB);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 700, curQuote);
 	}
@@ -586,27 +587,27 @@ static void displayHermitQuestions(int question) {
 	case 23:
 	{
 		const char *curQuote = _game.getQuote(0x2DC);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = _game.getQuote(0x2DD);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = _game.getQuote(0x2DE);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = _game.getQuote(0x2DF);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = _game.getQuote(0x2E0);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 700, curQuote);
 	}
@@ -757,12 +758,12 @@ static void handleSubDialog1() {
 		_scene->_kernelMessages.reset();
 
 		const char *curQuote = _game.getQuote(0x2D1);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, 120, curQuote);
 
 		curQuote = _game.getQuote(0x2D2);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 
@@ -817,7 +818,7 @@ static void handleSubDialog1() {
 		_scene->_kernelMessages.reset();
 
 		const char *curQuote = _game.getQuote(0x2E6);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 
@@ -855,7 +856,7 @@ static void handleSubDialog2() {
 	{
 		_scene->_kernelMessages.reset();
 		const char *curQuote = _game.getQuote(0x2A7);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 		setDialogNode(0);
@@ -874,7 +875,7 @@ static void handleDialog() {
 		_game._player._stepEnabled = false;
 
 		const char *curQuote = _game.getQuote(_action._activeAction._verbId);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 
 		if (width > 200) {
 			static char subQuote1[34], subQuote2[34];
@@ -926,8 +927,8 @@ static void room_611_init() {
 		local._dialog2.set(kConvHermit2, 0x29F, 0);
 	}
 
-	_vm->_palette->setEntry(252, 51, 51, 47);
-	_vm->_palette->setEntry(253, 37, 37, 37);
+	pal_change_color(252, 51, 51, 47);
+	pal_change_color(253, 37, 37, 37);
 
 	local._ratPresentFl = false;
 	local._seenRatFl = true;
@@ -994,7 +995,7 @@ static void room_611_init() {
 }
 
 static void room_611_daemon() {
-	if (local._seenRatFl && (_vm->getRandomNumber(1, 100) == 10)) {
+	if (local._seenRatFl && (g_engine->getRandomNumber(1, 100) == 10)) {
 		local._seenRatFl = false;
 		_scene->_sequences.addTimer(1, 80);
 	}
@@ -1020,7 +1021,7 @@ static void room_611_daemon() {
 		handleRatMoves();
 
 	if (!local._eyesRunningFl) {
-		local._randVal = _vm->getRandomNumber(1, 30);
+		local._randVal = g_engine->getRandomNumber(1, 30);
 		local._eyesRunningFl = true;
 		_scene->_sequences.addTimer(1, 70);
 	}
@@ -1166,7 +1167,7 @@ static void room_611_daemon() {
 			local._nextFrame = 18;
 			local._hermitMovingFl = false;
 		} else {
-			switch (_vm->getRandomNumber(1, 5)) {
+			switch (g_engine->getRandomNumber(1, 5)) {
 			case 1:
 				local._nextFrame = 46;
 				break;
@@ -1204,7 +1205,7 @@ static void room_611_daemon() {
 			local._nextFrame = 47;
 			local._hermitTalkingFl = false;
 		} else {
-			switch (_vm->getRandomNumber(1, 4)) {
+			switch (g_engine->getRandomNumber(1, 4)) {
 			case 1:
 				local._nextFrame = 18;
 				break;
@@ -1348,24 +1349,24 @@ static void room_611_parser() {
 		_scene->_kernelMessages.reset();
 
 		const char *curQuote = _game.getQuote(0x323);
-		int width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, 120, curQuote);
 
 		curQuote = _game.getQuote(0x324);
-		width = _vm->_font->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 	} else if (_game._trigger == 90) {
 		if (local._dialog2.read(0x29C) && local._dialog2.read(0x29D) && local._dialog2.read(0x29E)) {
 			handleTalking(180);
-			if (_vm->getRandomNumber(1, 2) == 1)
+			if (g_engine->getRandomNumber(1, 2) == 1)
 				displayHermitQuestions(1);
 			else
 				displayHermitQuestions(2);
 		} else {
 			handleTalking(180);
-			if (_vm->getRandomNumber(1, 2) == 1)
+			if (g_engine->getRandomNumber(1, 2) == 1)
 				displayHermitQuestions(3);
 			else
 				displayHermitQuestions(4);
@@ -1389,7 +1390,7 @@ static void room_611_parser() {
 			_scene->_sequences.addTimer(120, 90);
 		} else {
 			int nextQuote = 0;
-			switch (_vm->getRandomNumber(1, 3)) {
+			switch (g_engine->getRandomNumber(1, 3)) {
 			case 1:
 				nextQuote = 0x27B;
 				break;
@@ -1427,33 +1428,33 @@ static void room_611_parser() {
 		}
 	} else if (_action._lookFlag) {
 		if (_globals[kHasTalkedToHermit])
-			_vm->_dialogs->show(61111);
+			text_show(61111);
 		else
-			_vm->_dialogs->show(61110);
+			text_show(61110);
 	} else if (player_said_2(look, hermit))
-		_vm->_dialogs->show(61112);
+		text_show(61112);
 	else if (player_said_2(look, trash))
-		_vm->_dialogs->show(61113);
+		text_show(61113);
 	else if (player_said_2(take, trash))
-		_vm->_dialogs->show(61114);
+		text_show(61114);
 	else if (player_said_2(look, cardboard_box))
-		_vm->_dialogs->show(61115);
+		text_show(61115);
 	else if (player_said_2(take, cardboard_box))
-		_vm->_dialogs->show(61116);
+		text_show(61116);
 	else if (player_said_2(open, cardboard_box))
-		_vm->_dialogs->show(61117);
+		text_show(61117);
 	else if (player_said_2(look, refrigerator))
-		_vm->_dialogs->show(61118);
+		text_show(61118);
 	else if (player_said_2(open, refrigerator))
-		_vm->_dialogs->show(61119);
+		text_show(61119);
 	else if (player_said_2(take, refrigerator))
-		_vm->_dialogs->show(61120);
+		text_show(61120);
 	else if (player_said_2(look, building))
-		_vm->_dialogs->show(61121);
+		text_show(61121);
 	else if (player_said_2(look, graffiti))
-		_vm->_dialogs->show(61122);
+		text_show(61122);
 	else if (player_said_2(look, metal_pipe))
-		_vm->_dialogs->show(61123);
+		text_show(61123);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index fb405568660..6f8571d76cc 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -57,13 +57,13 @@ static void handleWinchMovement() {
 		if (local._actionMode == 1) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 17, 7, 0, 0);
-			_vm->_sound->command(19);
+			g_engine->_soundManager->command(19, 0);
 			_game._objects.setRoom(OBJ_PADLOCK_KEY, 1);
 			_globals[kBoatRaised] = false;
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 17, 9, 0, 0);
-			_vm->_sound->command(18);
+			g_engine->_soundManager->command(18, 0);
 		}
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
@@ -84,7 +84,7 @@ static void handleWinchMovement() {
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x2F4));
 		_game._player._stepEnabled = true;
 
-		_vm->_dialogs->show(61217);
+		text_show(61217);
 	}
 	break;
 
@@ -205,37 +205,37 @@ static void room_612_parser() {
 		local._actionMode = 1;
 		handleWinchMovement();
 	} else if (_action._lookFlag || player_said_2(look, expressway))
-		_vm->_dialogs->show(61210);
+		text_show(61210);
 	else if (player_said_2(look, rope) || player_said_2(look, armature)) {
 		if (_globals[kBoatRaised])
-			_vm->_dialogs->show(61211);
+			text_show(61211);
 		else
-			_vm->_dialogs->show(61212);
+			text_show(61212);
 	} else if (player_said_2(take, rope))
-		_vm->_dialogs->show(61213);
+		text_show(61213);
 	else if (player_said_2(look, control_box)) {
 		if (_globals[kBoatRaised])
-			_vm->_dialogs->show(61214);
+			text_show(61214);
 		else
-			_vm->_dialogs->show(61216);
+			text_show(61216);
 	} else if (player_said_2(open, control_box))
-		_vm->_dialogs->show(61215);
+		text_show(61215);
 	else if (player_said_2(look, buildings))
-		_vm->_dialogs->show(61218);
+		text_show(61218);
 	else if (player_said_2(look, dome))
-		_vm->_dialogs->show(61219);
+		text_show(61219);
 	else if (player_said_2(look, statue))
-		_vm->_dialogs->show(61220);
+		text_show(61220);
 	else if (player_said_2(look, maintenance_building))
-		_vm->_dialogs->show(61221);
+		text_show(61221);
 	else if (player_said_2(open, maintenance_building))
-		_vm->_dialogs->show(61222);
+		text_show(61222);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(61223);
+		text_show(61223);
 	else if (player_said_2(look, support))
-		_vm->_dialogs->show(61224);
+		text_show(61224);
 	else if (player_said_2(walk_down, expressway_to_east) || player_said_2(walk_down, expressway_to_west))
-		_vm->_dialogs->show(61225);
+		text_show(61225);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index e8d594f83f6..012eacd2756 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -123,7 +123,7 @@ static void room_701_init() {
 		_game._player._visible = false;
 		_game._player._stepEnabled = false;
 		_scene->loadAnimation(formAnimName('B', 1), 80);
-		_vm->_sound->command(28);
+		g_engine->_soundManager->command(28, 0);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG && _scene->_priorSceneId != 620) {
 		_game._player._playerPos = Common::Point(22, 131);
 		_game._player._facing = FACING_EAST;
@@ -151,7 +151,7 @@ static void room_701_daemon() {
 		break;
 
 	case 70:
-		_vm->_sound->command(16);
+		g_engine->_soundManager->command(16, 0);
 		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 1, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(48, 136));
@@ -165,7 +165,7 @@ static void room_701_daemon() {
 		break;
 
 	case 72:
-		_vm->_sound->command(17);
+		g_engine->_soundManager->command(17, 0);
 		_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 5, 1, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(48, 136));
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
@@ -243,7 +243,7 @@ static void room_701_parser() {
 		case 0:
 			_game._player._stepEnabled = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_vm->_sound->command(16);
+			g_engine->_soundManager->command(16, 0);
 			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 1, 0, 0);
 			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(48, 136));
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
@@ -258,7 +258,7 @@ static void room_701_parser() {
 			break;
 
 		case 3:
-			_vm->_sound->command(17);
+			g_engine->_soundManager->command(17, 0);
 			_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 5, 1, 0, 0);
 			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(48, 136));
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
@@ -313,15 +313,15 @@ static void room_701_parser() {
 				break;
 			}
 		} else if (_globals[kBoatStatus] == BOAT_TIED) {
-			_vm->_dialogs->show(70125);
+			text_show(70125);
 		} else if (_globals[kLineStatus] == LINE_DROPPED) {
 			_globals[kLineStatus] = LINE_NOW_UNTIED;
 			_game._objects.addToInventory(OBJ_FISHING_LINE);
-			_vm->_sound->command(15);
+			g_engine->_soundManager->command(15, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-			_vm->_dialogs->showItem(OBJ_FISHING_LINE, 70126);
+			object_examine(OBJ_FISHING_LINE, 70126, 0);
 		} else {
-			_vm->_dialogs->show(70127);
+			text_show(70127);
 		}
 	} else if (player_said_2(climb_into, boat) && _globals[kBoatStatus] == BOAT_TIED) {
 		switch (_game._trigger) {
@@ -342,39 +342,39 @@ static void room_701_parser() {
 	} else if (_action._lookFlag) {
 		if (_globals[kBoatStatus] != BOAT_GONE) {
 			if (_globals[kBoatStatus] == BOAT_TIED)
-				_vm->_dialogs->show(70128);
+				text_show(70128);
 			else
-				_vm->_dialogs->show(70110);
+				text_show(70110);
 		} else
-			_vm->_dialogs->show(70111);
+			text_show(70111);
 	} else if (player_said_2(look, submerged_city))
-		_vm->_dialogs->show(70112);
+		text_show(70112);
 	else if (player_said_2(look, elevator))
-		_vm->_dialogs->show(70113);
+		text_show(70113);
 	else if (player_said_2(look, platform))
-		_vm->_dialogs->show(70114);
+		text_show(70114);
 	else if (player_said_2(look, cement_pylon))
-		_vm->_dialogs->show(70115);
+		text_show(70115);
 	else if (player_said_2(look, hook)) {
 		if (_globals[kLineStatus] == LINE_NOT_DROPPED || _globals[kLineStatus] == LINE_NOW_UNTIED)
-			_vm->_dialogs->show(70116);
+			text_show(70116);
 		else
-			_vm->_dialogs->show(70117);
+			text_show(70117);
 	} else if (player_said_2(look, rock))
-		_vm->_dialogs->show(70118);
+		text_show(70118);
 	else if (player_said_2(take, rock))
-		_vm->_dialogs->show(70119);
+		text_show(70119);
 	else if (player_said_2(look, east_end_of_platform))
-		_vm->_dialogs->show(70120);
+		text_show(70120);
 	else if (player_said_2(look, building))
-		_vm->_dialogs->show(70121);
+		text_show(70121);
 	else if (player_said_2(look, boat)) {
 		if (_globals[kBoatStatus] == BOAT_ADRIFT || _globals[kBoatStatus] == BOAT_TIED_FLOATING)
-			_vm->_dialogs->show(70122);
+			text_show(70122);
 		else
-			_vm->_dialogs->show(70123);
+			text_show(70123);
 	} else if (player_said_3(cast, fishing_rod, boat) && _game._objects.isInInventory(OBJ_FISHING_LINE))
-		_vm->_dialogs->show(70124);
+		text_show(70124);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room702.cpp b/engines/mads/nebular/rooms/room702.cpp
index 53ba9af4457..c89e101e850 100644
--- a/engines/mads/nebular/rooms/room702.cpp
+++ b/engines/mads/nebular/rooms/room702.cpp
@@ -85,11 +85,11 @@ static void room_702_parser() {
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 		case 1:
-			_vm->_sound->command(0xF);
+			g_engine->_soundManager->command(0xF, 0);
 			if (_game._objects.isInInventory(OBJ_BONE))
 				_game._objects.setRoom(OBJ_BONE, 1);
 			_game._objects.addToInventory(OBJ_BONES);
-			_vm->_dialogs->show(OBJ_BONES, 70218);
+			object_examine(OBJ_BONES, 70218, 0);
 			break;
 		case 2:
 			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[12]);
@@ -100,26 +100,26 @@ static void room_702_parser() {
 			break;
 		}
 	} else if (_action._lookFlag)
-		_vm->_dialogs->show(70210);
+		text_show(70210);
 	else if (player_said_2(look, platform))
-		_vm->_dialogs->show(70211);
+		text_show(70211);
 	else if (player_said_2(look, cement_block))
-		_vm->_dialogs->show(70212);
+		text_show(70212);
 	else if (player_said_2(look, rock))
-		_vm->_dialogs->show(70213);
+		text_show(70213);
 	else if (player_said_2(take, rock))
-		_vm->_dialogs->show(70214);
+		text_show(70214);
 	else if (player_said_2(look, west_end_of_platform))
-		_vm->_dialogs->show(70215);
+		text_show(70215);
 	else if (player_said_2(look, teleporter))
-		_vm->_dialogs->show(70216);
+		text_show(70216);
 	else if (player_said_2(look, bones) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(70217);
+		text_show(70217);
 	else if (player_said_2(take, bones) && (_action._mainObjectSource == CAT_HOTSPOT)) {
 		if (_game._objects.isInInventory(OBJ_BONES))
-			_vm->_dialogs->show(70219);
+			text_show(70219);
 	} else if (player_said_2(look, submerged_city))
-		_vm->_dialogs->show(70220);
+		text_show(70220);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room703.cpp b/engines/mads/nebular/rooms/room703.cpp
index 4ad15f32c85..6c04730b2ff 100644
--- a/engines/mads/nebular/rooms/room703.cpp
+++ b/engines/mads/nebular/rooms/room703.cpp
@@ -198,7 +198,7 @@ static void room_703_init() {
 	_game.loadQuoteSet(0x311, 0x312, 0x313, 0x314, 0x315, 0);
 	local._dialog1.setup(0x98, 0x311, 0x312, 0x313, 0x314, 0x315, 0);
 	section_7_music();
-	_vm->_sound->command(28);
+	g_engine->_soundManager->command(28, 0);
 }
 
 static void room_703_daemon() {
@@ -333,23 +333,23 @@ static void room_703_daemon() {
 	if (_game._trigger == 80) {
 		switch (_globals[kBottleStatus]) {
 		case 0:
-			_vm->_dialogs->show(432);
+			text_show(432);
 			break;
 
 		case 1:
-			_vm->_dialogs->show(70324);
+			text_show(70324);
 			break;
 
 		case 2:
-			_vm->_dialogs->show(70325);
+			text_show(70325);
 			break;
 
 		case 3:
-			_vm->_dialogs->show(70326);
+			text_show(70326);
 			break;
 
 		case 4:
-			_vm->_dialogs->show(70327);
+			text_show(70327);
 			break;
 
 		default:
@@ -415,7 +415,7 @@ static void room_703_daemon() {
 					if (_game._difficulty == DIFFICULTY_HARD)
 						_game._objects.setRoom(OBJ_CHICKEN, 1);
 					else
-						_vm->_dialogs->show(70319);
+						text_show(70319);
 				}
 				nextBoatFrame = 80;
 				break;
@@ -439,9 +439,9 @@ static void room_703_daemon() {
 			case 80:
 				if (_game._difficulty == DIFFICULTY_HARD) {
 					_game._objects.setRoom(OBJ_BOMB, 1);
-					_vm->_dialogs->show(70318);
+					text_show(70318);
 				} else
-					_vm->_dialogs->show(70317);
+					text_show(70317);
 
 				_scene->freeAnimation();
 				local._monsterMode = 1;
@@ -471,9 +471,9 @@ static void room_703_daemon() {
 				_scene->_animation[0]->setCurrentFrame(9);
 				_game._player._stepEnabled = true;
 				if (_game._storyMode == STORYMODE_NAUGHTY)
-					_vm->_dialogs->show(70321);
+					text_show(70321);
 				else
-					_vm->_dialogs->show(70322);
+					text_show(70322);
 
 				break;
 
@@ -547,24 +547,24 @@ static void room_703_parser() {
 			handleBottleInterface();
 			local._dialog1.start();
 		} else
-			_vm->_dialogs->show(70323);
+			text_show(70323);
 	} else if (_action._lookFlag || player_said_2(look, sea_monster)) {
 		if (_globals[kMonsterAlive])
-			_vm->_dialogs->show(70310);
+			text_show(70310);
 	} else if (player_said_2(look, water)) {
 		if (!_globals[kMonsterAlive])
-			_vm->_dialogs->show(70311);
+			text_show(70311);
 		else
-			_vm->_dialogs->show(70312);
+			text_show(70312);
 	} else if (player_said_2(look, building_to_north)) {
 		if (_globals[kMonsterAlive])
-			_vm->_dialogs->show(70313);
+			text_show(70313);
 		else if (_game._visitedScenes.exists(710))
-			_vm->_dialogs->show(70314);
+			text_show(70314);
 		else
-			_vm->_dialogs->show(70315);
+			text_show(70315);
 	} else if (player_said_2(look, volcano_rim))
-		_vm->_dialogs->show(70316);
+		text_show(70316);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index 8c9fb0e273b..69a7d5c05bb 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -172,7 +172,7 @@ static void room_704_init() {
 	local._dialog1.setup(0x98, 0x311, 0x312, 0x313, 0x314, 0x315, 0);
 
 	section_7_music();
-	_vm->_sound->command(28);
+	g_engine->_soundManager->command(28, 0);
 }
 
 static void room_704_daemon() {
@@ -249,8 +249,8 @@ static void room_704_daemon() {
 					_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 					_scene->_dynamicHotspots.remove(local._bottleHotspotId);
 					_game._objects.addToInventory(OBJ_BOTTLE);
-					_vm->_sound->command(15);
-					_vm->_dialogs->showItem(OBJ_BOTTLE, 70415);
+					g_engine->_soundManager->command(15, 0);
+					object_examine(OBJ_BOTTLE, 70415, 0);
 				}
 				break;
 
@@ -267,8 +267,8 @@ static void room_704_daemon() {
 					_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 					_scene->_dynamicHotspots.remove(local._bottleHotspotId);
 					_game._objects.addToInventory(OBJ_BOTTLE);
-					_vm->_sound->command(15);
-					_vm->_dialogs->showItem(OBJ_BOTTLE, 70415);
+					g_engine->_soundManager->command(15, 0);
+					object_examine(OBJ_BOTTLE, 70415, 0);
 				}
 				break;
 
@@ -294,23 +294,23 @@ static void room_704_daemon() {
 	if (_game._trigger == 70) {
 		switch (_globals[kBottleStatus]) {
 		case 0:
-			_vm->_dialogs->show(432);
+			text_show(432);
 			break;
 
 		case 1:
-			_vm->_dialogs->show(70324);
+			text_show(70324);
 			break;
 
 		case 2:
-			_vm->_dialogs->show(70325);
+			text_show(70325);
 			break;
 
 		case 3:
-			_vm->_dialogs->show(70326);
+			text_show(70326);
 			break;
 
 		case 4:
-			_vm->_dialogs->show(70327);
+			text_show(70327);
 			break;
 
 		default:
@@ -351,23 +351,23 @@ static void room_704_parser() {
 				handleBottleInterface();
 				local._dialog1.start();
 			} else
-				_vm->_dialogs->show(70323);
+				text_show(70323);
 		}
 	} else if (_action._lookFlag || player_said_2(look, water))
-		_vm->_dialogs->show(70410);
+		text_show(70410);
 	else if (player_said_2(look, building_to_north)) {
 		if (_game._visitedScenes.exists(710))
-			_vm->_dialogs->show(70411);
+			text_show(70411);
 		else
-			_vm->_dialogs->show(70412);
+			text_show(70412);
 	} else if (player_said_2(look, volcano_rim))
-		_vm->_dialogs->show(70413);
+		text_show(70413);
 	else if (player_said_2(look, bottle) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(70414);
+		text_show(70414);
 	else if (player_said_2(look, open_water_to_south))
-		_vm->_dialogs->show(70416);
+		text_show(70416);
 	else if (player_said_2(look, sky))
-		_vm->_dialogs->show(70417);
+		text_show(70417);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room705.cpp b/engines/mads/nebular/rooms/room705.cpp
index 5ba1bec02fb..5233e48aa81 100644
--- a/engines/mads/nebular/rooms/room705.cpp
+++ b/engines/mads/nebular/rooms/room705.cpp
@@ -132,7 +132,7 @@ static void room_705_init() {
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		_game._player._stepEnabled = false;
 		_scene->_sequences.addTimer(1, 80);
-		_vm->_sound->command(28);
+		g_engine->_soundManager->command(28, 0);
 	} else
 		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
 
@@ -174,7 +174,7 @@ static void room_705_daemon() {
 
 	case 81:
 	{
-		_vm->_sound->command(19);
+		g_engine->_soundManager->command(19, 0);
 		int syncIdx = _globals._sequenceIndexes[1];
 		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
@@ -195,23 +195,23 @@ static void room_705_daemon() {
 	case 91:
 		switch (_globals[kBottleStatus]) {
 		case 0:
-			_vm->_dialogs->show(432);
+			text_show(432);
 			break;
 
 		case 1:
-			_vm->_dialogs->show(70324);
+			text_show(70324);
 			break;
 
 		case 2:
-			_vm->_dialogs->show(70325);
+			text_show(70325);
 			break;
 
 		case 3:
-			_vm->_dialogs->show(70326);
+			text_show(70326);
 			break;
 
 		case 4:
-			_vm->_dialogs->show(70327);
+			text_show(70327);
 			break;
 
 		default:
@@ -236,7 +236,7 @@ static void room_705_parser() {
 			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_vm->_sound->command(18);
+			g_engine->_soundManager->command(18, 0);
 			break;
 
 		case 1:
@@ -281,19 +281,19 @@ static void room_705_parser() {
 			handleBottleInterface();
 			local._dialog1.start();
 		} else
-			_vm->_dialogs->show(70323);
+			text_show(70323);
 	} else if (_action._lookFlag || player_said_2(look, water))
-		_vm->_dialogs->show(70511);
+		text_show(70511);
 	else if (player_said_2(look, volcano_rim))
-		_vm->_dialogs->show(70512);
+		text_show(70512);
 	else if (player_said_2(look, open_water_to_south))
-		_vm->_dialogs->show(70513);
+		text_show(70513);
 	else if (player_said_2(look, sky))
-		_vm->_dialogs->show(70514);
+		text_show(70514);
 	else if (player_said_2(look, building))
-		_vm->_dialogs->show(70515);
+		text_show(70515);
 	else if (player_said_2(look, window))
-		_vm->_dialogs->show(70516);
+		text_show(70516);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index 81b60f3f12d..21531791cbf 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -51,11 +51,11 @@ static void handleRexDeath() {
 
 	case 2:
 		if (local._animationMode == 1)
-			_vm->_dialogs->show(70625);
+			text_show(70625);
 		else if (_globals[kBottleStatus] < 2)
-			_vm->_dialogs->show(70628);
+			text_show(70628);
 		else
-			_vm->_dialogs->show(70629);
+			text_show(70629);
 
 		_game._objects.setRoom(OBJ_VASE, _scene->_currentSceneId);
 		if (local._animationMode == 2)
@@ -82,7 +82,7 @@ static void handleTakeVase() {
 		break;
 
 	case 1:
-		_vm->_sound->command(9);
+		g_engine->_soundManager->command(9, 0);
 		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 		_scene->_dynamicHotspots.remove(local._vaseHotspotId);
 		_game._objects.addToInventory(OBJ_VASE);
@@ -99,7 +99,7 @@ static void handleTakeVase() {
 	case 2:
 		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
 		_game._player._visible = true;
-		_vm->_dialogs->showItem(OBJ_VASE, 70630);
+		object_examine(OBJ_VASE, 70630, 0);
 		_game._player._stepEnabled = true;
 		break;
 
@@ -259,45 +259,45 @@ static void room_706_parser() {
 	if (player_said_2(put, pedestal) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
 		int objectId = _game._objects.getIdFromDesc(_action._activeAction._objectNameId);
 		if (_game._objects[objectId].hasQuality(10))
-			_vm->_dialogs->show(70626);
+			text_show(70626);
 		else
-			_vm->_dialogs->show(70627);
+			text_show(70627);
 	} else if (player_said_2(take, bottle) && _game._objects.isInInventory(OBJ_VASE))
-		_vm->_dialogs->show(70631);
+		text_show(70631);
 	else if (_action._lookFlag) {
 		if (_game._objects[OBJ_VASE]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(70610);
+			text_show(70610);
 		else
-			_vm->_dialogs->show(70611);
+			text_show(70611);
 	} else if (player_said_2(look, floor))
-		_vm->_dialogs->show(70612);
+		text_show(70612);
 	else if (player_said_2(look, pillar))
-		_vm->_dialogs->show(70613);
+		text_show(70613);
 	else if (player_said_2(look, old_tea_cup))
-		_vm->_dialogs->show(70614);
+		text_show(70614);
 	else if (player_said_2(take, old_tea_cup))
-		_vm->_dialogs->show(70615);
+		text_show(70615);
 	else if (player_said_2(look, old_vase))
-		_vm->_dialogs->show(70616);
+		text_show(70616);
 	else if (player_said_2(look, portrait))
-		_vm->_dialogs->show(70617);
+		text_show(70617);
 	else if (player_said_2(look, name_plate))
-		_vm->_dialogs->show(70618);
+		text_show(70618);
 	else if (player_said_2(look, wall))
-		_vm->_dialogs->show(70619);
+		text_show(70619);
 	else if (player_said_2(look, pedestal)) {
 		if (_game._objects[OBJ_VASE]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(70620);
+			text_show(70620);
 		else if (_game._objects[OBJ_BOTTLE]._roomNumber == _scene->_currentSceneId)
-			_vm->_dialogs->show(70622);
+			text_show(70622);
 		else
-			_vm->_dialogs->show(70621);
+			text_show(70621);
 	} else if (player_said_2(look, teleporter))
-		_vm->_dialogs->show(70623);
+		text_show(70623);
 	else if (player_said_2(look, vase) && (_game._objects[OBJ_VASE]._roomNumber == _scene->_currentSceneId))
-		_vm->_dialogs->show(70624);
+		text_show(70624);
 	else if (player_said_2(look, bottle) && (_action._mainObjectSource == CAT_HOTSPOT))
-		_vm->_dialogs->show(70632);
+		text_show(70632);
 	else
 		return;
 
diff --git a/engines/mads/nebular/rooms/room707.cpp b/engines/mads/nebular/rooms/room707.cpp
index 6f784506604..acc08ea7d45 100644
--- a/engines/mads/nebular/rooms/room707.cpp
+++ b/engines/mads/nebular/rooms/room707.cpp
@@ -37,10 +37,10 @@ static void room_707_init() {
 	teleporter_init();
 
 	// The original uses Scene7xx_section_7_music
-	if (!_vm->_musicFlag)
-		_vm->_sound->command(2);
+	if (!config_file.music_flag)
+		g_engine->_soundManager->command(2, 0);
 	else
-		_vm->_sound->command(25);
+		g_engine->_soundManager->command(25, 0);
 }
 
 static void room_707_daemon() {
@@ -54,11 +54,11 @@ static void room_707_parser() {
 	}
 
 	if (player_said_2(look, viewport) || player_said_2(peer_through, viewport))
-		_vm->_dialogs->show(70710);
+		text_show(70710);
 	else if (player_said_2(look, keypad))
-		_vm->_dialogs->show(70711);
+		text_show(70711);
 	else if (player_said_2(look, display))
-		_vm->_dialogs->show(70712);
+		text_show(70712);
 	else if (player_said_2(look, 0_key) || player_said_2(look, 1_key)
 		|| player_said_2(look, 2_key) || player_said_2(look, 3_key)
 		|| player_said_2(look, 4_key) || player_said_2(look, 5_key)
@@ -66,9 +66,9 @@ static void room_707_parser() {
 		|| player_said_2(look, 8_key) || player_said_2(look, 9_key)
 		|| player_said_2(look, smile_key) || player_said_2(look, enter_key)
 		|| player_said_2(look, frown_key))
-		_vm->_dialogs->show(70713);
+		text_show(70713);


Commit: ced9db8cc7d4c71f65fa50bb69da333c6b53ba00
    https://github.com/scummvm/scummvm/commit/ced9db8cc7d4c71f65fa50bb69da333c6b53ba00
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:53+10:00

Commit Message:
MADS: NEBULAR: Refactor out Game and Resources thunk classes

Changed paths:
    engines/mads/core/game.h
    engines/mads/nebular/rooms/forcefield.cpp
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room212.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room216.cpp
    engines/mads/nebular/rooms/room301.cpp
    engines/mads/nebular/rooms/room302.cpp
    engines/mads/nebular/rooms/room303.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room310.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room321.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room354.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room366.cpp
    engines/mads/nebular/rooms/room387.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room390.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room515.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/room810.cpp
    engines/mads/nebular/rooms/section1.cpp
    engines/mads/nebular/rooms/section2.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/core/game.h b/engines/mads/core/game.h
index 0d4d6f8f96e..ee10b06afc8 100644
--- a/engines/mads/core/game.h
+++ b/engines/mads/core/game.h
@@ -25,7 +25,9 @@
 #include "common/serializer.h"
 #include "mads/core/general.h"
 #include "mads/core/global.h"
+#include "mads/core/object.h"
 #include "mads/core/player.h"
+#include "mads/core/quote.h"
 #include "mads/core/mads.h"
 #include "mads/core/heap.h"
 #include "mads/core/popup.h"
diff --git a/engines/mads/nebular/rooms/forcefield.cpp b/engines/mads/nebular/rooms/forcefield.cpp
index 4fcec6584db..82b856e15c5 100644
--- a/engines/mads/nebular/rooms/forcefield.cpp
+++ b/engines/mads/nebular/rooms/forcefield.cpp
@@ -49,8 +49,8 @@ void init_forcefield(Forcefield *force, bool flag) {
 }
 
 void handle_forcefield(Forcefield *force, int16 *sprites) {
-	if (_game._trigger >= 150) {
-		int id = _game._trigger - 150;
+	if (kernel.trigger >= 150) {
+		int id = kernel.trigger - 150;
 		if (id < 40) {
 			if (id < 20)
 				force->_vertical--;
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index f650beb4825..2ac673e7325 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -45,10 +45,10 @@ static Scratch local;
 
 
 static void room_101_say_dang() {
-	_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-	_game._player._stepEnabled = false;
+	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	player.commands_allowed = false;
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
 		_scene->_sequences.remove(_globals._sequenceIndexes[11]);
 		_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 6, 0, 0);
@@ -61,13 +61,13 @@ static void room_101_say_dang() {
 	case 72:
 		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 17);
-		_scene->_kernelMessages.add(Common::Point(143, 61), 0x1110, 0, 0, 60, _game.getQuote(57));
+		_scene->_kernelMessages.add(Common::Point(143, 61), 0x1110, 0, 0, 60, quote_string(kernel.quotes, 57));
 		_scene->_sequences.addTimer(120, 73);
 		break;
 
 	case 73:
 		text_show(10117);
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		break;
 
 	default:
@@ -76,20 +76,20 @@ static void room_101_say_dang() {
 }
 
 static void room_101_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 5));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('x', 6));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('x', 7));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('m', -1));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('b', 1));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('b', 2));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('a', 0));
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('a', 1));
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('x', 8));
-	_globals._spriteIndexes[14] = _scene->_sprites.addSprites(formAnimName('x', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('x', 6));
+	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('x', 7));
+	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
+	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('b', 2));
+	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(kernel_name('x', 8));
+	_globals._spriteIndexes[14] = _scene->_sprites.addSprites(kernel_name('x', 0));
 
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 0, 0, 25);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 4, 0, 1, 0);
@@ -108,14 +108,17 @@ static void room_101_init() {
 	if (_scene->_priorSceneId != RETURNING_FROM_LOADING)
 		_globals[kNeedToStandUp] = false;
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(100, 152);
+	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 100;
+		player.y = 152;
+	}
 
 	if ((_scene->_priorSceneId == 112) || ((_scene->_priorSceneId == RETURNING_FROM_DIALOG) && local._sittingFl)) {
-		_game._player._visible = false;
+		player.walker_visible = false;
 		local._sittingFl = true;
-		_game._player._playerPos = Common::Point(161, 123);
-		_game._player._facing = FACING_NORTHEAST;
+		player.x = 161;
+		player.y = 123;
+		player.facing = FACING_NORTHEAST;
 		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 17);
 		_scene->_hotspots.activate(words_chair, false);
@@ -127,14 +130,15 @@ static void room_101_init() {
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 4);
 	}
 
-	_game.loadQuoteSet(0x31, 0x32, 0x39, 0x36, 0x37, 0x38, 0);
+	kernel.quotes = quote_load(0x31, 0x32, 0x39, 0x36, 0x37, 0x38, 0);
 
 	if (_globals[kNeedToStandUp]) {
-		_scene->loadAnimation(Resources::formatName(101, 'S', -1, EXT_AA, ""), 71);
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
-		_game._player._playerPos = Common::Point(68, 140);
-		_game._player._facing = FACING_WEST;
+		_scene->loadAnimation(kernel_full_name(101, 'S', -1, "", EXT_AA), 71);
+		player.walker_visible = false;
+		player.commands_allowed = false;
+		player.x = 68;
+		player.y = 140;
+		player.facing = FACING_WEST;
 
 		local._messageNum = 0;
 		local._posY = 30;
@@ -146,24 +150,24 @@ static void room_101_init() {
 }
 
 static void room_101_daemon() {
-	if (local._oldSpecial != _game._player._special) {
-		local._oldSpecial = _game._player._special;
+	if (local._oldSpecial != player.special_code) {
+		local._oldSpecial = player.special_code;
 		if (local._oldSpecial)
 			g_engine->_soundManager->command(39, 0);
 		else
 			g_engine->_soundManager->command(11, 0);
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 70:
 		g_engine->_soundManager->command(9, 0);
 		break;
 
 	case 71:
 		_globals[kNeedToStandUp] = false;
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+		player.walker_visible = true;
+		player.commands_allowed = true;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
 		break;
 
 	case 72:
@@ -178,31 +182,31 @@ static void room_101_daemon() {
 	if (_scene->_animation[0] != nullptr) {
 		if ((_scene->_animation[0]->getCurrentFrame() >= 6) && (local._messageNum == 0)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, _game.getQuote(49));
+			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 49));
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 7) && (local._messageNum == 1)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, _game.getQuote(54));
+			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 54));
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 10) && (local._messageNum == 2)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, _game.getQuote(55));
+			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 55));
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 17) && (local._messageNum == 3)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, _game.getQuote(56));
+			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 56));
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 20) && (local._messageNum == 4)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, _game.getQuote(50));
+			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 50));
 			local._posY += 14;
 		}
 	}
@@ -210,17 +214,17 @@ static void room_101_daemon() {
 
 static void room_101_pre_parser() {
 	if (player_said_2(look, view_screen))
-		_game._player._needToWalk = true;
+		player.need_to_walk = true;
 
 	if (local._sittingFl) {
 		if (player_said_1(look) || player_said_1(chair) || player_said_1(talkto) || player_said_1(peer_through) || player_said_1(examine))
-			_game._player._needToWalk = false;
+			player.need_to_walk = false;
 
-		if (_game._player._needToWalk) {
-			switch (_game._trigger) {
+		if (player.need_to_walk) {
+			switch (kernel.trigger) {
 			case 0:
-				_game._player._readyToWalk = false;
-				_game._player._stepEnabled = false;
+				player.ready_to_walk = false;
+				player.commands_allowed = false;
 				_scene->_sequences.remove(_globals._sequenceIndexes[11]);
 				_globals._sequenceIndexes[11] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
@@ -230,9 +234,9 @@ static void room_101_pre_parser() {
 
 			case 1:
 				local._sittingFl = false;
-				_game._player._visible = true;
-				_game._player._stepEnabled = true;
-				_game._player._readyToWalk = true;
+				player.walker_visible = true;
+				player.commands_allowed = true;
+				player.ready_to_walk = true;
 				_scene->_hotspots.activate(71, true);
 				_scene->_dynamicHotspots.remove(local._chairHotspotId);
 				_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 6, 0, 0, 0);
@@ -246,20 +250,20 @@ static void room_101_pre_parser() {
 	}
 
 	if (local._panelOpened && !(player_said_1(shield_access_panel) || player_said_1(shield_modulator))) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			if (_game._player._needToWalk) {
+			if (player.need_to_walk) {
 				_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-				local._shieldSpriteIdx = _game._objects.isInRoom(OBJ_SHIELD_MODULATOR) ? 13 : 14;
+				local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
 				_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 1, 0, 0);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
 			}
 			break;
 
 		case 1:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			local._panelOpened = false;
 			_scene->_hotspots.activate(words_shield_modulator, false);
 			break;
@@ -285,15 +289,15 @@ static void room_101_parser() {
 
 	if (player_said_2(sit_in, chair) || (player_said_2(look, view_screen) && !local._sittingFl)) {
 		if (!local._sittingFl) {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				_scene->_sequences.remove(_globals._sequenceIndexes[12]);
 				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 1);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 1, 17);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_SPRITE, 10, 1);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				_action._inProgress = false;
 				return;
 
@@ -304,7 +308,7 @@ static void room_101_parser() {
 			case 2:
 				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 0, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 17);
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 				local._sittingFl = true;
 				_scene->_hotspots.activate(71, false);
 				local._chairHotspotId = _scene->_dynamicHotspots.add(words_chair, words_sit_in, -1, Common::Rect(159, 84, 159 + 33, 84 + 36));
@@ -312,7 +316,7 @@ static void room_101_parser() {
 					_action._inProgress = false;
 					return;
 				}
-				_game._trigger = 0;
+				kernel.trigger = 0;
 				break;
 
 			default:
@@ -326,12 +330,12 @@ static void room_101_parser() {
 	}
 
 	if ((player_said_2(walkto, shield_access_panel) || player_said_2(open, shield_access_panel)) && !local._panelOpened) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			local._shieldSpriteIdx = _game._objects.isInRoom(OBJ_SHIELD_MODULATOR) ? 13 : 14;
+			local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
 			_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
 
@@ -339,9 +343,9 @@ static void room_101_parser() {
 			_scene->_sequences.remove(_globals._sequenceIndexes[13]);
 			_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 0, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			local._panelOpened = true;
-			if (_game._objects.isInRoom(OBJ_SHIELD_MODULATOR))
+			if (object_is_here(OBJ_SHIELD_MODULATOR))
 				_scene->_hotspots.activate(words_shield_modulator, true);
 			break;
 
@@ -352,8 +356,8 @@ static void room_101_parser() {
 		return;
 	}
 
-	if ((player_said_2(take, shield_modulator) || player_said_2(pull, shield_modulator)) && _game._objects.isInRoom(OBJ_SHIELD_MODULATOR)) {
-		_game._objects.addToInventory(OBJ_SHIELD_MODULATOR);
+	if ((player_said_2(take, shield_modulator) || player_said_2(pull, shield_modulator)) && object_is_here(OBJ_SHIELD_MODULATOR)) {
+		inter_give_to_player(OBJ_SHIELD_MODULATOR);
 		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
 		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[14], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
@@ -364,9 +368,9 @@ static void room_101_parser() {
 		return;
 	}
 
-	if (player_said_2(look, shield_access_panel) || (player_said_2(look, shield_modulator) && !_game._objects.isInInventory(OBJ_SHIELD_MODULATOR))) {
+	if (player_said_2(look, shield_access_panel) || (player_said_2(look, shield_modulator) && !player_has(OBJ_SHIELD_MODULATOR))) {
 		if (local._panelOpened) {
-			if (_game._objects.isInRoom(OBJ_SHIELD_MODULATOR))
+			if (object_is_here(OBJ_SHIELD_MODULATOR))
 				text_show(10128);
 			else
 				text_show(10129);
@@ -387,9 +391,9 @@ static void room_101_parser() {
 		if (_globals[kWatchedViewScreen])
 			room_101_say_dang();
 		else {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				_scene->_sequences.remove(_globals._sequenceIndexes[11]);
 				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 21);
@@ -411,7 +415,7 @@ static void room_101_parser() {
 				break;
 
 			case 3:
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 				_globals[kWatchedViewScreen] = true;
 				local._sittingFl = true;
 				_scene->_nextSceneId = 112;
@@ -467,7 +471,7 @@ static void room_101_parser() {
 		return;
 	}
 
-	if (player_said_2(look, escape_hatch) || (player_said_2(open, escape_hatch) && !_game._objects.isInInventory(OBJ_REBREATHER))) {
+	if (player_said_2(look, escape_hatch) || (player_said_2(open, escape_hatch) && !player_has(OBJ_REBREATHER))) {
 		text_show(10109);
 		_action._inProgress = false;
 		return;
@@ -574,7 +578,7 @@ void room_101_preload() {
 	room_parser_code_pointer = room_101_parser;
 	room_daemon_code_pointer = room_101_daemon;
 
-	anim_himem_preload(formAnimName('A', -1), 3);
+	anim_himem_preload(kernel_name('A', -1), 3);
 
 	section_1_walker();
 	section_1_interface();
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index 7486540fb60..c29ddd73de3 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -46,27 +46,27 @@ static Scratch local;
 
 static void addRandomMessage() {
 	_scene->_kernelMessages.reset();
-	_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 	int quoteId = g_engine->getRandomNumber(65, 69);
-	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 73, 120, _game.getQuote(quoteId));
+	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 73, 120, quote_string(kernel.quotes, quoteId));
 	local._activeMsgFl = true;
 }
 
 static void room_102_init() {
 	section_1_music();
 
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 5));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('b', -1));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', -1));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('e', -1));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('n', -1));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('g', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('e', -1));
+	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('n', -1));
+	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('g', -1));
 	_globals._spriteIndexes[11] = _scene->_sprites.addSprites("*RXMRC_8");
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('x', 0));
+	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(kernel_name('x', 0));
 
 	_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 8, 0, 0, 0);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 170, 0, 1, 6);
@@ -74,7 +74,7 @@ static void room_102_init() {
 	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 4, 0, 1, 0);
 	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 3, 0, 0, 5);
 
-	if (_game._objects.isInRoom(OBJ_BINOCULARS))
+	if (object_is_here(OBJ_BINOCULARS))
 		_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 24, 0, 0, 24);
 	else
 		_scene->_hotspots.activate(words_binoculars, false);
@@ -87,15 +87,19 @@ static void room_102_init() {
 	}
 
 	if (_scene->_priorSceneId == 101) {
-		_game._player._playerPos = Common::Point(229, 109);
-		_game._player._stepEnabled = false;
+		player.x = 229;
+		player.y = 109;
+		player.commands_allowed = false;
 		_globals._sequenceIndexes[6] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 2, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
-	} else if (_scene->_priorSceneId == 103)
-		_game._player._playerPos = Common::Point(47, 152);
+	} else if (_scene->_priorSceneId == 103) {
+		player.x = 47;
+		player.y = 152;
+	}
 	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._facing = FACING_NORTHWEST;
-		_game._player._playerPos = Common::Point(32, 129);
+		player.facing = FACING_NORTHWEST;
+		player.x = 32;
+		player.y = 129;
 	}
 
 	if (_scene->_priorSceneId != 106) {
@@ -105,8 +109,8 @@ static void room_102_init() {
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 5);
 		}
 	} else {
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 5);
@@ -121,41 +125,41 @@ static void room_102_init() {
 	local._chairDescrFl = false;
 	local._activeMsgFl = false;
 
-	_game.loadQuoteSet(0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0);
+	kernel.quotes = quote_load(0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0);
 
 	if (_scene->_priorSceneId == 101)
 		g_engine->_soundManager->command(20, 0);
 }
 
 static void room_102_daemon() {
-	if (_game._trigger == 70)
-		_game._player._stepEnabled = true;
+	if (kernel.trigger == 70)
+		player.commands_allowed = true;
 
-	if (_game._trigger == 72) {
+	if (kernel.trigger == 72) {
 		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 5);
 		_scene->_sequences.addTimer(48, 90);
 	}
 
-	if (_game._trigger >= 90) {
-		if (_game._trigger >= 94) {
-			_scene->loadAnimation(formAnimName('B', -1), 71);
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+	if (kernel.trigger >= 90) {
+		if (kernel.trigger >= 94) {
+			_scene->loadAnimation(kernel_name('B', -1), 71);
+			player.commands_allowed = false;
+			player.walker_visible = false;
 
 			_globals[kWaterInAPuddle] = true;
 			g_engine->_soundManager->command(24, 0);
 		} else {
 			g_engine->_soundManager->command(23, 0);
-			_scene->_sequences.addTimer(48, _game._trigger + 1);
+			_scene->_sequences.addTimer(48, kernel.trigger + 1);
 		}
 	}
 
-	if (_game._trigger == 71) {
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+	if (kernel.trigger == 71) {
+		player.commands_allowed = true;
+		player.walker_visible = true;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
 	}
 
 	if (local._fridgeOpenedFl && !local._fridgeOpenedDescr) {
@@ -166,41 +170,41 @@ static void room_102_daemon() {
 		}
 	}
 
-	if (!local._activeMsgFl && (_game._player._playerPos == Common::Point(177, 114)) && (_game._player._facing == FACING_NORTH)
+	if (!local._activeMsgFl && (Common::Point(player.x, player.y) == Common::Point(177, 114)) && (player.facing == FACING_NORTH)
 		&& (g_engine->getRandomNumber(1, 5000) == 1)) {
 		_scene->_kernelMessages.reset();
 		local._activeMsgFl = false;
 		addRandomMessage();
 	}
 
-	if (_game._trigger == 73)
+	if (kernel.trigger == 73)
 		local._activeMsgFl = false;
 }
 
 static void room_102_pre_parser() {
 	if (player_said_1(refrigerator) || player_said_1(poster))
-		_game._player._needToWalk = _game._player._readyToWalk;
+		player.need_to_walk = player.ready_to_walk;
 
 	if (local._fridgeOpenedFl && !player_said_1(refrigerator)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			if (_game._player._needToWalk) {
+			if (player.need_to_walk) {
 				_scene->_sequences.remove(_globals._sequenceIndexes[7]);
 				_globals._sequenceIndexes[7] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[7], false, 6, 1, 0, 0);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
 			}
 			break;
 
 		case 1:
-			if (_game._objects.isInRoom(OBJ_BURGER)) {
+			if (object_is_here(OBJ_BURGER)) {
 				_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 				_scene->_hotspots.activate(words_burger, false);
 			}
 			local._fridgeOpenedFl = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			break;
 
 		default:
@@ -208,7 +212,7 @@ static void room_102_pre_parser() {
 		}
 	}
 
-	if (_game._player._needToWalk)
+	if (player.need_to_walk)
 		_scene->_kernelMessages.reset();
 }
 
@@ -221,16 +225,16 @@ static void room_102_parser() {
 
 	bool justOpenedFl = false;
 	if (player_said_1(refrigerator) && !local._fridgeOpenedFl) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			if (_game._objects.isInRoom(OBJ_BURGER)) {
+			if (object_is_here(OBJ_BURGER)) {
 				_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 7, 0, 0, 0);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
 			}
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			_action._inProgress = false;
 			return;
@@ -252,9 +256,9 @@ static void room_102_parser() {
 			local._fridgeOpenedFl = true;
 			local._fridgeOpenedDescr = false;
 			local._fridgeCommentCount = 0;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			justOpenedFl = true;
-			if (_game._objects.isInRoom(OBJ_BURGER))
+			if (object_is_here(OBJ_BURGER))
 				_scene->_hotspots.activate(words_burger, true);
 			break;
 
@@ -264,7 +268,7 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(look, refrigerator) || player_said_2(open, refrigerator)) {
-		if (_game._objects.isInRoom(OBJ_BURGER))
+		if (object_is_here(OBJ_BURGER))
 			text_show(10230);
 		else
 			text_show(10229);
@@ -277,12 +281,12 @@ static void room_102_parser() {
 	if (player_said_2(walkto, refrigerator) && justOpenedFl) {
 		local._fridgeFirstOpenFl = false;
 		int quoteId = g_engine->getRandomNumber(59, 63);
-		const char *curQuote = _game.getQuote(quoteId);
+		const char *curQuote = quote_string(kernel.quotes, quoteId);
 		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, -1);
 		_scene->_kernelMessages.reset();
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_kernelMessages.add(Common::Point(210, 60), 0x1110, 0, 73, 120, curQuote);
-		_scene->_kernelMessages.add(Common::Point(214 + width, 60), 0x1110, 0, 73, 120, _game.getQuote(64));
+		_scene->_kernelMessages.add(Common::Point(214 + width, 60), 0x1110, 0, 73, 120, quote_string(kernel.quotes, 64));
 		local._activeMsgFl = true;
 		_action._inProgress = false;
 		return;
@@ -301,11 +305,11 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(walk_through, door)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
 
@@ -368,13 +372,13 @@ static void room_102_parser() {
 		return;
 	}
 
-	if (player_said_3(put, burger, robo_kitchen) && _game._objects.isInInventory(OBJ_BURGER)) {
+	if (player_said_3(put, burger, robo_kitchen) && player_has(OBJ_BURGER)) {
 		text_show(10216);
 		_action._inProgress = false;
 		return;
 	}
 
-	if (player_said_2(put, refrigerator) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
+	if (player_said_2(put, refrigerator) && player_has(object_named(_action._activeAction._objectNameId))) {
 		text_show(10217);
 		_action._inProgress = false;
 		return;
@@ -399,13 +403,13 @@ static void room_102_parser() {
 	}
 
 	if ((player_said_1(ladder) || player_said_1(hatchway)) && (player_said_1(look) || player_said_1(climb_up) || player_said_1(climb_through))) {
-		if (_game._objects.isInInventory(OBJ_REBREATHER)) {
+		if (player_has(OBJ_REBREATHER)) {
 			if (!player_said_1(climb_up) && !player_said_1(climb_through)) {
 				text_show(10231);
 				_action._inProgress = false;
 				return;
 			}
-		} else if (player_said_1(look) || (_game._difficulty != DIFFICULTY_HARD)) {
+		} else if (player_said_1(look) || (game.difficulty != DIFFICULTY_HARD)) {
 			text_show(10222);
 			_action._inProgress = false;
 			return;
@@ -413,11 +417,11 @@ static void room_102_parser() {
 	}
 
 	if ((player_said_1(ladder) || player_said_1(hatchway)) && (player_said_1(climb_up) || player_said_1(climb_through))) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_scene->loadAnimation(formAnimName('A', -1), 1);
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			_scene->loadAnimation(kernel_name('A', -1), 1);
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			break;
 
 		case 1:
@@ -429,16 +433,16 @@ static void room_102_parser() {
 		case 3:
 		case 4:
 			g_engine->_soundManager->command(23, 0);
-			_scene->_sequences.addTimer(48, _game._trigger + 1);
+			_scene->_sequences.addTimer(48, kernel.trigger + 1);
 			break;
 
 		case 5:
 			g_engine->_soundManager->command(24, 0);
-			_scene->_sequences.addTimer(48, _game._trigger + 1);
+			_scene->_sequences.addTimer(48, kernel.trigger + 1);
 			break;
 
 		case 6:
-			if (_game._objects.isInInventory(OBJ_REBREATHER) && !_game._visitedScenes.exists(106))
+			if (player_has(OBJ_REBREATHER) && !player_has_been_in_room(106))
 				text_show(10237);
 			_scene->_nextSceneId = 106;
 			break;
@@ -511,12 +515,12 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(close, medicine_cabinet) && _globals[kMedicineCabinetOpen]) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
 			_globals._sequenceIndexes[8] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
 
@@ -525,7 +529,7 @@ static void room_102_parser() {
 			break;
 
 		case 2:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			_globals[kMedicineCabinetOpen] = false;
 			text_show(10209);
 			break;
@@ -538,11 +542,11 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(open, medicine_cabinet) && !_globals[kMedicineCabinetOpen]) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
 
@@ -553,7 +557,7 @@ static void room_102_parser() {
 			break;
 
 		case 2:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			_globals[kMedicineCabinetOpen] = true;
 			if (_globals[kMedicineCabinetVirgin]) {
 				text_show(10208);
@@ -570,22 +574,22 @@ static void room_102_parser() {
 		return;
 	}
 
-	if (player_said_2(take, binoculars) && _game._objects.isInRoom(OBJ_BINOCULARS)) {
-		switch (_game._trigger) {
+	if (player_said_2(take, binoculars) && object_is_here(OBJ_BINOCULARS)) {
+		switch (kernel.trigger) {
 		case 0:
 			_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[11]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_game._player._visible = false;
-			_game._player._stepEnabled = false;
+			player.walker_visible = false;
+			player.commands_allowed = false;
 			break;
 
 		case 1:
-			_game._objects.addToInventory(OBJ_BINOCULARS);
+			inter_give_to_player(OBJ_BINOCULARS);
 			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
 			_scene->_hotspots.activate(words_binoculars, false);
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			g_engine->_soundManager->command(22, 0);
 			object_examine(OBJ_BINOCULARS, 10201, 0);
 			break;
@@ -597,15 +601,15 @@ static void room_102_parser() {
 		return;
 	}
 
-	if (player_said_2(take, burger) && _game._objects.isInRoom(OBJ_BURGER)) {
-		if (_game._trigger == 0) {
+	if (player_said_2(take, burger) && object_is_here(OBJ_BURGER)) {
+		if (kernel.trigger == 0) {
 			object_examine(OBJ_BURGER, 10235, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
-			_game._objects.addToInventory(OBJ_BURGER);
+			inter_give_to_player(OBJ_BURGER);
 			_scene->_hotspots.activate(words_burger, false);
 			g_engine->_soundManager->command(22, 0);
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 		}
 		_action._inProgress = false;
 		return;
@@ -629,7 +633,7 @@ static void room_102_parser() {
 		return;
 	}
 
-	if (player_said_2(look, binoculars) && !_game._objects.isInInventory(OBJ_BINOCULARS)) {
+	if (player_said_2(look, binoculars) && !player_has(OBJ_BINOCULARS)) {
 		text_show(10233);
 		_action._inProgress = false;
 		return;
@@ -642,7 +646,7 @@ static void room_102_parser() {
 }
 
 static void room_102_error() {
-	if (player_said_2(put, robo_kitchen) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
+	if (player_said_2(put, robo_kitchen) && player_has(object_named(_action._activeAction._objectNameId))) {
 		text_show(10217);
 		_action._inProgress = false;
 	}
@@ -666,7 +670,7 @@ void room_102_preload() {
 	room_daemon_code_pointer = room_102_daemon;
 	room_error_code_pointer = room_102_error;
 
-	anim_himem_preload(formAnimName('A', -1), 3);
+	anim_himem_preload(kernel_name('A', -1), 3);
 
 	section_1_walker();
 	section_1_interface();
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 89eaab8d879..6ee2032d5d6 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -41,18 +41,18 @@ static Scratch local;
 
 
 static void room_103_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 5));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('b', -1));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('h', -1));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('m', -1));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('t', -1));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('r', -1));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('c', -1));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('h', -1));
+	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
+	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('t', -1));
+	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('r', -1));
+	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('c', -1));
 	_globals._spriteIndexes[12] = _scene->_sprites.addSprites("*RXMBD_2");
 	_globals._spriteIndexes[13] = _scene->_sprites.addSprites("*RXMRD_3");
 	_globals._spriteIndexes[15] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 7, 0, 1, 0);
@@ -71,15 +71,15 @@ static void room_103_init() {
 	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6);
 	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6);
 
-	if (_game._objects.isInRoom(OBJ_TIMER_MODULE))
+	if (object_is_here(OBJ_TIMER_MODULE))
 		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6);
 	else
-		_game->_scene._hotspots.activate(371, false);
+		_scene._hotspots.activate(371, false);
 
-	if (_game._objects.isInRoom(OBJ_REBREATHER))
+	if (object_is_here(OBJ_REBREATHER))
 		_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 6);
 	else
-		_game->_scene._hotspots.activate(289, false);
+		_scene._hotspots.activate(289, false);
 
 	if (_globals[kTurkeyExploded]) {
 		_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6);
@@ -87,21 +87,23 @@ static void room_103_init() {
 		_scene->_hotspots.activate(362, false);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(237, 74);
+	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 237;
+		player.y = 74;
+	}
 
 	if (_scene->_priorSceneId == 102) {
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		_globals._sequenceIndexes[6] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	}
 
 	section_1_music();
 
-	_game->loadQuoteSet(70, 51, 71, 7, 73, 0);
+	kernel.quotes = quote_load(70, 51, 71, 7, 73, 0);
 
-	if (!_game._visitedScenes._sceneRevisited) {
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(70));
+	if (!player.been_here_before) {
+		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 70));
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 	}
 
@@ -114,14 +116,14 @@ static void room_103_init() {
 }
 
 static void room_103_daemon() {
-	switch (_game->_trigger) {
+	switch (kernel.trigger) {
 	case 70:
-		_game->_player._stepEnabled = true;
+		player.commands_allowed = true;
 		break;
 
 	case 72:
 	{
-		Common::Point pt = _game->_player._playerPos;
+		Common::Point pt = Common::Point(player.x, player.y);
 		int dist = Math::hypotenuse(pt.x - 58, pt.y - 93);
 		g_engine->_soundManager->command(27, (dist * -128 / 378) + 127);
 	}
@@ -129,7 +131,7 @@ static void room_103_daemon() {
 
 	case 73:
 	{
-		Common::Point pt = _game->_player._playerPos;
+		Common::Point pt = Common::Point(player.x, player.y);
 		int dist = Math::hypotenuse(pt.x - 266, pt.y - 81);
 		g_engine->_soundManager->command(27, (dist * -127 / 378) + 127);
 	}
@@ -140,19 +142,19 @@ static void room_103_daemon() {
 	}
 
 	if (_scene->_frameStartTime >= local._updateClock) {
-		Common::Point pt = _game->_player._playerPos;
+		Common::Point pt = Common::Point(player.x, player.y);
 		int dist = Math::hypotenuse(pt.x - 79, pt.y - 137);
 		g_engine->_soundManager->command(29, (dist * -127 / 378) + 127);
 
-		pt = _game->_player._playerPos;
+		pt = Common::Point(player.x, player.y);
 		dist = Math::hypotenuse(pt.x - 69, pt.y - 80);
 		g_engine->_soundManager->command(30, (dist * -127 / 378) + 127);
 
-		pt = _game->_player._playerPos;
+		pt = Common::Point(player.x, player.y);
 		dist = Math::hypotenuse(pt.x - 266, pt.y - 138);
 		g_engine->_soundManager->command(32, (dist * -127 / 378) + 127);
 
-		local._updateClock = _scene->_frameStartTime + _game->_player._ticksAmount;
+		local._updateClock = _scene->_frameStartTime + player.frame_delay;
 	}
 }
 
@@ -164,33 +166,33 @@ static void room_103_parser() {
 	if (_action._savedFields._lookFlag)
 		text_show(10322);
 	else if (player_said_2(walk_through, door)) {
-		switch (_game->_trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
 
 		case 1:
 			g_engine->_soundManager->command(1, 0);
 			_scene->_nextSceneId = 102;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			break;
 
 		default:
 			break;
 		}
-	} else if (player_said_2(take, timer_module) && _game._objects.isInRoom(OBJ_TIMER_MODULE)) {
-		switch (_game->_trigger) {
+	} else if (player_said_2(take, timer_module) && object_is_here(OBJ_TIMER_MODULE)) {
+		switch (kernel.trigger) {
 		case 0:
 			_scene->changeVariant(1);
 			_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 3, 2);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[13]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_game->_player._visible = false;
-			_game->_player._stepEnabled = false;
+			player.walker_visible = false;
+			player.commands_allowed = false;
 			break;
 
 		case 1:
@@ -199,27 +201,27 @@ static void room_103_parser() {
 
 		case 2:
 			g_engine->_soundManager->command(22, 0);
-			_game._objects.addToInventory(OBJ_TIMER_MODULE);
+			inter_give_to_player(OBJ_TIMER_MODULE);
 			_scene->changeVariant(0);
 			_scene->drawElements(kTransitionNone, false);
 			_scene->_hotspots.activate(371, false);
-			_game->_player._visible = true;
-			_game->_player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			object_examine(OBJ_TIMER_MODULE, 805, 0);
 			break;
 
 		default:
 			break;
 		}
-	} else if (player_said_2(take, rebreather) && _game._objects.isInRoom(OBJ_REBREATHER)) {
-		switch (_game->_trigger) {
+	} else if (player_said_2(take, rebreather) && object_is_here(OBJ_REBREATHER)) {
+		switch (kernel.trigger) {
 		case 0:
 			_globals._sequenceIndexes[12] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[12], false, 3, 2);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[12]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_SPRITE, 6, 1);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_game->_player._visible = false;
-			_game->_player._stepEnabled = false;
+			player.walker_visible = false;
+			player.commands_allowed = false;
 			break;
 
 		case 1:
@@ -228,10 +230,10 @@ static void room_103_parser() {
 
 		case 2:
 			g_engine->_soundManager->command(22, 0);
-			_game._objects.addToInventory(OBJ_REBREATHER);
+			inter_give_to_player(OBJ_REBREATHER);
 			_scene->_hotspots.activate(289, false);
-			_game->_player._visible = true;
-			_game->_player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			object_examine(OBJ_REBREATHER, 804, 0);
 			break;
 
@@ -242,19 +244,19 @@ static void room_103_parser() {
 		text_show(10301);
 	else if (player_said_2(take, tasty_turkey)) {
 		// Take Turkey
-		if (!_game->_trigger)
+		if (!kernel.trigger)
 			g_engine->_soundManager->command(31, 0);
 
-		if (_game->_trigger < 2) {
-			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, _game->_trigger < 1 ? 1 : 0);
-			if (_game->_trigger) {
+		if (kernel.trigger < 2) {
+			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, kernel.trigger < 1 ? 1 : 0);
+			if (kernel.trigger) {
 				// Lock the turkey into a permanent "exploded" frame
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], -2, -2);
 
 				// Rex says "Gads.."
-				const char *msg = _game.getQuote(51);
+				const char *msg = quote_string(kernel.quotes, 51);
 				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 0, 60, msg);
-				_scene->_sequences.addTimer(120, _game->_trigger + 1);
+				_scene->_sequences.addTimer(120, kernel.trigger + 1);
 			} else {
 				// Initial turky explosion
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
@@ -262,10 +264,10 @@ static void room_103_parser() {
 		}
 
 		// Re-enable player if sequence is ended, and set global flag
-		_game._player._stepEnabled = _game._trigger == 2;
+		player.commands_allowed = kernel.trigger == 2;
 		_globals[kTurkeyExploded] = -1;
 
-		if (_game._trigger == 2) {
+		if (kernel.trigger == 2) {
 			// Show exposition dialog at end of sequence
 			text_show(10302);
 			_scene->_hotspots.activate(362, false);
@@ -273,18 +275,18 @@ static void room_103_parser() {
 	} else if (player_said_2(look, oven))
 		text_show(!_globals[kTurkeyExploded] ? 10323 : 10303);
 	else if (player_said_2(talkto, auxiliary_power)) {
-		switch (_game->_trigger) {
+		switch (kernel.trigger) {
 		case 0:
 		{
-			_game._player._stepEnabled = false;
-			const char *msg = _game.getQuote(71);
+			player.commands_allowed = false;
+			const char *msg = quote_string(kernel.quotes, 71);
 			_scene->_kernelMessages.add(Common::Point(), 0x1110, 18, 1, 120, msg);
 			break;
 		}
 
 		case 1:
 		{
-			const char *msg = _game.getQuote(72);
+			const char *msg = quote_string(kernel.quotes, 72);
 			_scene->_kernelMessages.add(Common::Point(310, 132), 0xFDFC, 16, 2, 120, msg);
 			break;
 		}
@@ -295,7 +297,7 @@ static void room_103_parser() {
 			break;
 
 		case 3:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			text_show(10306);
 			break;
 
@@ -326,14 +328,14 @@ static void room_103_parser() {
 		text_show(10317);
 	else if (player_said_2(look, engineering_controls))
 		text_show(10318);
-	else if (player_said_2(look, rebreather) && _game._objects.isInInventory(OBJ_REBREATHER))
+	else if (player_said_2(look, rebreather) && player_has(OBJ_REBREATHER))
 		text_show(10319);
-	else if (player_said_2(look, timer_module) && _game._objects.isInInventory(OBJ_TIMER_MODULE))
+	else if (player_said_2(look, timer_module) && player_has(OBJ_TIMER_MODULE))
 		text_show(10320);
 	else if (player_said_2(look, floor))
 		text_show(10321);
 	else if (player_said_2(look, workbench))
-		text_show(_game._objects.isInInventory(OBJ_TIMER_MODULE) ? 10324 : 10325);
+		text_show(player_has(OBJ_TIMER_MODULE) ? 10324 : 10325);
 	else
 		return;
 
@@ -345,7 +347,7 @@ void room_103_error() {
 		text_show(10305);
 		_action._inProgress = false;
 	} else if (player_said_3(put, coal, furnace)) {
-		const char *msg = _game.getQuote(73);
+		const char *msg = quote_string(kernel.quotes, 73);
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, msg);
 		_action._inProgress = false;
 	}
@@ -364,7 +366,7 @@ void room_103_preload() {
 	room_daemon_code_pointer = room_103_daemon;
 	room_error_code_pointer = room_103_error;
 
-	anim_himem_preload(formAnimName('A', -1), 3);
+	anim_himem_preload(kernel_name('A', -1), 3);
 
 	section_1_walker();
 	section_1_interface();
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 722e66c8b3c..020f0d2dc6e 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/quote.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -39,21 +40,24 @@ struct Scratch {
 static Scratch local;
 
 static void room_104_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('h', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('h', -1));
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 0, 0, 1);
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 8);
 
-	if (_scene->_priorSceneId == 105)
-		_game._player._playerPos = Common::Point(302, 107);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(160, 134);
+	if (_scene->_priorSceneId == 105) {
+		player.x = 302;
+		player.y = 107;
+	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 160;
+		player.y = 134;
+	}
 
 	local._loseFl = false;
-	_game.loadQuoteSet(0x35, 0x34, 0);
+	kernel.quotes = quote_load(0x35, 0x34, 0);
 	local._kargShootingFl = false;
 
 	if (g_engine->getRandomNumber(1, 3) == 1) {
-		_scene->loadAnimation(Resources::formatName(104, 'B', -1, EXT_AA, ""), 0);
+		_scene->loadAnimation(kernel_full_name(104, 'B', -1, "", EXT_AA), 0);
 		local._kargShootingFl = true;
 	}
 
@@ -61,31 +65,31 @@ static void room_104_init() {
 }
 
 static void room_104_daemon() {
-	if ((_game._player._playerPos == Common::Point(189, 70)) && (_game._trigger || !local._loseFl)) {
-		if (_game._player._facing == FACING_SOUTHWEST || _game._player._facing == FACING_SOUTHEAST)
-			_game._player._facing = FACING_SOUTH;
+	if ((Common::Point(player.x, player.y) == Common::Point(189, 70)) && (kernel.trigger || !local._loseFl)) {
+		if (player.facing == FACING_SOUTHWEST || player.facing == FACING_SOUTHEAST)
+			player.facing = FACING_SOUTH;
 
-		if (_game._player._facing == FACING_NORTHWEST || _game._player._facing == FACING_NORTHEAST)
-			_game._player._facing = FACING_NORTH;
+		if (player.facing == FACING_NORTHWEST || player.facing == FACING_NORTHEAST)
+			player.facing = FACING_NORTH;
 
 		bool mirrorFl = false;
-		if (_game._player._facing == FACING_WEST) {
-			_game._player._facing = FACING_EAST;
+		if (player.facing == FACING_WEST) {
+			player.facing = FACING_EAST;
 			mirrorFl = true;
 		}
 
 		local._loseFl = true;
 
-		switch (_game._player._facing) {
+		switch (player.facing) {
 		case FACING_EAST:
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				_scene->_kernelMessages.reset();
 				_scene->freeAnimation();
 				_scene->resetScene();
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
-				_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 0));
+				player.commands_allowed = false;
+				player.walker_visible = false;
+				_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
 				kernel_new_palette();
 				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], mirrorFl, 7, 1, 0, 0);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(198, 143));
@@ -111,14 +115,14 @@ static void room_104_daemon() {
 			break;
 
 		case FACING_SOUTH:
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				_scene->_kernelMessages.reset();
 				_scene->freeAnimation();
 				_scene->resetScene();
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
-				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 1));
+				player.commands_allowed = false;
+				player.walker_visible = false;
+				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 1));
 				kernel_new_palette();
 				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(198, 143));
@@ -153,20 +157,20 @@ static void room_104_daemon() {
 			break;
 
 		case FACING_NORTH:
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				_scene->_kernelMessages.reset();
 				_scene->freeAnimation();
 				_scene->resetScene();
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
-				_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('a', 2));
+				player.commands_allowed = false;
+				player.walker_visible = false;
+				_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
 				kernel_new_palette();
 				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 8, 1, 0, 0);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(198, 143));
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 4);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				if (_game._storyMode >= STORYMODE_NICE)
+				if (config_file.naughtiness >= STORYMODE_NICE)
 					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 15, 2);
 				break;
 
@@ -190,31 +194,31 @@ static void room_104_daemon() {
 			break;
 		}
 
-		if (!_game._trigger)
+		if (!kernel.trigger)
 			g_engine->_soundManager->command(34, 0);
 	}
 
-	if (_game._player._moving && (_scene->_rails.getNext() > 0)) {
-		_game._player.cancelCommand();
-		_game._player.startWalking(Common::Point(189, 70), FACING_NONE);
+	if (player.walking && (_scene->_rails.getNext() > 0)) {
+		player_cancel_command();
+		player_start_walking(189, 70, FACING_NONE);
 		_scene->_rails.resetNext();
 	}
 
-	if ((_game._player._special > 0) && _game._player._stepEnabled)
-		_game._player._stepEnabled = false;
+	if ((player.special_code > 0) && player.commands_allowed)
+		player.commands_allowed = false;
 
 	if (local._kargShootingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(52));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 52));
 		local._kargShootingFl = false;
 	}
 }
 
 static void room_104_pre_parser() {
 	if (player_said_2(swim_towards, eastern_cliff_face))
-		_game._player._walkOffScreenSceneId = 105;
+		player.walk_off_edge_to_room = 105;
 
 	if (player_said_2(swim_towards, open_area_to_south))
-		_game._player._walkOffScreenSceneId = 106;
+		player.walk_off_edge_to_room = 106;
 }
 
 static void room_104_parser() {
@@ -245,7 +249,7 @@ void room_104_preload() {
 	room_parser_code_pointer = room_104_parser;
 	room_daemon_code_pointer = room_104_daemon;
 
-	anim_himem_preload(formAnimName('A', -1), 3);
+	anim_himem_preload(kernel_name('A', -1), 3);
 
 	section_1_walker();
 	section_1_interface();
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index 588bf240f9a..4b4a2b432b0 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -39,8 +39,8 @@ static Scratch local;
 
 
 static void room_105_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('m', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('f', 4));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('m', 1));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('f', 4));
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 0, 0, 0);
 
 	if (_globals[kFishIn105]) {
@@ -51,30 +51,34 @@ static void room_105_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(56, 141), FACING_NORTHWEST);
 	}
 
-	if (_scene->_priorSceneId == 104)
-		_game._player._playerPos = Common::Point(13, 97);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(116, 147);
+	if (_scene->_priorSceneId == 104) {
+		player.x = 13;
+		player.y = 97;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 116;
+		player.y = 147;
+	}
 
-	_game.loadQuoteSet(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
+	kernel.quotes = quote_load(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
 	local._explosionFl = false;
 
 	section_1_music();
 }
 
 static void room_105_daemon() {
-	if ((_game._player._playerPos == Common::Point(170, 87)) && (_game._trigger || !local._explosionFl)) {
+	if ((Common::Point(player.x, player.y) == Common::Point(170, 87)) && (kernel.trigger || !local._explosionFl)) {
 		local._explosionFl = true;
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			_scene->_kernelMessages.reset();
 			_scene->resetScene();
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 
-			_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('m', 0));
-			_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('m', 2));
-			_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('m', 3));
+			_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('m', 0));
+			_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
+			_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('m', 3));
 			g_engine->_soundManager->command(33, 0);
 			_scene->clearSequenceList();
 			kernel_new_palette();
@@ -83,7 +87,7 @@ static void room_105_daemon() {
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 8);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 
-			if (_game._storyMode >= STORYMODE_NICE)
+			if (config_file.naughtiness >= STORYMODE_NICE)
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 8, 3);
 			break;
 
@@ -119,38 +123,38 @@ static void room_105_daemon() {
 		}
 	}
 
-	if (_game._player._moving && (_scene->_rails.getNext() > 0)) {
-		_game._player.cancelCommand();
-		_game._player.startWalking(Common::Point(170, 87), FACING_NONE);
+	if (player.walking && (_scene->_rails.getNext() > 0)) {
+		player_cancel_command();
+		player_start_walking(170, 87, FACING_NONE);
 		_scene->_rails.resetNext();
 	}
 
-	if ((_game._player._special > 0) && _game._player._stepEnabled)
-		_game._player._stepEnabled = false;
+	if ((player.special_code > 0) && player.commands_allowed)
+		player.commands_allowed = false;
 }
 
 static void room_105_pre_parser() {
 	if (player_said_2(swim_towards, western_cliff_face))
-		_game._player._walkOffScreenSceneId = 104;
+		player.walk_off_edge_to_room = 104;
 
 	if (player_said_2(swim_towards, open_area_to_south))
-		_game._player._walkOffScreenSceneId = 107;
+		player.walk_off_edge_to_room = 107;
 
 	if (player_said_1(mine) && (player_said_1(talkto) || player_said_1(look)))
-		_game._player._needToWalk = false;
+		player.need_to_walk = false;
 }
 
 static void room_105_parser() {
 	if (_action._lookFlag)
 		text_show(10512);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn105]) {
-		if (_game._objects.isInInventory(OBJ_DEAD_FISH)) {
+		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-			_game._objects.addToInventory(OBJ_DEAD_FISH);
+			inter_give_to_player(OBJ_DEAD_FISH);
 			_globals[kFishIn105] = false;
 			object_examine(OBJ_DEAD_FISH, 802, 0);
 		}
@@ -190,7 +194,7 @@ void room_105_preload() {
 	room_parser_code_pointer = room_105_parser;
 	room_daemon_code_pointer = room_105_daemon;
 
-	anim_himem_preload(formAnimName('A', -1), 3);
+	anim_himem_preload(kernel_name('A', -1), 3);
 
 	section_1_walker();
 	section_1_interface();
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index 6b3e1d18791..b197000de7e 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -42,38 +42,42 @@ static Scratch local;
 
 
 static void room_106_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('H', -1));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('H', -1));
 
-	if (_game._objects.isInInventory(OBJ_REBREATHER) || (_scene->_priorSceneId != 102) || _scene->_roomChanged) {
-		_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('A', 0));
-		_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('A', 1));
+	if (player_has(OBJ_REBREATHER) || (_scene->_priorSceneId != 102) || _scene->_roomChanged) {
+		_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('A', 0));
+		_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('A', 1));
 	}
 
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('G', -1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('G', -1));
 	_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 21, 0, 0, 0);
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('I', -1));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('I', -1));
 	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 32, 47);
 
 	if (_scene->_priorSceneId == 102) {
 		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 1, 4, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
-		_game._player._facing = FACING_EAST;
-		_game._player._playerPos = Common::Point(106, 69);
+		player.walker_visible = false;
+		player.commands_allowed = false;
+		player.facing = FACING_EAST;
+		player.x = 106;
+		player.y = 69;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		if (_scene->_priorSceneId == 107) {
-			_game._player._playerPos = Common::Point(319, 84);
-			_game._player._facing = _game._player._prepareWalkFacing = FACING_WEST;
+			player.x = 319;
+			player.y = 84;
+			player.facing = player.prepare_walk_facing = FACING_WEST;
 		} else {
-			_game._player._playerPos = Common::Point(319, 44);
-			_game._player._facing = _game._player._prepareWalkFacing = FACING_SOUTHWEST;
-			_scene->_sprites[_game._player._spritesStart + 3]->_charInfo->_velocity = 24;
+			player.x = 319;
+			player.y = 44;
+			player.facing = player.prepare_walk_facing = FACING_SOUTHWEST;
+			_scene->_sprites[player.series_base + 3]->_charInfo->_velocity = 24;
 		}
 
-		_game._player._prepareWalkPos = Common::Point(246, 69);
-		_game._player._needToWalk = true;
-		_game._player._readyToWalk = true;
+		player.prepare_walk_x = 246;
+		player.prepare_walk_y = 69;
+		player.need_to_walk = true;
+		player.ready_to_walk = true;
 	}
 
 	if (_scene->_priorSceneId != 102) {
@@ -86,47 +90,48 @@ static void room_106_init() {
 	local._shadowFl = false;
 	local._firstEmergingFl = false;
 
-	_game.loadQuoteSet(0x31, 0x32, 0x34, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0);
+	kernel.quotes = quote_load(0x31, 0x32, 0x34, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0);
 	section_1_music();
 }
 
 static void room_106_daemon() {
-	if (_game._trigger == 70) {
+	if (kernel.trigger == 70) {
 		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -2, -2);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14);
 
-		if (!_game._objects.isInInventory(OBJ_REBREATHER) && !_scene->_roomChanged) {
-			_scene->loadAnimation(Resources::formatName(106, 'A', -1, EXT_AA, ""), 75);
+		if (!player_has(OBJ_REBREATHER) && !_scene->_roomChanged) {
+			_scene->loadAnimation(kernel_full_name(106, 'A', -1, "", EXT_AA), 75);
 		} else {
 			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 4, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 28, 71);
 		}
 	}
 
-	if (_game._trigger == 71) {
-		_game._player._prepareWalkPos = Common::Point(246, 69);
-		_game._player._prepareWalkFacing = FACING_EAST;
-		_game._player._needToWalk = true;
-		_game._player._readyToWalk = true;
-		_game._player._visible = true;
+	if (kernel.trigger == 71) {
+		player.prepare_walk_x = 246;
+		player.prepare_walk_y = 69;
+		player.prepare_walk_facing = FACING_EAST;
+		player.need_to_walk = true;
+		player.ready_to_walk = true;
+		player.walker_visible = true;
 
-		if (_game._visitedScenes._sceneRevisited) {
-			_game._player._stepEnabled = true;
+		if (player.been_here_before) {
+			player.commands_allowed = true;
 		} else {
-			_game._player._prepareWalkFacing = FACING_SOUTHWEST;
+			player.prepare_walk_facing = FACING_SOUTHWEST;
 			local._firstEmergingFl = true;
-			_scene->loadAnimation(Resources::formatName(106, 'B', -1, EXT_AA, ""), 80);
+			_scene->loadAnimation(kernel_full_name(106, 'B', -1, "", EXT_AA), 80);
 		}
 	}
 
 	if (local._firstEmergingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
 		local._firstEmergingFl = false;
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(52));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 52));
 	}
 
-	if ((_game._trigger >= 80) && (_game._trigger <= 87)) {
-		int tmpVal = _game._trigger - 80;
+	if ((kernel.trigger >= 80) && (kernel.trigger <= 87)) {
+		int tmpVal = kernel.trigger - 80;
 		int msgId = -1;
 		switch (tmpVal) {
 		case 0:
@@ -148,13 +153,13 @@ static void room_106_daemon() {
 
 		default:
 			msgId = -1;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			break;
 		}
 
 		if (msgId >= 0) {
-			int nextTrigger = _game._trigger + 1;
-			_scene->_kernelMessages.add(Common::Point(15, local._positionY), 0x1110, 0, 0, 360, _game.getQuote(msgId));
+			int nextTrigger = kernel.trigger + 1;
+			_scene->_kernelMessages.add(Common::Point(15, local._positionY), 0x1110, 0, 0, 360, quote_string(kernel.quotes, msgId));
 			_scene->_sequences.addTimer(150, nextTrigger);
 			local._positionY += 14;
 		}
@@ -162,47 +167,48 @@ static void room_106_daemon() {
 
 	if (local._backToShipFl) {
 		if (!local._shadowFl) {
-			if (_game._player._playerPos.x < 204) {
+			if (player.x < 204) {
 				local._shadowFl = true;
 				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 4, 1, 0, 0);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 44, 73);
 			}
-		} else if (_game._trigger == 73)
-			_game._player._visible = false;
-		else if (_game._trigger == 72)
+		} else if (kernel.trigger == 73)
+			player.walker_visible = false;
+		else if (kernel.trigger == 72)
 			_scene->_sequences.addTimer(24, 74);
-		else if (_game._trigger == 74)
+		else if (kernel.trigger == 74)
 			_scene->_nextSceneId = 102;
 	}
 
-	if (_game._trigger == 75) {
-		_game._visitedScenes.pop_back();
+	if (kernel.trigger == 75) {
+		player_undiscover_room();
 		_scene->_nextSceneId = 102;
 	}
 }
 
 static void room_106_pre_parser() {
 	if (player_said_2(swim_towards, sea_cliff) || player_said_2(swim_towards, seaweed_bank)) {
-		_game._player._stepEnabled = false;
-		_scene->_sprites[_game._player._spritesStart + 1]->_charInfo->_velocity = 24;
-		_game._player._walkOffScreenSceneId = 104;
+		player.commands_allowed = false;
+		_scene->_sprites[player.series_base + 1]->_charInfo->_velocity = 24;
+		player.walk_off_edge_to_room = 104;
 	}
 
 	if (player_said_2(swim_towards, open_area_to_east))
-		_game._player._walkOffScreenSceneId = 107;
+		player.walk_off_edge_to_room = 107;
 }
 
 static void room_106_parser() {
 	if (_action._lookFlag)
 		text_show(10614);
 	else if (player_said_2(swim_to, main_airlock)) {
-		_game._player._stepEnabled = false;
-		_game._player._prepareWalkPos = Common::Point(95, 72);
-		_game._player._prepareWalkFacing = FACING_WEST;
-		_game._player._needToWalk = true;
-		_game._player._readyToWalk = true;
-		_game._player._frameNumber = 9;
+		player.commands_allowed = false;
+		player.prepare_walk_x = 95;
+		player.prepare_walk_y = 72;
+		player.prepare_walk_facing = FACING_WEST;
+		player.need_to_walk = true;
+		player.ready_to_walk = true;
+		player.sprite = 9;
 		local._backToShipFl = true;
 	} else if (player_said_2(look, anemone) || player_said_2(look_at, anemone))
 		text_show(10601);
@@ -252,7 +258,7 @@ void room_106_preload() {
 	section_1_walker();
 	section_1_interface();
 
-	if ((_scene->_priorSceneId == 102) && !_game._objects.isInInventory(OBJ_REBREATHER) && !_scene->_roomChanged)
+	if ((_scene->_priorSceneId == 102) && !player_has(OBJ_REBREATHER) && !_scene->_roomChanged)
 		*player.series_name = '\0';
 
 	text_default_y = 100;
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index ecd301b4974..9600754a545 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -40,9 +40,9 @@ static Scratch local;
 
 static void room_107_init() {
 	for (int i = 0; i < 3; i++)
-		_globals._spriteIndexes[i + 1] = _scene->_sprites.addSprites(formAnimName('G', i));
+		_globals._spriteIndexes[i + 1] = _scene->_sprites.addSprites(kernel_name('G', i));
 
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(Resources::formatName(105, 'f', 4, EXT_SS, ""));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
 
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 0, 0, 7);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 17, 0, 0, 13);
@@ -59,15 +59,21 @@ static void room_107_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(78, 135), FACING_SOUTHWEST);
 	}
 
-	if (_scene->_priorSceneId == 105)
-		_game._player._playerPos = Common::Point(132, 47);
-	else if (_scene->_priorSceneId == 106)
-		_game._player._playerPos = Common::Point(20, 91);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(223, 151);
+	if (_scene->_priorSceneId == 105) {
+		player.x = 132;
+		player.y = 47;
+	}
+	else if (_scene->_priorSceneId == 106) {
+		player.x = 20;
+		player.y = 91;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 223;
+		player.y = 151;
+	}
 
 	if (((_scene->_priorSceneId == 105) || (_scene->_priorSceneId == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(Resources::formatName(105, 'R', 1, EXT_SS, ""));
+		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_full_name(105, 'R', 1, "", EXT_SS));
 		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], true, 4, 0, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[0], Common::Point(270, 150));
 		_scene->_sequences.setMotion(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
@@ -75,11 +81,11 @@ static void room_107_init() {
 		_scene->_dynamicHotspots.add(words_manta_ray, words_swim_to, _globals._sequenceIndexes[0], Common::Rect(0, 0, 0, 0));
 	}
 
-	_game.loadQuoteSet(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
+	kernel.quotes = quote_load(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
 	local._shootingFl = false;
 
 	if (g_engine->getRandomNumber(1, 3) == 1) {
-		_scene->loadAnimation(Resources::formatName(107, 'B', -1, EXT_AA, ""), 0);
+		_scene->loadAnimation(kernel_full_name(107, 'B', -1, "", EXT_AA), 0);
 		local._shootingFl = true;
 	}
 
@@ -88,30 +94,30 @@ static void room_107_init() {
 
 static void room_107_daemon() {
 	if (local._shootingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(52));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 52));
 		local._shootingFl = false;
 	}
 }
 
 static void room_107_pre_parser() {
 	if (player_said_2(swim_towards, open_area_to_west))
-		_game._player._walkOffScreenSceneId = 106;
+		player.walk_off_edge_to_room = 106;
 
 	if (player_said_2(swim_towards, open_area_to_south))
-		_game._player._walkOffScreenSceneId = 108;
+		player.walk_off_edge_to_room = 108;
 }
 
 static void room_107_parser() {
 	if (_action._lookFlag)
 		text_show(10708);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn107]) {
-		if (_game._objects.isInInventory(OBJ_DEAD_FISH)) {
+		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-			_game._objects.addToInventory(OBJ_DEAD_FISH);
+			inter_give_to_player(OBJ_DEAD_FISH);
 			_globals[kFishIn107] = false;
 			object_examine(OBJ_DEAD_FISH, 802, 0);
 		}
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index 9dfb53ee329..ed1044d6ae0 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -35,11 +35,11 @@ static void room_108_init() {
 	if (_globals[kHoovicSated] == 2)
 		_globals[kHoovicSated] = 0;
 
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('X', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('X', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(Resources::formatName(105, 'f', 4, EXT_SS, ""));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
 
 	_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 13, 0, 0, 7);
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 16, 0, 0, 9);
@@ -56,12 +56,16 @@ static void room_108_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(41, 109), FACING_NORTHWEST);
 	}
 
-	if (_scene->_priorSceneId == 107)
-		_game._player._playerPos = Common::Point(138, 58);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(305, 98);
+	if (_scene->_priorSceneId == 107) {
+		player.x = 138;
+		player.y = 58;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 305;
+		player.y = 98;
+	}
 
-	_game.loadQuoteSet(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
+	kernel.quotes = quote_load(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
 	section_1_music();
 }
 
@@ -71,20 +75,20 @@ static void room_108_daemon() {
 
 static void room_108_pre_parser() {
 	if (player_said_2(swim_under, overhang_to_east))
-		_game._player._walkOffScreenSceneId = 109;
+		player.walk_off_edge_to_room = 109;
 }
 
 static void room_108_parser() {
 	if (_action._lookFlag)
 		text_show(10812);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn108]) {
-		if (_game._objects.isInInventory(OBJ_DEAD_FISH)) {
+		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		} else {
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-			_game._objects.addToInventory(OBJ_DEAD_FISH);
+			inter_give_to_player(OBJ_DEAD_FISH);
 			_globals[kFishIn108] = false;
 			object_examine(OBJ_DEAD_FISH, 10808, 0);
 		}
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 679ce96a5d8..84b0fe80e4e 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -52,10 +52,10 @@ static void room_109_init() {
 	_globals[kFishIn105] = true;
 
 	_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*RXSWRC_6");
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('O', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('O', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('O', 0));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('H', 4));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('O', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('O', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('O', 0));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('H', 4));
 
 	local._rexThrowingObject = false;
 	local._throwingObjectId = 0;
@@ -64,11 +64,13 @@ static void room_109_init() {
 	local._hungryFl = false;
 
 	if (_scene->_priorSceneId == 110) {
-		_game._player._playerPos = Common::Point(248, 38);
+		player.x = 248;
+		player.y = 38;
 		_globals[kHoovicSated] = 2;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(20, 68);
-		_game._player._facing = FACING_EAST;
+		player.x = 20;
+		player.y = 68;
+		player.facing = FACING_EAST;
 	}
 
 	if (!_globals[kHoovicAlive]) {
@@ -87,35 +89,35 @@ static void room_109_init() {
 	if (!_globals[kHoovicAlive] || _globals[kHoovicSated])
 		_scene->changeVariant(1);
 
-	if (_game._objects.isInRoom(OBJ_BURGER)) {
+	if (object_is_here(OBJ_BURGER)) {
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -2, -2);
 		int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
 	} else if (_scene->_roomChanged)
-		_game._objects.addToInventory(OBJ_BURGER);
+		inter_give_to_player(OBJ_BURGER);
 
 	if (_scene->_roomChanged) {
-		_game._objects.addToInventory(OBJ_DEAD_FISH);
-		_game._objects.addToInventory(OBJ_STUFFED_FISH);
+		inter_give_to_player(OBJ_DEAD_FISH);
+		inter_give_to_player(OBJ_STUFFED_FISH);
 	}
 
 	pal_change_color(252, 50, 50, 63);
 	pal_change_color(253, 30, 30, 50);
 
-	_game.loadQuoteSet(0x53, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0);
-	local._eatingFirstFish = (!_game._visitedScenes._sceneRevisited) && (_scene->_priorSceneId < 110);
+	kernel.quotes = quote_load(0x53, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0);
+	local._eatingFirstFish = (!player.been_here_before) && (_scene->_priorSceneId < 110);
 
 	if (local._eatingFirstFish) {
-		_globals._spriteIndexes[10] = _scene->_sprites.addSprites(Resources::formatName(105, 'F', 1, EXT_SS, ""));
-		_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('H', 1));
+		_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_full_name(105, 'F', 1, "", EXT_SS));
+		_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('H', 1));
 
 		_globals._sequenceIndexes[10] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[10], true, 4, 0, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 5);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(126, 39));
 		_scene->_sequences.setMotion(_globals._sequenceIndexes[10], 0, 200, 0);
 		_scene->_sequences.setScale(_globals._sequenceIndexes[10], 80);
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 	}
 
 	section_1_music();
@@ -124,7 +126,7 @@ static void room_109_init() {
 static void room_109_daemon() {
 	if (local._beforeEatingRex) {
 		if (!local._eatingRex) {
-			if (_game._player._playerPos.x > 205) {
+			if (player.x > 205) {
 				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 1, 0, 0);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 4);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 6, 70);
@@ -134,9 +136,9 @@ static void room_109_daemon() {
 				g_engine->_soundManager->command(34, 0);
 			}
 		} else {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 70:
-				_game._player._visible = false;
+				player.walker_visible = false;
 				break;
 
 			case 71:
@@ -149,19 +151,19 @@ static void room_109_daemon() {
 		}
 	}
 
-	if (local._hungryFl && (_game._player._playerPos == Common::Point(160, 32)) && (_game._player._facing == FACING_EAST)) {
-		_game._player.walk(Common::Point(226, 24), FACING_EAST);
-		_game._player._stepEnabled = false;
+	if (local._hungryFl && (Common::Point(player.x, player.y) == Common::Point(160, 32)) && (player.facing == FACING_EAST)) {
+		player_walk(226, 24, FACING_EAST);
+		player.commands_allowed = false;
 		local._hungryFl = false;
 		local._beforeEatingRex = true;
 		_scene->_sprites.remove(_globals._spriteIndexes[6]);
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('H', 0));
+		_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('H', 0));
 		kernel_new_palette();
 	}
 
-	if (_game._player._moving && (_scene->_rails.getNext() > 0) && _globals[kHoovicAlive] && !_globals[kHoovicSated] && !local._hungryFl && !local._beforeEatingRex) {
-		_game._player.cancelCommand();
-		_game._player.startWalking(Common::Point(160, 32), FACING_EAST);
+	if (player.walking && (_scene->_rails.getNext() > 0) && _globals[kHoovicAlive] && !_globals[kHoovicSated] && !local._hungryFl && !local._beforeEatingRex) {
+		player_cancel_command();
+		player_start_walking(160, 32, FACING_EAST);
 		_scene->_rails.resetNext();
 		local._hungryFl = true;
 	}
@@ -173,14 +175,14 @@ static void room_109_daemon() {
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 29, 73);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[10], _globals._sequenceIndexes[9]);
 		local._eatingFirstFish = false;
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		g_engine->_soundManager->command(34, 0);
 	}
 
-	if (_game._trigger == 72)
+	if (kernel.trigger == 72)
 		_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 
-	if (_game._trigger == 73) {
+	if (kernel.trigger == 73) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[9]);
 		_scene->_sprites.remove(_globals._spriteIndexes[9]);
 		_scene->_sprites.remove(_globals._spriteIndexes[10]);
@@ -189,7 +191,7 @@ static void room_109_daemon() {
 		_scene->_spriteSlots.fullRefresh();
 
 		int randVal = g_engine->getRandomNumber(85, 88);
-		int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(randVal));
+		int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		_scene->_kernelMessages.setQuoted(idx, 4, true);
 		_scene->_kernelMessages._entries[idx]._frameTimer = _scene->_frameStartTime + 4;
 	}
@@ -197,23 +199,24 @@ static void room_109_daemon() {
 
 static void room_109_pre_parser() {
 	if (player_said_2(swim_under, overhang_to_west))
-		_game._player._walkOffScreenSceneId = 108;
+		player.walk_off_edge_to_room = 108;
 
 	if ((player_said_1(throw) || player_said_1(give) || player_said_1(put))
 		&& (player_said_1(small_hole) || player_said_1(tunnel))
 		&& (player_said_1(dead_fish) || player_said_1(stuffed_fish) || player_said_1(burger))) {
-		int idx = _game._objects.getIdFromDesc(_action._activeAction._objectNameId);
-		if ((idx >= 0) && _game._objects.isInInventory(idx)) {
-			_game._player._prepareWalkPos = Common::Point(106, 38);
-			_game._player._prepareWalkFacing = FACING_EAST;
-			_game._player._needToWalk = true;
-			_game._player._readyToWalk = true;
+		int idx = object_named(_action._activeAction._objectNameId);
+		if ((idx >= 0) && player_has(idx)) {
+			player.prepare_walk_x = 106;
+			player.prepare_walk_y = 38;
+			player.prepare_walk_facing = FACING_EAST;
+			player.need_to_walk = true;
+			player.ready_to_walk = true;
 		}
 	}
 
 	if ((player_said_2(swim_into, tunnel) || player_said_2(swim_to, small_hole))
 		&& (!_globals[kHoovicAlive] || _globals[kHoovicSated]) && (player_said_1(tunnel)))
-		_game._player._walkOffScreenSceneId = 110;
+		player.walk_off_edge_to_room = 110;
 
 	local._hungryFl = false;
 }
@@ -227,29 +230,29 @@ static void room_109_parser() {
 
 	if ((player_said_1(throw) || player_said_1(give)) && (player_said_1(small_hole) || player_said_1(tunnel))) {
 		if (player_said_1(dead_fish) || player_said_1(stuffed_fish) || player_said_1(burger)) {
-			local._throwingObjectId = _game._objects.getIdFromDesc(_action._activeAction._objectNameId);
+			local._throwingObjectId = object_named(_action._activeAction._objectNameId);
 			if (local._throwingObjectId >= 0) {
-				if ((_game._objects.isInInventory(local._throwingObjectId) && _globals[kHoovicAlive]) || local._rexThrowingObject) {
-					switch (_game._trigger) {
+				if ((player_has(local._throwingObjectId) && _globals[kHoovicAlive]) || local._rexThrowingObject) {
+					switch (kernel.trigger) {
 					case 0:
 						local._rexThrowingObject = true;
 						local._hoovicDifficultFl = false;
-						_game._objects.setRoom(local._throwingObjectId, NOWHERE);
+						inter_move_object(local._throwingObjectId, NOWHERE);
 						_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 4, 1, 0, 0);
 						_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[0]);
 						_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-						_game._player._visible = false;
-						_game._player._stepEnabled = false;
+						player.walker_visible = false;
+						player.commands_allowed = false;
 
 						switch (local._throwingObjectId) {
 						case OBJ_DEAD_FISH:
 						case OBJ_STUFFED_FISH:
-							_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('H', 1));
+							_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('H', 1));
 							break;
 
 						case OBJ_BURGER:
-							local._hoovicDifficultFl = (_game._difficulty == DIFFICULTY_HARD);
-							_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('H', (local._hoovicDifficultFl ? 3 : 1)));
+							local._hoovicDifficultFl = (game.difficulty == DIFFICULTY_HARD);
+							_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('H', (local._hoovicDifficultFl ? 3 : 1)));
 							break;
 
 						default:
@@ -260,7 +263,7 @@ static void room_109_parser() {
 						break;
 
 					case 1:
-						_game._player._visible = true;
+						player.walker_visible = true;
 						local._hoovicTrigger = 4;
 						switch (local._throwingObjectId) {
 						case OBJ_BURGER:
@@ -301,7 +304,7 @@ static void room_109_parser() {
 						break;
 
 					case 3:
-						_scene->loadAnimation(Resources::formatName(109, 'H', 2, EXT_AA, ""), 4);
+						_scene->loadAnimation(kernel_full_name(109, 'H', 2, "", EXT_AA), 4);
 						g_engine->_soundManager->command(35, 0);
 						_globals[kHoovicAlive] = false;
 						break;
@@ -322,7 +325,7 @@ static void room_109_parser() {
 							if (local._throwingObjectId == OBJ_DEAD_FISH) {
 								++_globals[kHoovicFishEaten];
 								int threshold;
-								switch (_game._difficulty) {
+								switch (game.difficulty) {
 								case DIFFICULTY_HARD:
 									threshold = 1;
 									break;
@@ -336,7 +339,7 @@ static void room_109_parser() {
 
 								if (_globals[kHoovicFishEaten] >= threshold) {
 									int randVal = g_engine->getRandomNumber(83, 84);
-									_scene->_kernelMessages.add(Common::Point(230, 24), 0xFDFC, 0, 0, 120, _game.getQuote(randVal));
+									_scene->_kernelMessages.add(Common::Point(230, 24), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, randVal));
 									_globals[kHoovicFishEaten] = 0;
 									_globals[kHoovicSated] = 1;
 									_scene->changeVariant(1);
@@ -349,18 +352,18 @@ static void room_109_parser() {
 						_scene->_spriteSlots.clear();
 						_scene->_spriteSlots.fullRefresh();
 						_scene->_sequences.scan();
-						if (_game._player._visible) {
-							_game._player._forceRefresh = true;
-							_game._player.update();
+						if (player.walker_visible) {
+							player.sprite_changed = true;
+							player_set_image();
 						}
 
-						_game._player._stepEnabled = true;
+						player.commands_allowed = true;
 						local._rexThrowingObject = false;
 						break;
 
 					case 5:
 					{
-						_game._objects.setRoom(OBJ_BURGER, _scene->_currentSceneId);
+						inter_move_object(OBJ_BURGER, _scene->_currentSceneId);
 						_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
 						_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 30, 30);
 						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
@@ -400,16 +403,16 @@ static void room_109_parser() {
 					}
 					_action._inProgress = false;
 					return;
-				} else if (_game._objects.isInInventory(local._throwingObjectId)) {
+				} else if (player_has(local._throwingObjectId)) {
 					// Nothing.
 				}
 			}
 		}
 	}
 
-	if (player_said_2(take, burger) && _game._objects.isInRoom(OBJ_BURGER)) {
+	if (player_said_2(take, burger) && object_is_here(OBJ_BURGER)) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_game._objects.addToInventory(OBJ_BURGER);
+		inter_give_to_player(OBJ_BURGER);
 	} else if (player_said_2(look, ocean_floor))
 		text_show(10901);
 	else if (player_said_2(look, coral))
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 5f89ba4dbfd..eaa065cc40e 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -39,16 +39,17 @@ static Scratch local;
 
 
 static void room_110_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('X', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('X', 3));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
 
 	local._crabsFl = false;
 
 	if (_scene->_priorSceneId == 109) {
-		_game._player._playerPos = Common::Point(59, 71);
-		_game._player._facing = FACING_EAST;
+		player.x = 59;
+		player.y = 71;
+		player.facing = FACING_EAST;
 
 		_globals._sequenceIndexes[0] = _scene->_sequences.startCycle(_globals._spriteIndexes[0], false, 1);
 		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
@@ -66,30 +67,31 @@ static void room_110_init() {
 		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(194, 23);
-		_game._player._facing = FACING_SOUTH;
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
-		_scene->loadAnimation(Resources::formatName(110, 'T', 1, EXT_AA, ""), 70);
+		player.x = 194;
+		player.y = 23;
+		player.facing = FACING_SOUTH;
+		player.walker_visible = false;
+		player.commands_allowed = false;
+		_scene->loadAnimation(kernel_full_name(110, 'T', 1, "", EXT_AA), 70);
 	}
 
 	section_1_music();
-	_game.loadQuoteSet(89, 0);
+	kernel.quotes = quote_load(89, 0);
 
-	if (!_game._visitedScenes._sceneRevisited && (_scene->_priorSceneId == 109))
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(89));
+	if (!player.been_here_before && (_scene->_priorSceneId == 109))
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 89));
 }
 
 static void room_110_daemon() {
-	if (_game._trigger == 70) {
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
+	if (kernel.trigger == 70) {
+		player.walker_visible = true;
+		player.commands_allowed = true;
 	}
 }
 
 static void room_110_pre_parser() {
 	if (player_said_2(swim_through, cave_entrance))
-		_game._player._walkOffScreenSceneId = 109;
+		player.walk_off_edge_to_room = 109;
 
 	if (local._crabsFl) {
 		local._crabsFl = false;
@@ -117,16 +119,16 @@ static void room_110_pre_parser() {
 
 static void room_110_parser() {
 	if (player_said_2(swim_through, tunnel)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_scene->loadAnimation(Resources::formatName(110, 'T', 0, EXT_AA, ""), 1);
-			_scene->_animation[0]->setNextFrameTimer(_game._player._ticksAmount + _game._player._priorTimer);
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			_scene->loadAnimation(kernel_full_name(110, 'T', 0, "", EXT_AA), 1);
+			_scene->_animation[0]->setNextFrameTimer(player.frame_delay + player.clock);
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			break;
 		case 1:
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			_scene->_nextSceneId = 111;
 			break;
 		default:
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index 05601f542b1..652f4fb5cde 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -42,13 +42,13 @@ static Scratch local;
 
 
 static void room_111_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('X', 2));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('B', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('B', 1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('B', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('B', 0));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('B', 1));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('B', 2));
 
 	_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 8, 0, 0, 0);
 	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 9, 73);
@@ -73,19 +73,21 @@ static void room_111_init() {
 	local._stampedFl = false;
 
 	if ((_scene->_priorSceneId < 201) && (_scene->_priorSceneId != RETURNING_FROM_DIALOG)) {
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
-		_scene->loadAnimation(Resources::formatName(111, 'A', 0, EXT_AA, ""), 70);
-		_game._player._playerPos = Common::Point(234, 116);
-		_game._player._facing = FACING_EAST;
+		player.commands_allowed = false;
+		player.walker_visible = false;
+		_scene->loadAnimation(kernel_full_name(111, 'A', 0, "", EXT_AA), 70);
+		player.x = 234;
+		player.y = 116;
+		player.facing = FACING_EAST;
 
 		local._launch1Fl = true;
 		local._launched2Fl = true;
 
 		g_engine->_soundManager->command(36, 0);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(300, 130);
-		_game._player._facing = FACING_WEST;
+		player.x = 300;
+		player.y = 130;
+		player.facing = FACING_WEST;
 	}
 
 	local._rexDivingFl = false;
@@ -94,20 +96,20 @@ static void room_111_init() {
 }
 
 static void room_111_daemon() {
-	if (_game._trigger == 70) {
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
+	if (kernel.trigger == 70) {
+		player.commands_allowed = true;
+		player.walker_visible = true;
 		local._launch1Fl = false;
 		local._launched2Fl = false;
 	}
 
-	if ((_game._trigger == 71) && !local._stampedFl) {
+	if ((kernel.trigger == 71) && !local._stampedFl) {
 		local._stampedFl = true;
 		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 18, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 	}
 
-	if (_game._trigger == 72) {
+	if (kernel.trigger == 72) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 20);
 	}
@@ -128,7 +130,7 @@ static void room_111_daemon() {
 		local._launched2Fl = true;
 	}
 
-	if (_game._trigger == 73)
+	if (kernel.trigger == 73)
 		g_engine->_soundManager->command(37, 0);
 
 	if (local._rexDivingFl && (_scene->_animation[0]->getCurrentFrame() >= 9)) {
@@ -139,17 +141,17 @@ static void room_111_daemon() {
 
 static void room_111_pre_parser() {
 	if (player_said_2(walk_through, cave_entrance))
-		_game._player._walkOffScreenSceneId = 212;
+		player.walk_off_edge_to_room = 212;
 }
 
 static void room_111_parser() {
-	if (player_said_2(dive_into, pool) && _game._objects.isInInventory(OBJ_REBREATHER)) {
-		switch (_game._trigger) {
+	if (player_said_2(dive_into, pool) && player_has(OBJ_REBREATHER)) {
+		switch (kernel.trigger) {
 		case 0:
-			_scene->loadAnimation(Resources::formatName(111, 'A', 1, EXT_AA, ""), 1);
+			_scene->loadAnimation(kernel_full_name(111, 'A', 1, "", EXT_AA), 1);
 			local._rexDivingFl = true;
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index dc678a665e5..6a2adaed8b6 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -34,42 +34,42 @@ namespace Rooms {
 static void room_112_init() {
 	section_1_music();
 
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('X', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('X', 5));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('X', 5));
 
 	_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 10, 0, 17, 20);
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 4, 0, 0, 0);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 3, 0);
 
-	_game._player._stepEnabled = false;
-	_game._player._visible = false;
+	player.commands_allowed = false;
+	player.walker_visible = false;
 
 	_scene->_userInterface.emptyConversationList();
 	_scene->_userInterface.setup(kInputConversation);
 
-	_scene->loadAnimation(Resources::formatName(112, 'X', -1, EXT_AA, ""), 70);
+	_scene->loadAnimation(kernel_full_name(112, 'X', -1, "", EXT_AA), 70);
 }
 
 static void room_112_daemon() {
-	if ((_scene->_animation[0] != nullptr) && (_game._storyMode == STORYMODE_NICE)) {
+	if ((_scene->_animation[0] != nullptr) && (config_file.naughtiness == STORYMODE_NICE)) {
 		if (_scene->_animation[0]->getCurrentFrame() >= 54) {
 			_scene->freeAnimation();
-			_game._trigger = 70;
+			kernel.trigger = 70;
 		}
 	}
 
-	if (_game._trigger == 70) {
+	if (kernel.trigger == 70) {
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 3, 0, 11);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 1);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
-	if (_game._trigger == 71) {
+	if (kernel.trigger == 71) {
 		_scene->_nextSceneId = 101;
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
+		player.commands_allowed = true;
+		player.walker_visible = true;
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index bd476a55b07..2b38b1b91e0 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -40,10 +40,10 @@ static Scratch local;
 
 
 static void room_201_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('m', -1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('b', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('m', -1));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('b', -1));
 	_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*SC002Z1");
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 1, 0);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 0, 0, 50);
@@ -56,15 +56,17 @@ static void room_201_init() {
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 81), FACING_NORTH);
 
 	if ((_scene->_priorSceneId == 202) || (_scene->_priorSceneId == RETURNING_FROM_LOADING)) {
-		_game._player._playerPos = Common::Point(165, 152);
+		player.x = 165;
+		player.y = 152;
 	} else {
-		_game._player._playerPos = Common::Point(223, 149);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 223;
+		player.y = 149;
+		player.facing = FACING_SOUTH;
 	}
 
 	if (_globals[kTeleporterCommand]) {
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
+		player.walker_visible = false;
+		player.commands_allowed = false;
 		int sepChar = (_globals[kSexOfRex] == SEX_MALE) ? 't' : 'u';
 		// Guess values. What is the default value used by the compiler?
 		int suffixNum = -1;
@@ -80,8 +82,8 @@ static void room_201_init() {
 			endTrigger = 77;
 			break;
 		case 3:
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			suffixNum = -1;
 			break;
 		case 4:
@@ -93,23 +95,23 @@ static void room_201_init() {
 		}
 		_globals[kTeleporterCommand] = 0;
 		if (suffixNum >= 0)
-			_scene->loadAnimation(formAnimName(sepChar, suffixNum), endTrigger);
+			_scene->loadAnimation(kernel_name(sepChar, suffixNum), endTrigger);
 	}
 
 	if ((_scene->_priorSceneId == 202) && (_globals[kMeteorologistStatus] == METEOROLOGIST_PRESENT) && !_scene->_roomChanged) {
-		_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('a', 0));
-		_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('a', 1));
-		_game.loadQuoteSet(90, 91, 0);
-		_game._player._stepEnabled = false;
+		_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
+		_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		kernel.quotes = quote_load(90, 91, 0);
+		player.commands_allowed = false;
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -1, 12);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_SPRITE, 12, 70);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
 		local._pterodactylFlag = false;
-		_game._player.walk(Common::Point(157, 143), FACING_NORTH);
+		player_walk(157, 143, FACING_NORTH);
 		pal_change_color(252, 45, 63, 45);
 		pal_change_color(253, 20, 45, 20);
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 2, 0, 120, _game.getQuote(90));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 2, 0, 120, quote_string(kernel.quotes, 90));
 	} else
 		local._pterodactylFlag = true;
 
@@ -129,9 +131,9 @@ static void room_201_daemon() {
 		local._pterodactylFlag = false;
 	}
 
-	if (_game._trigger == 70) {
+	if (kernel.trigger == 70) {
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
-		_game._player._visible = false;
+		player.walker_visible = false;
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 12, 16);
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 1, 0, 0);
 		g_engine->_soundManager->command(42, 0);
@@ -142,51 +144,51 @@ static void room_201_daemon() {
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 	}
 
-	if (_game._trigger == 81) {
+	if (kernel.trigger == 81) {
 		_scene->_kernelMessages.reset();
 	}
 
-	if (_game._trigger == 71) {
+	if (kernel.trigger == 71) {
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], -2, -2);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
 	}
 
-	if (_game._trigger == 73) {
+	if (kernel.trigger == 73) {
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 17, -2);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
 	}
 
-	if (_game._trigger == 74) {
+	if (kernel.trigger == 74) {
 		g_engine->_soundManager->command(40, 0);
 
-		_scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, _game.getQuote(91));
+		_scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, quote_string(kernel.quotes, 91));
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 0, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -2, -2);
 		_scene->_sequences.addTimer(180, 75);
 	}
 
-	if (_game._trigger == 75) {
+	if (kernel.trigger == 75) {
 		_globals[kMeteorologistEverSeen] = 0;
 		_scene->_nextSceneId = 202;
 	}
 
-	if (_game._trigger == 76) {
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+	if (kernel.trigger == 76) {
+		player.commands_allowed = true;
+		player.walker_visible = true;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
 	}
 
-	if (_game._trigger == 77) {
+	if (kernel.trigger == 77) {
 		_globals[kTeleporterCommand] = 1;
 		_scene->_nextSceneId = _globals[kTeleporterDestination];
 		_scene->_reloadSceneFlag = true;
 	}
 
-	if (_game._trigger == 78) {
+	if (kernel.trigger == 78) {
 		g_engine->_soundManager->command(40, 0);
 		text_show(20114);
 		_scene->_reloadSceneFlag = true;
@@ -198,12 +200,12 @@ static void room_201_parser() {
 		if (player_said_2(walk_towards, field_to_south))
 			_scene->_nextSceneId = 202;
 		else if (player_said_2(climb_up, steps) || (player_said_2(walk_inside, teleporter)) || (player_said_2(walk_inside, strange_device))) {
-			if (_game._trigger == 0) {
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+			if (kernel.trigger == 0) {
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				int sepChar = (_globals[kSexOfRex] == SEX_MALE) ? 't' : 'u';
-				_scene->loadAnimation(formAnimName(sepChar, 0), 1);
-			} else if (_game._trigger == 1) {
+				_scene->loadAnimation(kernel_name(sepChar, 0), 1);
+			} else if (kernel.trigger == 1) {
 				_scene->_nextSceneId = 213;
 			}
 		} else if (player_said_2(look, grassy_field)) {
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index 2b3206ecedd..b41a72ae474 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -51,20 +51,20 @@ static Scratch local;
 
 
 static void room_202_init() {
-	_game._player._beenVisible = true;
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('b', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('b', 1));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('b', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('l', -1));
+	player.walker_been_visible = true;
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('b', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('l', -1));
 	if (_globals[kSexOfRex] != SEX_MALE) {
 		_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*ROXBD_2");
 	} else {
 		_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*RXMBD_2");
 	}
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('a', 0));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('a', 1));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('a', 2));
+	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('a', 2));
 
 	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
@@ -93,11 +93,13 @@ static void room_202_init() {
 		_scene->changeVariant(_globals[kBone202Status]);
 
 	if (_scene->_priorSceneId == 201) {
-		_game._player._playerPos = Common::Point(190, 91);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 190;
+		player.y = 91;
+		player.facing = FACING_SOUTH;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(178, 152);
-		_game._player._facing = FACING_NORTH;
+		player.x = 178;
+		player.y = 152;
+		player.facing = FACING_NORTH;
 	}
 
 	if (_globals[kLadderBroken]) {
@@ -108,13 +110,13 @@ static void room_202_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
 	}
 
-	_game.loadQuoteSet(0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x61, 0);
+	kernel.quotes = quote_load(0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x61, 0);
 	local._activeMsgFl = false;
 
 	if (_scene->_priorSceneId == RETURNING_FROM_DIALOG) {
 		if (local._waitingMeteoFl) {
 			_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-			_game._player._visible = false;
+			player.walker_visible = false;
 		}
 	} else {
 		local._waitingMeteoFl = false;
@@ -124,11 +126,11 @@ static void room_202_init() {
 	local._meteoClock1 = local._meteoClock2 = _scene->_frameStartTime;
 
 	if (_scene->_roomChanged)
-		_game._objects.addToInventory(OBJ_BINOCULARS);
+		inter_give_to_player(OBJ_BINOCULARS);
 
 	if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
+		player.walker_visible = false;
+		player.commands_allowed = false;
 		local._ladderTopFl = (_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER);
 
 		if (local._ladderTopFl) {
@@ -136,28 +138,31 @@ static void room_202_init() {
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
 
 			_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(247, 82));
-			_game._player._playerPos = Common::Point(246, 124);
-			_game._player._facing = FACING_NORTH;
+			player.x = 246;
+			player.y = 124;
+			player.facing = FACING_NORTH;
 			_globals[kTeleporterUnderstood] = true;
 		} else {
 			_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
 
 			_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
-			_game._player._playerPos = Common::Point(171, 122);
-			_game._player._facing = FACING_NORTH;
+			player.x = 171;
+			player.y = 122;
+			player.facing = FACING_NORTH;
 		}
 
-		_scene->loadAnimation(formAnimName('M', -1), 71);
+		_scene->loadAnimation(kernel_name('M', -1), 71);
 		_scene->_animation[0]->setCurrentFrame(200);
 	} else {
 		if (local._ladderTopFl) {
-			_game._player._visible = false;
+			player.walker_visible = false;
 			_scene->_sequences.startCycle(_globals._sequenceIndexes[9], true, 1);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
 			_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
-			_game._player._playerPos = Common::Point(246, 124);
-			_game._player._facing = FACING_NORTH;
+			player.x = 246;
+			player.y = 124;
+			player.facing = FACING_NORTH;
 		}
 	}
 
@@ -169,8 +174,8 @@ static void room_202_init() {
 static void setRandomKernelMessage() {
 	int vocabId = g_engine->getRandomNumber(92, 96);
 	_scene->_kernelMessages.reset();
-	_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 70, 120, _game.getQuote(vocabId));
+	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 70, 120, quote_string(kernel.quotes, vocabId));
 	local._activeMsgFl = true;
 }
 
@@ -224,17 +229,17 @@ static int subStep4(int randVal) {
 }
 
 static void room_202_daemon() {
-	if (!local._activeMsgFl && (_game._player._playerPos == Common::Point(77, 105)) && (_game._player._facing == FACING_NORTH) && (g_engine->getRandomNumber(999) == 0)) {
+	if (!local._activeMsgFl && (Common::Point(player.x, player.y) == Common::Point(77, 105)) && (player.facing == FACING_NORTH) && (g_engine->getRandomNumber(999) == 0)) {
 		_scene->_kernelMessages.reset();
 		local._activeMsgFl = false;
 		if (g_engine->getRandomNumber(4) == 0)
 			setRandomKernelMessage();
 	}
 
-	if (_game._trigger == 70)
+	if (kernel.trigger == 70)
 		local._activeMsgFl = false;
 
-	if (_game._trigger == 71) {
+	if (kernel.trigger == 71) {
 		g_engine->_soundManager->command(3, 0);
 		g_engine->_soundManager->command(9, 0);
 
@@ -250,14 +255,14 @@ static void room_202_daemon() {
 				msgPos = Common::Point(248, 15);
 				msgFlag = 0;
 			}
-			int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, _game.getQuote(102));
+			int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, quote_string(kernel.quotes, 102));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 
 			if (_globals[kMeteorologistWatch] == METEOROLOGIST_GROUND) {
 				_action._activeAction._verbId = words_look;
 				_action._activeAction._objectNameId = words_binoculars;
 				_action._activeAction._indirectObjectId = words_strange_device;
-				_game._triggerSetupMode = SEQUENCE_TRIGGER_PARSER;
+				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_PARSER;
 				_scene->_sequences.addTimer(2 * 60, 2);
 				local._meteorologistSpecial = true;
 			} else if (_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER) {
@@ -268,7 +273,7 @@ static void room_202_daemon() {
 		_globals[kMeteorologistWatch] = METEOROLOGIST_NORMAL;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 90:
 		g_engine->_soundManager->command(41, 0);
 		_scene->_sequences.remove(_globals._sequenceIndexes[10]);
@@ -290,7 +295,7 @@ static void room_202_daemon() {
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 1);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
 		_scene->_kernelMessages.reset();
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, -65), 0x1110, 32, 0, 60, _game.getQuote(98));
+		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, -65), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 98));
 		_scene->_kernelMessages.setSeqIndex(msgIndex, _globals._sequenceIndexes[11]);
 	}
 	break;
@@ -303,11 +308,11 @@ static void room_202_daemon() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[11], _globals._sequenceIndexes[5]);
 		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[11]);
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
+		player.commands_allowed = true;
+		player.walker_visible = true;
 		local._ladderTopFl = false;
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(99));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 99));
 	}
 	break;
 	default:
@@ -323,7 +328,7 @@ static void room_202_daemon() {
 			threshold += 25;
 		if (threshold >= randVal) {
 			g_engine->_soundManager->command(17, 0);
-			_scene->loadAnimation(formAnimName('M', -1), 71);
+			_scene->loadAnimation(kernel_name('M', -1), 71);
 			local._toStationFl = true;
 			local._toTeleportFl = false;
 			_globals[kMeteorologistEverSeen] = true;
@@ -356,7 +361,7 @@ static void room_202_daemon() {
 				msgPos = Common::Point(248, 15);
 				msgFlag = 0;
 			}
-			int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, _game.getQuote(101));
+			int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, quote_string(kernel.quotes, 101));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		}
 	}
@@ -420,38 +425,37 @@ static void room_202_daemon() {
 }
 
 static void room_202_pre_parser() {
-	auto &gplayer = _game->_player;
 
-	if (gplayer._needToWalk)
+	if (player.need_to_walk)
 		_scene->_kernelMessages.reset();
 
-	if (local._ladderTopFl && (player_said_2(climb_down, ladder) || gplayer._needToWalk)) {
-		if (_game._trigger == 0) {
+	if (local._ladderTopFl && (player_said_2(climb_down, ladder) || player.need_to_walk)) {
+		if (kernel.trigger == 0) {
 			g_engine->_soundManager->command(29, 0);
-			gplayer._readyToWalk = false;
-			gplayer._stepEnabled = false;
+			player.ready_to_walk = false;
+			player.commands_allowed = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
 			_globals._sequenceIndexes[8] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 1);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-		} else if (_game._trigger == 1) {
+		} else if (kernel.trigger == 1) {
 			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[8]);
 			_scene->_dynamicHotspots.remove(local._ladderHotspotId);
-			gplayer._visible = true;
-			gplayer._readyToWalk = true;
-			gplayer._stepEnabled = true;
+			player.walker_visible = true;
+			player.ready_to_walk = true;
+			player.commands_allowed = true;
 			local._ladderTopFl = false;
 		}
 	}
 
 	if (player_said_2(look, binoculars) && (_action._activeAction._indirectObjectId > 0)) {
-		if (!gplayer._readyToWalk || local._ladderTopFl)
-			gplayer._needToWalk = false;
+		if (!player.ready_to_walk || local._ladderTopFl)
+			player.need_to_walk = false;
 		else
-			gplayer._needToWalk = true;
+			player.need_to_walk = true;
 
 		if (!local._ladderTopFl)
-			gplayer.walk(Common::Point(171, 122), FACING_NORTH);
+			player_walk(171, 122, FACING_NORTH);
 	}
 }
 
@@ -475,13 +479,13 @@ static void room_202_parser() {
 		}
 		_scene->_nextSceneId = 201;
 	} else if (player_said_2(take, bone) && (_action._savedFields._mainObjectSource == 4)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			if (_game._objects.isInInventory(OBJ_BONES)) {
+			if (player_has(OBJ_BONES)) {
 				text_show(20221);
 			} else {
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				_globals._sequenceIndexes[7] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[7], false, 3, 2, 0, 0);
 				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[7]);
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
@@ -489,7 +493,7 @@ static void room_202_parser() {
 			}
 			break;
 		case 1:
-			if (_game._player._playerPos == Common::Point(132, 97)) {
+			if (Common::Point(player.x, player.y) == Common::Point(132, 97)) {
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_globals[kBone202Status] |= BONE_202_LEFT_GONE;
 			} else {
@@ -498,17 +502,17 @@ static void room_202_parser() {
 			}
 			break;
 		case 2:
-			if (_game._objects.isInInventory(OBJ_BONE)) {
-				_game._objects.removeFromInventory(OBJ_BONE, NOWHERE);
-				_game._objects.addToInventory(OBJ_BONES);
+			if (player_has(OBJ_BONE)) {
+				inter_take_from_player(OBJ_BONE, NOWHERE);
+				inter_give_to_player(OBJ_BONES);
 				object_examine(OBJ_BONES, 20218, 0);
 			} else {
-				_game._objects.addToInventory(OBJ_BONE);
+				inter_give_to_player(OBJ_BONE);
 				object_examine(OBJ_BONE, 20218, 0);
 			}
 			_scene->changeVariant(_globals[kBone202Status]);
-			_game._player._stepEnabled = true;
-			_game._player._visible = true;
+			player.commands_allowed = true;
+			player.walker_visible = true;
 			break;
 		default:
 			break;
@@ -516,12 +520,12 @@ static void room_202_parser() {
 
 		_action._inProgress = false;
 	} else if (player_said_2(climb_up, ladder) && !_globals[kLadderBroken]) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			g_engine->_soundManager->command(29, 0);
 			local._meteoClock1 = _scene->_frameStartTime;
-			_game._player._visible = false;
-			_game._player._stepEnabled = false;
+			player.walker_visible = false;
+			player.commands_allowed = false;
 
 			local._ladderHotspotId = _scene->_dynamicHotspots.add(words_ladder, words_climb_down, -1, Common::Rect(241, 68, 241 + 12, 68 + 54));
 			_scene->_dynamicHotspots.setPosition(local._ladderHotspotId, Common::Point(246, 124), FACING_NORTH);
@@ -536,8 +540,8 @@ static void room_202_parser() {
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[8], _globals._sequenceIndexes[9]);
 			local._ladderTopFl = true;
-			_game._player._stepEnabled = true;
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, _game.getQuote(97));
+			player.commands_allowed = true;
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 97));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		}
 		break;
@@ -547,11 +551,11 @@ static void room_202_parser() {
 		}
 	} else if ((player_said_3(look, binoculars, field_to_north) || (player_said_3(look, binoculars, strange_device))) && (_globals[kSexOfRex] == SEX_MALE)) {
 		if (!local._ladderTopFl) {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				local._toTeleportFl = true;
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 1, 6);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
@@ -583,18 +587,18 @@ static void room_202_parser() {
 				break;
 			case 3:
 				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[10]);
-				_game._player._stepEnabled = true;
-				_game._player._visible = true;
+				player.commands_allowed = true;
+				player.walker_visible = true;
 				break;
 			default:
 				_action._inProgress = false;
 				return;
 			}
 		} else {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				local._toTeleportFl = true;
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				_scene->_sequences.remove(_globals._sequenceIndexes[9]);
 				_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], true, 6, 1, 0, 0);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
@@ -613,7 +617,7 @@ static void room_202_parser() {
 						_globals[kMeteorologistWatch] = METEOROLOGIST_GONE;
 						if ((_scene->_animation[0]->getCurrentFrame() >= 44) && (_scene->_animation[0]->getCurrentFrame() <= 75)) {
 							_scene->_kernelMessages.reset();
-							int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, _game.getQuote(100));
+							int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 100));
 							_scene->_kernelMessages.setQuoted(msgIndex, 4, false);
 						} else {
 							_action._inProgress = false;
@@ -638,7 +642,7 @@ static void room_202_parser() {
 				_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
 				_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 				break;
 			default:
 				_action._inProgress = false;
@@ -669,7 +673,7 @@ static void room_202_parser() {
 	} else if (player_said_2(look, sky)) {
 		text_show(20210);
 	} else if (player_said_2(look, hut)) {
-		if ((_game._player._playerPos == Common::Point(77, 105)) && (_game._player._facing == FACING_NORTH))
+		if ((Common::Point(player.x, player.y) == Common::Point(77, 105)) && (player.facing == FACING_NORTH))
 			text_show(20212);
 		else
 			text_show(20211);
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 9df6df556f9..a1470aa98ea 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -43,14 +43,17 @@ static Scratch local;
 
 static void room_203_init() {
 	if (_scene->_priorSceneId == 202) {
-		_game._player._playerPos = Common::Point(187, 99);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 187;
+		player.y = 99;
+		player.facing = FACING_SOUTH;
 	} else if (_scene->_priorSceneId == 209) {
-		_game._player._playerPos = Common::Point(308, 117);
-		_game._player._facing = FACING_WEST;
+		player.x = 308;
+		player.y = 117;
+		player.facing = FACING_WEST;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(155, 152);
-		_game._player._facing = FACING_NORTH;
+		player.x = 155;
+		player.y = 152;
+		player.facing = FACING_NORTH;
 	}
 
 	local._rhotundaEatFl = false;
@@ -58,14 +61,14 @@ static void room_203_init() {
 
 	if ((_globals[kRhotundaStatus] == 0) && (!_scene->_roomChanged)) {
 		local._rhotundaEatFl = true;
-		_game._player.walk(Common::Point(158, 135), FACING_SOUTH);
+		player_walk(158, 135, FACING_SOUTH);
 		int idx = _scene->_dynamicHotspots.add(words_field_to_south, words_walk_towards, 0, Common::Rect(0, 0, 320, 156));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(155, 152), FACING_SOUTH);
 		_scene->_dynamicHotspots.setCursor(idx, CURSOR_GO_DOWN);
 	}
 
 	if (!local._rhotundaEatFl) {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('b', -1));
+		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('b', -1));
 		if (g_engine->getRandomNumber(1, 3) == 2) {
 			_globals._spriteIndexes[15] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 9, 1, 0, 0);
 			int idx = _scene->_dynamicHotspots.add(words_yellow_bird, words_look_at, _globals._spriteIndexes[15], Common::Rect(0, 0, 0, 0));
@@ -74,10 +77,10 @@ static void room_203_init() {
 		}
 	}
 
-	_game.loadQuoteSet(0x67, 0x68, 0x69, 0x6A, 0x5A, 0);
+	kernel.quotes = quote_load(0x67, 0x68, 0x69, 0x6A, 0x5A, 0);
 
 	if (local._rhotundaEatFl) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(g_engine->getRandomNumber(103, 106)));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, g_engine->getRandomNumber(103, 106)));
 	}
 
 	section_2_music();
@@ -87,24 +90,24 @@ static void room_203_daemon() {
 	if (!local._rhotundaEatFl)
 		return;
 
-	if ((_game._trigger == 0) && local._rhotundaEat2Fl)
+	if ((kernel.trigger == 0) && local._rhotundaEat2Fl)
 		return;
 
-	if ((_game._player._playerPos != Common::Point(158, 136)) || (_game._player._facing != FACING_SOUTH))
+	if ((Common::Point(player.x, player.y) != Common::Point(158, 136)) || (player.facing != FACING_SOUTH))
 		return;
 
 	local._rhotundaEat2Fl = true;
 
-	if (_game._trigger == 0) {
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
+	if (kernel.trigger == 0) {
+		player.walker_visible = false;
+		player.commands_allowed = false;
 		pal_lock();
 		_scene->_kernelMessages.reset();
 		_scene->resetScene();
 		cursor_id = CURSOR_WAIT;
 		mouse_cursor_sprite(cursor, CURSOR_WAIT);
-		_scene->loadAnimation(Resources::formatName(203, 'a', -1, EXT_AA, ""), 81);
-	} else if (_game._trigger == 81) {
+		_scene->loadAnimation(kernel_full_name(203, 'a', -1, "", EXT_AA), 81);
+	} else if (kernel.trigger == 81) {
 		_scene->_nextSceneId = 208;
 		_scene->_reloadSceneFlag = true;
 	}
@@ -112,13 +115,13 @@ static void room_203_daemon() {
 
 static void room_203_pre_parser() {
 	if (local._rhotundaEatFl && !player_said_2(walk_towards, field_to_south)) {
-		_game._player.walk(Common::Point(158, 136), FACING_SOUTH);
+		player_walk(158, 136, FACING_SOUTH);
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(walkto, open_area_to_east))
-		_game._player._walkOffScreenSceneId = 209;
+		player.walk_off_edge_to_room = 209;
 }
 
 static void room_203_parser() {
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index ca0384fdccd..5ac2ecef7ad 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -45,15 +45,15 @@ static Scratch local;
 
 
 static void room_205_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 2));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('f', -1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', -1));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('p', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('f', -1));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('p', -1));
 
 	if (_globals[kSexOfRex] == SEX_MALE)
-		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('a', 1));
+		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('a', 1));
 
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 10, 0, 0, 3);
 	int idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
@@ -67,13 +67,13 @@ static void room_205_init() {
 	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 0, 0, 0);
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 11);
 
-	if (!_game._visitedScenes._sceneRevisited) {
+	if (!player.been_here_before) {
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
 		idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, _globals._sequenceIndexes[6], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
 	}
 
-	if (_game._objects[12]._roomNumber == 205) {
+	if (object[12].location == 205) {
 		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 0, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 11);
 	} else {
@@ -81,11 +81,11 @@ static void room_205_init() {
 	}
 
 	local._beingKicked = false;
-	_game.loadQuoteSet(0x6B, 0x70, 0x71, 0x72, 0x5A, 0x74, 0x75, 0x76, 0x77, 0x78, 0x73, 0x79, 0x7A, 0x7B, 0x7C,
+	kernel.quotes = quote_load(0x6B, 0x70, 0x71, 0x72, 0x5A, 0x74, 0x75, 0x76, 0x77, 0x78, 0x73, 0x79, 0x7A, 0x7B, 0x7C,
 		0x7D, 0x7E, 0x7F, 0x80, 0xAC, 0xAD, 0xAE, 0x6C, 0x6D, 0x6E, 0x6F, 0x2, 0);
 	local._dialog1.setup(0x2A, 0x5A, 0x78, 0x74, 0x75, 0x76, 0x77, 0);
 
-	if (!_game._visitedScenes._sceneRevisited)
+	if (!player.been_here_before)
 		local._dialog1.set(0x5A, 0x74, 0x75, 0x77, 0);
 
 	pal_change_color(250, 63, 50, 20);
@@ -93,24 +93,26 @@ static void room_205_init() {
 	pal_change_color(252, 63, 63, 40);
 	pal_change_color(253, 50, 50, 30);
 
-	local._chickenTime = _game->_scene._frameStartTime;
+	local._chickenTime = _scene._frameStartTime;
 
 	if (_globals[kSexOfRex] == SEX_FEMALE)
 		_scene->_kernelMessages.initRandomMessages(3,
 			Common::Rect(195, 99, 264, 134), 13, 2, 0xFDFC, 60,
 			108, 108, 109, 109, 110, 110, 111, 108, 0);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(99, 152);
+	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 99;
+		player.y = 152;
+	}
 
 	if (_globals[kSexOfRex] != SEX_MALE) {
-		_scene->loadAnimation(formAnimName('a', -1));
+		_scene->loadAnimation(kernel_name('a', -1));
 		_scene->_animation[0]->_repeatFlag = true;
 	} else {
 		local._beingKicked = true;
 		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
+		player.walker_visible = false;
+		player.commands_allowed = false;
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 2);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 6, 73);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 11, 74);
@@ -124,60 +126,60 @@ static void room_205_daemon() {
 	if (_globals[kSexOfRex] == SEX_FEMALE) {
 		_scene->_kernelMessages.randomServer();
 
-		if (_game->_scene._frameStartTime >= local._chickenTime) {
+		if (_scene._frameStartTime >= local._chickenTime) {
 			int chanceMinor = _scene->_kernelMessages.checkRandom() + 1;
 			if (_scene->_kernelMessages.generateRandom(100, chanceMinor))
 				g_engine->_soundManager->command(28, 0);
 
-			local._chickenTime = _game->_scene._frameStartTime + 2;
+			local._chickenTime = _scene._frameStartTime + 2;
 		}
 	}
 
-	if (_game->_scene._frameStartTime - local._lastFishTime > 1300) {
+	if (_scene._frameStartTime - local._lastFishTime > 1300) {
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(
 			_globals._spriteIndexes[6], false, 5, 1, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, _globals._sequenceIndexes[6],
 			Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
-		local._lastFishTime = _game->_scene._frameStartTime;
+		local._lastFishTime = _scene._frameStartTime;
 	}
 
-	if (_game._trigger == 73)
-		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 0, 60, _game.getQuote(112));
+	if (kernel.trigger == 73)
+		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 0, 60, quote_string(kernel.quotes, 112));
 
-	if (_game._trigger == 74) {
+	if (kernel.trigger == 74) {
 		g_engine->_soundManager->command(26, 0);
-		_scene->_kernelMessages.add(Common::Point(106, 90), 0x1110, 32, 0, 60, _game.getQuote(113));
+		_scene->_kernelMessages.add(Common::Point(106, 90), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 113));
 	}
 
-	if (_game._trigger == 71) {
+	if (kernel.trigger == 71) {
 		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 0, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 2);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], -2, -2);
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 72, 180, _game.getQuote(114));
+		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 72, 180, quote_string(kernel.quotes, 114));
 	}
 
-	if (_game._trigger == 72)
+	if (kernel.trigger == 72)
 		_scene->_nextSceneId = 211;
 }
 
 static void handleWomanSpeech(int quote) {
-	local._kernelMessage = _scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(quote));
+	local._kernelMessage = _scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, quote));
 }
 
 static void room_205_parser() {
-	if (_game._screenObjects._inputMode == kInputConversation) {
+	if (inter_input_mode == kInputConversation) {
 		if (local._kernelMessage >= 0)
 			_scene->_kernelMessages.remove(local._kernelMessage);
 		local._kernelMessage = -1;
 
-		if (_game._trigger == 0) {
-			_game._player._stepEnabled = false;
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, _game.getQuote(_action._activeAction._verbId));
+		if (kernel.trigger == 0) {
+			player.commands_allowed = false;
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, quote_string(kernel.quotes, _action._activeAction._verbId));
 		} else {
-			if ((_game._trigger > 1) || (_action._activeAction._verbId != 0x76))
-				_game._player._stepEnabled = true;
+			if ((kernel.trigger > 1) || (_action._activeAction._verbId != 0x76))
+				player.commands_allowed = true;
 
 			switch (_action._activeAction._verbId) {
 			case 0x5A:
@@ -200,10 +202,10 @@ static void room_205_parser() {
 				break;
 
 			case 0x76:
-				if (_game._trigger == 1) {
+				if (kernel.trigger == 1) {
 					handleWomanSpeech(0x7D);
 					_scene->_sequences.addTimer(120, 2);
-				} else if (_game._trigger == 2) {
+				} else if (kernel.trigger == 2) {
 					handleWomanSpeech(0x7E);
 					local._dialog1.write(0x76, false);
 					_globals[kChickenPermitted] = true;
@@ -211,7 +213,7 @@ static void room_205_parser() {
 				break;
 
 			case 0x77:
-				_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, 120, _game.getQuote(0x7F));
+				_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, 120, quote_string(kernel.quotes, 0x7F));
 				_scene->_userInterface.setup(kInputBuildingSentences);
 				break;
 
@@ -227,37 +229,37 @@ static void room_205_parser() {
 	else if (player_said_3(look, binoculars, opposite_bank))
 		text_show(20518);
 	else if (player_said_2(talkto, native_woman)) {
-		if (_game._trigger == 0) {
-			_game._player._stepEnabled = false;
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, _game.getQuote(0x73));
-		} else if (_game._trigger == 1) {
-			_game._player._stepEnabled = true;
+		if (kernel.trigger == 0) {
+			player.commands_allowed = false;
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, quote_string(kernel.quotes, 0x73));
+		} else if (kernel.trigger == 1) {
+			player.commands_allowed = true;
 			handleWomanSpeech(0x79);
 			local._dialog1.write(0x5A, true);
 			local._dialog1.write(0x75, true);
 			local._dialog1.start();
 		}
-	} else if (player_said_2(give, native_woman) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
-		if (_game._trigger == 0) {
-			_game._player._stepEnabled = false;
+	} else if (player_said_2(give, native_woman) && player_has(object_named(_action._activeAction._objectNameId))) {
+		if (kernel.trigger == 0) {
+			player.commands_allowed = false;
 			int rndVal = g_engine->getRandomNumber(0xAC, 0xAE);
-			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 1, 120, _game.getQuote(rndVal));
-		} else if (_game._trigger == 1)
-			_game._player._stepEnabled = true;
+			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 1, 120, quote_string(kernel.quotes, rndVal));
+		} else if (kernel.trigger == 1)
+			player.commands_allowed = true;
 	} else if (player_said_2(walkto, opposite_bank)) {
-		if (_game._trigger == 0) {
-			_game._player._visible = false;
-			_game._player._stepEnabled = false;
+		if (kernel.trigger == 0) {
+			player.walker_visible = false;
+			player.commands_allowed = false;
 			pal_lock();
 			_scene->_kernelMessages.reset();
-			_game._player.removePlayerSprites();
-			_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('a', 0));
+			kernel_dump_walker_only();
+			_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('a', 0));
 			kernel_new_palette();
 			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], -1);
 			g_engine->_soundManager->command(27, 0);
-		} else if (_game._trigger == 1) {
+		} else if (kernel.trigger == 1) {
 			if (_scene->_animation[0] != nullptr)
 				_scene->_animation[0]->resetSpriteSetsCount();
 
@@ -269,17 +271,17 @@ static void room_205_parser() {
 			_scene->_nextSceneId = 210;
 
 		if (player_said_2(walkto, fire_pit) || player_said_2(walkto, chicken_on_spit)) {
-			if (_game._objects.isInRoom(OBJ_CHICKEN)) {
+			if (object_is_here(OBJ_CHICKEN)) {
 				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x6B));
+				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x6B));
 			}
-		} else if (player_said_2(take, chicken_on_spit) && _globals[kChickenPermitted] && _game._objects.isInRoom(OBJ_CHICKEN)) {
-			_game._objects.addToInventory(OBJ_CHICKEN);
+		} else if (player_said_2(take, chicken_on_spit) && _globals[kChickenPermitted] && object_is_here(OBJ_CHICKEN)) {
+			inter_give_to_player(OBJ_CHICKEN);
 			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 			_scene->_hotspots.activate(words_chicken_on_spit, false);
 			object_examine(OBJ_CHICKEN, 812, 0);
 		} else if (player_said_2(take, chicken_on_spit) && (!_globals[kChickenPermitted]))
-			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 0, 120, _game.getQuote(0x80));
+			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 0, 120, quote_string(kernel.quotes, 0x80));
 		else if (player_said_2(look, native_woman))
 			text_show(20503);
 		else if (player_said_2(look, hut))
@@ -298,7 +300,7 @@ static void room_205_parser() {
 			text_show(20510);
 		else if (player_said_2(look, opposite_bank))
 			text_show(20511);
-		else if (_game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))
+		else if (player_has(object_named(_action._activeAction._objectNameId))
 			&& (player_said_2(give, stream) || player_said_2(throw, stream)
 				|| player_said_2(give, piranha) || player_said_2(throw, piranha)))
 			text_show(20512);
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index 1a647b9664d..3faeecb7345 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -45,18 +45,18 @@ static Scratch local;
 
 
 static void room_207_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('h', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('h', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', -1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('e', 0));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('e', 1));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('g', 1));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('g', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('h', 0));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('h', 1));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('e', 1));
+	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('g', 1));
+	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('g', 0));
 	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 7, 0, 0, 0);
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 7);
 
 	int var2;
-	if (!_game._visitedScenes._sceneRevisited) {
+	if (!player.been_here_before) {
 		var2 = 1;
 	} else {
 		var2 = g_engine->getRandomNumber(4) + 1;
@@ -84,13 +84,16 @@ static void room_207_init() {
 
 	local._eyeFl = false;
 	if (_scene->_priorSceneId == 211) {
-		_game._player._playerPos = Common::Point(13, 105);
-		_game._player._facing = FACING_EAST;
+		player.x = 13;
+		player.y = 105;
+		player.facing = FACING_EAST;
 	} else if (_scene->_priorSceneId == 214) {
-		_game._player._playerPos = Common::Point(164, 117);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 164;
+		player.y = 117;
+		player.facing = FACING_SOUTH;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(305, 131);
+		player.x = 305;
+		player.y = 131;
 	}
 
 	section_2_music();
@@ -106,7 +109,7 @@ static void moveVulture() {
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
 	g_engine->_soundManager->command(43, 0);
 	local._vultureFl = false;
-	local._vultureTime = _game._player._priorTimer;
+	local._vultureTime = player.clock;
 	_scene->_dynamicHotspots.remove(local._vultureHotspotId);
 }
 
@@ -114,36 +117,35 @@ static void moveSpider() {
 	_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 5, 1, 0, 0);
 	local._spiderFl = false;
-	local._spiderTime = _game._player._priorTimer;
+	local._spiderTime = player.clock;
 	_scene->_dynamicHotspots.remove(local._spiderHotspotId);
 }
 
 static void room_207_daemon() {
-	auto &gplayer = _game._player;
 
 	if (local._vultureFl) {
-		if (((int32)gplayer._priorTimer - local._vultureTime) > 1700)
+		if (((int32)player.clock - local._vultureTime) > 1700)
 			moveVulture();
 	}
 
 	if (local._spiderFl) {
-		if (((int32)gplayer._priorTimer - local._spiderTime) > 800)
+		if (((int32)player.clock - local._spiderTime) > 800)
 			moveSpider();
 	}
 
-	if (_game._trigger == 70) {
+	if (kernel.trigger == 70) {
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 23, 34);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 6);
 	}
 
-	if (_game._trigger == 71)
+	if (kernel.trigger == 71)
 		local._eyeFl = false;
 
 	if (local._eyeFl)
 		return;
 
-	if ((_game._player._playerPos.x >= 124) && (_game._player._playerPos.x <= 201)) {
+	if ((player.x >= 124) && (player.x <= 201)) {
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
 		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 6);
@@ -155,10 +157,10 @@ static void room_207_daemon() {
 
 static void room_207_pre_parser() {
 	if (player_said_2(walk_down, path_to_west))
-		_game._player._walkOffScreenSceneId = 211;
+		player.walk_off_edge_to_room = 211;
 
 	if (player_said_2(walk_towards, open_field_to_east))
-		_game._player._walkOffScreenSceneId = 208;
+		player.walk_off_edge_to_room = 208;
 
 	if (player_said_1(walkto) || player_said_1(look)) {
 		if (player_said_1(vulture)) {
@@ -175,10 +177,10 @@ static void room_207_parser() {
 	else if (player_said_2(walk_through, doorway))
 		_scene->_nextSceneId = 214;
 	else {
-		if ((_game._player._playerPos.x > 150) && (_game._player._playerPos.x < 189) &&
-			(_game._player._playerPos.y > 111) && (_game._player._playerPos.y < 130)) {
-			if ((_game._player._playerPos.x <= 162) || (_game._player._playerPos.x >= 181) ||
-				(_game._player._playerPos.y <= 115) || (_game._player._playerPos.y >= 126)) {
+		if ((player.x > 150) && (player.x < 189) &&
+			(player.y > 111) && (player.y < 130)) {
+			if ((player.x <= 162) || (player.x >= 181) ||
+				(player.y <= 115) || (player.y >= 126)) {
 				_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 2, 0, 0);
 				_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 2, 0, 0);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 6);
@@ -235,8 +237,8 @@ void room_207_synchronize(Common::Serializer &s) {
 }
 
 void room_207_preload() {
-	local._spiderTime = _game._player._priorTimer;
-	local._vultureTime = _game._player._priorTimer;
+	local._spiderTime = player.clock;
+	local._vultureTime = player.clock;
 
 	room_init_code_pointer = room_207_init;
 	room_pre_parser_code_pointer = room_207_pre_parser;
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index 54c34706bf8..5af742d2e8b 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -76,10 +76,10 @@ static void updateTrap() {
 }
 
 static void room_208_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 2));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 2));
 	_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RXMBD_8");
 
 	updateTrap();
@@ -90,23 +90,27 @@ static void room_208_init() {
 	_scene->_textSpacing = 0;
 
 	if (_scene->_priorSceneId == 207) {
-		_game._player._playerPos = Common::Point(8, 122);
-		_game._player._facing = FACING_EAST;
+		player.x = 8;
+		player.y = 122;
+		player.facing = FACING_EAST;
 	} else if (_scene->_priorSceneId == 203) {
-		_game._player._playerPos = Common::Point(142, 108);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 142;
+		player.y = 108;
+		player.facing = FACING_SOUTH;
 	} else if (_scene->_priorSceneId == 209) {
-		_game._player._playerPos = Common::Point(307, 123);
-		_game._player._facing = FACING_WEST;
+		player.x = 307;
+		player.y = 123;
+		player.facing = FACING_WEST;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(162, 149);
-		_game._player._facing = FACING_NORTH;
+		player.x = 162;
+		player.y = 149;
+		player.facing = FACING_NORTH;
 	}
 
-	_game.loadQuoteSet(0x81, 0x46, 0);
+	kernel.quotes = quote_load(0x81, 0x46, 0);
 
 	if ((_scene->_priorSceneId == 207) && (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(129));
+		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 129));
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 	}
 
@@ -128,17 +132,17 @@ static void room_208_daemon() {
 	if (!local._rhotundaTurnFl)
 		return;
 
-	if ((_game._player._playerPos != Common::Point(20, 148)) || (_game._player._facing != FACING_EAST))
+	if ((Common::Point(player.x, player.y) != Common::Point(20, 148)) || (player.facing != FACING_EAST))
 		return;
 
-	if ((_game._trigger == 0) && local._boundingFl)
+	if ((kernel.trigger == 0) && local._boundingFl)
 		return;
 
 	local._boundingFl = true;
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
-		_scene->loadAnimation(formAnimName('A', -1), 81);
+		_scene->loadAnimation(kernel_name('A', -1), 81);
 		local._rhotundaTime = 0;
 		break;
 	case 81:
@@ -148,7 +152,7 @@ static void room_208_daemon() {
 		_scene->_sequences.addTimer(90, 82);
 		break;
 	case 82:
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		break;
 	default:
 		break;
@@ -156,24 +160,23 @@ static void room_208_daemon() {
 }
 
 static void room_208_pre_parser() {
-	auto &gplayer = _game->_player;
 
-	if (player_said_1(look) && gplayer._readyToWalk)
-		gplayer._needToWalk = true;
+	if (player_said_1(look) && player.ready_to_walk)
+		player.need_to_walk = true;
 
 	if (player_said_2(walk_towards, grassland_to_east))
-		gplayer._walkOffScreenSceneId = 209;
+		player.walk_off_edge_to_room = 209;
 
 	if (player_said_2(walk_towards, open_area_to_west))
-		gplayer._walkOffScreenSceneId = 207;
+		player.walk_off_edge_to_room = 207;
 }
 
 static void subAction(int mode) {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
 	{
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 1, 0, 0);
 		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
 
@@ -202,13 +205,13 @@ static void subAction(int mode) {
 	{
 		switch (mode) {
 		case 1:
-			_game._objects.addToInventory(OBJ_BIG_LEAVES);
+			inter_give_to_player(OBJ_BIG_LEAVES);
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_globals[kLeavesStatus] = 1;
 			break;
 
 		case 2:
-			_game._objects.setRoom(OBJ_BIG_LEAVES, 1);
+			inter_move_object(OBJ_BIG_LEAVES, 1);
 			_globals[kLeavesStatus] = 2;
 			updateTrap();
 			break;
@@ -216,17 +219,17 @@ static void subAction(int mode) {
 		case 3:
 			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 			_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-			_game._objects.removeFromInventory(OBJ_TWINKIFRUIT, 1);
+			inter_take_from_player(OBJ_TWINKIFRUIT, 1);
 			g_engine->_soundManager->command(34, 0);
 			break;
 
 		case 4:
-			_game._objects.removeFromInventory(OBJ_BURGER, 1);
+			inter_take_from_player(OBJ_BURGER, 1);
 			g_engine->_soundManager->command(33, 0);
 			break;
 
 		case 5:
-			_game._objects.removeFromInventory(OBJ_DEAD_FISH, 1);
+			inter_take_from_player(OBJ_DEAD_FISH, 1);
 			g_engine->_soundManager->command(33, 0);
 			break;
 
@@ -244,8 +247,8 @@ static void subAction(int mode) {
 	break;
 
 	case 3:
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
+		player.walker_visible = true;
+		player.commands_allowed = true;
 		break;
 
 	default:
@@ -257,34 +260,34 @@ static void room_208_parser() {
 	if (player_said_2(walk_towards, lowlands_to_north)) {
 		if (_globals[kRhotundaStatus])
 			_scene->_nextSceneId = 203;
-		else if (_game._trigger == 0) {
-			_game._player._stepEnabled = false;
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, _game.getQuote(70));
+		else if (kernel.trigger == 0) {
+			player.commands_allowed = false;
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, quote_string(kernel.quotes, 70));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
-		} else if (_game._trigger == 1)
+		} else if (kernel.trigger == 1)
 			_scene->_nextSceneId = 203;
 	} else if (player_said_2(walk_towards, field_to_south))
 		_scene->_nextSceneId = 212;
-	else if (player_said_2(take, pile_of_leaves) && (!_globals[kLeavesStatus] || _game._trigger)) {
+	else if (player_said_2(take, pile_of_leaves) && (!_globals[kLeavesStatus] || kernel.trigger)) {
 		subAction(1);
-		if (_game._player._stepEnabled)
+		if (player.commands_allowed)
 			object_examine(OBJ_BIG_LEAVES, 0x326, 0);
-	} else if (player_said_3(put, big_leaves, deep_pit) && (_globals[kLeavesStatus] == 1 || _game._trigger))
+	} else if (player_said_3(put, big_leaves, deep_pit) && (_globals[kLeavesStatus] == 1 || kernel.trigger))
 		subAction(2);
 	else if (player_said_3(put, twinkifruit, leaf_covered_pit)) {
 		subAction(3);
-		if (_game._player._stepEnabled) {
-			_game._player._stepEnabled = false;
+		if (player.commands_allowed) {
+			player.commands_allowed = false;
 			local._rhotundaTurnFl = true;
-			_game._player.walk(Common::Point(20, 148), FACING_EAST);
+			player_walk(20, 148, FACING_EAST);
 		}
 	} else if (player_said_3(put, burger, leaf_covered_pit)) {
 		subAction(4);
-		if (_game._player._stepEnabled)
+		if (player.commands_allowed)
 			text_show(20812);
 	} else if (player_said_3(put, dead_fish, leaf_covered_pit)) {
 		subAction(5);
-		if (_game._player._stepEnabled)
+		if (player.commands_allowed)
 			text_show(20812);
 	} else if (player_said_2(look, cumulous_cloud))
 		text_show(20801);
@@ -305,7 +308,7 @@ static void room_208_parser() {
 	else if (player_said_2(look, pile_of_leaves))
 		text_show(20809);
 	else if (player_said_2(look, leaf_covered_pit)) {
-		if (_game._difficulty == DIFFICULTY_EASY)
+		if (game.difficulty == DIFFICULTY_EASY)
 			text_show(20810);
 		else
 			text_show(20811);
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index c906290b781..1d60f0b8834 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -59,7 +59,7 @@ static Scratch local;
 
 
 static void handlePause() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 124:
 		if (++local._pauseCounter <= local._pauseCounterThreshold)
 			_scene->_sequences.addTimer(60, 124);
@@ -72,7 +72,7 @@ static void handlePause() {
 }
 
 static void initPauseCounterThreshold() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 226:
 		_scene->_sequences.addTimer(1, 124);
 		local._pauseCounterThreshold = g_engine->getRandomNumber(7, 12);
@@ -85,7 +85,7 @@ static void initPauseCounterThreshold() {
 }
 
 static void handlePeek() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 133:
 		g_engine->_soundManager->command(18, 0);
 		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
@@ -133,7 +133,7 @@ static void handlePeek() {
 }
 
 static void handleVerticalMove() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 140:
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 8, 0, 1);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 5);
@@ -169,7 +169,7 @@ static void handleVerticalMove() {
 }
 
 static void handleLookStay() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 145:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 2;
@@ -215,7 +215,7 @@ static void handleLookStay() {
 }
 
 static void handleLookRight() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 151:
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 2, 0, 0);
@@ -244,7 +244,7 @@ static void handleLookRight() {
 }
 
 static void handleBlink() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 155:
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
@@ -275,7 +275,7 @@ static void handleBlink() {
 }
 
 static void handleGetBinoculars() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 161:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 3;
@@ -326,7 +326,7 @@ static void handleGetBinoculars() {
 }
 
 static void handleBinocularBlink() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 167:
 	{
 		int oldIdx = _globals._sequenceIndexes[3];
@@ -360,7 +360,7 @@ static void handleBinocularBlink() {
 }
 
 static void handleBinocularScan() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 171:
 	{
 		int oldIdx = _globals._sequenceIndexes[3];
@@ -424,7 +424,7 @@ static void handleBinocularScan() {
 }
 
 static void handleJumpInTree() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 178:
 	{
 		int oldIdx = 0;
@@ -467,7 +467,7 @@ static void handleJumpInTree() {
 }
 
 static void handleTongue() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 182:
 	{
 		int oldIdx = _globals._sequenceIndexes[3];
@@ -527,7 +527,7 @@ static void handleTongue() {
 }
 
 static void handleStandFromPeek() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 189:
 		local._monkeyPosition = 4;
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
@@ -575,7 +575,7 @@ static void handleStandFromPeek() {
 }
 
 static void handleStandBlink() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 246:
 		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
@@ -604,7 +604,7 @@ static void handleStandBlink() {
 }
 
 static void handleJumpAndHide() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 196:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 1;
@@ -626,7 +626,7 @@ static void handleJumpAndHide() {
 }
 
 static void handleMonkeyEating() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 199:
 		g_engine->_soundManager->command(18, 0);
 		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
@@ -699,7 +699,7 @@ static void handleMonkeyEating() {
 	case 207:
 	{
 		g_engine->_soundManager->command(18, 0);
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(180, 25), 0xFDFC, 0, 0, 90, _game.getQuote(130));
+		int msgIndex = _scene->_kernelMessages.add(Common::Point(180, 25), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 130));
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 
 		int oldIdx = _globals._sequenceIndexes[4];
@@ -712,7 +712,7 @@ static void handleMonkeyEating() {
 
 	case 208:
 	{
-		_scene->_kernelMessages.add(Common::Point(180, 39), 0xFDFC, 0, 0, 90, _game.getQuote(131));
+		_scene->_kernelMessages.add(Common::Point(180, 39), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 131));
 		int oldIdx = _globals._sequenceIndexes[4];
 		_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 4, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 28, 29);
@@ -740,7 +740,7 @@ static void handleMonkeyEating() {
 }
 
 static void handleMonkeyFall() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 219:
 	{
 		g_engine->_soundManager->command(25, 0);
@@ -749,8 +749,8 @@ static void handleMonkeyFall() {
 		_scene->_sprites.remove(_globals._spriteIndexes[5]);
 		_scene->_sprites.remove(_globals._spriteIndexes[4]);
 
-		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('m', 4));
-		_scene->_kernelMessages.add(Common::Point(180, 26), 0xFDFC, 0, 0, 90, _game.getQuote(151));
+		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('m', 4));
+		_scene->_kernelMessages.add(Common::Point(180, 26), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 151));
 		_scene->_sequences.addTimer(40, 100);
 		_scene->_hotspots.activate(227, false);
 		int oldIdx = _globals._sequenceIndexes[3];
@@ -767,7 +767,7 @@ static void handleMonkeyFall() {
 	case 220:
 	{
 		g_engine->_soundManager->command(18, 0);
-		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 90, _game.getQuote(159));
+		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 159));
 		_scene->_hotspots.activate(227, false);
 		int oldIdx = _globals._sequenceIndexes[3];
 		local._monkeyPosition = 1;
@@ -782,7 +782,7 @@ static void handleMonkeyFall() {
 
 	case 221:
 	{
-		_game._objects.setRoom(OBJ_BINOCULARS, 209);
+		inter_move_object(OBJ_BINOCULARS, 209);
 		local._binocularsDroppedFl = true;
 		int oldIdx = _globals._sequenceIndexes[8];
 		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
@@ -800,7 +800,7 @@ static void handleMonkeyFall() {
 
 	case 222:
 	{
-		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 70, _game.getQuote(160));
+		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 70, quote_string(kernel.quotes, 160));
 		int oldIdx = _globals._sequenceIndexes[8];
 		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 73, 78);
@@ -810,7 +810,7 @@ static void handleMonkeyFall() {
 	break;
 
 	case 223:
-		_scene->loadAnimation(Resources::formatName(209, 'e', -1, EXT_AA, ""), 224);
+		_scene->loadAnimation(kernel_full_name(209, 'e', -1, "", EXT_AA), 224);
 		g_engine->_soundManager->command(38, 0);
 		break;
 
@@ -820,7 +820,7 @@ static void handleMonkeyFall() {
 		local._counter = 0;
 		local._pauseMode = 0;
 		text_show(20910);
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		break;
 
 	default:
@@ -829,7 +829,7 @@ static void handleMonkeyFall() {
 }
 
 static void handleMonkey1() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 212:
 		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 9, 1, 0, 0);
@@ -854,7 +854,7 @@ static void handleMonkey1() {
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 23, 26);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], oldIdx);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(170, 21), 0xFDFC, 0, 0, 90, _game.getQuote(156));
+		int msgIndex = _scene->_kernelMessages.add(Common::Point(170, 21), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 156));
 		_scene->_kernelMessages.setQuoted(msgIndex, 3, true);
 	}
 	break;
@@ -862,7 +862,7 @@ static void handleMonkey1() {
 	case 215:
 	{
 		g_engine->_soundManager->command(18, 0);
-		_scene->loadAnimation(Resources::formatName(209, 'a', -1, EXT_AA, ""), 251);
+		_scene->loadAnimation(kernel_full_name(209, 'a', -1, "", EXT_AA), 251);
 		int oldIdx = _globals._sequenceIndexes[7];
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 27, 35);
@@ -893,23 +893,23 @@ static void handleMonkey1() {
 }
 
 static void handleMonkey2() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 251:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, _game.getQuote(137));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 137));
 		g_engine->_soundManager->command(22, 0);
 		_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 11, 1, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[12], Common::Point(111, 133));
 		_scene->_sequences.setScale(_globals._sequenceIndexes[12], 79);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[12], 1, 6);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
-		_game._player._visible = false;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.walker_visible = false;
 		break;
 
 	case 252:
 	{
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(132));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 132));
 		int oldIdx = _globals._sequenceIndexes[12];
 		_globals._sequenceIndexes[12] = _scene->_sequences.startCycle(_globals._spriteIndexes[12], false, 7);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[12], Common::Point(111, 133));
@@ -921,9 +921,9 @@ static void handleMonkey2() {
 
 	case 253:
 		_scene->_sequences.remove(_globals._sequenceIndexes[12]);
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.walker_visible = true;
+		player.commands_allowed = true;
 		break;
 
 	default:
@@ -932,7 +932,7 @@ static void handleMonkey2() {
 }
 
 static void handleDodge() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 241:
 		_scene->_hotspots.activate(227, true);
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
@@ -954,12 +954,12 @@ static void handleDodge() {
 		local._playingAnimFl = false;
 		local._pauseMode = 0;
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 90, _game.getQuote(155));
+		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 155));
 		if (!local._shootMissedLastFl) {
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(135));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 135));
 			local._shootMissedLastFl = true;
 		} else {
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(136));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 136));
 		}
 		break;
 
@@ -970,23 +970,23 @@ static void handleDodge() {
 
 static void room_209_init() {
 	_globals._spriteIndexes[11] = _scene->_sprites.addSprites("*RXMBD_2");
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('a', 1));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('e', -1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 0));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('b', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('m', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('m', 1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('m', 3));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('m', 6));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('m', 8));
-
-	_game.loadQuoteSet(0x82, 0x83, 0x84, 0x9C, 0x97, 0x95, 0x99, 0x9E, 0x98, 0x9B, 0xA0, 0x96, 0x9F,
+	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('e', -1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('m', 0));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('m', 1));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('m', 3));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('m', 6));
+	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('m', 8));
+
+	kernel.quotes = quote_load(0x82, 0x83, 0x84, 0x9C, 0x97, 0x95, 0x99, 0x9E, 0x98, 0x9B, 0xA0, 0x96, 0x9F,
 		0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x94, 0x89, 0x85, 0x8A, 0x86, 0x87, 0x88, 0);
 
 	pal_change_color(252, 63, 44, 30);
 	pal_change_color(253, 63, 20, 22);
 
-	if (_game._objects.isInRoom(OBJ_PLANT_STALK)) {
+	if (object_is_here(OBJ_PLANT_STALK)) {
 		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_plant_stalk, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(263, 129), FACING_SOUTH);
@@ -994,14 +994,16 @@ static void room_209_init() {
 	}
 
 	if (_scene->_priorSceneId == 208) {
-		_game._player._playerPos = Common::Point(11, 121);
-		_game._player._facing = FACING_EAST;
+		player.x = 11;
+		player.y = 121;
+		player.facing = FACING_EAST;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(28, 121);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 28;
+		player.y = 121;
+		player.facing = FACING_SOUTH;
 	}
 
-	if (_game._objects.isInRoom(OBJ_BINOCULARS)) {
+	if (object_is_here(OBJ_BINOCULARS)) {
 		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(201, 131));
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
@@ -1010,8 +1012,8 @@ static void room_209_init() {
 	}
 
 	if (_scene->_roomChanged) {
-		_game._objects.addToInventory(OBJ_POISON_DARTS);
-		_game._objects.addToInventory(OBJ_BLOWGUN);
+		inter_give_to_player(OBJ_POISON_DARTS);
+		inter_give_to_player(OBJ_BLOWGUN);
 		_globals[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
 	}
 
@@ -1114,7 +1116,7 @@ static void room_209_daemon() {
 			break;
 
 		case 9:
-			if ((local._monkeyPosition == 3) && (_game._player._playerPos.x < 120)) {
+			if ((local._monkeyPosition == 3) && (player.x < 120)) {
 				_scene->_sequences.addTimer(1, 182);
 				_scene->_hotspots.activate(227, true);
 				local._counter = 0;
@@ -1260,9 +1262,9 @@ static void room_209_daemon() {
 		if (!local._playingAnimFl && (local._monkeyPosition == 3))
 			local._shouldFallFl = true;
 
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 228:
-			_game._player._visible = false;
+			player.walker_visible = false;
 			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 7);
 			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
@@ -1299,9 +1301,9 @@ static void room_209_daemon() {
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
-			_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+			player.clock = _scene->_frameStartTime - player.frame_delay;
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], -1);
-			_game._player._visible = false;
+			player.walker_visible = false;
 		}
 		break;
 
@@ -1315,9 +1317,9 @@ static void room_209_daemon() {
 			_scene->_sequences.addTimer(2, 233);
 			_scene->_kernelMessages.reset();
 			if (local._dodgeFl && (local._monkeyPosition != 1) && (local._monkeyPosition != 2))
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, _game.getQuote(138));
+				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, quote_string(kernel.quotes, 138));
 			if (local._fallFl && (local._monkeyPosition != 3))
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, _game.getQuote(138));
+				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, quote_string(kernel.quotes, 138));
 		}
 		break;
 
@@ -1368,21 +1370,21 @@ static void room_209_daemon() {
 			break;
 
 		case 237:
-			_game._player._visible = true;
-			_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+			player.walker_visible = true;
+			player.clock = _scene->_frameStartTime - player.frame_delay;
 			_scene->_sequences.addTimer(1, 238);
 			break;
 
 		case 238:
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			if (local._dodgeFl)
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 
 			local._startShootingInTimerFl = false;
 
 			if (local._fallFl) {
 				_globals[kMonkeyStatus] = MONKEY_IS_GONE;
-				_game._objects.setRoom(OBJ_POISON_DARTS, NOWHERE);
+				inter_move_object(OBJ_POISON_DARTS, NOWHERE);
 			}
 			local._dodgeFl = false;
 			local._fallFl = false;
@@ -1401,8 +1403,8 @@ static void room_209_daemon() {
 		}
 	}
 
-	if (_game._trigger == 100)
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(134));
+	if (kernel.trigger == 100)
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 134));
 
 	if (local._shootReadyFl && (local._shouldFallFl || local._shouldDodgeFl)) {
 		_scene->_sequences.addTimer(4, 234);
@@ -1412,22 +1414,24 @@ static void room_209_daemon() {
 
 static void room_209_pre_parser() {
 	if (player_said_2(walk_towards, field_to_west))
-		_game._player._walkOffScreenSceneId = 208;
+		player.walk_off_edge_to_room = 208;
 
 	if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
 		if ((player_said_1(shoot) || player_said_1(hose_down)) && player_said_1(monkey)
-			&& player_said_1(blowgun) && _game._objects.isInInventory(OBJ_BLOWGUN) && _game._objects.isInInventory(OBJ_POISON_DARTS)) {
-			_game._player._prepareWalkPos = Common::Point(111, 129);
-			_game._player._prepareWalkFacing = FACING_NORTHEAST;
-			_game._player._needToWalk = true;
-			_game._player._readyToWalk = true;
+			&& player_said_1(blowgun) && player_has(OBJ_BLOWGUN) && player_has(OBJ_POISON_DARTS)) {
+			player.prepare_walk_x = 111;
+			player.prepare_walk_y = 129;
+			player.prepare_walk_facing = FACING_NORTHEAST;
+			player.need_to_walk = true;
+			player.ready_to_walk = true;
 		}
 
 		if (player_said_2(look, monkey) || player_said_2(talkto, monkey)) {
-			_game._player._prepareWalkPos = Common::Point(111, 129);
-			_game._player._prepareWalkFacing = FACING_NORTHEAST;
-			_game._player._needToWalk = true;
-			_game._player._readyToWalk = true;
+			player.prepare_walk_x = 111;
+			player.prepare_walk_y = 129;
+			player.prepare_walk_facing = FACING_NORTHEAST;
+			player.need_to_walk = true;
+			player.ready_to_walk = true;
 		}
 	}
 }
@@ -1448,26 +1452,26 @@ static void room_209_parser() {
 	if (player_said_2(talkto, monkey) && !local._pitchFl && !local._playingDialogFl) {
 		_scene->_sequences.addTimer(1, local._dialogAbortVal);
 		local._playingDialogFl = true;
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		_action._inProgress = false;
 		return;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 130:
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		local._playingDialogFl = false;
 		_action._inProgress = false;
 		return;
 
 	case 5:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 6, 180, _game.getQuote(139));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 6, 180, quote_string(kernel.quotes, 139));
 		_action._inProgress = false;
 		return;
 
 	case 6:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(151));
+		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 151));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 7;
 		_action._inProgress = false;
@@ -1475,12 +1479,12 @@ static void room_209_parser() {
 
 	case 7:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 8, 180, _game.getQuote(140));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 8, 180, quote_string(kernel.quotes, 140));
 		_action._inProgress = false;
 		return;
 
 	case 8:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(149));
+		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 149));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 9;
 		_action._inProgress = false;
@@ -1488,18 +1492,18 @@ static void room_209_parser() {
 
 	case 9:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, _game.getQuote(141));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, quote_string(kernel.quotes, 141));
 		_scene->_sequences.addTimer(200, 10);
 		_action._inProgress = false;
 		return;
 
 	case 10:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 11, 180, _game.getQuote(142));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 11, 180, quote_string(kernel.quotes, 142));
 		_action._inProgress = false;
 		return;
 
 	case 11:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(152));
+		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 152));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 12;
 		_action._inProgress = false;
@@ -1507,18 +1511,18 @@ static void room_209_parser() {
 
 	case 12:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 130, _game.getQuote(143));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 130, quote_string(kernel.quotes, 143));
 		_scene->_sequences.addTimer(150, 13);
 		_action._inProgress = false;
 		return;
 
 	case 13:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 14, 180, _game.getQuote(145));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 14, 180, quote_string(kernel.quotes, 145));
 		_action._inProgress = false;
 		return;
 
 	case 14:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, _game.getQuote(151));
+		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 151));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 15;
 		_action._inProgress = false;
@@ -1526,24 +1530,24 @@ static void room_209_parser() {
 
 	case 15:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 16, 180, _game.getQuote(146));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 16, 180, quote_string(kernel.quotes, 146));
 		_action._inProgress = false;
 		return;
 
 	case 16:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 17, 60, _game.getQuote(154));
+		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 17, 60, quote_string(kernel.quotes, 154));
 		_action._inProgress = false;
 		return;
 
 	case 17:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 130, 60, _game.getQuote(147));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 130, 60, quote_string(kernel.quotes, 147));
 		local._dialogAbortVal = 18;
 		_action._inProgress = false;
 		return;
 
 	case 18:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, _game.getQuote(148));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, quote_string(kernel.quotes, 148));
 		local._pitchFl = true;
 		local._playingDialogFl = false;
 		local._dialogAbortVal = 5;
@@ -1556,21 +1560,21 @@ static void room_209_parser() {
 
 	if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
 		if ((player_said_1(shoot) || player_said_1(hose_down)) && player_said_1(monkey)
-			&& player_said_1(blowgun) && _game._objects.isInInventory(OBJ_BLOWGUN) && _game._objects.isInInventory(OBJ_POISON_DARTS)) {
+			&& player_said_1(blowgun) && player_has(OBJ_BLOWGUN) && player_has(OBJ_POISON_DARTS)) {
 			if (player_said_3(shoot, blowgun, monkey) && !local._startShootingInTimerFl) {
-				_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(1, 231);
 				local._startShootingInTimerFl = true;
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				local._dodgeFl = true;
 				_action._inProgress = false;
 				return;
 			}
 
 			if (player_said_3(hose_down, blowgun, monkey) && !local._startShootingInTimerFl) {
-				_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(1, 228);
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				local._fallFl = true;
 				local._startShootingInTimerFl = true;
 				_action._inProgress = false;
@@ -1580,18 +1584,18 @@ static void room_209_parser() {
 
 		if (player_said_2(look, monkey)) {
 			local._pitchFl = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			text_show(20914);
 			_action._inProgress = false;
 			return;
 		}
 	}
 
-	if (player_said_2(take, plant_stalk) && (_game._trigger || _game._objects.isInRoom(OBJ_PLANT_STALK))) {
-		switch (_game._trigger) {
+	if (player_said_2(take, plant_stalk) && (kernel.trigger || object_is_here(OBJ_PLANT_STALK))) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 2, 0, 0);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[11]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_SPRITE, 4, 1);
@@ -1600,12 +1604,12 @@ static void room_209_parser() {
 
 		case 1:
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_game._objects.addToInventory(OBJ_PLANT_STALK);
+			inter_give_to_player(OBJ_PLANT_STALK);
 			break;
 
 		case 2:
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			_scene->_sequences.addTimer(4, 3);
 			object_examine(OBJ_PLANT_STALK, 0x328, 0);
 			break;
@@ -1620,12 +1624,12 @@ static void room_209_parser() {
 		return;
 	}
 
-	if (player_said_2(take, binoculars) && (_game._trigger || _game._objects.isInRoom(OBJ_BINOCULARS))) {
-		switch (_game._trigger) {
+	if (player_said_2(take, binoculars) && (kernel.trigger || object_is_here(OBJ_BINOCULARS))) {
+		switch (kernel.trigger) {
 		case 0:
 			_globals._spriteIndexes[10] = _scene->_sprites.addSprites("*RXMBD_8");
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			_globals._sequenceIndexes[10] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[10], false, 3, 2, 0, 0);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[10]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_SPRITE, 4, 1);
@@ -1634,12 +1638,12 @@ static void room_209_parser() {
 
 		case 1:
 			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-			_game._objects.addToInventory(OBJ_BINOCULARS);
+			inter_give_to_player(OBJ_BINOCULARS);
 			break;
 
 		case 2:
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			local._binocularsDroppedFl = false;
 			_scene->_sequences.addTimer(4, 3);
 			break;
@@ -1710,7 +1714,7 @@ static void room_209_parser() {
 		return;
 	}
 
-	if (player_said_2(throw, monkey) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
+	if (player_said_2(throw, monkey) && player_has(object_named(_action._activeAction._objectNameId))) {
 		if (!player_said_1(poison_darts)) {
 			text_show(20915);
 		}
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 94c75f709d9..5c65309875b 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -59,7 +59,7 @@ static Scratch local;
 
 
 static void handleTwinklesSpeech(int quoteId, int shiftX, uint32 delay) {
-	_scene->_kernelMessages.add(Common::Point(10, 70 + (shiftX * 14)), 0xFDFC, 0, 0, (delay == 0) ? INDEFINITE_TIMEOUT : delay, _game.getQuote(quoteId));
+	_scene->_kernelMessages.add(Common::Point(10, 70 + (shiftX * 14)), 0xFDFC, 0, 0, (delay == 0) ? INDEFINITE_TIMEOUT : delay, quote_string(kernel.quotes, quoteId));
 }
 
 static void newNode(int node) {
@@ -105,16 +105,16 @@ static void setDialogNode(int node) {
 		_scene->_userInterface.setup(kInputBuildingSentences);
 		local._shouldFaceRex = false;
 		local._shouldTalk = false;
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		local._curDialogNode = 0;
 		break;
 
 	case 2:
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 1:
 			local._nextHandsPlace = 1;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xB9, -1, 0);
 				_scene->_sequences.addTimer(180, 2);
@@ -132,18 +132,18 @@ static void setDialogNode(int node) {
 		default:
 			local._nextHandsPlace = 0;
 			local._shouldTalk = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			newNode(2);
 			break;
 		}
 		break;
 
 	case 3:
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 1:
 			local._nextHandsPlace = 0;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xBE, -2, 0);
 				_scene->_sequences.addTimer(180, 2);
@@ -163,20 +163,20 @@ static void setDialogNode(int node) {
 			break;
 		default:
 			local._shouldTalk = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			newNode(3);
 			break;
 		}
 		break;
 
 	case 4:
-		if (_game._trigger == 1) {
+		if (kernel.trigger == 1) {
 			local._nextHandsPlace = 1;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 
 			int quote;
-			if (_game._storyMode == STORYMODE_NAUGHTY)
+			if (config_file.naughtiness == STORYMODE_NAUGHTY)
 				quote = g_engine->getRandomNumber(199, 201);
 			else
 				quote = g_engine->getRandomNumber(197, 198);
@@ -191,16 +191,16 @@ static void setDialogNode(int node) {
 			_scene->_userInterface.setup(kInputBuildingSentences);
 			local._shouldFaceRex = false;
 			local._shouldTalk = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 		}
 		break;
 
 	case 5:
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 1:
 			local._nextHandsPlace = 2;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xCA, -1, 0);
 				_scene->_sequences.addTimer(180, 2);
@@ -218,18 +218,18 @@ static void setDialogNode(int node) {
 		default:
 			local._nextHandsPlace = 2;
 			local._shouldTalk = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			newNode(5);
 			break;
 		}
 		break;
 
 	case 6:
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 1:
 			local._nextHandsPlace = 1;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xD0, -2, 0);
 				_scene->_sequences.addTimer(180, 2);
@@ -252,18 +252,18 @@ static void setDialogNode(int node) {
 		default:
 			local._nextHandsPlace = 0;
 			local._shouldTalk = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			newNode(6);
 			break;
 		}
 		break;
 
 	case 7:
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 1:
 			local._nextHandsPlace = 2;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xD6, -1, 0);
 				_scene->_sequences.addTimer(180, 2);
@@ -279,18 +279,18 @@ static void setDialogNode(int node) {
 
 		default:
 			local._shouldTalk = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			newNode(7);
 			break;
 		}
 		break;
 
 	case 8:
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 1:
 			local._nextHandsPlace = 2;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xDD, -1, 0);
 				_scene->_sequences.addTimer(180, 2);
@@ -306,7 +306,7 @@ static void setDialogNode(int node) {
 
 		default:
 			local._shouldTalk = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			newNode(8);
 			break;
 		}
@@ -314,11 +314,11 @@ static void setDialogNode(int node) {
 
 
 	case 9:
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 1:
 			local._nextHandsPlace = 0;
 			local._shouldTalk = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				_scene->_userInterface.emptyConversationList();
 				_scene->_userInterface.setup(kInputConversation);
@@ -337,15 +337,15 @@ static void setDialogNode(int node) {
 		case 3:
 			local._twinkleAnimationType = 2;
 			_globals[kCurtainOpen] = true;
-			_game._player._visible = false;
+			player.walker_visible = false;
 			pal_lock();
 			_scene->_kernelMessages.reset();
 			_scene->freeAnimation();
 			_scene->resetScene();
 
-			_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', -1));
-			_game.loadQuoteSet(0xE6, 0xE9, 0xEA, 0xE7, 0xE8, 0);
-			_scene->loadAnimation(formAnimName('B', -1), 4);
+			_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+			kernel.quotes = quote_load(0xE6, 0xE9, 0xEA, 0xE7, 0xE8, 0);
+			_scene->loadAnimation(kernel_name('B', -1), 4);
 			break;
 
 		case 4:
@@ -353,28 +353,28 @@ static void setDialogNode(int node) {
 			_globals._spriteIndexes[8] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
 			_scene->_sequences.setDepth(_globals._spriteIndexes[8], 1);
 
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 20), 0x1110, 32, 5, 180, _game.getQuote(231));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 20), 0x1110, 32, 5, 180, quote_string(kernel.quotes, 231));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		}
 		break;
 
 		case 5:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 40), 0xFDFC, 32, 6, 180, _game.getQuote(233));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 40), 0xFDFC, 32, 6, 180, quote_string(kernel.quotes, 233));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		}
 		break;
 
 		case 6:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 60), 0x1110, 32, 7, 180, _game.getQuote(232));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 60), 0x1110, 32, 7, 180, quote_string(kernel.quotes, 232));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		}
 		break;
 
 		case 7:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 80), 0xFDFC, 32, 8, 180, _game.getQuote(234));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 80), 0xFDFC, 32, 8, 180, quote_string(kernel.quotes, 234));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		}
 		break;
@@ -545,24 +545,24 @@ static void handleConversation8() {
 }
 
 static void handleConversations() {
-	if (_game._trigger == 0) {
+	if (kernel.trigger == 0) {
 		_scene->_kernelMessages.reset();
-		_game._player._stepEnabled = false;
-		const char *curQuote = _game.getQuote(_action._activeAction._verbId);
+		player.commands_allowed = false;
+		const char *curQuote = quote_string(kernel.quotes, _action._activeAction._verbId);
 		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 			static char line1[40], line2[40];
-			_game.splitQuote(curQuote, line1, line2);
+			quote_split_string(curQuote, line1, line2);
 			Common::strcpy_s(local._subQuote2, line2);
 			_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 240, line1);
 			_scene->_sequences.addTimer(60, 50);
 		} else {
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, curQuote);
 		}
-	} else if (_game._trigger == 50) {
+	} else if (kernel.trigger == 50) {
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 240, local._subQuote2);
 		_scene->_sequences.addTimer(180, 1);
 	} else {
-		if (_game._trigger == 1)
+		if (kernel.trigger == 1)
 			_scene->_kernelMessages.reset();
 
 		switch (local._curDialogNode) {
@@ -613,19 +613,24 @@ static void restoreDialogNode(int node, int msgId, int posY) {
 }
 
 static void room_210_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
 
-	if (!_game._visitedScenes._sceneRevisited)
+	if (!player.been_here_before)
 		_globals[kCurtainOpen] = 0;
 
-	if (_scene->_priorSceneId == 205)
-		_game._player._playerPos = Common::Point(277, 56);
+	if (_scene->_priorSceneId == 205) {
+		player.x = 277;
+		player.y = 56;
+	}
 	else if (_scene->_priorSceneId == 215) {
-		_game._player._playerPos = Common::Point(168, 128);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 168;
+		player.y = 128;
+		player.facing = FACING_SOUTH;
 		_globals[kCurtainOpen] = true;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(308, 132);
+	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 308;
+		player.y = 132;
+	}
 
 	if (!_globals[kCurtainOpen]) {
 		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
@@ -636,21 +641,21 @@ static void room_210_init() {
 		_scene->_dynamicHotspots.setCursor(local._doorway, CURSOR_GO_UP);
 	}
 
-	_game.loadQuoteSet(0x5A, 0x73, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xB7,
+	kernel.quotes = quote_load(0x5A, 0x73, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xB7,
 		0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA,
 		0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC,
 		0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0);
 
 	local._conv1.setup(0x2E, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0);
 
-	if (!_game._visitedScenes._sceneRevisited) {
+	if (!player.been_here_before) {
 		local._conv1.set(0x2E, 0xB4, 0xB5, 0xB6, 0xB8, 0);
 
-		if (_game._widepipeCtr >= 2)
+		if (kernel.cheating >= 2)
 			local._conv1.write(0xB7, true);
 	}
 
-	bool sceneRevisited = _game._visitedScenes._sceneRevisited;
+	bool sceneRevisited = player.been_here_before;
 	local._conv2.setup(0x2F, 0xBC, 0xBB, 0xBD, sceneRevisited ? 0 : -1);
 	local._conv3.setup(0x30, 0xC3, 0xC2, 0xC1, 0xC4, sceneRevisited ? 0 : -1);
 	local._conv5.setup(0x31, 0xCD, 0xCC, 0xCE, 0xCF, sceneRevisited ? 0 : -1);
@@ -673,7 +678,7 @@ static void room_210_init() {
 	}
 
 	if (_globals[kTwinklesStatus] == 0) {
-		_scene->loadAnimation(formAnimName('A', -1));
+		_scene->loadAnimation(kernel_name('A', -1));
 		local._twinkleAnimationType = 1;
 	} else
 		_scene->_hotspots.activate(476, false);
@@ -873,7 +878,7 @@ static void room_210_daemon() {
 			int reset_frame = -1;
 
 			if (local._twinklesCurrentFrame == 53) {
-				_scene->_kernelMessages.add(Common::Point(151, 61), 0xFDFC, 32, 70, 180, _game.getQuote(230));
+				_scene->_kernelMessages.add(Common::Point(151, 61), 0xFDFC, 32, 70, 180, quote_string(kernel.quotes, 230));
 				local._shouldTalk = true;
 			} else if ((local._twinklesCurrentFrame == 75) && local._shouldTalk)
 				reset_frame = 60;
@@ -884,12 +889,12 @@ static void room_210_daemon() {
 			}
 		}
 
-		if (_game._trigger == 70)
+		if (kernel.trigger == 70)
 			local._shouldTalk = false;
 	}
 
 	if ((local._twinkleAnimationType == 1) && (_scene->_rails.getNext() > 0)) {
-		_game._player.walk(Common::Point(214, 150), FACING_NORTHWEST);
+		player_walk(214, 150, FACING_NORTHWEST);
 		_scene->_rails.resetNext();
 		local._stopWalking = true;
 	}
@@ -899,20 +904,20 @@ static void room_210_pre_parser() {
 	local._stopWalking = false;
 
 	if (player_said_2(walk_down, path_to_east))
-		_game._player._walkOffScreenSceneId = 211;
+		player.walk_off_edge_to_room = 211;
 }
 
 static void room_210_parser() {
 	if (player_said_3(look, binoculars, hut_to_north)) {
 		text_show(21017);
-	} else if (_game._screenObjects._inputMode == kInputConversation) {
+	} else if (inter_input_mode == kInputConversation) {
 		handleConversations();
 	} else if (player_said_2(talkto, native_woman) ||
-		((_game._player._playerPos == Common::Point(214, 150)) && (_game._player._facing == FACING_NORTHWEST) && (local._twinkleAnimationType == 1) && local._stopWalking)) {
-		switch (_game._trigger) {
+		((Common::Point(player.x, player.y) == Common::Point(214, 150)) && (player.facing == FACING_NORTHWEST) && (local._twinkleAnimationType == 1) && local._stopWalking)) {
+		switch (kernel.trigger) {
 		case 0:
 		{
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			int quote;
 			if (_globals[kTwinklesApproached] == 0)
 				quote = 90;
@@ -948,7 +953,7 @@ static void room_210_parser() {
 			break;
 
 		case 3:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			local._shouldMoveHead = false;
 			local._shouldTalk = false;
 
@@ -962,20 +967,20 @@ static void room_210_parser() {
 		default:
 			break;
 		}
-	} else if (player_said_2(give, native_woman) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId))) {
-		switch (_game._trigger) {
+	} else if (player_said_2(give, native_woman) && player_has(object_named(_action._activeAction._objectNameId))) {
+		switch (kernel.trigger) {
 		case 0:
 		{
 			int quote = g_engine->getRandomNumber(172, 174);
 			local._shouldMoveHead = true;
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			handleTwinklesSpeech(quote, 0, 120);
 			_scene->_sequences.addTimer(120, 1);
 		}
 		break;
 
 		case 1:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			local._shouldMoveHead = false;
 			break;
 
@@ -987,9 +992,9 @@ static void room_210_parser() {
 	} else if (player_said_2(walk_through, doorway)) {
 		_scene->_nextSceneId = 215;
 	} else if ((player_said_2(pull, curtain) || player_said_2(open, curtain)) && !_globals[kCurtainOpen]) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 			_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 12, 1, 0, 0);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
@@ -997,7 +1002,7 @@ static void room_210_parser() {
 			break;
 
 		case 1:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			_globals[kCurtainOpen] = true;
 			local._doorway = _scene->_dynamicHotspots.add(words_doorway, words_walk_through, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
 			_scene->_dynamicHotspots.setPosition(local._doorway, Common::Point(168, 127), FACING_NORTH);
@@ -1008,15 +1013,15 @@ static void room_210_parser() {
 			break;
 		}
 	} else if ((player_said_2(pull, curtain) || player_said_2(close, curtain)) && _globals[kCurtainOpen]) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_game._player._stepEnabled = false;
-			_game._player._facing = FACING_NORTH;
+			player.commands_allowed = false;
+			player.facing = FACING_NORTH;
 			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 12, 0, 0, 1);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			break;
 		case 1:
 			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
@@ -1025,7 +1030,7 @@ static void room_210_parser() {
 			break;
 		case 2:
 			_scene->_dynamicHotspots.remove(local._doorway);
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			_globals[kCurtainOpen] = false;
 			break;
 		default:
@@ -1033,7 +1038,7 @@ static void room_210_parser() {
 		}
 	} else if (player_said_2(look, hut)) {
 		if (_globals[kTwinklesStatus] == TWINKLES_GONE) {
-			if (_game._storyMode == STORYMODE_NAUGHTY)
+			if (config_file.naughtiness == STORYMODE_NAUGHTY)
 				text_show(21003);
 			else
 				text_show(21002);
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index ae93c1671a8..daf4c035065 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -47,19 +47,23 @@ static void room_211_init() {
 	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC002Z2");
 	local._wakeFl = false;
 
-	if (_scene->_priorSceneId == 210)
-		_game._player._playerPos = Common::Point(25, 148);
+	if (_scene->_priorSceneId == 210) {
+		player.x = 25;
+		player.y = 148;
+	}
 	else if (_scene->_priorSceneId == 205) {
-		_game._player._playerPos = Common::Point(49, 133);
-		_game._player._facing = FACING_WEST;
+		player.x = 49;
+		player.y = 133;
+		player.facing = FACING_WEST;
 		local._wakeFl = true;
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
-		_scene->loadAnimation(formAnimName('A', -1), 100);
+		player.commands_allowed = false;
+		player.walker_visible = false;
+		_scene->loadAnimation(kernel_name('A', -1), 100);
 		_scene->_animation[0]->setCurrentFrame(169);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(310, 31);
-		_game._player._facing = FACING_SOUTHWEST;
+		player.x = 310;
+		player.y = 31;
+		player.facing = FACING_SOUTHWEST;
 	}
 
 	if (g_engine->getRandomNumber(1, 8) == 1) {
@@ -71,18 +75,18 @@ static void room_211_init() {
 	}
 
 	if (_scene->_roomChanged)
-		_game._objects.addToInventory(OBJ_BINOCULARS);
+		inter_give_to_player(OBJ_BINOCULARS);
 
 	pal_change_color(252, 63, 44, 30);
 	pal_change_color(253, 63, 20, 22);
-	_game.loadQuoteSet(0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 1, 0);
+	kernel.quotes = quote_load(0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 1, 0);
 
 	if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
 		_scene->_kernelMessages.initRandomMessages(2,
 			Common::Rect(0, 0, 54, 30), 13, 2, 0xFDFC, 60,
 			151, 152, 153, 154, 0);
 
-	local._monkeyTime = _game->_scene._frameStartTime;
+	local._monkeyTime = _scene._frameStartTime;
 	local._scrollY = 30;
 
 	local._ambushFl = false;
@@ -95,29 +99,29 @@ static void room_211_daemon() {
 	if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
 		_scene->_kernelMessages.randomServer();
 
-		if (!local._ambushFl && !local._wakeFl && (_game->_scene._frameStartTime >= local._monkeyTime)) {
+		if (!local._ambushFl && !local._wakeFl && (_scene._frameStartTime >= local._monkeyTime)) {
 			int chanceMinor = _scene->_kernelMessages.checkRandom() * 4 + 1;
 			if (_scene->_kernelMessages.generateRandom(80, chanceMinor))
 				g_engine->_soundManager->command(18, 0);
 
-			local._monkeyTime = _game->_scene._frameStartTime + 2;
+			local._monkeyTime = _scene._frameStartTime + 2;
 		}
 
-		if ((_game._player._playerPos == Common::Point(52, 132)) && (_game._player._facing == FACING_WEST) && !_game._player._moving &&
-			(_game._trigger || !local._ambushFl)) {
-			switch (_game._trigger) {
+		if ((Common::Point(player.x, player.y) == Common::Point(52, 132)) && (player.facing == FACING_WEST) && !player.walking &&
+			(kernel.trigger || !local._ambushFl)) {
+			switch (kernel.trigger) {
 			case 0:
-				if (_game._objects.isInInventory(OBJ_BINOCULARS)) {
+				if (player_has(OBJ_BINOCULARS)) {
 					local._ambushFl = true;
 					local._monkeyFrame = 0;
-					_game._player._stepEnabled = false;
-					_game._player._visible = false;
+					player.commands_allowed = false;
+					player.walker_visible = false;
 					_scene->_kernelMessages.reset();
-					_scene->loadAnimation(formAnimName('A', -1), 90);
+					_scene->loadAnimation(kernel_name('A', -1), 90);
 					g_engine->_soundManager->command(19, 0);
-					int count = (int)_game._objects._inventoryList.size();
+					int count = (int)inven_num_objects;
 					for (int idx = 0; idx < count; idx++) {
-						if ((_game._objects._inventoryList[idx] == OBJ_BINOCULARS) && (_scene->_userInterface._selectedInvIndex != idx))
+						if ((inven[idx] == OBJ_BINOCULARS) && (_scene->_userInterface._selectedInvIndex != idx))
 							_scene->_userInterface.selectObject(idx);
 					}
 				}
@@ -125,9 +129,10 @@ static void room_211_daemon() {
 
 			case 90:
 				g_engine->_soundManager->command(10, 0);
-				_game._player._stepEnabled = true;
-				_game._player._visible = true;
-				_game._player._playerPos = Common::Point(49, 133);
+				player.commands_allowed = true;
+				player.walker_visible = true;
+				player.x = 49;
+				player.y = 133;
 				local._ambushFl = false;
 				_globals[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
 				break;
@@ -143,44 +148,44 @@ static void room_211_daemon() {
 		switch (local._monkeyFrame) {
 		case 2:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(12, 4), 0xFDFC, 0, 0, 60, _game.getQuote(157));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(12, 4), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 157));
 			_scene->_kernelMessages.setQuoted(msgIndex, 2, true);
 		}
 		break;
 
 		case 12:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(35, 20), 0xFDFC, 0, 0, 60, _game.getQuote(155));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(35, 20), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 155));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		}
 		break;
 
 		case 42:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(60, 45), 0xFDFC, 0, 0, 60, _game.getQuote(156));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(60, 45), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 156));
 			_scene->_kernelMessages.setQuoted(msgIndex, 6, true);
 		}
 		break;
 
 		case 73:
-			_scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 75, _game.getQuote(157));
+			_scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 75, quote_string(kernel.quotes, 157));
 			break;
 
 		case 90:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 60, _game.getQuote(158));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 60, quote_string(kernel.quotes, 158));
 			_scene->_kernelMessages.setQuoted(msgIndex, 6, true);
 		}
 		break;
 
 		case 97:
 			_scene->_userInterface.selectObject(-1);
-			_game._objects.removeFromInventory(OBJ_BINOCULARS, 1);
+			inter_take_from_player(OBJ_BINOCULARS, 1);
 			break;
 
 		case 177:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(161));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 161));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
@@ -188,7 +193,7 @@ static void room_211_daemon() {
 
 		case 181:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(162));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 162));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
@@ -196,7 +201,7 @@ static void room_211_daemon() {
 
 		case 188:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(163));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 163));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
@@ -204,7 +209,7 @@ static void room_211_daemon() {
 
 		case 200:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(164));
+			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 164));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
@@ -216,9 +221,9 @@ static void room_211_daemon() {
 	}
 
 	if (local._wakeFl) {
-		if (_game._trigger == 100) {
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+		if (kernel.trigger == 100) {
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			local._wakeFl = false;
 		}
 
@@ -227,7 +232,7 @@ static void room_211_daemon() {
 			switch (_scene->_animation[0]->getCurrentFrame()) {
 			case 177:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(165));
+				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 165));
 				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
@@ -235,7 +240,7 @@ static void room_211_daemon() {
 
 			case 181:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(166));
+				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 166));
 				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
@@ -243,7 +248,7 @@ static void room_211_daemon() {
 
 			case 188:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(167));
+				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 167));
 				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
@@ -251,7 +256,7 @@ static void room_211_daemon() {
 
 			case 200:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, _game.getQuote(168));
+				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 168));
 				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
@@ -265,19 +270,19 @@ static void room_211_daemon() {
 }
 
 static void room_211_pre_parser() {
-	if (player_said_2(walk_down, jungle_path) && _game._objects.isInInventory(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
+	if (player_said_2(walk_down, jungle_path) && player_has(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
 		&& (_scene->_customDest.x <= 52) && (_scene->_customDest.y >= 132))
-		_game._player.walk(Common::Point(52, 132), FACING_WEST);
+		player_walk(52, 132, FACING_WEST);
 
 	if (player_said_2(walk_down, path_to_west)) {
-		if (_game._objects.isInInventory(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
-			_game._player.walk(Common::Point(52, 132), FACING_WEST);
+		if (player_has(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
+			player_walk(52, 132, FACING_WEST);
 		else
-			_game._player._walkOffScreenSceneId = 210;
+			player.walk_off_edge_to_room = 210;
 	}
 
 	if (player_said_2(walk_down, path_to_northeast))
-		_game._player._walkOffScreenSceneId = 207;
+		player.walk_off_edge_to_room = 207;
 }
 
 static void room_211_parser() {
@@ -291,7 +296,7 @@ static void room_211_parser() {
 		text_show(21102);
 	else if (player_said_2(look, palm_tree)) {
 		if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
-			if (_game._storyMode == STORYMODE_NAUGHTY)
+			if (config_file.naughtiness == STORYMODE_NAUGHTY)
 				text_show(21103);
 			else
 				text_show(21104);
@@ -299,7 +304,7 @@ static void room_211_parser() {
 			text_show(21105);
 		}
 	} else if (player_said_2(look, thick_undergrowth)) {
-		if (_game._storyMode == STORYMODE_NAUGHTY)
+		if (config_file.naughtiness == STORYMODE_NAUGHTY)
 			text_show(21106);
 		else
 			text_show(21107);
diff --git a/engines/mads/nebular/rooms/room212.cpp b/engines/mads/nebular/rooms/room212.cpp
index 439e85c1d59..2a2979c61e0 100644
--- a/engines/mads/nebular/rooms/room212.cpp
+++ b/engines/mads/nebular/rooms/room212.cpp
@@ -33,11 +33,13 @@ namespace Rooms {
 
 static void room_212_init() {
 	if (_scene->_priorSceneId == 208) {
-		_game._player._playerPos = Common::Point(195, 85);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 195;
+		player.y = 85;
+		player.facing = FACING_SOUTH;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(67, 117);
-		_game._player._facing = FACING_NORTHEAST;
+		player.x = 67;
+		player.y = 117;
+		player.facing = FACING_NORTHEAST;
 	}
 
 	section_2_music();
@@ -49,7 +51,7 @@ static void room_212_daemon() {
 
 static void room_212_pre_parser() {
 	if (player_said_2(walk_through, cave_entrance))
-		_game._player._walkOffScreenSceneId = 111;
+		player.walk_off_edge_to_room = 111;
 }
 
 static void room_212_parser() {
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index 61d5dc8342f..2bdc2c18501 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -40,15 +40,15 @@ static Scratch local;
 
 
 static void room_214_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('e', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('e', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('t', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('e', 1));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('t', -1));
 	_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXMRD_7");
 
-	local._devilTime = _game._player._priorTimer;
+	local._devilTime = player.clock;
 	local._devilRunningFl = false;
 
-	if (_game._objects.isInRoom(OBJ_POISON_DARTS)) {
+	if (object_is_here(OBJ_POISON_DARTS)) {
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(103, 86));
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 11);
@@ -56,7 +56,7 @@ static void room_214_init() {
 		_scene->_hotspots.activate(words_poison_darts, false);
 	}
 
-	if (_game._objects.isInRoom(OBJ_BLOWGUN)) {
+	if (object_is_here(OBJ_BLOWGUN)) {
 		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(90, 87));
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13);
@@ -64,14 +64,16 @@ static void room_214_init() {
 		_scene->_hotspots.activate(words_blowgun, false);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(191, 152);
+	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 191;
+		player.y = 152;
+	}
 
 	section_2_music();
 }
 
 static void room_214_daemon() {
-	if ((_game._player._priorTimer - local._devilTime > 800) && !local._devilRunningFl) {
+	if ((player.clock - local._devilTime > 800) && !local._devilRunningFl) {
 		local._devilRunningFl = true;
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 6, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4);
@@ -81,7 +83,7 @@ static void room_214_daemon() {
 	}
 
 	if (local._devilRunningFl) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 71:
 		{
 			int oldIdx = _globals._sequenceIndexes[3];
@@ -102,7 +104,7 @@ static void room_214_daemon() {
 			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 9, -2);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
-			local._devilTime = _game._player._priorTimer;
+			local._devilTime = player.clock;
 			local._devilRunningFl = false;
 		}
 		break;
@@ -118,11 +120,11 @@ static void room_214_parser() {
 		text_show(21427);
 	else if (player_said_2(walk_outside, hut))
 		_scene->_nextSceneId = 207;
-	else if (player_said_2(take, poison_darts) && (_game._trigger || _game._objects.isInRoom(OBJ_POISON_DARTS))) {
-		switch (_game._trigger) {
+	else if (player_said_2(take, poison_darts) && (kernel.trigger || object_is_here(OBJ_POISON_DARTS))) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], true, 6, 1, 0, 0);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
@@ -133,28 +135,28 @@ static void room_214_parser() {
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_game._objects.addToInventory(OBJ_POISON_DARTS);
+			inter_give_to_player(OBJ_POISON_DARTS);
 			_scene->_hotspots.activate(words_poison_darts, false);
 			break;
 
 		case 2:
-			_game._player._visible = true;
+			player.walker_visible = true;
 			_scene->_sequences.addTimer(48, 3);
 			break;
 
 		case 3:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			object_examine(OBJ_POISON_DARTS, 0x53A5, 0);
 			break;
 
 		default:
 			break;
 		}
-	} else if (player_said_2(take, blowgun) && (_game._trigger || _game._objects.isInRoom(OBJ_BLOWGUN))) {
-		switch (_game._trigger) {
+	} else if (player_said_2(take, blowgun) && (kernel.trigger || object_is_here(OBJ_BLOWGUN))) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 1, 0, 0);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
@@ -165,17 +167,17 @@ static void room_214_parser() {
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_game._objects.addToInventory(OBJ_BLOWGUN);
+			inter_give_to_player(OBJ_BLOWGUN);
 			_scene->_hotspots.activate(words_blowgun, false);
 			break;
 
 		case 2:
-			_game._player._visible = true;
+			player.walker_visible = true;
 			_scene->_sequences.addTimer(48, 3);
 			break;
 
 		case 3:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			object_examine(OBJ_BLOWGUN, 0x329, 0);
 			break;
 
@@ -193,7 +195,7 @@ static void room_214_parser() {
 	else if (player_said_2(look, trophy))
 		text_show(21405);
 	else if (player_said_2(look, large_bowl)) {
-		if (_game._storyMode == STORYMODE_NAUGHTY) {
+		if (config_file.naughtiness == STORYMODE_NAUGHTY) {
 			text_show(21406);
 		} else {
 			text_show(21407);
@@ -229,11 +231,11 @@ static void room_214_parser() {
 	else if (player_said_2(look, blowgun))
 		text_show(21422);
 	else if (player_said_2(look, table)) {
-		if (_game._objects.isInRoom(OBJ_POISON_DARTS) && _game._objects.isInRoom(OBJ_BLOWGUN)) {
+		if (object_is_here(OBJ_POISON_DARTS) && object_is_here(OBJ_BLOWGUN)) {
 			text_show(21423);
-		} else if (_game._objects.isInRoom(OBJ_POISON_DARTS) && !_game._objects.isInRoom(OBJ_BLOWGUN)) {
+		} else if (object_is_here(OBJ_POISON_DARTS) && !object_is_here(OBJ_BLOWGUN)) {
 			text_show(21424);
-		} else if (!_game._objects.isInRoom(OBJ_POISON_DARTS) && _game._objects.isInRoom(OBJ_BLOWGUN)) {
+		} else if (!object_is_here(OBJ_POISON_DARTS) && object_is_here(OBJ_BLOWGUN)) {
 			text_show(21425);
 		} else {
 			text_show(21426);
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index c3094ee81bd..95f1a135c2d 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -32,8 +32,8 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_215_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('e', 0));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
 
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 0, 0, 0);
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(235, 83));
@@ -45,32 +45,34 @@ static void room_215_init() {
 		_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*ROXRC_9");
 
 	if (_scene->_priorSceneId == 216) {
-		_game._player._playerPos = Common::Point(140, 119);
-		_game._player._facing = FACING_SOUTHWEST;
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
+		player.x = 140;
+		player.y = 119;
+		player.facing = FACING_SOUTHWEST;
+		player.walker_visible = false;
+		player.commands_allowed = false;
 		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
 		_scene->_sequences.addTimer(120, 70);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(204, 152);
-		_game._player._facing = FACING_NORTH;
+		player.x = 204;
+		player.y = 152;
+		player.facing = FACING_NORTH;
 	}
 
-	_game.loadQuoteSet(0xA9, 0xAA, 0);
+	kernel.quotes = quote_load(0xA9, 0xAA, 0);
 	section_2_music();
 }
 
 static void room_215_daemon() {
-	if (_game._trigger == 70) {
+	if (kernel.trigger == 70) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
-	if (_game._trigger == 71) {
+	if (kernel.trigger == 71) {
 		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
+		player.walker_visible = true;
+		player.commands_allowed = true;
 	}
 }
 
@@ -78,33 +80,33 @@ static void room_215_parser() {
 	if (_action._lookFlag)
 		text_show(21509);
 	else if (player_said_2(take, twinkifruit)) {
-		if (!_game._objects.isInInventory(OBJ_TWINKIFRUIT) || _game._trigger) {
-			switch (_game._trigger) {
+		if (!player_has(OBJ_TWINKIFRUIT) || kernel.trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				if (_globals[kSexOfRex] == REX_MALE) {
-					_game._player._visible = false;
-					_game._player._stepEnabled = false;
+					player.walker_visible = false;
+					player.commands_allowed = false;
 					_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 6, 2, 0, 0);
 					_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 4);
 					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
 					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_LOOP, 0, 1);
 					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					_game._objects.addToInventory(OBJ_TWINKIFRUIT);
+					inter_give_to_player(OBJ_TWINKIFRUIT);
 					object_examine(OBJ_TWINKIFRUIT, 0x5404, 0);
 				}
 				break;
 
 			case 1:
-				if (!_game._objects.isInInventory(OBJ_TWINKIFRUIT)) {
-					_game._objects.addToInventory(OBJ_TWINKIFRUIT);
+				if (!player_has(OBJ_TWINKIFRUIT)) {
+					inter_give_to_player(OBJ_TWINKIFRUIT);
 					object_examine(OBJ_TWINKIFRUIT, 0x5404, 0);
 				}
 				break;
 
 			case 2:
-				_game._player._visible = true;
-				_game._player._stepEnabled = true;
+				player.walker_visible = true;
+				player.commands_allowed = true;
 				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
 				break;
 
@@ -114,7 +116,7 @@ static void room_215_parser() {
 		} else {
 			int idx = g_engine->getRandomNumber(169, 170);
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(idx));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, idx));
 		}
 	} else if (player_said_2(walk_outside, hut))
 		_scene->_nextSceneId = 210;
diff --git a/engines/mads/nebular/rooms/room216.cpp b/engines/mads/nebular/rooms/room216.cpp
index eea4316b663..259d21498a2 100644
--- a/engines/mads/nebular/rooms/room216.cpp
+++ b/engines/mads/nebular/rooms/room216.cpp
@@ -32,18 +32,18 @@ namespace RexNebular {
 namespace Rooms {
 
 void room_216_init() {
-	_game._player._stepEnabled = false;
-	_game._player._visible = false;
+	player.commands_allowed = false;
+	player.walker_visible = false;
 
 	_scene->_userInterface.emptyConversationList();
 	_scene->_userInterface.setup(kInputConversation);
-	_scene->loadAnimation(formAnimName('A', -1), 60);
+	_scene->loadAnimation(kernel_name('A', -1), 60);
 
 	section_2_music();
 }
 
 void room_216_daemon() {
-	if (_game._trigger == 60)
+	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 215;
 }
 
diff --git a/engines/mads/nebular/rooms/room301.cpp b/engines/mads/nebular/rooms/room301.cpp
index cd69b180078..d9f1c19a2a1 100644
--- a/engines/mads/nebular/rooms/room301.cpp
+++ b/engines/mads/nebular/rooms/room301.cpp
@@ -32,21 +32,21 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_301_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 9, 0, 0, 0);
 
 	_globals[kMeteorologistStatus] = METEOROLOGIST_GONE;
 	_globals[kTeleporterCommand] = TELEPORTER_NONE;
 
-	_game._player._stepEnabled = false;
-	_game._player._visible = false;
-	_scene->loadAnimation(formAnimName('a', -1), 60);
+	player.commands_allowed = false;
+	player.walker_visible = false;
+	_scene->loadAnimation(kernel_name('a', -1), 60);
 
 	section_3_music();
 }
 
 static void room_301_daemon() {
-	if (_game._trigger == 60)
+	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 302;
 }
 
diff --git a/engines/mads/nebular/rooms/room302.cpp b/engines/mads/nebular/rooms/room302.cpp
index 03e0aeee41e..0e82041d513 100644
--- a/engines/mads/nebular/rooms/room302.cpp
+++ b/engines/mads/nebular/rooms/room302.cpp
@@ -39,31 +39,31 @@ static Scratch local;
 
 
 static void room_302_init() {
-	_game._player._stepEnabled = false;
-	_game._player._visible = false;
+	player.commands_allowed = false;
+	player.walker_visible = false;
 
-	_scene->loadAnimation(formAnimName('a', -1), 71);
+	_scene->loadAnimation(kernel_name('a', -1), 71);
 	section_3_music();
 }
 
 static void room_302_daemon() {
-	if (_game._trigger == 71)
+	if (kernel.trigger == 71)
 		_scene->_nextSceneId = 303;
 
 	if ((_scene->_animation[0] != nullptr) && (_scene->_animation[0]->getCurrentFrame() != local._oldFrame)) {
 		local._oldFrame = _scene->_animation[0]->getCurrentFrame();
 		if (local._oldFrame == 147) {
-			_game._objects.setRoom(OBJ_POISON_DARTS, 1);
-			_game._objects.setRoom(OBJ_BLOWGUN, 1);
-			_game._objects.setRoom(OBJ_REBREATHER, 1);
-			_game._objects.setRoom(OBJ_STUFFED_FISH, 1);
-			_game._objects.setRoom(OBJ_DEAD_FISH, 1);
-			_game._objects.setRoom(OBJ_BURGER, 1);
+			inter_move_object(OBJ_POISON_DARTS, 1);
+			inter_move_object(OBJ_BLOWGUN, 1);
+			inter_move_object(OBJ_REBREATHER, 1);
+			inter_move_object(OBJ_STUFFED_FISH, 1);
+			inter_move_object(OBJ_DEAD_FISH, 1);
+			inter_move_object(OBJ_BURGER, 1);
 
-			int count = (int)_game._objects.size();
+			int count = (int)num_objects;
 			for (int idx = 0; idx < count; idx++) {
-				if (_game._objects.isInInventory(idx))
-					_game._objects.setRoom(idx, 50);
+				if (player_has(idx))
+					inter_move_object(idx, 50);
 			}
 		}
 	}
diff --git a/engines/mads/nebular/rooms/room303.cpp b/engines/mads/nebular/rooms/room303.cpp
index 9190115fbc9..08daa10c269 100644
--- a/engines/mads/nebular/rooms/room303.cpp
+++ b/engines/mads/nebular/rooms/room303.cpp
@@ -32,22 +32,22 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_303_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('b', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('b', 1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
 
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 10, 0, 50, 120);
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
 	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 10, 0, 0, 0);
 
-	_game._player._visible = false;
-	_game._player._stepEnabled = false;
-	_scene->loadAnimation(formAnimName('a', -1), 60);
+	player.walker_visible = false;
+	player.commands_allowed = false;
+	_scene->loadAnimation(kernel_name('a', -1), 60);
 
 	section_3_music();
 }
 
 static void room_303_daemon() {
-	if (_game._trigger == 60)
+	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 304;
 }
 
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index 39138785362..a56e3fea670 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -40,27 +40,31 @@ static Scratch local;
 
 static void room_304_init() {
 	if (_scene->_priorSceneId == 303) {
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
-		_scene->loadAnimation(formAnimName('a', -1), 60);
+		player.walker_visible = false;
+		player.commands_allowed = false;
+		_scene->loadAnimation(kernel_name('a', -1), 60);
 	} else {
 		if (_globals[kSexOfRex] == REX_MALE)
-			_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 0));
+			_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('a', 0));
 		else
-			_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('a', 2));
+			_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
 
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 1));
-		_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('b', 0));
+		_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
 
 		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 150, 0, 3, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
 		pal_change_color(252, 45, 63, 45);
 		pal_change_color(253, 20, 45, 20);
 
-		if (_globals[kSexOfRex] == REX_MALE)
-			_game._player._playerPos = Common::Point(111, 117);
-		else
-			_game._player._playerPos = Common::Point(113, 116);
+		if (_globals[kSexOfRex] == REX_MALE) {
+			player.x = 111;
+			player.y = 117;
+		}
+		else {
+			player.x = 113;
+			player.y = 116;
+		}
 
 		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 11, 0, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, -1);
@@ -68,18 +72,18 @@ static void room_304_init() {
 	}
 
 	section_3_music();
-	_game.loadQuoteSet(0xEB, 0xEC, 0);
+	kernel.quotes = quote_load(0xEB, 0xEC, 0);
 }
 
 static void room_304_daemon() {
-	if (_game._trigger == 60)
+	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 311;
 
-	if (_game._trigger >= 70) {
-		switch (_game._trigger) {
+	if (kernel.trigger >= 70) {
+		switch (kernel.trigger) {
 		case 70:
 		{
-			_game._player._visible = false;
+			player.walker_visible = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 2, 4);
@@ -99,7 +103,7 @@ static void room_304_daemon() {
 
 		case 71:
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, _game.getQuote(0xEB));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 0xEB));
 			_scene->_sequences.addTimer(1, 72);
 			break;
 
@@ -110,7 +114,7 @@ static void room_304_daemon() {
 			_scene->_sequences.setAnimRange(sprIdx, 5, -2);
 			_scene->_sequences.setDepth(sprIdx, 1);
 			_scene->_sequences.addSubEntry(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 73);
-			if (_game._storyMode == STORYMODE_NICE)
+			if (config_file.naughtiness == STORYMODE_NICE)
 				_scene->_sequences.addSubEntry(sprIdx, SEQUENCE_TRIGGER_SPRITE, 8, 78);
 		}
 		break;
@@ -146,7 +150,7 @@ static void room_304_daemon() {
 
 		case 77:
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(211, 45), 0xFDFC, 32, 0, 180, _game.getQuote(0xEC));
+			_scene->_kernelMessages.add(Common::Point(211, 45), 0xFDFC, 32, 0, 180, quote_string(kernel.quotes, 0xEC));
 			_scene->_sequences.addTimer(120, 78);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 0c602c4b89a..d3e86abd66a 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -56,10 +56,10 @@ static Scratch local;
 
 
 static void handleRexDialog(int quote) {
-	const char *curQuote = _game.getQuote(quote);
+	const char *curQuote = quote_string(kernel.quotes, quote);
 	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
-		_game.splitQuote(curQuote, subQuote1, subQuote2);
+		quote_split_string(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
 
 		_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 240, subQuote1);
@@ -82,8 +82,8 @@ static void handlePrisonerSpeech(int firstQuoteId, int number, uint32 timeout) {
 
 	int quoteId = firstQuoteId;
 	for (int count = 0; count < number; count++) {
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_kernelMessages.add(Common::Point(5, posY), 0xFDFC, 0, 81, timeout, _game.getQuote(quoteId));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(5, posY), 0xFDFC, 0, 81, timeout, quote_string(kernel.quotes, quoteId));
 		posY += 14;
 		quoteId++;
 	}
@@ -259,12 +259,12 @@ static void handlePrisonerDialog() {
 }
 
 static void handleDialog() {
-	if (_game._trigger == 0) {
+	if (kernel.trigger == 0) {
 		_scene->_kernelMessages.reset();
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		handleRexDialog(_action._activeAction._verbId);
 	} else {
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 
 		if (!_globals[kKnowsBuddyBeast]) {
 			handlePrisonerEncounter();
@@ -278,7 +278,7 @@ static void room_307_init() {
 	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC003x0");
 	_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*SC003x1");
 	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*SC003x2");
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 0));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 0));
 
 	init_forcefield(&local._forcefield, true);
 
@@ -291,7 +291,7 @@ static void room_307_init() {
 
 	_scene->changeVariant(1);
 
-	_game.loadQuoteSet(0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0x10C, 0x104, 0x106, 0x107, 0x108, 0x105,
+	kernel.quotes = quote_load(0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0x10C, 0x104, 0x106, 0x107, 0x108, 0x105,
 		0x109, 0x10A, 0x10B, 0x10D, 0x10E, 0x10F, 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117,
 		0x118, 0x119, 0x11A, 0x11B, 0x11C, 0x11D, 0x11E, 0x11F, 0x120, 0x121, 0x122, 0x123, 0x124, 0x125,
 		0x126, 0x127, 0x128, 0x129, 0x12A, 0x12B, 0x12C, 0x12D, 0x12E, 0x12F, 0x130, 0x131, 0x132, 0x133,
@@ -302,7 +302,7 @@ static void room_307_init() {
 	local._dialog1.setup(0x3F, 0x113, 0x114, 0x115, -1);
 	local._dialog2.setup(0x40, 0x11A, 0x11B, 0x11C, 0x11D, 0x11E, 0x11F, 0x120, 0x121, 0x122, 0);
 
-	if (!_game._visitedScenes._sceneRevisited)
+	if (!player.been_here_before)
 		local._dialog2.set(0x11A, 0x122, 0);
 	else if (_scene->_priorSceneId == 318)
 		local._dialog2.write(0x11E, true);
@@ -323,21 +323,24 @@ static void room_307_init() {
 		local._prisonerMessageId = 0x104;
 
 		if (_scene->_priorSceneId == 308) {
-			_game._player._visible = false;
-			_game._player._stepEnabled = false;
-			_game._player._playerPos = Common::Point(156, 113);
-			_game._player._facing = FACING_NORTH;
+			player.walker_visible = false;
+			player.commands_allowed = false;
+			player.x = 156;
+			player.y = 113;
+			player.facing = FACING_NORTH;
 			local._animationMode = 1;
 			g_engine->_soundManager->command(11, 0);
-			_scene->loadAnimation(formAnimName('a', -1), 60);
+			_scene->loadAnimation(kernel_name('a', -1), 60);
 		} else if (_scene->_priorSceneId == 387) {
-			_game._player._playerPos = Common::Point(129, 108);
-			_game._player._facing = FACING_NORTH;
+			player.x = 129;
+			player.y = 108;
+			player.facing = FACING_NORTH;
 			g_engine->_soundManager->command(3, 0);
 			local._grateOpenedFl = true;
 		} else {
-			_game._player._playerPos = Common::Point(159, 109);
-			_game._player._facing = FACING_SOUTH;
+			player.x = 159;
+			player.y = 109;
+			player.facing = FACING_SOUTH;
 			g_engine->_soundManager->command(3, 0);
 		}
 	}
@@ -384,15 +387,15 @@ static void room_307_daemon() {
 			local._forcefield._flag = false;
 
 		if (_scene->_animation[0]->getCurrentFrame() == 150) {
-			_game._player._visible = false;
-			_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+			player.walker_visible = false;
+			player.clock = _scene->_frameStartTime - player.frame_delay;
 		}
 	}
 
-	if (_game._trigger == 60) {
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+	if (kernel.trigger == 60) {
+		player.walker_visible = true;
+		player.commands_allowed = true;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
 		local._animationMode = 0;
 		g_engine->_soundManager->command(9, 0);
 	}
@@ -409,37 +412,37 @@ static void room_307_daemon() {
 		local._lastFrameTime = _scene->_frameStartTime;
 
 		if ((local._guardTime > 3000) && !local._duringPeeingFl && (_scene->_animation[0] == nullptr)
-			&& (_game._screenObjects._inputMode != kInputConversation) && _globals[kMetBuddyBeast] && !local._activePrisonerFl) {
-			if (!_game._objects.isInInventory(OBJ_SCALPEL) && !local._grateOpenedFl) {
-				_game._player._stepEnabled = false;
-				_game._player.walk(Common::Point(151, 119), FACING_SOUTHEAST);
+			&& (inter_input_mode != kInputConversation) && _globals[kMetBuddyBeast] && !local._activePrisonerFl) {
+			if (!player_has(OBJ_SCALPEL) && !local._grateOpenedFl) {
+				player.commands_allowed = false;
+				player_walk(151, 119, FACING_SOUTHEAST);
 				local._animationMode = 2;
 				g_engine->_soundManager->command(11, 0);
-				_scene->loadAnimation(formAnimName('b', -1), 70);
+				_scene->loadAnimation(kernel_name('b', -1), 70);
 			}
 			local._guardTime = 0;
-		} else if ((local._prisonerTimer > 300) && (_game._screenObjects._inputMode != kInputConversation) && (_scene->_animation[0] == nullptr) && !local._activePrisonerFl) {
+		} else if ((local._prisonerTimer > 300) && (inter_input_mode != kInputConversation) && (_scene->_animation[0] == nullptr) && !local._activePrisonerFl) {
 			if (!_globals[kMetBuddyBeast]) {
 				if (local._prisonerMessageId == -1)
 					local._prisonerMessageId = 0x104;
 
-				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, _game.getQuote(local._prisonerMessageId));
+				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, quote_string(kernel.quotes, local._prisonerMessageId));
 				_scene->_kernelMessages.setQuoted(idx, 4, true);
 				local._prisonerMessageId++;
 				if (local._prisonerMessageId > 0x10A)
 					local._prisonerMessageId = 0x104;
 			} else if (_globals[kKnowsBuddyBeast] && (local._dialog2.read(0) > 1) && (g_engine->getRandomNumber(1, 3) == 1)) {
-				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, _game.getQuote(267));
+				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, quote_string(kernel.quotes, 267));
 				_scene->_kernelMessages.setQuoted(idx, 4, true);
 			}
 			local._prisonerTimer = 0;
 		}
 	}
 
-	if (_game._trigger == 70)
+	if (kernel.trigger == 70)
 		_scene->_nextSceneId = 318;
 
-	if (_game._trigger == 81) {
+	if (kernel.trigger == 81) {
 		local._prisonerTimer = 0;
 		if (local._activePrisonerFl && (local._guardTime > 2600))
 			local._guardTime = 3000 - g_engine->getRandomNumber(1, 800);
@@ -451,7 +454,7 @@ static void room_307_daemon() {
 static void room_307_parser() {
 	if (_action._lookFlag)
 		text_show(30715);
-	else if (_game._screenObjects._inputMode == kInputConversation)
+	else if (inter_input_mode == kInputConversation)
 		handleDialog();
 	else if (player_said_2(talkto, cell_wall) || player_said_2(talkto, wall) || player_said_2(talkto, toilet)) {
 		int node, say;
@@ -466,7 +469,7 @@ static void room_307_parser() {
 			node = 1;
 		}
 
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			handleRexDialog(say);
 			break;
@@ -479,17 +482,17 @@ static void room_307_parser() {
 			break;
 		}
 	} else if (player_said_3(pry, scalpel, air_vent)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(239));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 239));
 			_scene->_sequences.addTimer(120, 1);
 			break;
 
 		case 1:
 			_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RXCL_8");
-			_game._player._visible = false;
+			player.walker_visible = false;
 			_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 1, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], -1, 3);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
@@ -529,28 +532,28 @@ static void room_307_parser() {
 		case 5:
 			g_engine->_soundManager->command(10, 0);
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(241));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 241));
 			_scene->_sequences.addTimer(120, 6);
 			break;
 
 		case 6:
 		{
-			_game._player._visible = true;
-			_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+			player.walker_visible = true;
+			player.clock = _scene->_frameStartTime - player.frame_delay;
 			_scene->_sequences.remove(_globals._sequenceIndexes[5]);
 			local._grateOpenedFl = true;
 			_scene->_hotspots.activate(17, false);
 			int idx = _scene->_dynamicHotspots.add(words_air_vent, words_climb_into, -1, Common::Rect(117, 67, 117 + 19, 67 + 13));
 			int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(129, 104), FACING_NORTH);
 			_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_UP);
-			_game._objects.removeFromInventory(OBJ_SCALPEL, NOWHERE);
+			inter_take_from_player(OBJ_SCALPEL, NOWHERE);
 			_scene->_kernelMessages.addQuote(0xF2, 7, 120);
 		}
 		break;
 
 		case 7:
 			_scene->_sprites.remove(_globals._spriteIndexes[5]);
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			break;
 
 		default:
@@ -558,11 +561,11 @@ static void room_307_parser() {
 		}
 	} else if (player_said_2(climb_into, air_vent)) {
 		if (local._grateOpenedFl) {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RXCL_8");
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				_scene->_sequences.remove(_globals._sequenceIndexes[4]);
 				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 60, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 3, -2);
@@ -640,17 +643,17 @@ static void room_307_parser() {
 				break;
 			}
 		}
-	} else if (player_said_2(use, toilet) && (_game._storyMode != STORYMODE_NAUGHTY))
+	} else if (player_said_2(use, toilet) && (config_file.naughtiness != STORYMODE_NAUGHTY))
 		text_show(30723);
 	else if (player_said_2(use, toilet)) {
 		if (!local._afterPeeingFl) {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
 				g_engine->_soundManager->command(25, 0);
-				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 0));
+				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
 				local._duringPeeingFl = true;
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, 2);
 				_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
@@ -666,7 +669,7 @@ static void room_307_parser() {
 
 			case 2:
 				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
-				_game._player._visible = true;
+				player.walker_visible = true;
 				_scene->_sequences.addTimer(48, 3);
 				break;
 
@@ -674,13 +677,13 @@ static void room_307_parser() {
 			{
 				_scene->_sprites.remove(_globals._spriteIndexes[3]);
 				_scene->_kernelMessages.reset();
-				int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 4, 120, _game.getQuote(237));
+				int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 4, 120, quote_string(kernel.quotes, 237));
 				_scene->_kernelMessages.setQuoted(idx, 4, true);
 			}
 			break;
 
 			case 4:
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 				local._duringPeeingFl = false;
 				local._afterPeeingFl = true;
 				break;
@@ -690,7 +693,7 @@ static void room_307_parser() {
 			}
 		} else {
 			_scene->_kernelMessages.reset();
-			int idx = _scene->_kernelMessages.add(Common::Point(85, 39), 0x1110, 0, 0, 180, _game.getQuote(238));
+			int idx = _scene->_kernelMessages.add(Common::Point(85, 39), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 238));
 			_scene->_kernelMessages.setQuoted(idx, 4, true);
 		}
 	} else if (player_said_2(look, air_vent)) {
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index ed196e87633..0bfb1a3cce5 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -47,8 +47,8 @@ static void room_308_init() {
 
 	init_forcefield(&local._forcefield, true);
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('b', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
 	pal_change_color(252, 63, 30, 20);
 	pal_change_color(253, 45, 15, 12);
@@ -60,24 +60,24 @@ static void room_308_init() {
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
 	_scene->_sequences.addTimer(48, 70);
 
-	_game._player._visible = false;
-	_game._player._stepEnabled = false;
-	_scene->loadAnimation(formAnimName('a', -1), 60);
+	player.walker_visible = false;
+	player.commands_allowed = false;
+	_scene->loadAnimation(kernel_name('a', -1), 60);
 
 	section_3_music();
-	_game.loadQuoteSet(0xF4, 0xF5, 0xF6, 0);
+	kernel.quotes = quote_load(0xF4, 0xF5, 0xF6, 0);
 }
 
 static void room_308_daemon() {
 	handle_forcefield(&local._forcefield, &_globals._spriteIndexes[0]);
 
-	if (_game._trigger == 60)
+	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 307;
 
-	if (_game._trigger < 70)
+	if (kernel.trigger < 70)
 		return;
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 70:
 	{
 		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
@@ -85,7 +85,7 @@ static void room_308_daemon() {
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
 		_scene->_kernelMessages.reset();
-		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, _game.getQuote(244));
+		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 244));
 		_scene->_kernelMessages.setQuoted(idx, 2, true);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
@@ -127,7 +127,7 @@ static void room_308_daemon() {
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 6, 7);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
 		_scene->_kernelMessages.reset();
-		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, _game.getQuote(245));
+		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 245));
 		_scene->_kernelMessages.setQuoted(idx, 2, true);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 	}
@@ -151,7 +151,7 @@ static void room_308_daemon() {
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
 		_scene->_kernelMessages.reset();
-		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, _game.getQuote(246));
+		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 246));
 		_scene->_kernelMessages.setQuoted(idx, 2, true);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
 	}
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index e1fe041127e..f4f9d2a9fbd 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -50,8 +50,8 @@ static void room_309_init() {
 
 	init_forcefield(&local._forcefield, true);
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
 	_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
@@ -69,9 +69,9 @@ static void room_309_init() {
 	pal_change_color(250, 63, 20, 20);
 	pal_change_color(251, 45, 10, 10);
 
-	_game._player._visible = false;
-	_game._player._stepEnabled = false;
-	_scene->loadAnimation(formAnimName('a', -1), 60);
+	player.walker_visible = false;
+	player.commands_allowed = false;
+	_scene->loadAnimation(kernel_name('a', -1), 60);
 
 	local._characterSpriteIndexes[0] = _scene->_animation[0]->_spriteListIndexes[2];
 	local._characterSpriteIndexes[1] = _scene->_animation[0]->_spriteListIndexes[2];
@@ -83,30 +83,30 @@ static void room_309_init() {
 
 	section_3_music();
 
-	_game.loadQuoteSet(0xF7, 0xF8, 0xF9, 0x15C, 0x15D, 0x15E, 0);
+	kernel.quotes = quote_load(0xF7, 0xF8, 0xF9, 0x15C, 0x15D, 0x15E, 0);
 }
 
 static void room_309_daemon() {
 	handle_forcefield(&local._forcefield, &_globals._spriteIndexes[0]);
 
-	if (_game._trigger == 61) {
+	if (kernel.trigger == 61) {
 		local._messagesIndexes[0] = -1;
 		local._messagesIndexes[1] = -1;
 	}
 
-	if (_game._trigger == 62)
+	if (kernel.trigger == 62)
 		local._messagesIndexes[2] = -1;
 
 	if (_scene->_animation[0] != nullptr) {
 		if (local._lastFrame != _scene->_animation[0]->getCurrentFrame()) {
 			local._lastFrame = _scene->_animation[0]->getCurrentFrame();
 			if (local._lastFrame == 39) {
-				local._messagesIndexes[0] = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 32, 61, 210, _game.getQuote(348));
-				local._messagesIndexes[1] = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 32, 0, 210, _game.getQuote(349));
+				local._messagesIndexes[0] = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 32, 61, 210, quote_string(kernel.quotes, 348));
+				local._messagesIndexes[1] = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 32, 0, 210, quote_string(kernel.quotes, 349));
 			}
 
 			if (local._lastFrame == 97)
-				local._messagesIndexes[2] = _scene->_kernelMessages.add(Common::Point(0, 0), 0xFBFA, 32, 62, 180, _game.getQuote(350));
+				local._messagesIndexes[2] = _scene->_kernelMessages.add(Common::Point(0, 0), 0xFBFA, 32, 62, 180, quote_string(kernel.quotes, 350));
 
 			for (int charIdx = 0; charIdx < 3; charIdx++) {
 				if (local._messagesIndexes[charIdx] >= 0) {
@@ -130,8 +130,8 @@ static void room_309_daemon() {
 		}
 	}
 
-	if (_game._trigger >= 70) {
-		switch (_game._trigger) {
+	if (kernel.trigger >= 70) {
+		switch (kernel.trigger) {
 		case 70:
 		{
 			int idx = _scene->_dynamicHotspots.add(words_ghastly_beast, words_gawk_at, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
@@ -150,7 +150,7 @@ static void room_309_daemon() {
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 4, 7);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
-			int idx = _scene->_kernelMessages.add(Common::Point(85, 37), 0xFDFC, 0, 0, 120, _game.getQuote(248));
+			int idx = _scene->_kernelMessages.add(Common::Point(85, 37), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 248));
 			_scene->_kernelMessages.setQuoted(idx, 2, true);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		}
@@ -174,7 +174,7 @@ static void room_309_daemon() {
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 12, 20);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
 			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
-			int idx = _scene->_kernelMessages.add(Common::Point(170, 49), 0xFDFC, 0, 0, 120, _game.getQuote(249));
+			int idx = _scene->_kernelMessages.add(Common::Point(170, 49), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 249));
 			_scene->_kernelMessages.setQuoted(idx, 2, true);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 		}
@@ -218,7 +218,7 @@ static void room_309_daemon() {
 			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 90, 0, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 29, 30);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			int idx = _scene->_kernelMessages.add(Common::Point(15, 46), 0xFDFC, 0, 0, 120, _game.getQuote(247));
+			int idx = _scene->_kernelMessages.add(Common::Point(15, 46), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 247));
 			_scene->_kernelMessages.setQuoted(idx, 2, true);
 			_scene->_sequences.addTimer(120, 78);
 		}
@@ -229,7 +229,7 @@ static void room_309_daemon() {
 		}
 	}
 
-	if (_game._trigger == 60)
+	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 308;
 }
 
diff --git a/engines/mads/nebular/rooms/room310.cpp b/engines/mads/nebular/rooms/room310.cpp
index 0abdbd8af0e..100611089c6 100644
--- a/engines/mads/nebular/rooms/room310.cpp
+++ b/engines/mads/nebular/rooms/room310.cpp
@@ -46,14 +46,14 @@ static void room_310_init() {
 
 	init_forcefield(&local._forcefield, true);
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 	_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(127, 78));
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15);
 
-	_game._player._visible = false;
-	_game._player._stepEnabled = false;
-	_scene->loadAnimation(formAnimName('a', -1), 70);
+	player.walker_visible = false;
+	player.commands_allowed = false;
+	_scene->loadAnimation(kernel_name('a', -1), 70);
 
 	section_3_music();
 }
@@ -61,7 +61,7 @@ static void room_310_init() {
 static void room_310_daemon() {
 	handle_forcefield(&local._forcefield, &_globals._spriteIndexes[0]);
 
-	if (_game._trigger == 70)
+	if (kernel.trigger == 70)
 		_scene->_nextSceneId = 309;
 }
 
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index 874556cc38e..464e9ac3b9a 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -39,7 +39,7 @@ static Scratch local;
 
 
 static void room_311_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXCL_8");
 	_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RXCL_2");
 
@@ -48,24 +48,28 @@ static void room_311_init() {
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
 
 	local._checkGuardFl = false;
-	_game.loadQuoteSet(0xFA, 0);
+	kernel.quotes = quote_load(0xFA, 0);
 
 	if (_scene->_priorSceneId == 391) {
 		_globals[kSexOfRex] = REX_MALE;
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
-		_game._player._facing = FACING_SOUTH;
-		_game._player._playerPos = Common::Point(166, 101);
+		player.commands_allowed = false;
+		player.walker_visible = false;
+		player.facing = FACING_SOUTH;
+		player.x = 166;
+		player.y = 101;
 		_scene->_sequences.addTimer(120, 71);
-	} else if (_scene->_priorSceneId == 310)
-		_game._player._playerPos = Common::Point(302, 145);
+	} else if (_scene->_priorSceneId == 310) {
+		player.x = 302;
+		player.y = 145;
+	}
 	else if (_scene->_priorSceneId == 320) {
-		_game._player._playerPos = Common::Point(129, 113);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 129;
+		player.y = 113;
+		player.facing = FACING_SOUTH;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
-		_scene->loadAnimation(formAnimName('a', -1), 70);
+		player.walker_visible = false;
+		player.commands_allowed = false;
+		_scene->loadAnimation(kernel_name('a', -1), 70);
 	}
 
 	section_3_music();
@@ -166,23 +170,23 @@ static void room_311_daemon() {
 
 	case 80:
 		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
+		player.commands_allowed = true;
+		player.walker_visible = true;
 		break;
 
 	default:
 		break;
 	}
 
-	if (_game._player._moving && (_scene->_rails.getNext() > 0)) {
-		int x = _game._player._prepareWalkPos.x;
+	if (player.walking && (_scene->_rails.getNext() > 0)) {
+		int x = player.prepare_walk_x;
 		if (x < 75)
 			x = 75;
 		if (x > 207)
 			x = 207;
 
 		local._checkGuardFl = true;
-		_game._player.startWalking(Common::Point(x, 122), FACING_SOUTH);
+		player_start_walking(x, 122, FACING_SOUTH);
 		_scene->_rails.resetNext();
 	}
 }
@@ -197,10 +201,10 @@ static void room_311_parser() {
 	} else if (player_said_2(sit_at, desk))
 		_scene->_nextSceneId = 320;
 	else if (player_said_2(climb_into, air_vent)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 50, 1, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 3, -2);
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index 1a9ac5c7dd8..c18168e9ee4 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -37,23 +37,29 @@ static void room_313_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
 
 	if ((_scene->_priorSceneId == 366) || (_scene->_priorSceneId == 316)) {
-		_game._player._playerPos = Common::Point(30, 80);
-		_game._player._facing = FACING_NORTH;
+		player.x = 30;
+		player.y = 80;
+		player.facing = FACING_NORTH;
 	} else if ((_scene->_priorSceneId == 311) || (_scene->_priorSceneId == 361) || (_scene->_priorSceneId == 391)) {
-		_game._player._playerPos = Common::Point(90, 70);
-		_game._player._facing = FACING_EAST;
+		player.x = 90;
+		player.y = 70;
+		player.facing = FACING_EAST;
 	} else if (_scene->_priorSceneId == 390) {
-		_game._player._playerPos = Common::Point(126, 70);
-		_game._player._facing = FACING_EAST;
+		player.x = 126;
+		player.y = 70;
+		player.facing = FACING_EAST;
 	} else if ((_scene->_priorSceneId == 389) || (_scene->_priorSceneId == 399)) {
-		_game._player._playerPos = Common::Point(163, 70);
-		_game._player._facing = FACING_WEST;
+		player.x = 163;
+		player.y = 70;
+		player.facing = FACING_WEST;
 	} else if (_scene->_priorSceneId == 388) {
-		_game._player._playerPos = Common::Point(199, 70);
-		_game._player._facing = FACING_WEST;
+		player.x = 199;
+		player.y = 70;
+		player.facing = FACING_WEST;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(234, 70);
-		_game._player._facing = FACING_WEST;
+		player.x = 234;
+		player.y = 70;
+		player.facing = FACING_WEST;
 	}
 
 	if (_globals[kAfterHavoc]) {
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 10b312ec810..1f0e91a701e 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -32,10 +32,10 @@ namespace RexNebular {
 namespace Rooms {
 
 static void handleRexInGrate() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
 		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
 		_scene->_sequences.addTimer(15, 1);
@@ -157,10 +157,10 @@ static void handleRoxInGrate() {
 	int temp;
 	int temp1;
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
 		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
 		_scene->_sequences.addTimer(15, 1);
@@ -270,50 +270,54 @@ static void handleRoxInGrate() {
 
 static void room_316_init() {
 	if (_globals[kSexOfRex] == REX_MALE) {
-		_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('g', -1));
+		_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('g', -1));
 		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXCL_8");
 		_globals._spriteIndexes[6] = _scene->_sprites.addSprites("*RXCL_2");
 	} else {
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('g', 0));
+		_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('g', 0));
 		_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*ROXCL_8");
 	}
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('v', 0));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('v', 0));
 	_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
 
 	if (_scene->_priorSceneId == 366) {
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
-		_game._player._playerPos = Common::Point(78, 87);
-		_game._player._facing = FACING_SOUTH;
+		player.commands_allowed = false;
+		player.walker_visible = false;
+		player.x = 78;
+		player.y = 87;
+		player.facing = FACING_SOUTH;
 		_scene->_sequences.addTimer(48, 70);
 	} else if (_scene->_priorSceneId == 321) {
-		_game._player._playerPos = Common::Point(153, 102);
-		_game._player._facing = FACING_SOUTH;
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.x = 153;
+		player.y = 102;
+		player.facing = FACING_SOUTH;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		g_engine->_soundManager->command(44, 0);
 		int spriteIdx = (_globals[kSexOfRex] == REX_MALE) ? 1 : 2;
 		_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[spriteIdx], false, 6, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(291, 126);
+	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 291;
+		player.y = 126;
+	}
 
 	section_3_music();
-	_game.loadQuoteSet(0xFD, 0);
+	kernel.quotes = quote_load(0xFD, 0);
 }
 
 static void room_316_daemon() {
-	if (_game._trigger == 60) {
+	if (kernel.trigger == 60) {
 		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[1]);
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
+		player.walker_visible = true;
+		player.commands_allowed = true;
 	}
 
-	if (_game._trigger >= 70) {
-		switch (_game._trigger) {
+	if (kernel.trigger >= 70) {
+		switch (kernel.trigger) {
 		case 70:
 			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
@@ -372,8 +376,8 @@ static void room_316_daemon() {
 
 		case 75:
 			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[6]);
-			_game._player._stepEnabled = true;
-			_game._player._visible = true;
+			player.commands_allowed = true;
+			player.walker_visible = true;
 			break;
 
 		default:
@@ -385,9 +389,9 @@ static void room_316_daemon() {
 static void room_316_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_east)) {
 		if (_globals[kAfterHavoc])
-			_game._player._walkOffScreenSceneId = 354;
+			player.walk_off_edge_to_room = 354;
 		else
-			_game._player._walkOffScreenSceneId = 304;
+			player.walk_off_edge_to_room = 304;
 	}
 }
 
@@ -398,14 +402,14 @@ static void room_316_parser() {
 		else
 			handleRexInGrate();
 	} else if (player_said_2(walk_up, ramp) || player_said_2(walk_onto, platform)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 			if (_globals[kCityFlooded]) {
 				text_show(31623);
 			} else {
 				g_engine->_soundManager->command(45, 0);
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				if (_globals[kSexOfRex] == REX_MALE) {
 					_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 1, 0, 0);
 					_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], -1, 7);
@@ -424,8 +428,8 @@ static void room_316_parser() {
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 8, -2);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
 			_scene->_kernelMessages.reset();
-			if (!_game._visitedScenes.exists(321))
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(253));
+			if (!player_has_been_in_room(321))
+				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 253));
 
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
@@ -454,7 +458,7 @@ static void room_316_parser() {
 	} else if (player_said_2(look, platform))
 		text_show(31610);
 	else if (player_said_2(look, strange_device)) {
-		if (_game._visitedScenes.exists(321))
+		if (player_has_been_in_room(321))
 			text_show(31612);
 		else
 			text_show(31611);
@@ -472,7 +476,7 @@ static void room_316_parser() {
 		text_show(31618);
 	else if (player_said_2(look, corridor_to_east)) {
 		if (!_globals[kAfterHavoc]) {
-			if (_game._difficulty != DIFFICULTY_EASY)
+			if (game.difficulty != DIFFICULTY_EASY)
 				text_show(31620);
 			else
 				text_show(31619);
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index 89b28d61a76..d2d83d375d9 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -56,10 +56,10 @@ static Scratch local;
 static void handleRexDialogs(int quote) {
 	_scene->_kernelMessages.reset();
 
-	const char *curQuote = _game.getQuote(quote);
+	const char *curQuote = quote_string(kernel.quotes, quote);
 	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
-		_game.splitQuote(curQuote, subQuote1, subQuote2);
+		quote_split_string(curQuote, subQuote1, subQuote2);
 
 		_scene->_kernelMessages.add(Common::Point(138, 59), 0x1110, 32, 0, 240, subQuote1);
 		_scene->_kernelMessages.add(Common::Point(138, 73), 0x1110, 32, 1, 180, subQuote2);
@@ -79,7 +79,7 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 
 	int maxWidth = 0;
 	for (int i = 0; i < quoteNum; i++) {
-		maxWidth = MAX(maxWidth, _scene->_kernelMessages._talkFont->getWidth(_game.getQuote(curQuoteId), -1));
+		maxWidth = MAX(maxWidth, _scene->_kernelMessages._talkFont->getWidth(quote_string(kernel.quotes, curQuoteId), -1));
 		curQuoteId++;
 	}
 
@@ -96,19 +96,19 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 		_scene->_sequences.remove(seqIndex);
 
 	for (int i = 0; i < quoteNum; i++) {
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(180, 63);
-		_scene->_kernelMessages.add(Common::Point(posX, posY), 0xFDFC, 0, 0, timeout, _game.getQuote(curQuoteId));
+		_scene->_kernelMessages.add(Common::Point(posX, posY), 0xFDFC, 0, 0, timeout, quote_string(kernel.quotes, curQuoteId));
 		posY += 14;
 		curQuoteId++;
 	}
 }
 
 static void handleDialog() {
-	if (!_game._trigger) {
-		_game._player._stepEnabled = false;
+	if (!kernel.trigger) {
+		player.commands_allowed = false;
 		handleRexDialogs(_action._activeAction._verbId);
-	} else if (_game._trigger == 2) {
+	} else if (kernel.trigger == 2) {
 		int synxIdx = _globals._sequenceIndexes[2];
 		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
@@ -116,7 +116,7 @@ static void handleDialog() {
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], synxIdx);
 		g_engine->_soundManager->command(3, 0);
 		_scene->_userInterface.setup(kInputBuildingSentences);
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 	} else {
 		if (_action._activeAction._verbId < 0x19C)
 			local._dialog1.write(_action._activeAction._verbId, false);
@@ -201,18 +201,18 @@ static void handleDialog() {
 
 		if (_action._activeAction._verbId < 0x19C) {
 			local._dialog1.start();
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 		}
 
 	}
 }
 
 static void room_318_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('k', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('k', -1));
 
 	if (_globals[kAfterHavoc]) {
-		_scene->loadAnimation(formAnimName('f', -1));
+		_scene->loadAnimation(kernel_name('f', -1));
 		_scene->_animation[0]->_repeatFlag = true;
 	} else if (!_globals[kHasSeenProfPyro]) {
 		_scene->_hotspots.activate(words_professors_gurney, false);
@@ -220,29 +220,33 @@ static void room_318_init() {
 		_scene->_hotspots.activate(words_tape_player, false);
 	}
 
-	if (_game._objects.isInRoom(OBJ_SCALPEL)) {
+	if (object_is_here(OBJ_SCALPEL)) {
 		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 120);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4);
 		_scene->_dynamicHotspots.add(words_scalpel, words_take, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
 	}
 
-	if (_scene->_priorSceneId == 357)
-		_game._player._playerPos = Common::Point(15, 110);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(214, 152);
+	if (_scene->_priorSceneId == 357) {
+		player.x = 15;
+		player.y = 110;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 214;
+		player.y = 152;
+	}
 
 	local._dialog1.setup(0x47, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, 0x198, 0x199, 0x19A, 0x19B, 0x19C, 0x19D, 0);
 
-	if (!_game._visitedScenes._sceneRevisited) {
+	if (!player.been_here_before) {
 		local._dialog1.set(0x191, 0x198, 0x199, 0x19C, 0);
-		if (_game._widepipeCtr >= 2)
+		if (kernel.cheating >= 2)
 			local._dialog1.write(0x19D, true);
 	}
 
 	if (_scene->_priorSceneId == 307) {
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
-		_scene->loadAnimation(formAnimName('a', -1), 60);
+		player.walker_visible = false;
+		player.commands_allowed = false;
+		_scene->loadAnimation(kernel_name('a', -1), 60);
 		local._animMode = 1;
 	}
 
@@ -258,7 +262,7 @@ static void room_318_init() {
 		local._explosionFl = false;
 	}
 
-	_game.loadQuoteSet(0x18C, 0x18D, 0x18E, 0x18F, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196,
+	kernel.quotes = quote_load(0x18C, 0x18D, 0x18E, 0x18F, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196,
 		0x197, 0x198, 0x199, 0x19A, 0x19B, 0x19C, 0x19E, 0x19F, 0x1A0, 0x1A1, 0x1A2, 0x1A3,
 		0x1A4, 0x1A5, 0x1A6, 0x1A7, 0x1A8, 0x1A9, 0x1AA, 0x1AB, 0x1AC, 0x1AD, 0x1AE, 0x1AF,
 		0x1B0, 0x1B1, 0x1B2, 0x1B3, 0x1B4, 0x1B5, 0x1B6, 0x1B7, 0x1B8, 0x1B9, 0x1BA, 0x1BB,
@@ -269,15 +273,15 @@ static void room_318_init() {
 	if ((_scene->_priorSceneId == RETURNING_FROM_DIALOG) || (((_scene->_priorSceneId == 318) ||
 		(_scene->_priorSceneId == RETURNING_FROM_LOADING)) && (!_globals[kAfterHavoc]))) {
 		if (!_globals[kAfterHavoc]) {
-			_game._player._visible = false;
-			_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('g', -1));
+			player.walker_visible = false;
+			_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
 			local._animMode = 2;
 
-			if (_game._visitedScenes.exists(319) || !local._internVisibleFl) {
+			if (player_has_been_in_room(319) || !local._internVisibleFl) {
 				local._internVisibleFl = false;
 				local._dialogFl = false;
 			} else {
-				_scene->loadAnimation(formAnimName('b', -1), 61);
+				_scene->loadAnimation(kernel_name('b', -1), 61);
 				_scene->_hotspots.activate(words_intern, true);
 			}
 
@@ -293,14 +297,14 @@ static void room_318_init() {
 	}
 
 	if (_scene->_priorSceneId == 319) {
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		local._animMode = 4;
 		if (!_globals[kHasSeenProfPyro]) {
-			_scene->loadAnimation(formAnimName('d', -1), 64);
+			_scene->loadAnimation(kernel_name('d', -1), 64);
 			_globals[kHasSeenProfPyro] = true;
 		} else {
-			_scene->loadAnimation(formAnimName('e', -1), 64);
+			_scene->loadAnimation(kernel_name('e', -1), 64);
 		}
 	}
 
@@ -308,7 +312,7 @@ static void room_318_init() {
 	pal_change_color(252, 63, 63, 10);
 	pal_change_color(253, 45, 45, 05);
 
-	local._dropTimer = _game->_scene._frameStartTime;
+	local._dropTimer = _scene._frameStartTime;
 	section_3_music();
 
 	if (local._dialogFl)
@@ -380,7 +384,7 @@ static void room_318_daemon() {
 		}
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 60:
 		g_engine->_soundManager->command(3, 0);
 		local._animMode = 2;
@@ -412,22 +416,22 @@ static void room_318_daemon() {
 	long diffFrame = tmpFrame - local._lastFrameCounter;
 	local._lastFrameCounter = tmpFrame;
 
-	if ((local._animMode == 2) && !local._internVisibleFl && _game._player._stepEnabled) {
+	if ((local._animMode == 2) && !local._internVisibleFl && player.commands_allowed) {
 		if ((diffFrame >= 0) && (diffFrame <= 4))
 			local._counter += diffFrame;
 		else
 			local._counter++;
 
-		int extraCounter = _game._objects.isInInventory(OBJ_SCALPEL) ? 900 : 0;
+		int extraCounter = player_has(OBJ_SCALPEL) ? 900 : 0;
 
 		if (local._counter + extraCounter >= 1800) {
 			_scene->freeAnimation();
-			_game._player._stepEnabled = false;
-			_scene->loadAnimation(formAnimName('c', -1), 62);
+			player.commands_allowed = false;
+			_scene->loadAnimation(kernel_name('c', -1), 62);
 			local._animMode = 3;
 		}
 	} else if ((local._animMode == 2) && local._explosionFl && local._internVisibleFl && !local._dialogFl
-		&& !local._internWalkingFl && (_game._screenObjects._inputMode != kInputConversation)) {
+		&& !local._internWalkingFl && (inter_input_mode != kInputConversation)) {
 		if ((diffFrame >= 0) && (diffFrame <= 4))
 			local._internCounter += diffFrame;
 		else
@@ -440,36 +444,36 @@ static void room_318_daemon() {
 		}
 	}
 
-	if ((_game->_scene._frameStartTime - local._dropTimer) > 600) {
+	if ((_scene._frameStartTime - local._dropTimer) > 600) {
 		g_engine->_soundManager->command(51, 0);
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 1, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
-		local._dropTimer = _game->_scene._frameStartTime;
+		local._dropTimer = _scene._frameStartTime;
 	}
 }
 
 static void room_318_pre_parser() {
-	if (_game._player._needToWalk)
-		_game._player._needToWalk = _game._player._visible;
+	if (player.need_to_walk)
+		player.need_to_walk = player.walker_visible;
 
 	if (player_said_2(walk_down, corridor_to_west))
-		_game._player._walkOffScreenSceneId = 357;
+		player.walk_off_edge_to_room = 357;
 }
 
 static void room_318_parser() {
-	if (_game._screenObjects._inputMode == kInputConversation) {
+	if (inter_input_mode == kInputConversation) {
 		handleDialog();
 		_action._inProgress = false;
 		return;
 	}
 
 	if (player_said_2(talkto, intern)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 		{
 			local._dialogFl = true;
 			g_engine->_soundManager->command(15, 0);
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			handleRexDialogs(g_engine->getRandomNumber(0x18C, 0x18E));
 
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
@@ -482,7 +486,7 @@ static void room_318_parser() {
 		break;
 
 		case 1:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			handleInternDialog(0x18F, 1, INDEFINITE_TIMEOUT);
 			local._dialog1.start();
 			break;
@@ -504,10 +508,10 @@ static void room_318_parser() {
 		return;
 	}
 
-	if (player_said_2(take, scalpel) && (_game._objects.isInRoom(OBJ_SCALPEL) || _game._trigger)) {
-		switch (_game._trigger) {
+	if (player_said_2(take, scalpel) && (object_is_here(OBJ_SCALPEL) || kernel.trigger)) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
 			_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 8, 2, 0, 80);
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
@@ -521,7 +525,7 @@ static void room_318_parser() {
 			if (local._internVisibleFl)
 				handleInternDialog(0x190, 1, 120);
 			else {
-				_game._objects.addToInventory(OBJ_SCALPEL);
+				inter_give_to_player(OBJ_SCALPEL);
 				object_examine(OBJ_SCALPEL, 0x7C5D, 0);
 				_scene->_sequences.remove(_globals._sequenceIndexes[3]);
 			}
@@ -539,7 +543,7 @@ static void room_318_parser() {
 		break;
 
 		case 3:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			break;
 
 		default:
@@ -549,7 +553,7 @@ static void room_318_parser() {
 		return;
 	}
 
-	if (_game._player._visible) {
+	if (player.walker_visible) {
 		if (player_said_2(walk_down, corridor_to_south)) {
 			_scene->_nextSceneId = 407;
 			_action._inProgress = false;
@@ -557,9 +561,9 @@ static void room_318_parser() {
 		}
 
 		if (player_said_2(take, tape_player)) {
-			if (_game._objects.isInRoom(OBJ_AUDIO_TAPE)) {
+			if (object_is_here(OBJ_AUDIO_TAPE)) {
 				object_examine(OBJ_AUDIO_TAPE, 0x7C5B, 0);
-				_game._objects.addToInventory(OBJ_AUDIO_TAPE);
+				inter_give_to_player(OBJ_AUDIO_TAPE);
 			} else
 				text_show(31834);
 
@@ -568,7 +572,7 @@ static void room_318_parser() {
 		}
 
 		if (player_said_2(look, tape_player)) {
-			if (_game._objects.isInRoom(OBJ_AUDIO_TAPE))
+			if (object_is_here(OBJ_AUDIO_TAPE))
 				text_show(31833);
 			else
 				text_show(31834);
@@ -641,7 +645,7 @@ static void room_318_parser() {
 	else if (player_said_2(look, professors_gurney))
 		text_show(31836);
 	else if (_action._lookFlag) {
-		if (_game._player._visible || _game._objects.isInInventory(OBJ_SCALPEL))
+		if (player.walker_visible || player_has(OBJ_SCALPEL))
 			text_show(31828);
 		else if (local._internVisibleFl)
 			text_show(31826);
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index 81d39c687e1..05759cb1b87 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -58,10 +58,10 @@ static Scratch local;
 static void handleRexDialogues(int quote) {
 	_scene->_kernelMessages.reset();
 
-	const char *curQuote = _game.getQuote(quote);
+	const char *curQuote = quote_string(kernel.quotes, quote);
 	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
-		_game.splitQuote(curQuote, subQuote1, subQuote2);
+		quote_split_string(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
 
 		_scene->_kernelMessages.add(Common::Point(160, 106), 0x1110, 32, 0, 120, subQuote1);
@@ -75,20 +75,20 @@ static void handleSlacheDialogs(int quoteId, int counter, uint32 timer) {
 	int posY = 5 + (local._slachePosY * 14);
 
 	for (int count = 0; count < counter; count++, curQuote++) {
-		_scene->_kernelMessages.add(Common::Point(8, posY), 0xFDFC, 0, 0, timer, _game.getQuote(curQuote));
+		_scene->_kernelMessages.add(Common::Point(8, posY), 0xFDFC, 0, 0, timer, quote_string(kernel.quotes, curQuote));
 		posY += 14;
 	}
 }
 
 static void room_319_init() {
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('e', 0));
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('a', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('k', -1));
-
-	if (!_game._objects.isInInventory(OBJ_SCALPEL)) {
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 3));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('k', -1));
+
+	if (!player_has(OBJ_SCALPEL)) {
 		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
 	}
@@ -112,7 +112,7 @@ static void room_319_init() {
 		local._dialog3.set(0x17D, 0x17E, 0x17F, 0x180, 0);
 	}
 
-	_game.loadQuoteSet(0x15F, 0x160, 0x161, 0x162, 0x163, 0x164, 0x16B, 0x16C, 0x16D,
+	kernel.quotes = quote_load(0x15F, 0x160, 0x161, 0x162, 0x163, 0x164, 0x16B, 0x16C, 0x16D,
 		0x16E, 0x16F, 0x170, 0x177, 0x178, 0x179, 0x17A, 0x17B, 0x17C, 0x165, 0x166,
 		0x167, 0x168, 0x169, 0x16A, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x17D,
 		0x17E, 0x17F, 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, 0x188,
@@ -127,7 +127,7 @@ static void room_319_init() {
 	local._slacheReady = false;
 	local._animFrame = 0;
 
-	_scene->loadAnimation(formAnimName('b', 0));
+	_scene->loadAnimation(kernel_name('b', 0));
 
 	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		local._animMode = 1;
@@ -206,7 +206,7 @@ static void room_319_daemon() {
 					nextFrame = 85;
 					local._slacheTalkingFl = true;
 				} else if (local._animFrame == 85) {
-					if (!_game._player._stepEnabled)
+					if (!player.commands_allowed)
 						local._slacheTalkingFl = true;
 					nextFrame = 40;
 				}
@@ -219,7 +219,7 @@ static void room_319_daemon() {
 			case 129:
 				if (local._nextAction1 == 3) {
 					nextFrame = 115;
-					if (!_game._player._stepEnabled)
+					if (!player.commands_allowed)
 						local._slacheTalkingFl = true;
 				}
 				break;
@@ -238,21 +238,21 @@ static void room_319_daemon() {
 					local._animFrame = 0;
 					_scene->freeAnimation();
 					local._animMode = 2;
-					_scene->loadAnimation(formAnimName('b', 3), 70);
+					_scene->loadAnimation(kernel_name('b', 3), 70);
 					break;
 
 				case 5:
 					local._animFrame = 0;
 					_scene->freeAnimation();
 					local._animMode = 3;
-					_scene->loadAnimation(formAnimName('b', 4), 71);
+					_scene->loadAnimation(kernel_name('b', 4), 71);
 					break;
 
 				case 6:
 					local._animFrame = 0;
 					_scene->freeAnimation();
 					local._animMode = 4;
-					_scene->loadAnimation(formAnimName('b', 5), 72);
+					_scene->loadAnimation(kernel_name('b', 5), 72);
 					break;
 
 				default:
@@ -297,7 +297,7 @@ static void room_319_daemon() {
 		}
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 70:
 	case 71:
 	{
@@ -305,7 +305,7 @@ static void room_319_daemon() {
 		local._nextAction1 = local._nextAction2;
 		local._animFrame = 0;
 		_scene->freeAnimation();
-		_scene->loadAnimation(formAnimName('b', 0));
+		_scene->loadAnimation(kernel_name('b', 0));
 		if (local._nextAction1 == 3)
 			_scene->_animation[0]->setCurrentFrame(85);
 		else if (local._nextAction1 == 1)
@@ -366,12 +366,12 @@ static void room_319_daemon() {
 }
 
 static void room_319_parser() {
-	if (_game._trigger == 0) {
-		_game._player._stepEnabled = false;
+	if (kernel.trigger == 0) {
+		player.commands_allowed = false;
 		handleRexDialogues(_action._activeAction._verbId);
 	} else {
 		if ((_action._activeAction._verbId == 0x165) || (_action._activeAction._verbId == 0x166)) {
-			if (_game._trigger == 1) {
+			if (kernel.trigger == 1) {
 				local._nextAction1 = 3;
 				local._slacheTalkingFl = false;
 				local._slacheMode = 1;
@@ -383,12 +383,12 @@ static void room_319_parser() {
 			} else {
 				handleSlacheDialogs(0x16B, 2, INDEFINITE_TIMEOUT);
 				local._dialog2.start();
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 			}
 		}
 
 		if ((_action._activeAction._verbId == 0x171) || (_action._activeAction._verbId == 0x172)) {
-			if (_game._trigger == 1) {
+			if (kernel.trigger == 1) {
 				local._nextAction1 = 2;
 				local._slacheTalkingFl = false;
 				local._slacheMode = 1;
@@ -400,12 +400,12 @@ static void room_319_parser() {
 			} else {
 				handleSlacheDialogs(0x177, 2, INDEFINITE_TIMEOUT);
 				local._dialog3.start();
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 			}
 		}
 
 		if ((_action._activeAction._verbId == 0x17D) || (_action._activeAction._verbId == 0x17E)) {
-			if (_game._trigger == 1) {
+			if (kernel.trigger == 1) {
 				local._nextAction1 = 3;
 				local._slacheTalkingFl = false;
 				local._slacheReady = false;
@@ -416,7 +416,7 @@ static void room_319_parser() {
 			if (!local._slacheTalkingFl) {
 				_scene->_sequences.addTimer(4, 2);
 			} else {
-				if (_game._trigger == 2)
+				if (kernel.trigger == 2)
 					handleSlacheDialogs(0x184, 2, 180);
 
 				if (!local._slacheReady) {
@@ -442,11 +442,11 @@ static void room_319_parser() {
 				(_action._activeAction._verbId == 0x183));
 
 			int addVerbId = _action._activeAction._verbId + 1;
-			if ((addVerbId == 0x182) && (_game._storyMode != STORYMODE_NAUGHTY))
+			if ((addVerbId == 0x182) && (config_file.naughtiness != STORYMODE_NAUGHTY))
 				addVerbId = 0x183;
 
 			if (local._slacheMode == 1) {
-				if (_game._trigger == 1) {
+				if (kernel.trigger == 1) {
 					local._nextAction2 = local._nextAction1;
 					local._nextAction1 = 4;
 				}
@@ -474,11 +474,11 @@ static void room_319_parser() {
 					}
 
 					curDialog->start();
-					_game._player._stepEnabled = true;
+					player.commands_allowed = true;
 					local._slacheMode = 2;
 				}
 			} else if (local._slacheMode == 2) {
-				if (_game._trigger == 1) {
+				if (kernel.trigger == 1) {
 					local._nextAction2 = local._nextAction1;
 					local._nextAction1 = 5;
 				}
@@ -506,7 +506,7 @@ static void room_319_parser() {
 					}
 
 					curDialog->start();
-					_game._player._stepEnabled = true;
+					player.commands_allowed = true;
 					local._slacheMode = 3;
 				}
 			} else {
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index 819254c0868..59db8cceafa 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -175,13 +175,13 @@ static void room_320_init() {
 	local._lastFrame = 0;
 
 	for (int i = 0; i < 10; i++)
-		_globals._spriteIndexes[i] = _scene->_sprites.addSprites(formAnimName('M', i));
+		_globals._spriteIndexes[i] = _scene->_sprites.addSprites(kernel_name('M', i));
 
 	for (int i = 0; i < 8; i++)
-		_globals._spriteIndexes[10 + i] = _scene->_sprites.addSprites(formAnimName('N', i));
+		_globals._spriteIndexes[10 + i] = _scene->_sprites.addSprites(kernel_name('N', i));
 
 	_globals._spriteIndexes[18] = _scene->_sprites.addSprites("*REXHAND");
-	_game._player._visible = false;
+	player.walker_visible = false;
 
 	setRightView(_globals[kRightView320]);
 	setLeftView(0);
@@ -209,7 +209,7 @@ static void room_320_daemon() {
 				break;
 
 			case 191:
-				_scene->_kernelMessages.add(Common::Point(1, 1), 0xFDFC, 0, 0, 60, _game.getQuote(0xFE));
+				_scene->_kernelMessages.add(Common::Point(1, 1), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 0xFE));
 				break;
 
 			case 417:
@@ -229,7 +229,7 @@ static void room_320_daemon() {
 		}
 	}
 
-	if (_game._trigger == 70) {
+	if (kernel.trigger == 70) {
 		_globals[kAfterHavoc] = true;
 		_globals[kTeleporterRoom + 1] = 351;
 		_scene->_nextSceneId = 361;
@@ -245,9 +245,9 @@ static void room_320_parser() {
 			player_said_1(right_3_key) || player_said_1(right_4_key) || player_said_1(right_5_key) || player_said_1(right_6_key) ||
 			player_said_1(right_7_key) || player_said_1(right_8_key)
 			)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			handleButtons();
 			_globals._sequenceIndexes[18] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[18], local._flippedFl, 4, 2, 0, 0);
 			_scene->_sequences.setScale(_globals._sequenceIndexes[18], 60);
@@ -283,22 +283,22 @@ static void room_320_parser() {
 			break;
 
 		case 2:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			if (local._buttonId == 5) {
 				if (local._leftItemId == 2) {
-					_game._player._stepEnabled = false;
+					player.commands_allowed = false;
 					setRightView(8);
 					setLeftView(10);
 					_scene->_kernelMessages.reset();
 					_scene->resetScene();
-					_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('m', 2));
-					_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('m', 4));
-					_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('m', 9));
+					_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
+					_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('m', 4));
+					_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('m', 9));
 					local._blinkFl = false;
 					setLeftView(2);
-					_game.loadQuoteSet(0xFE, 0);
-					_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-					_scene->loadAnimation(formAnimName('a', -1), 70);
+					kernel.quotes = quote_load(0xFE, 0);
+					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+					_scene->loadAnimation(kernel_name('a', -1), 70);
 					g_engine->_soundManager->command(17, 0);
 				}
 			}
diff --git a/engines/mads/nebular/rooms/room321.cpp b/engines/mads/nebular/rooms/room321.cpp
index ef325be0564..98119876831 100644
--- a/engines/mads/nebular/rooms/room321.cpp
+++ b/engines/mads/nebular/rooms/room321.cpp
@@ -32,8 +32,8 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_321_init() {
-	_game._player._visible = false;
-	_game._player._stepEnabled = false;
+	player.walker_visible = false;
+	player.commands_allowed = false;
 
 	_scene->_userInterface.emptyConversationList();
 	_scene->_userInterface.setup(kInputConversation);
@@ -44,20 +44,20 @@ static void room_321_init() {
 		suffixNum = 1;
 	} else {
 		_globals[kSexOfRex] = REX_FEMALE;
-		suffixNum = _game._visitedScenes._sceneRevisited ? 2 : 0;
+		suffixNum = player.been_here_before ? 2 : 0;
 	}
 
-	_scene->loadAnimation(formAnimName('g', suffixNum), 60);
+	_scene->loadAnimation(kernel_name('g', suffixNum), 60);
 	section_3_music();
 }
 
 static void room_321_daemon() {
 	if (_scene->_animation[0] != nullptr) {
-		if ((_scene->_animation[0]->getCurrentFrame() >= 260) && (_globals[kSexOfRex] == REX_MALE) && (_game._storyMode >= STORYMODE_NICE))
+		if ((_scene->_animation[0]->getCurrentFrame() >= 260) && (_globals[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= STORYMODE_NICE))
 			_scene->_nextSceneId = 316;
 	}
 
-	if (_game._trigger == 60)
+	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 316;
 }
 
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index 8c14be527c4..bdcbc84256d 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -35,26 +35,29 @@ static void room_351_init() {
 	_globals[kAfterHavoc] = -1;
 	_globals[kTeleporterRoom + 1] = 351;
 
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
 	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*ROXRC_7");
 	_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RXRD_7");
 
-	if (_game._objects.isInRoom(OBJ_CREDIT_CHIP)) {
+	if (object_is_here(OBJ_CREDIT_CHIP)) {
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 4);
 	} else
 		_scene->_hotspots.activate(words_credit_chip, false);
 
-	if (_scene->_priorSceneId == 352)
-		_game._player._playerPos = Common::Point(148, 152);
+	if (_scene->_priorSceneId == 352) {
+		player.x = 148;
+		player.y = 152;
+	}
 	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(207, 81);
-		_game._player._facing = FACING_NORTH;
+		player.x = 207;
+		player.y = 81;
+		player.facing = FACING_NORTH;
 	}
 
 	if (_globals[kTeleporterCommand]) {
-		_game._player._visible = false;
-		_game._player._stepEnabled = false;
+		player.walker_visible = false;
+		player.commands_allowed = false;
 
 		char sepChar = 'a';
 		if (_globals[kSexOfRex] != REX_MALE)
@@ -77,9 +80,9 @@ static void room_351_init() {
 
 		case 3:
 		case 4:
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
-			_game._player._turnToFacing = FACING_SOUTH;
+			player.walker_visible = true;
+			player.commands_allowed = true;
+			player.turn_to_facing = FACING_SOUTH;
 			suffixNum = -1;
 			break;
 
@@ -90,21 +93,21 @@ static void room_351_init() {
 		_globals[kTeleporterCommand] = 0;
 
 		if (suffixNum >= 0)
-			_scene->loadAnimation(formAnimName(sepChar, suffixNum), trigger);
+			_scene->loadAnimation(kernel_name(sepChar, suffixNum), trigger);
 	}
 
 	section_3_music();
 }
 
 static void room_351_daemon() {
-	if (_game._trigger == 60) {
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
-		_game._player._turnToFacing = FACING_SOUTH;
+	if (kernel.trigger == 60) {
+		player.commands_allowed = true;
+		player.walker_visible = true;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.turn_to_facing = FACING_SOUTH;
 	}
 
-	if (_game._trigger == 61) {
+	if (kernel.trigger == 61) {
 		_globals[kTeleporterCommand] = 1;
 		_scene->_nextSceneId = _globals[kTeleporterDestination];
 		_scene->_reloadSceneFlag = true;
@@ -119,11 +122,11 @@ static void room_351_parser() {
 	else if (player_said_2(walk_down, corridor_to_south))
 		_scene->_nextSceneId = 352;
 	else if (player_said_2(take, credit_chip)) {
-		if (_game._trigger || !_game._objects.isInInventory(OBJ_CREDIT_CHIP)) {
-			switch (_game._trigger) {
+		if (kernel.trigger || !player_has(OBJ_CREDIT_CHIP)) {
+			switch (kernel.trigger) {
 			case 0:
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				if (_globals[kSexOfRex] == REX_FEMALE) {
 					_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 5, 2, 0, 0);
 					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
@@ -140,12 +143,12 @@ static void room_351_parser() {
 			case 1:
 				_scene->_hotspots.activate(words_credit_chip, false);
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-				_game._objects.addToInventory(OBJ_CREDIT_CHIP);
+				inter_give_to_player(OBJ_CREDIT_CHIP);
 				break;
 
 			case 2:
-				_game._player._visible = true;
-				_game._player._stepEnabled = true;
+				player.walker_visible = true;
+				player.commands_allowed = true;
 				object_examine(OBJ_CREDIT_CHIP, 0x32F, 0);
 				break;
 
@@ -160,7 +163,7 @@ static void room_351_parser() {
 	else if (player_said_2(look, fire_hydrant))
 		text_show(35112);
 	else if (player_said_2(look, guard)) {
-		if (_game._objects[0xF]._roomNumber == 351)
+		if (object[0xF].location == 351)
 			text_show(35114);
 		else
 			text_show(35113);
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index 674ab031f37..fc50e57ee40 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -47,15 +47,15 @@ static Scratch local;
 
 
 static void putArmDown(bool corridorExit, bool doorwayExit) {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0xFF));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0xFF));
 		_scene->_sequences.addTimer(48, 1);
 		break;
 
 	case 1:
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		if (_globals[kSexOfRex] == REX_FEMALE) {
 			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 5, 2, 0, 0);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
@@ -80,21 +80,21 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 
 	case 3:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x100));
-		_game._objects.setRoom(OBJ_GUARDS_ARM, _scene->_currentSceneId);
-		_game._player._visible = true;
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x100));
+		inter_move_object(OBJ_GUARDS_ARM, _scene->_currentSceneId);
+		player.walker_visible = true;
 		if (corridorExit)
 			_scene->_sequences.addTimer(48, 6);
 		else if (doorwayExit)
 			_scene->_sequences.addTimer(48, 4);
 		else {
 			local._mustPutArmDownFl = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 		}
 		break;
 
 	case 4:
-		_game._player.walk(Common::Point(116, 107), FACING_NORTH);
+		player_walk(116, 107, FACING_NORTH);
 		local._mustPutArmDownFl = false;
 		_scene->_sequences.addTimer(180, 5);
 		local._leaveRoomFl = true;
@@ -107,8 +107,8 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 		break;
 
 	case 6:
-		_game._player.walk(Common::Point(171, 152), FACING_SOUTH);
-		_game._player._stepEnabled = true;
+		player_walk(171, 152, FACING_SOUTH);
+		player.commands_allowed = true;
 		local._mustPutArmDownFl = false;
 		_scene->_sequences.addTimer(180, 7);
 		local._leaveRoomFl = true;
@@ -129,27 +129,27 @@ static void room_352_init() {
 	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RM302x0");
 	_globals._spriteIndexes[13] = _scene->_sprites.addSprites("*RM302x2");
 	_globals._spriteIndexes[12] = _scene->_sprites.addSprites("*RM302x3");
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('g', -1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('b', -1));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('b', -1));
 
 
 	if (_globals[kSexOfRex] == REX_FEMALE) {
 		_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*ROXRC_7");
 		_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*ROXRC_6");
 		_globals._spriteIndexes[15] = _scene->_sprites.addSprites("*ROXRC_9");
-		_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('a', 3));
-		_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('a', 2));
+		_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('a', 3));
+		_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('a', 2));
 	} else {
 		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXRD_7");
 		_globals._spriteIndexes[6] = _scene->_sprites.addSprites("*RXRC_6");
 		_globals._spriteIndexes[14] = _scene->_sprites.addSprites("*RXMRC_9");
-		_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('a', 1));
-		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('a', 0));
+		_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
 	}
 
 	local._leaveRoomFl = false;
 
-	if (_game._objects.isInRoom(OBJ_TAPE_PLAYER)) {
+	if (object_is_here(OBJ_TAPE_PLAYER)) {
 		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 0, 0, 0);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 5);
 		int idx = _scene->_dynamicHotspots.add(words_tape_player, words_walkto, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
@@ -160,32 +160,36 @@ static void room_352_init() {
 
 	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		local._mustPutArmDownFl = false;
-		if (!_game._visitedScenes._sceneRevisited)
+		if (!player.been_here_before)
 			_globals[kHaveYourStuff] = false;
 	}
 
-	if (_game._objects.isInRoom(OBJ_GUARDS_ARM)) {
+	if (object_is_here(OBJ_GUARDS_ARM)) {
 		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
 	} else
 		local._mustPutArmDownFl = true;
 
-	if (_scene->_priorSceneId == 353)
-		_game._player._playerPos = Common::Point(171, 155);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(116, 107);
+	if (_scene->_priorSceneId == 353) {
+		player.x = 171;
+		player.y = 155;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 116;
+		player.y = 107;
+	}
 
 	section_3_music();
 
-	_game.loadQuoteSet(0xFF, 0x100, 0x101, 0x102, 0x103, 0);
+	kernel.quotes = quote_load(0xFF, 0x100, 0x101, 0x102, 0x103, 0);
 }
 
 static void room_352_pre_parser() {
 	local._leaveRoomFl = false;
 
 	if (player_said_2(open, vault))
-		_game._player.walk(Common::Point(266, 111), FACING_NORTHEAST);
+		player_walk(266, 111, FACING_NORTHEAST);
 
 	if (local._vaultOpenFl && !player_said_1(vault) && !player_said_1(lamp) && !player_said_1(other_stuff) && !player_said_1(your_stuff)) {
 		if (_globals[kHaveYourStuff]) {
@@ -196,10 +200,10 @@ static void room_352_pre_parser() {
 			local._commonSequenceIdx = _globals._sequenceIndexes[1];
 		}
 
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			if (_game._player._needToWalk) {
-				_game._player._stepEnabled = false;
+			if (player.need_to_walk) {
+				player.commands_allowed = false;
 				_scene->_sequences.remove(local._commonSequenceIdx);
 				g_engine->_soundManager->command(20, 0);
 				local._commonSequenceIdx = _scene->_sequences.addReverseSpriteCycle(local._commonSpriteIndex, false, 6, 1, 0, 0);
@@ -215,7 +219,7 @@ static void room_352_pre_parser() {
 			_scene->_dynamicHotspots.remove(local._hotspot1Idx);
 			_scene->_dynamicHotspots.remove(local._lampHostpotIdx);
 			local._vaultOpenFl = false;
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			break;
 
 		default:
@@ -225,14 +229,14 @@ static void room_352_pre_parser() {
 
 	if (player_said_3(put, guards_arm2, scanner)) {
 		if (_globals[kSexOfRex] == REX_MALE)
-			_game._player.walk(Common::Point(269, 111), FACING_NORTHEAST);
+			player_walk(269, 111, FACING_NORTHEAST);
 		else
-			_game._player.walk(Common::Point(271, 111), FACING_NORTHEAST);
+			player_walk(271, 111, FACING_NORTHEAST);
 	}
 
 	if (player_said_2(walk_through, doorway) || player_said_2(walk_down, corridor_to_south) || player_said_3(put, guards_arm2, floor)) {
-		if (_game._objects.isInInventory(OBJ_GUARDS_ARM))
-			_game._player.walk(Common::Point(230, 117), FACING_NORTHWEST);
+		if (player_has(OBJ_GUARDS_ARM))
+			player_walk(230, 117, FACING_NORTHWEST);
 	}
 }
 
@@ -245,10 +249,10 @@ static void room_352_parser() {
 
 	if (player_said_2(open, vault)) {
 		if (!local._vaultOpenFl) {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				if (_globals[kSexOfRex] == REX_FEMALE)
 					local._commonSpriteIndex = _globals._spriteIndexes[9];
 				else
@@ -281,13 +285,13 @@ static void room_352_parser() {
 
 			case 3:
 				_scene->_sequences.updateTimeout(-1, local._commonSequenceIdx);
-				_game._player._visible = true;
+				player.walker_visible = true;
 				_scene->_sequences.addTimer(60, 4);
 				break;
 
 			case 4:
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x101));
-				_game._player._stepEnabled = true;
+				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x101));
+				player.commands_allowed = true;
 				break;
 
 			default:
@@ -298,7 +302,7 @@ static void room_352_parser() {
 		return;
 	}
 
-	if (_game._objects.isInInventory(OBJ_GUARDS_ARM)) {
+	if (player_has(OBJ_GUARDS_ARM)) {
 		local._mustPutArmDownFl = true;
 	}
 
@@ -326,11 +330,11 @@ static void room_352_parser() {
 	}
 
 	if (player_said_2(take, guards_arm2)) {
-		if (_game._trigger || !_game._objects.isInInventory(OBJ_GUARDS_ARM)) {
-			switch (_game._trigger) {
+		if (kernel.trigger || !player_has(OBJ_GUARDS_ARM)) {
+			switch (kernel.trigger) {
 			case 0:
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				if (_globals[kSexOfRex] == REX_FEMALE) {
 					_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 5, 2, 0, 0);
 					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
@@ -346,13 +350,13 @@ static void room_352_parser() {
 
 			case 1:
 				_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-				_game._objects.addToInventory(OBJ_GUARDS_ARM);
+				inter_give_to_player(OBJ_GUARDS_ARM);
 				_scene->changeVariant(1);
 				break;
 
 			case 2:
-				_game._player._visible = true;
-				_game._player._stepEnabled = true;
+				player.walker_visible = true;
+				player.commands_allowed = true;
 				object_examine(OBJ_GUARDS_ARM, 0x899C, 0);
 				break;
 
@@ -366,10 +370,10 @@ static void room_352_parser() {
 
 	if (player_said_3(put, guards_arm2, scanner)) {
 		if (!local._vaultOpenFl) {
-			switch (_game._trigger) {
+			switch (kernel.trigger) {
 			case 0:
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				if (_globals[kSexOfRex] == REX_FEMALE)
 					local._commonSpriteIndex = _globals._spriteIndexes[11];
 				else
@@ -403,7 +407,7 @@ static void room_352_parser() {
 
 			case 3:
 				_scene->_sequences.updateTimeout(-1, local._commonSequenceIdx);
-				_game._player._visible = true;
+				player.walker_visible = true;
 				if (_globals[kHaveYourStuff])
 					local._commonSpriteIndex = _globals._spriteIndexes[13];
 				else
@@ -430,17 +434,17 @@ static void room_352_parser() {
 					idx = _scene->_dynamicHotspots.add(words_your_stuff, words_walkto, -1, Common::Rect(282, 87, 282 + 13, 87 + 7));
 					local._hotspot2Idx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(280, 111), FACING_NORTHEAST);
 					_globals._sequenceIndexes[1] = local._commonSequenceIdx;
-					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x102));
+					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x102));
 				} else {
 					_globals._sequenceIndexes[13] = local._commonSequenceIdx;
-					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x103));
+					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x103));
 				}
 
 				idx = _scene->_dynamicHotspots.add(words_other_stuff, words_walkto, -1, Common::Rect(282, 48, 282 + 36, 48 + 27));
 				local._hotspot1Idx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(287, 115), FACING_NORTHEAST);
 				idx = _scene->_dynamicHotspots.add(words_lamp, words_walkto, -1, Common::Rect(296, 76, 296 + 11, 76 + 17));
 				local._lampHostpotIdx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(287, 115), FACING_NORTHEAST);
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 			}
 			break;
 
@@ -449,10 +453,10 @@ static void room_352_parser() {
 			}
 		}
 	} else if (player_said_2(take, your_stuff)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			if (_globals[kSexOfRex] == REX_MALE) {
 				_globals._sequenceIndexes[14] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[14], false, 8, 1, 0, 0);
 				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[14], 1, 2);
@@ -472,9 +476,9 @@ static void room_352_parser() {
 			_scene->_dynamicHotspots.remove(local._hotspot2Idx);
 			_globals[kHaveYourStuff] = true;
 
-			for (uint16 i = 0; i < _game._objects.size(); i++) {
-				if (_game._objects[i]._roomNumber == 50)
-					_game._objects.addToInventory(i);
+			for (uint16 i = 0; i < num_objects; i++) {
+				if (object[i].location == 50)
+					inter_give_to_player(i);
 			}
 
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
@@ -488,18 +492,18 @@ static void room_352_parser() {
 			else
 				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[15]);
 
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			break;
 
 		default:
 			break;
 		}
-	} else if (player_said_2(take, tape_player) && !_game._objects.isInInventory(OBJ_TAPE_PLAYER)) {
-		switch (_game._trigger) {
+	} else if (player_said_2(take, tape_player) && !player_has(OBJ_TAPE_PLAYER)) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			if (_globals[kSexOfRex] == REX_MALE) {
 				_globals._sequenceIndexes[6] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[6], true, 6, 2, 0, 0);
 				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[6]);
@@ -519,14 +523,14 @@ static void room_352_parser() {
 			break;
 
 		case 2:
-			_game._objects.addToInventory(OBJ_TAPE_PLAYER);
+			inter_give_to_player(OBJ_TAPE_PLAYER);
 			if (_globals[kSexOfRex] == REX_MALE)
 				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[6]);
 			else
 				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[7]);
 
-			_game._player._visible = true;
-			_game._player._stepEnabled = true;
+			player.walker_visible = true;
+			player.commands_allowed = true;
 			object_examine(OBJ_TAPE_PLAYER, 35227, 0);
 			break;
 
@@ -536,7 +540,7 @@ static void room_352_parser() {
 	} else if (player_said_2(look, scanner))
 		text_show(35210);
 	else if (player_said_2(look, monitor)) {
-		if (_game._storyMode == STORYMODE_NAUGHTY)
+		if (config_file.naughtiness == STORYMODE_NAUGHTY)
 			text_show(35211);
 		else
 			text_show(35212);
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index 95df71379c7..d6d2f715393 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -39,14 +39,18 @@ static Scratch local;
 
 
 static void room_353_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(Resources::formatName(303, 'B', 0, EXT_SS, ""));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(303, 'B', 0, "", EXT_SS));
 	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 0, 5, 0);
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
 
-	if (_scene->_priorSceneId == 352)
-		_game._player._playerPos = Common::Point(144, 95);
-	else
-		_game._player._playerPos = Common::Point(139, 155);
+	if (_scene->_priorSceneId == 352) {
+		player.x = 144;
+		player.y = 95;
+	}
+	else {
+		player.x = 139;
+		player.y = 155;
+	}
 
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room354.cpp b/engines/mads/nebular/rooms/room354.cpp
index 651fcf41ee7..778e463ce20 100644
--- a/engines/mads/nebular/rooms/room354.cpp
+++ b/engines/mads/nebular/rooms/room354.cpp
@@ -41,30 +41,37 @@ static void room_354_init() {
 	_globals[kAfterHavoc] = true;
 	_globals[kTeleporterRoom + 1] = 351;
 
-	if (_scene->_priorSceneId == 361)
-		_game._player._playerPos = Common::Point(231, 110);
+	if (_scene->_priorSceneId == 361) {
+		player.x = 231;
+		player.y = 110;
+	}
 	else if (_scene->_priorSceneId == 401) {
-		_game._player._playerPos = Common::Point(106, 152);
-		_game._player._facing = FACING_NORTH;
-	} else if (_scene->_priorSceneId == 316)
-		_game._player._playerPos = Common::Point(71, 107);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(167, 57);
+		player.x = 106;
+		player.y = 152;
+		player.facing = FACING_NORTH;
+	} else if (_scene->_priorSceneId == 316) {
+		player.x = 71;
+		player.y = 107;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 167;
+		player.y = 57;
+	}
 
 	section_3_music();
 }
 
 static void room_354_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_south))
-		_game._player._walkOffScreenSceneId = 401;
+		player.walk_off_edge_to_room = 401;
 }
 
 static void room_354_parser() {
 	if (_action._lookFlag)
 		text_show(35414);
 	else if (player_said_2(walk_down, corridor_to_north)) {
-		_game._player.startWalking(Common::Point(208, 0), FACING_NORTHEAST);
-		_game._player._walkOffScreenSceneId = 353;
+		player_start_walking(208, 0, FACING_NORTHEAST);
+		player.walk_off_edge_to_room = 353;
 	} else if (player_said_2(walk_down, corridor_to_east))
 		_scene->_nextSceneId = 361;
 	else if (player_said_2(walk_down, corridor_to_west))
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index ccd22bbf71d..5df6cc26b0c 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -33,27 +33,33 @@ namespace Rooms {
 
 static void room_357_init() {
 	_globals[kAfterHavoc] = true;
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
 
-	if (_scene->_priorSceneId == 318)
-		_game._player._playerPos = Common::Point(298, 142);
-	else if (_scene->_priorSceneId == 313)
-		_game._player._playerPos = Common::Point(127, 101);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(15, 148);
+	if (_scene->_priorSceneId == 318) {
+		player.x = 298;
+		player.y = 142;
+	}
+	else if (_scene->_priorSceneId == 313) {
+		player.x = 127;
+		player.y = 101;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 15;
+		player.y = 148;
+	}
 
 	section_3_music();
 }
 
 static void room_357_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_east))
-		_game._player._walkOffScreenSceneId = 318;
+		player.walk_off_edge_to_room = 318;
 
 	if (player_said_2(walk_down, corridor_to_west))
-		_game._player._walkOffScreenSceneId = 358;
+		player.walk_off_edge_to_room = 358;
 }
 
 static void room_357_parser() {
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index bd32329a506..abb3ee39c2d 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -32,25 +32,29 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_358_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
 
-	if (_scene->_priorSceneId == 357)
-		_game._player._playerPos = Common::Point(305, 142);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(12, 141);
+	if (_scene->_priorSceneId == 357) {
+		player.x = 305;
+		player.y = 142;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 12;
+		player.y = 141;
+	}
 
 	section_3_music();
 }
 
 static void room_358_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_east))
-		_game._player._walkOffScreenSceneId = 357;
+		player.walk_off_edge_to_room = 357;
 
 	if (player_said_2(walk_down, corridor_to_west))
-		_game._player._walkOffScreenSceneId = 359;
+		player.walk_off_edge_to_room = 359;
 }
 
 static void room_358_parser() {
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index 722b5717f43..a597020bd73 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -39,8 +39,8 @@ static Scratch local;
 
 
 static void room_359_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('b', -1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
 	if (_globals[kSexOfRex] == REX_MALE)
 		_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMBD_2");
@@ -51,40 +51,44 @@ static void room_359_init() {
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(127, 78));
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15);
 
-	if (_game._objects.isInRoom(OBJ_SECURITY_CARD)) {
+	if (object_is_here(OBJ_SECURITY_CARD)) {
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 9, 0, 0, 0);
 		local._cardHotspotId = _scene->_dynamicHotspots.add(words_security_card, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._cardHotspotId, Common::Point(107, 107), FACING_SOUTH);
 	}
 
-	if (_scene->_priorSceneId == 358)
-		_game._player._playerPos = Common::Point(301, 141);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(15, 148);
+	if (_scene->_priorSceneId == 358) {
+		player.x = 301;
+		player.y = 141;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 15;
+		player.y = 148;
+	}
 
 	section_3_music();
 }
 
 static void room_359_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_east))
-		_game._player._walkOffScreenSceneId = 358;
+		player.walk_off_edge_to_room = 358;
 
 	if (player_said_2(walk_down, corridor_to_west))
-		_game._player._walkOffScreenSceneId = 360;
+		player.walk_off_edge_to_room = 360;
 }
 
 static void room_359_parser() {
 	if (_action._lookFlag) {
-		if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
+		if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 			text_show(35914);
 		else
 			text_show(35915);
 	} else if (player_said_2(take, security_card)) {
-		if (_game._trigger || !_game._objects.isInInventory(OBJ_SECURITY_CARD)) {
-			switch (_game._trigger) {
+		if (kernel.trigger || !player_has(OBJ_SECURITY_CARD)) {
+			switch (kernel.trigger) {
 			case 0:
-				_game._player._stepEnabled = false;
-				_game._player._visible = false;
+				player.commands_allowed = false;
+				player.walker_visible = false;
 				text_show(35920);
 				if (_globals[kSexOfRex] == REX_MALE) {
 					_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 4, 2, 0, 0);
@@ -104,7 +108,7 @@ static void room_359_parser() {
 				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 				_scene->_dynamicHotspots.remove(local._cardHotspotId);
 				g_engine->_soundManager->command(57, 0);
-				_game._objects.addToInventory(OBJ_SECURITY_CARD);
+				inter_give_to_player(OBJ_SECURITY_CARD);
 				object_examine(OBJ_SECURITY_CARD, 0x330, 0);
 				_scene->changeVariant(1);
 				break;
@@ -115,8 +119,8 @@ static void room_359_parser() {
 				else
 					_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[4]);
 
-				_game._player._visible = true;
-				_game._player._stepEnabled = true;
+				player.walker_visible = true;
+				player.commands_allowed = true;
 				break;
 
 			default:
@@ -142,7 +146,7 @@ static void room_359_parser() {
 	else if (player_said_2(look, security_card) && (_action._mainObjectSource == CAT_HOTSPOT))
 		text_show(35921);
 	else if (player_said_2(look, blood_stain)) {
-		if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
+		if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 			text_show(35922);
 		else
 			text_show(35923);
@@ -155,7 +159,7 @@ static void room_359_parser() {
 	else if (player_said_2(look, corridor))
 		text_show(35927);
 	else if (player_said_2(look, floor)) {
-		if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
+		if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 			text_show(35928);
 		else
 			text_show(35929);
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index f5c75da9ed0..ecf74691f3b 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -32,25 +32,29 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_360_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
 	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
 
-	if (_scene->_priorSceneId == 359)
-		_game._player._playerPos = Common::Point(304, 143);
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(13, 141);
+	if (_scene->_priorSceneId == 359) {
+		player.x = 304;
+		player.y = 143;
+	}
+	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 13;
+		player.y = 141;
+	}
 
 	section_3_music();
 }
 
 static void room_360_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_east))
-		_game._player._walkOffScreenSceneId = 359;
+		player.walk_off_edge_to_room = 359;
 
 	if (player_said_2(walk_down, corridor_to_west))
-		_game._player._walkOffScreenSceneId = 361;
+		player.walk_off_edge_to_room = 361;
 }
 
 static void room_360_parser() {
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 517c20b5f9b..8705fe3a408 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -32,10 +32,10 @@ namespace RexNebular {
 namespace Rooms {
 
 static void handleRexAction() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 50, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 3, -2);
@@ -130,10 +130,10 @@ static void handleRexAction() {
 }
 
 static void handleRoxAction() {
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 0:
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 18, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 2, 4);
@@ -233,7 +233,7 @@ static void handleRoxAction() {
 }
 
 static void room_361_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
 	if (_globals[kSexOfRex] == REX_MALE) {
 		_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXCL_8");
@@ -247,20 +247,26 @@ static void room_361_init() {
 
 	if (_scene->_priorSceneId == 391) {
 		_globals[kSexOfRex] = REX_MALE;
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
-		_game._player._facing = FACING_SOUTH;
-		_game._player._playerPos = Common::Point(166, 101);
+		player.commands_allowed = false;
+		player.walker_visible = false;
+		player.facing = FACING_SOUTH;
+		player.x = 166;
+		player.y = 101;
 		_scene->_sequences.addTimer(120, 70);
-	} else if (_scene->_priorSceneId == 360)
-		_game._player._playerPos = Common::Point(302, 145);
+	} else if (_scene->_priorSceneId == 360) {
+		player.x = 302;
+		player.y = 145;
+	}
 	else if (_scene->_priorSceneId == 320) {
-		_game._player._playerPos = Common::Point(129, 113);
-		_game._player._facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
-		_game._player._playerPos = Common::Point(13, 145);
+		player.x = 129;
+		player.y = 113;
+		player.facing = FACING_SOUTH;
+	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		player.x = 13;
+		player.y = 145;
+	}
 
-	_game.loadQuoteSet(0xFB, 0xFC, 0);
+	kernel.quotes = quote_load(0xFB, 0xFC, 0);
 
 	if (_scene->_priorSceneId == 320)
 		_scene->_kernelMessages.setQuoted(_scene->_kernelMessages.addQuote(0xFB, 0, 0x78), 4, true);
@@ -269,8 +275,8 @@ static void room_361_init() {
 }
 
 static void room_361_daemon() {
-	if (_game._trigger >= 70) {
-		switch (_game._trigger) {
+	if (kernel.trigger >= 70) {
+		switch (kernel.trigger) {
 		case 70:
 			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
 			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
@@ -360,8 +366,8 @@ static void room_361_daemon() {
 
 		case 79:
 			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
-			_game._player._stepEnabled = true;
-			_game._player._visible = true;
+			player.commands_allowed = true;
+			player.walker_visible = true;
 			break;
 
 		default:
@@ -372,10 +378,10 @@ static void room_361_daemon() {
 
 static void room_361_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_east))
-		_game._player._walkOffScreenSceneId = 360;
+		player.walk_off_edge_to_room = 360;
 
 	if (player_said_2(walk_down, corridor_to_west))
-		_game._player._walkOffScreenSceneId = 354;
+		player.walk_off_edge_to_room = 354;
 }
 
 static void room_361_parser() {
diff --git a/engines/mads/nebular/rooms/room366.cpp b/engines/mads/nebular/rooms/room366.cpp
index 5d182ffcdc1..fd729f34636 100644
--- a/engines/mads/nebular/rooms/room366.cpp
+++ b/engines/mads/nebular/rooms/room366.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_366_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
-	_game._player._visible = false;
+	player.walker_visible = false;
 	section_3_music();
 }
 
@@ -41,13 +41,13 @@ static void room_366_parser() {
 	if (player_said_2(return_to, air_shaft))
 		_scene->_nextSceneId = 302;
 	else if (player_said_2(open, grate)) {
-		if (_game._visitedScenes.exists(316))
+		if (player_has_been_in_room(316))
 			text_show(36612);
 		else
 			text_show(36613);
 		_scene->_nextSceneId = 316;
 	} else if (player_said_2(look_through, grate)) {
-		if (_game._visitedScenes.exists(321))
+		if (player_has_been_in_room(321))
 			text_show(36611);
 		else
 			text_show(36610);
diff --git a/engines/mads/nebular/rooms/room387.cpp b/engines/mads/nebular/rooms/room387.cpp
index 9159bd84389..77c5d3f3c61 100644
--- a/engines/mads/nebular/rooms/room387.cpp
+++ b/engines/mads/nebular/rooms/room387.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_387_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
-	_game._player._visible = false;
+	player.walker_visible = false;
 
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 7fb02f3613c..6eb34dab8e4 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -38,14 +38,14 @@ static void room_388_init() {
 	if (_globals[kAfterHavoc])
 		_scene->_hotspots.activate(words_sauropod, false);
 	else {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('b', 0));
+		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('b', 0));
 		_globals._sequenceIndexes[0] = _scene->_sequences.startCycle(_globals._spriteIndexes[0], false, 1);
 	}
 
-	_game._player._visible = false;
+	player.walker_visible = false;
 	pal_change_color(252, 63, 30, 20);
 	pal_change_color(253, 45, 15, 12);
-	_game.loadQuoteSet(0x154, 0x155, 0x156, 0x157, 0x158, 0);
+	kernel.quotes = quote_load(0x154, 0x155, 0x156, 0x157, 0x158, 0);
 
 	section_3_music();
 }
@@ -54,22 +54,22 @@ static void room_388_parser() {
 	if (player_said_2(return_to, air_shaft))
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(talkto, sauropod)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 1, 120, _game.getQuote(0x154));
+			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 1, 120, quote_string(kernel.quotes, 0x154));
 			break;
 
 		case 1:
-			_scene->_kernelMessages.add(Common::Point(82, 38), 0xFDFC, 0, 0, 300, _game.getQuote(0x156));
-			_scene->_kernelMessages.add(Common::Point(82, 52), 0xFDFC, 0, 0, 300, _game.getQuote(0x157));
-			_scene->_kernelMessages.add(Common::Point(82, 66), 0xFDFC, 0, 2, 300, _game.getQuote(0x158));
+			_scene->_kernelMessages.add(Common::Point(82, 38), 0xFDFC, 0, 0, 300, quote_string(kernel.quotes, 0x156));
+			_scene->_kernelMessages.add(Common::Point(82, 52), 0xFDFC, 0, 0, 300, quote_string(kernel.quotes, 0x157));
+			_scene->_kernelMessages.add(Common::Point(82, 66), 0xFDFC, 0, 2, 300, quote_string(kernel.quotes, 0x158));
 			break;
 
 		case 2:
-			_game._player._stepEnabled = true;
-			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 0, 120, _game.getQuote(0x155));
+			player.commands_allowed = true;
+			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 0, 120, quote_string(kernel.quotes, 0x155));
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index dba79a715f8..2cfa15ca7b2 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -49,7 +49,7 @@ static void room_389_init() {
 	if (_globals[kAfterHavoc])
 		_scene->_hotspots.activate(words_monster, false);
 	else {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('m', -1));
+		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('m', -1));
 		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 0, 0, 0);
 		_scene->_kernelMessages.initRandomMessages(1,
 			Common::Rect(88, 19, 177, 77), 13, 2, 0xFDFC, 60,
@@ -58,8 +58,8 @@ static void room_389_init() {
 
 	pal_change_color(252, 63, 37, 26);
 	pal_change_color(253, 45, 24, 17);
-	_game._player._visible = false;
-	_game.loadQuoteSet(0xF7, 0xF8, 0xF9, 0x159, 0x15A, 0x15B, 0);
+	player.walker_visible = false;
+	kernel.quotes = quote_load(0xF7, 0xF8, 0xF9, 0x159, 0x15A, 0x15B, 0);
 
 	section_3_music();
 }
@@ -77,10 +77,10 @@ static void room_389_parser() {
 	if (player_said_2(return_to, air_shaft))
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(talkto, monster)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
-			_game._player._stepEnabled = false;
-			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 1, 120, _game.getQuote(local._circularQuoteId));
+			player.commands_allowed = false;
+			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 1, 120, quote_string(kernel.quotes, local._circularQuoteId));
 			local._circularQuoteId++;
 			if (local._circularQuoteId > 0x15B)
 				local._circularQuoteId = 0x159;
@@ -88,7 +88,7 @@ static void room_389_parser() {
 			break;
 
 		case 1:
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			break;
 
 		default:
@@ -96,7 +96,7 @@ static void room_389_parser() {
 		}
 	} else if (player_said_2(look_through, grate)) {
 		if (_globals[kAfterHavoc]) {
-			if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
+			if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 				text_show(38911);
 			else
 				text_show(38912);
diff --git a/engines/mads/nebular/rooms/room390.cpp b/engines/mads/nebular/rooms/room390.cpp
index 74f3e155f8b..56d66a90978 100644
--- a/engines/mads/nebular/rooms/room390.cpp
+++ b/engines/mads/nebular/rooms/room390.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_390_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
-	_game._player._visible = false;
+	player.walker_visible = false;
 
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index ca5ed752fbe..af39ec20e96 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_391_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
-	_game._player._visible = false;
+	player.walker_visible = false;
 	section_3_music();
 }
 
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index 6a12cf8f772..4f01c616a12 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_399_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
-	_game._player._visible = false;
+	player.walker_visible = false;
 	section_3_music();
 }
 
@@ -42,7 +42,7 @@ static void room_399_parser() {
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(look_through, grate)) {
 		if (_globals[kAfterHavoc]) {
-			if ((_game._difficulty != DIFFICULTY_HARD) && (_game._objects[OBJ_SECURITY_CARD]._roomNumber == 359))
+			if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 				text_show(38911);
 			else
 				text_show(38912);
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index 912f800666e..b77d426a5c6 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -49,37 +49,40 @@ static void room_401_init() {
 	local._timer = 0;
 
 	if (_scene->_priorSceneId == 402) {
-		_game._player._playerPos = Common::Point(203, 115);
-		_game._player._facing = FACING_WEST;
+		player.x = 203;
+		player.y = 115;
+		player.facing = FACING_WEST;
 	} else if (_scene->_priorSceneId == 354) {
-		_game._player._playerPos = Common::Point(149, 90);
-		_game._player._facing = FACING_SOUTH;
+		player.x = 149;
+		player.y = 90;
+		player.facing = FACING_SOUTH;
 		local._northFl = true;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(142, 131);
-		_game._player._facing = FACING_NORTH;
+		player.x = 142;
+		player.y = 131;
+		player.facing = FACING_NORTH;
 	}
 
-	_game.loadQuoteSet(0x1D4, 0);
+	kernel.quotes = quote_load(0x1D4, 0);
 	section_4_music();
 }
 
 static void room_401_daemon() {
-	if (_game._trigger == 70) {
+	if (kernel.trigger == 70) {
 		_scene->_nextSceneId = 354;
 		_scene->_reloadSceneFlag = true;
 	}
 
-	if (_game._trigger == 80) {
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
-		_game._player._stepEnabled = true;
-		_game._player._visible = true;
+	if (kernel.trigger == 80) {
+		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.commands_allowed = true;
+		player.walker_visible = true;
 		local._northFl = false;
-		_game._player.walk(Common::Point(149, 110), FACING_SOUTH);
+		player_walk(149, 110, FACING_SOUTH);
 	}
 
 	if (_scene->_frameStartTime >= local._timer) {
-		int dist = 64 - ((Math::hypotenuse(_game._player._playerPos.x - 219, _game._player._playerPos.y - 115) * 64) / 120);
+		int dist = 64 - ((Math::hypotenuse(player.x - 219, player.y - 115) * 64) / 120);
 
 		if (dist > 64)
 			dist = 64;
@@ -87,24 +90,24 @@ static void room_401_daemon() {
 			dist = 1;
 
 		g_engine->_soundManager->command(12, dist);
-		local._timer = _scene->_frameStartTime + _game._player._ticksAmount;
+		local._timer = _scene->_frameStartTime + player.frame_delay;
 	}
 
 }
 
 static void room_401_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_north)) {
-		_game._player.walk(Common::Point(149, 89), FACING_NORTH);
+		player_walk(149, 89, FACING_NORTH);
 		local._northFl = false;
 	}
 
 	if (player_said_2(walk_down, corridor_to_south) && !local._northFl)
-		_game._player._walkOffScreenSceneId = 405;
+		player.walk_off_edge_to_room = 405;
 
 	if (player_said_1(take))
-		_game._player._needToWalk = false;
+		player.need_to_walk = false;
 
-	if (_game._player._needToWalk && local._northFl) {
+	if (player.need_to_walk && local._northFl) {
 		if (_globals[kSexOfRex] == REX_MALE) {
 			local._dest_x = 148;
 			local._dest_y = 94;
@@ -113,30 +116,30 @@ static void room_401_pre_parser() {
 			local._dest_y = 99;
 		}
 
-		_game._player.walk(Common::Point(local._dest_x, local._dest_y), FACING_SOUTH);
+		player_walk(local._dest_x, local._dest_y, FACING_SOUTH);
 	}
 }
 
 static void room_401_parser() {
-	if (_game._player._playerPos.x == local._dest_x && _game._player._playerPos.y && local._northFl) {
+	if (player.x == local._dest_x && player.y && local._northFl) {
 		if (_globals[kSexOfRex] == REX_MALE) {
-			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
-			_scene->loadAnimation(formAnimName('s', 1), 70);
+			_scene->loadAnimation(kernel_name('s', 1), 70);
 			_globals[kHasBeenScanned] = true;
 			g_engine->_soundManager->command(22, 0);
-			int idx = _scene->_kernelMessages.add(Common::Point(153, 46), 0x1110, 32, 0, 60, _game.getQuote(0x1D4));
+			int idx = _scene->_kernelMessages.add(Common::Point(153, 46), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 0x1D4));
 			_scene->_kernelMessages.setQuoted(idx, 4, true);
 		}
 
 		if (_globals[kSexOfRex] == REX_FEMALE) {
-			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
-			_scene->loadAnimation(formAnimName('s', 2), 80);
+			_scene->loadAnimation(kernel_name('s', 2), 80);
 			g_engine->_soundManager->command(23, 0);
 			_globals[kHasBeenScanned] = true;
 		}
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 5e29c78eadd..fb0eaf58fb4 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -83,7 +83,7 @@ static void setDialogNode(int node) {
 	if (node > 0)
 		local._bartenderDialogNode = node;
 
-	_game._player._stepEnabled = true;
+	player.commands_allowed = true;
 
 	switch (node) {
 	case 0:
@@ -146,8 +146,8 @@ static void handleConversation1() {
 			break;
 		}
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(quotePosX, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(quoteId));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(quotePosX, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, quoteId));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 120;
 		setDialogNode(2);
@@ -156,8 +156,8 @@ static void handleConversation1() {
 
 	case 0x215:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EC));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EC));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 120;
 		local._bartenderCurrentQuestion = 1;
@@ -166,9 +166,9 @@ static void handleConversation1() {
 
 	case 0x237:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, _game.getQuote(0x1FD));
+		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1FD));
 		setDialogNode(0);
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1120;
 		break;
@@ -248,31 +248,31 @@ static void handleConversation2() {
 	if (_action._activeAction._verbId != 0x21C) {
 		switch (g_engine->getRandomNumber(1, 3)) {
 		case 1:
-			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 100);
 			local._talkTimer = 180;
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E7));
-			_scene->_kernelMessages.add(Common::Point(201, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E8));
+			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E7));
+			_scene->_kernelMessages.add(Common::Point(201, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E8));
 			local._bartenderCurrentQuestion = 7;
 			break;
 
 		case 2:
-			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 100);
 			local._talkTimer = 180;
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(220, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E9));
-			_scene->_kernelMessages.add(Common::Point(190, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EA));
+			_scene->_kernelMessages.add(Common::Point(220, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E9));
+			_scene->_kernelMessages.add(Common::Point(190, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EA));
 			local._bartenderCurrentQuestion = 8;
 			break;
 
 		case 3:
-			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 100);
 			local._talkTimer = 150;
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(196, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EB));
+			_scene->_kernelMessages.add(Common::Point(196, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EB));
 			local._bartenderCurrentQuestion = 9;
 			break;
 
@@ -282,8 +282,8 @@ static void handleConversation2() {
 		local._dialog2.start();
 	} else {
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, _game.getQuote(0x1FD));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1FD));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1120;
 	}
@@ -295,19 +295,19 @@ static void handleConversation3() {
 	case 0x234:
 	case 0x235:
 	case 0x236:
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 86);
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(188, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1ED));
-		_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EE));
+		_scene->_kernelMessages.add(Common::Point(188, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1ED));
+		_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EE));
 		setDialogNode(4);
 		local._bartenderCurrentQuestion = 2;
 		break;
 
 	case 0x237:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, _game.getQuote(0x1FD));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1FD));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1120;
 		setDialogNode(0);
@@ -323,24 +323,24 @@ static void handleConversation4() {
 	case 0x238:
 		_scene->_kernelMessages.reset();
 		setDialogNode(0);
-		_game._player._stepEnabled = false;
-		_scene->_kernelMessages.add(Common::Point(196, 13), 0xFDFC, 0, 0, 180, _game.getQuote(0x1F0));
-		_scene->_kernelMessages.add(Common::Point(184, 27), 0xFDFC, 0, 0, 180, _game.getQuote(0x1F1));
-		_scene->_kernelMessages.add(Common::Point(200, 41), 0xFDFC, 0, 0, 180, _game.getQuote(0x1F2));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		player.commands_allowed = false;
+		_scene->_kernelMessages.add(Common::Point(196, 13), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F0));
+		_scene->_kernelMessages.add(Common::Point(184, 27), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F1));
+		_scene->_kernelMessages.add(Common::Point(200, 41), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F2));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1100;
 		local._dialog4.write(0x238, false);
 		local._bartenderMode = 22;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
 
 	case 0x239:
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		local._roxMode = 21;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 92);
 		_scene->_userInterface.setup(kInputBuildingSentences);
 		local._conversationFl = false;
@@ -348,32 +348,32 @@ static void handleConversation4() {
 
 	case 0x23A:
 		setDialogNode(0);
-		_game._player._stepEnabled = false;
-		_scene->_kernelMessages.add(Common::Point(193, 27), 0xFDFC, 0, 0, 150, _game.getQuote(0x1F4));
-		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, _game.getQuote(0x1F5));
+		player.commands_allowed = false;
+		_scene->_kernelMessages.add(Common::Point(193, 27), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F4));
+		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F5));
 		local._dialog4.write(0x23A, false);
 		_globals[kHasSaidTimer] = true;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1100;
 		local._bartenderMode = 22;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
 
 	case 0x23D:
 		setDialogNode(0);
-		_game._player._stepEnabled = false;
-		_scene->_kernelMessages.add(Common::Point(153, 27), 0xFDFC, 0, 0, 150, _game.getQuote(0x1F6));
-		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, _game.getQuote(0x1F7));
+		player.commands_allowed = false;
+		_scene->_kernelMessages.add(Common::Point(153, 27), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F6));
+		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F7));
 		local._dialog4.write(0x23D, false);
 		_globals[kHasSaidBinocs] = true;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1100;
 		local._bartenderMode = 22;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
@@ -381,13 +381,13 @@ static void handleConversation4() {
 	case 0x23E:
 		_scene->_kernelMessages.reset();
 		setDialogNode(0);
-		_game._player._stepEnabled = false;
-		_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, 100, _game.getQuote(0x1F8));
+		player.commands_allowed = false;
+		_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1F8));
 		local._bartenderMode = 22;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1050;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(50, 95);
 		local._refuseAlienLiquor = true;
 		break;
@@ -398,13 +398,13 @@ static void handleConversation4() {
 }
 
 static void handleDialogs() {
-	if (_game._trigger == 0) {
+	if (kernel.trigger == 0) {
 		_scene->_kernelMessages.reset();
-		_game._player._stepEnabled = false;
-		const char *curQuote = _game.getQuote(_action._activeAction._verbId);
+		player.commands_allowed = false;
+		const char *curQuote = quote_string(kernel.quotes, _action._activeAction._verbId);
 		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 			static char subQuote1[34], subQuote2[34];
-			_game.splitQuote(curQuote, subQuote1, subQuote2);
+			quote_split_string(curQuote, subQuote1, subQuote2);
 			_scene->_kernelMessages.add(Common::Point(230, 42), 0x1110, 32, 0, 140, subQuote1);
 			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 0, 140, subQuote2);
 			_scene->_sequences.addTimer(160, 120);
@@ -412,8 +412,8 @@ static void handleDialogs() {
 			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 1, 140, curQuote);
 			_scene->_sequences.addTimer(160, 120);
 		}
-	} else if (_game._trigger == 120) {
-		_game._player._stepEnabled = true;
+	} else if (kernel.trigger == 120) {
+		player.commands_allowed = true;
 		switch (local._bartenderDialogNode) {
 		case 1:
 			handleConversation1();
@@ -438,48 +438,50 @@ static void handleDialogs() {
 }
 
 static void room_402_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('n', -1));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('g', 0));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('g', 1));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('a', 0));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('a', 1));
-	_globals._spriteIndexes[15] = _scene->_sprites.addSprites(formAnimName('x', 5));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('x', 4));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('b', 0));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('b', 1));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('b', 2));
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('b', 3));
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('c', 0));
-	_globals._spriteIndexes[14] = _scene->_sprites.addSprites(formAnimName('l', 0));
-	_globals._spriteIndexes[16] = _scene->_sprites.addSprites(formAnimName('h', 0));
-	_globals._spriteIndexes[17] = _scene->_sprites.addSprites(formAnimName('z', 0));
-	_globals._spriteIndexes[18] = _scene->_sprites.addSprites(formAnimName('z', 1));
-	_globals._spriteIndexes[19] = _scene->_sprites.addSprites(formAnimName('z', 2));
-	_globals._spriteIndexes[20] = _scene->_sprites.addSprites(formAnimName('x', 6));
+	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('n', -1));
+	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('g', 0));
+	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('g', 1));
+	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	_globals._spriteIndexes[15] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('b', 2));
+	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(kernel_name('b', 3));
+	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(kernel_name('c', 0));
+	_globals._spriteIndexes[14] = _scene->_sprites.addSprites(kernel_name('l', 0));
+	_globals._spriteIndexes[16] = _scene->_sprites.addSprites(kernel_name('h', 0));
+	_globals._spriteIndexes[17] = _scene->_sprites.addSprites(kernel_name('z', 0));
+	_globals._spriteIndexes[18] = _scene->_sprites.addSprites(kernel_name('z', 1));
+	_globals._spriteIndexes[19] = _scene->_sprites.addSprites(kernel_name('z', 2));
+	_globals._spriteIndexes[20] = _scene->_sprites.addSprites(kernel_name('x', 6));
 	_globals._spriteIndexes[21] = _scene->_sprites.addSprites("*ROXRC_9");
 	_globals._spriteIndexes[22] = _scene->_sprites.addSprites("*ROXCL_8");
 
 	if (_scene->_priorSceneId == 401) {
-		_game._player._playerPos = Common::Point(160, 150);
-		_game._player._facing = FACING_NORTH;
+		player.x = 160;
+		player.y = 150;
+		player.facing = FACING_NORTH;
 		local._roxOnStool = false;
 		local._bartenderDialogNode = 1;
 		local._conversationFl = false;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		_game._player._playerPos = Common::Point(160, 150);
-		_game._player._facing = FACING_NORTH;
-		_game._objects.addToInventory(OBJ_CREDIT_CHIP);
-		_game._objects.addToInventory(OBJ_BINOCULARS);
-		_game._objects.addToInventory(OBJ_TIMER_MODULE);
+		player.x = 160;
+		player.y = 150;
+		player.facing = FACING_NORTH;
+		inter_give_to_player(OBJ_CREDIT_CHIP);
+		inter_give_to_player(OBJ_BINOCULARS);
+		inter_give_to_player(OBJ_TIMER_MODULE);
 		local._roxOnStool = false;
 		local._bartenderDialogNode = 1;
 		local._conversationFl = false;
 	}
 
-	_game.loadQuoteSet(0x1D7, 0x1D8, 0x1D9, 0x1DA, 0x1DB, 0x1DC, 0x1DD, 0x1DE, 0x1DF, 0x1E2, 0x1E3, 0x1E6, 0x1E5, 0x1E7,
+	kernel.quotes = quote_load(0x1D7, 0x1D8, 0x1D9, 0x1DA, 0x1DB, 0x1DC, 0x1DD, 0x1DE, 0x1DF, 0x1E2, 0x1E3, 0x1E6, 0x1E5, 0x1E7,
 		0x1E8, 0x1E9, 0x1EA, 0x1EF, 0x1F0, 0x1F1, 0x1F2, 0x1F3, 0x1F4, 0x1F5, 0x1F6, 0x1F7, 0x1F8, 0x1F9, 0x1FA, 0x1FB,
 		0x1FC, 0x1EB, 0x1EC, 0x1ED, 0x1EE, 0x1E4, 0x1FD, 0x1E0, 0x1E1, 0x1FE, 0x1FF, 0x200, 0x201, 0x202, 0x203, 0x204,
 		0x205, 0x206, 0x207, 0x208, 0x209, 0x20A, 0x20B, 0x20C, 0x20F, 0x20D, 0x20E, 0x210, 0x211, 0x212, 0x213, 0x214,
@@ -496,23 +498,23 @@ static void room_402_init() {
 	local._dialog3.setup(0x62, 0x233, 0x234, 0x235, 0x236, 0x237, -1);
 	local._dialog4.setup(0x63, 0x238, 0x239, 0x23A, 0x23D, 0x23E, 0);
 
-	if (!_game._visitedScenes._sceneRevisited) {
+	if (!player.been_here_before) {
 		local._dialog2.set(0x61, 0x216, 0x219, 0x21A, 0x21B, 0x21C, 0);
 		local._dialog4.set(0x63, 0x238, 0x23E, 0);
 		local._dialog1.set(0x60, 0x214, 0x215, 0x237, 0);
 	}
 
-	if (_game._objects.isInInventory(OBJ_CREDIT_CHIP))
+	if (player_has(OBJ_CREDIT_CHIP))
 		local._dialog4.write(0x239, true);
 	else
 		local._dialog4.write(0x239, false);
 
-	if (_game._objects.isInInventory(OBJ_BINOCULARS) && !_globals[kHasSaidBinocs])
+	if (player_has(OBJ_BINOCULARS) && !_globals[kHasSaidBinocs])
 		local._dialog4.write(0x23D, true);
 	else
 		local._dialog4.write(0x23D, false);
 
-	if (_game._objects.isInInventory(OBJ_TIMER_MODULE) && !_globals[kHasSaidTimer])
+	if (player_has(OBJ_TIMER_MODULE) && !_globals[kHasSaidTimer])
 		local._dialog4.write(0x23A, true);
 	else
 		local._dialog4.write(0x23A, false);
@@ -549,47 +551,47 @@ static void room_402_init() {
 
 		switch (local._bartenderCurrentQuestion) {
 		case 1:
-			_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EC));
+			_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EC));
 			break;
 
 		case 2:
-			_scene->_kernelMessages.add(Common::Point(188, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1ED));
-			_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EE));
+			_scene->_kernelMessages.add(Common::Point(188, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1ED));
+			_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EE));
 			break;
 
 		case 3:
-			_scene->_kernelMessages.add(Common::Point(177, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EF));
+			_scene->_kernelMessages.add(Common::Point(177, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EF));
 			break;
 
 		case 4:
-			_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E4));
+			_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E4));
 			break;
 
 		case 5:
-			_scene->_kernelMessages.add(Common::Point(203, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E5));
+			_scene->_kernelMessages.add(Common::Point(203, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E5));
 			break;
 
 		case 6:
-			_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E6));
+			_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E6));
 			break;
 
 		case 7:
-			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E7));
-			_scene->_kernelMessages.add(Common::Point(201, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E8));
+			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E7));
+			_scene->_kernelMessages.add(Common::Point(201, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E8));
 			break;
 
 		case 8:
-			_scene->_kernelMessages.add(Common::Point(220, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E9));
-			_scene->_kernelMessages.add(Common::Point(190, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EA));
+			_scene->_kernelMessages.add(Common::Point(220, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E9));
+			_scene->_kernelMessages.add(Common::Point(190, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EA));
 			break;
 
 		case 9:
-			_scene->_kernelMessages.add(Common::Point(196, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1EB));
+			_scene->_kernelMessages.add(Common::Point(196, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EB));
 			break;
 
 		case 10:
-			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E2));
-			_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E3));
+			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E2));
+			_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E3));
 			break;
 
 		default:
@@ -625,7 +627,7 @@ static void room_402_init() {
 	local._rexMode = 0;
 	local._refuseAlienLiquor = false;
 
-	_scene->loadAnimation(Resources::formatName(402, 'd', 1, EXT_AA, ""));
+	_scene->loadAnimation(kernel_full_name(402, 'd', 1, "", EXT_AA));
 	_scene->_animation[0]->_repeatFlag = true;
 
 	_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
@@ -634,7 +636,7 @@ static void room_402_init() {
 	_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
 	_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
 
-	if (!_game._objects.isInInventory(OBJ_REPAIR_LIST)) {
+	if (!player_has(OBJ_REPAIR_LIST)) {
 		_globals._sequenceIndexes[14] = _scene->_sequences.startCycle(_globals._spriteIndexes[14], false, 1);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[14], 7);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[14], Common::Point(210, 80));
@@ -649,7 +651,7 @@ static void room_402_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 	}
 
-	if (!_game._objects.isInRoom(OBJ_ALIEN_LIQUOR) && !_game._objects.isInInventory(OBJ_CREDIT_CHIP)) {
+	if (!object_is_here(OBJ_ALIEN_LIQUOR) && !player_has(OBJ_CREDIT_CHIP)) {
 		_globals._sequenceIndexes[15] = _scene->_sequences.startCycle(_globals._spriteIndexes[15], false, 1);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[15], 8);
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[15], Common::Point(250, 80));
@@ -669,23 +671,23 @@ static void room_402_init() {
 	if (local._roxOnStool) {
 		_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 11);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
-		_game._player._visible = false;
+		player.walker_visible = false;
 	}
 
 	section_4_music();
 }
 
 static void room_402_daemon() {
-	if (_game._trigger == 104) {
-		_game._player._priorTimer = _scene->_frameStartTime + _game._player._ticksAmount;
-		_game._player._visible = true;
+	if (kernel.trigger == 104) {
+		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.walker_visible = true;
 		_scene->_sequences.remove(_globals._sequenceIndexes[15]);
-		_game._objects.addToInventory(OBJ_CREDIT_CHIP);
+		inter_give_to_player(OBJ_CREDIT_CHIP);
 		object_examine(OBJ_CREDIT_CHIP, 40242, 0);
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 	}
 
-	if ((g_engine->getRandomNumber(1, 1500) == 1) && (!local._activeTeleporter) && (_game._player._playerPos.x < 150)) {
+	if ((g_engine->getRandomNumber(1, 1500) == 1) && (!local._activeTeleporter) && (player.x < 150)) {
 		g_engine->_soundManager->command(30, 0);
 		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 13, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 11);
@@ -695,10 +697,10 @@ static void room_402_daemon() {
 		_globals[kSomeoneHasExploded] = true;
 	}
 
-	if (_game._trigger == 48)
+	if (kernel.trigger == 48)
 		local._activeTeleporter = false;
 
-	if (_game._trigger == 100) {
+	if (kernel.trigger == 100) {
 		local._bartenderReady = false;
 		if (local._bartenderHandsHips) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
@@ -725,7 +727,7 @@ static void room_402_daemon() {
 		}
 	}
 
-	if ((_game._trigger == 101) && local._bartenderTalking) {
+	if ((kernel.trigger == 101) && local._bartenderTalking) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
@@ -737,12 +739,12 @@ static void room_402_daemon() {
 			local._bartenderReady = true;
 	}
 
-	if (_game._trigger == 28)
-		_game._player._stepEnabled = true;
+	if (kernel.trigger == 28)
+		player.commands_allowed = true;
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 92:
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		_scene->_sequences.remove(_globals._sequenceIndexes[6]);
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 1, 2);
@@ -757,14 +759,14 @@ static void room_402_daemon() {
 		case 20:
 			g_engine->_soundManager->command(57, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[15]);
-			_game._objects.addToInventory(OBJ_CREDIT_CHIP);
+			inter_give_to_player(OBJ_CREDIT_CHIP);
 			object_examine(OBJ_CREDIT_CHIP, 40242, 0);
 			break;
 
 		case 22:
 			g_engine->_soundManager->command(57, 0);
 			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
-			_game._objects.addToInventory(OBJ_ALIEN_LIQUOR);
+			inter_give_to_player(OBJ_ALIEN_LIQUOR);
 			_globals[kBottleDisplayed] = false;
 			object_examine(OBJ_ALIEN_LIQUOR, 40241, 0);
 			break;
@@ -785,8 +787,8 @@ static void room_402_daemon() {
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 94);
 
 		if (local._roxMode == 21) {
-			if (_game._objects.isInInventory(OBJ_CREDIT_CHIP))
-				_game._objects.setRoom(OBJ_CREDIT_CHIP, NOWHERE);
+			if (player_has(OBJ_CREDIT_CHIP))
+				inter_move_object(OBJ_CREDIT_CHIP, NOWHERE);
 
 			local._bartenderMode = 20;
 			_scene->_sequences.addTimer(60, 95);
@@ -802,12 +804,12 @@ static void room_402_daemon() {
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[6], seqIdx);
 		if (local._roxMode == 22) {
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 0, 120, _game.getQuote(0x23F));
+			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 0, 120, quote_string(kernel.quotes, 0x23F));
 			local._bartenderMode = 21;
 			_globals[kHasPurchased] = true;
 			_scene->_sequences.addTimer(140, 95);
 		} else if (local._roxMode == 20)
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 
 	}
 	break;
@@ -816,10 +818,10 @@ static void room_402_daemon() {
 		break;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 95:
 		local._bartenderReady = false;
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		if (local._bartenderHandsHips || local._bartenderTalking) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 			local._bartenderHandsHips = false;
@@ -905,13 +907,13 @@ static void room_402_daemon() {
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
 		if (local._bartenderMode == 20) {
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(210, 41), 0xFDFC, 0, 0, 100, _game.getQuote(0x1F3));
+			_scene->_kernelMessages.add(Common::Point(210, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1F3));
 			_scene->_sequences.addTimer(5, 100);
 			local._talkTimer = 180;
 			local._roxMode = 22;
 			_scene->_sequences.addTimer(65, 92);
 		} else if ((local._bartenderMode == 21) || (local._bartenderMode == 22)) {
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 			local._bartenderReady = true;
 		}
 
@@ -922,10 +924,10 @@ static void room_402_daemon() {
 		break;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 86:
 		local._bartenderReady = false;
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		if ((local._bartenderHandsHips) || (local._bartenderTalking)) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
 			local._bartenderHandsHips = false;
@@ -986,7 +988,7 @@ static void room_402_daemon() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
 		local._bartenderSteady = true;
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		local._bartenderReady = true;
 	}
 	break;
@@ -1007,7 +1009,7 @@ static void room_402_daemon() {
 		}
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 75:
 		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
 		local._bigBeatFl = !local._bigBeatFl;
@@ -1048,7 +1050,7 @@ static void room_402_daemon() {
 		break;
 	}
 
-	if ((_game._trigger == 54) && local._ginnyLooking) {
+	if ((kernel.trigger == 54) && local._ginnyLooking) {
 		++local._beatCounter;
 		if (local._beatCounter >= 10) {
 			local._ginnyLooking = false;
@@ -1113,23 +1115,23 @@ static void room_402_daemon() {
 		}
 	}
 
-	if (_game._trigger == 76) {
+	if (kernel.trigger == 76) {
 		int seqIdx = _globals._sequenceIndexes[6];
 		_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 11);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[6], seqIdx);
 		if (!_globals[kBeenThruHelgaScene]) {
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			local._cutSceneNeeded = true;
 		} else {
-			_game._player._stepEnabled = true;
+			player.commands_allowed = true;
 		}
 		local._roxOnStool = true;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 77:
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		_scene->_sequences.remove(_globals._sequenceIndexes[6]);
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 10, 12);
@@ -1141,7 +1143,7 @@ static void room_402_daemon() {
 	{
 		g_engine->_soundManager->command(57, 0);
 		int seqIdx = _globals._sequenceIndexes[7];
-		_game._objects.addToInventory(OBJ_REPAIR_LIST);
+		inter_give_to_player(OBJ_REPAIR_LIST);
 		_scene->_sequences.remove(_globals._sequenceIndexes[14]);
 		_globals._sequenceIndexes[7] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 10, 12);
@@ -1163,7 +1165,7 @@ static void room_402_daemon() {
 
 	case 180:
 		object_examine(OBJ_REPAIR_LIST, 40240, 0);
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		break;
 
 	default:
@@ -1195,7 +1197,7 @@ static void room_402_daemon() {
 		local._blowingSmoke = true;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 30:
 		_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 5);
@@ -1233,7 +1235,7 @@ static void room_402_daemon() {
 		}
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 33:
 	{
 		int seqIdx = _globals._sequenceIndexes[2];
@@ -1312,7 +1314,7 @@ static void room_402_daemon() {
 		}
 	}
 
-	if (_game._trigger == 32)
+	if (kernel.trigger == 32)
 		local._rightWomanMoving = false;
 
 	if (_scene->_animation[0]->getCurrentFrame() == 1) {
@@ -1358,43 +1360,43 @@ static void room_402_daemon() {
 		break;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 39:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, _game.getQuote(0x1D8));
+		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1D8));
 		_scene->_sequences.addTimer(150, 40);
 		break;
 
 	case 40:
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, _game.getQuote(0x1D9));
+		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1D9));
 		_scene->_sequences.addTimer(150, 41);
 		break;
 
 	case 41:
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, _game.getQuote(0x1DA));
-		_game._player._stepEnabled = true;
+		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1DA));
+		player.commands_allowed = true;
 		break;
 
 	case 42:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, _game.getQuote(0x1DC));
+		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1DC));
 		_scene->_sequences.addTimer(150, 43);
 		break;
 
 	case 43:
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, _game.getQuote(0x1DD));
-		_game._player._stepEnabled = true;
+		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1DD));
+		player.commands_allowed = true;
 		break;
 
 	case 44:
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		break;
 
 	default:
 		break;
 	}
 
-	switch (_game._trigger) {
+	switch (kernel.trigger) {
 	case 55:
 		if (local._bartenderHandsHips) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
@@ -1413,9 +1415,9 @@ static void room_402_daemon() {
 			local._bartenderSteady = true;
 			_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
 		}
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(180, 47), 0xFBFA, 0, 0, 100, _game.getQuote(0x1FE));
+		_scene->_kernelMessages.add(Common::Point(180, 47), 0xFBFA, 0, 0, 100, quote_string(kernel.quotes, 0x1FE));
 		_scene->_sequences.addTimer(120, 56);
 		break;
 
@@ -1476,8 +1478,8 @@ static void room_402_daemon() {
 
 	case 61:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(181, 33), 0xFBFA, 0, 0, 130, _game.getQuote(0x1FF));
-		_scene->_kernelMessages.add(Common::Point(171, 47), 0xFBFA, 0, 0, 130, _game.getQuote(0x200));
+		_scene->_kernelMessages.add(Common::Point(181, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x1FF));
+		_scene->_kernelMessages.add(Common::Point(171, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x200));
 		_scene->_sequences.addTimer(150, 63);
 		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
 		_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 30, 4, 0, 0);
@@ -1497,15 +1499,15 @@ static void room_402_daemon() {
 
 	case 63:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(160, 33), 0xFBFA, 0, 0, 130, _game.getQuote(0x201));
-		_scene->_kernelMessages.add(Common::Point(165, 47), 0xFBFA, 0, 0, 130, _game.getQuote(0x202));
+		_scene->_kernelMessages.add(Common::Point(160, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x201));
+		_scene->_kernelMessages.add(Common::Point(165, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x202));
 		_scene->_sequences.addTimer(150, 64);
 		break;
 
 	case 64:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(210, 27), 0xFDFC, 0, 0, 130, _game.getQuote(0x1E0));
-		_scene->_kernelMessages.add(Common::Point(198, 41), 0xFDFC, 0, 0, 130, _game.getQuote(0x1E1));
+		_scene->_kernelMessages.add(Common::Point(210, 27), 0xFDFC, 0, 0, 130, quote_string(kernel.quotes, 0x1E0));
+		_scene->_kernelMessages.add(Common::Point(198, 41), 0xFDFC, 0, 0, 130, quote_string(kernel.quotes, 0x1E1));
 		_scene->_sequences.addTimer(150, 65);
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1130;
@@ -1562,8 +1564,8 @@ static void room_402_daemon() {
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
 
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(179, 33), 0xFBFA, 0, 0, 130, _game.getQuote(0x203));
-		_scene->_kernelMessages.add(Common::Point(167, 47), 0xFBFA, 0, 0, 130, _game.getQuote(0x204));
+		_scene->_kernelMessages.add(Common::Point(179, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x203));
+		_scene->_kernelMessages.add(Common::Point(167, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x204));
 		_scene->_sequences.addTimer(150, 71);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	}
@@ -1579,9 +1581,9 @@ static void room_402_daemon() {
 	case 71:
 		_scene->_sequences.addTimer(210, 73);
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(168, 33), 0xFBFA, 0, 0, 180, _game.getQuote(0x205));
-		_scene->_kernelMessages.add(Common::Point(151, 47), 0xFBFA, 0, 0, 180, _game.getQuote(0x206));
-		if (!_game._objects.isInInventory(OBJ_REPAIR_LIST))
+		_scene->_kernelMessages.add(Common::Point(168, 33), 0xFBFA, 0, 0, 180, quote_string(kernel.quotes, 0x205));
+		_scene->_kernelMessages.add(Common::Point(151, 47), 0xFBFA, 0, 0, 180, quote_string(kernel.quotes, 0x206));
+		if (!player_has(OBJ_REPAIR_LIST))
 			local._activeArrows = true;
 		break;
 
@@ -1596,10 +1598,10 @@ static void room_402_daemon() {
 
 	case 73:
 		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(177, 33), 0xFBFA, 0, 0, 150, _game.getQuote(0x207));
-		_scene->_kernelMessages.add(Common::Point(172, 47), 0xFBFA, 0, 0, 150, _game.getQuote(0x208));
+		_scene->_kernelMessages.add(Common::Point(177, 33), 0xFBFA, 0, 0, 150, quote_string(kernel.quotes, 0x207));
+		_scene->_kernelMessages.add(Common::Point(172, 47), 0xFBFA, 0, 0, 150, quote_string(kernel.quotes, 0x208));
 		local._bartenderSteady = true;
-		_game._player._stepEnabled = true;
+		player.commands_allowed = true;
 		local._helgaReady = true;
 		local._bartenderReady = true;
 		_globals[kBeenThruHelgaScene] = true;
@@ -1669,7 +1671,7 @@ static void room_402_daemon() {
 			}
 	}
 
-	if (_game._trigger == 80) {
+	if (kernel.trigger == 80) {
 		int seqIdx = _globals._sequenceIndexes[13];
 		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 19);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
@@ -1677,7 +1679,7 @@ static void room_402_daemon() {
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 120), 81);
 	}
 
-	if (_game._trigger == 81) {
+	if (kernel.trigger == 81) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
 		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 16, 19);
@@ -1685,7 +1687,7 @@ static void room_402_daemon() {
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 	}
 
-	if (_game._trigger == 26) {
+	if (kernel.trigger == 26) {
 		int seqIdx = _globals._sequenceIndexes[13];
 		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
@@ -1696,7 +1698,7 @@ static void room_402_daemon() {
 			local._helgaReady = true;
 	}
 
-	if (_game._trigger == 82) {
+	if (kernel.trigger == 82) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[20]);
 		int seqIdx = _globals._sequenceIndexes[13];
 		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
@@ -1706,7 +1708,7 @@ static void room_402_daemon() {
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
 	}
 
-	if (_game._trigger == 83) {
+	if (kernel.trigger == 83) {
 		int seqIdx = _globals._sequenceIndexes[13];
 		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 5, 9);
@@ -1715,7 +1717,7 @@ static void room_402_daemon() {
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 84);
 	}
 
-	if (_game._trigger == 84) {
+	if (kernel.trigger == 84) {
 		int seqIdx = _globals._sequenceIndexes[13];
 		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 1, 4);
@@ -1728,7 +1730,7 @@ static void room_402_daemon() {
 		_scene->_sequences.setPosition(_globals._sequenceIndexes[20], Common::Point(234, 72));
 	}
 
-	if (_game._trigger == 85) {
+	if (kernel.trigger == 85) {
 		int seqIdx = _globals._sequenceIndexes[13];
 		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
 		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
@@ -1738,21 +1740,21 @@ static void room_402_daemon() {
 			local._helgaReady = true;
 	}
 
-	if (_game._trigger == 102) {
+	if (kernel.trigger == 102) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[6]);
-		_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
+		player.clock = _scene->_frameStartTime - player.frame_delay;
 		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 14, 18);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 5);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 103);
-	} else if (_game._trigger == 103) {
-		_game._player._priorTimer = _scene->_frameStartTime + _game._player._ticksAmount;
+	} else if (kernel.trigger == 103) {
+		player.clock = _scene->_frameStartTime + player.frame_delay;
 		local._roxOnStool = false;
-		_game._player._facing = FACING_SOUTH;
-		_game._player.selectSeries();
-		_game._player._visible = true;
-		_game._player._stepEnabled = true;
-		_game._player._readyToWalk = true;
+		player.facing = FACING_SOUTH;
+		player_select_series();
+		player.walker_visible = true;
+		player.commands_allowed = true;
+		player.ready_to_walk = true;
 	}
 
 	if (local._activeArrows) {
@@ -1778,112 +1780,112 @@ static void room_402_daemon() {
 		}
 	}
 
-	if (_game._trigger == 49) {
+	if (kernel.trigger == 49) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[17]);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 45);
 	}
 
-	if (_game._trigger == 45)
+	if (kernel.trigger == 45)
 		local._activeArrow1 = false;
 
-	if (_game._trigger == 50) {
+	if (kernel.trigger == 50) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[18]);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 46);
 	}
 
-	if (_game._trigger == 46)
+	if (kernel.trigger == 46)
 		local._activeArrow2 = false;
 
-	if (_game._trigger == 51) {
+	if (kernel.trigger == 51) {
 		_scene->_sequences.remove(_globals._sequenceIndexes[19]);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 47);
 	}
 
-	if (_game._trigger == 47)
+	if (kernel.trigger == 47)
 		local._activeArrow3 = false;
 }
 
 static void room_402_pre_parser() {
-	if (player_said_2(sit_on, bar_stool) && (_game._player._prepareWalkPos.x != 248))
-		_game._player.walk(Common::Point(232, 112), FACING_EAST);
+	if (player_said_2(sit_on, bar_stool) && (player.prepare_walk_x != 248))
+		player_walk(232, 112, FACING_EAST);
 
 	if (player_said_2(walkto, woman_on_balcony))
-		_game._player._needToWalk = _game._player._readyToWalk;
+		player.need_to_walk = player.ready_to_walk;
 
-	if (!local._roxOnStool && player_said_2(take, credit_chip) && !_game._objects.isInInventory(OBJ_CREDIT_CHIP))
-		_game._player.walk(Common::Point(246, 108), FACING_NORTH);
+	if (!local._roxOnStool && player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP))
+		player_walk(246, 108, FACING_NORTH);
 
 	if (player_said_1(take))
-		_game._player._needToWalk = false;
+		player.need_to_walk = false;
 
 	if (player_said_2(take, credit_chip) && !local._roxOnStool)
-		_game._player._needToWalk = true;
+		player.need_to_walk = true;
 
 	if (local._roxOnStool) {
 		if (player_said_1(look) || player_said_1(bar_stool) || player_said_1(talkto))
-			_game._player._needToWalk = false;
+			player.need_to_walk = false;
 
 		if (player_said_2(take, repair_list) || player_said_2(take, credit_chip))
-			_game._player._needToWalk = false;
+			player.need_to_walk = false;
 
 		if (player_said_2(talkto, woman_in_chair) || player_said_2(talkto, woman_in_alcove))
-			_game._player._needToWalk = _game._player._readyToWalk;
+			player.need_to_walk = player.ready_to_walk;
 
-		if (_game._player._needToWalk) {
-			_game._player._facing = FACING_SOUTH;
-			_game._player._readyToWalk = false;
-			_game._player._stepEnabled = false;
-			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		if (player.need_to_walk) {
+			player.facing = FACING_SOUTH;
+			player.ready_to_walk = false;
+			player.commands_allowed = false;
+			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 102);
 		}
 	}
 
-	if (player_said_2(take, repair_list) && !local._roxOnStool && !_game._objects.isInInventory(OBJ_REPAIR_LIST))
-		_game._player.walk(Common::Point(191, 99), FACING_NORTHEAST);
+	if (player_said_2(take, repair_list) && !local._roxOnStool && !player_has(OBJ_REPAIR_LIST))
+		player_walk(191, 99, FACING_NORTHEAST);
 
 	if (player_said_2(talkto, bartender) && !local._roxOnStool)
-		_game._player.walk(Common::Point(228, 83), FACING_SOUTH);
+		player_walk(228, 83, FACING_SOUTH);
 
 	if (player_said_2(talkto, repair_woman) && !local._roxOnStool)
-		_game._player.walk(Common::Point(208, 102), FACING_NORTHEAST);
+		player_walk(208, 102, FACING_NORTHEAST);
 }
 
 static void room_402_parser() {
-	if (player_said_2(take, repair_list) && _game._objects.isInRoom(OBJ_REPAIR_LIST) && local._roxOnStool) {
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+	if (player_said_2(take, repair_list) && object_is_here(OBJ_REPAIR_LIST) && local._roxOnStool) {
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 77);
-		_game._player._needToWalk = false;
-	} else if (player_said_2(take, repair_list) && _game._objects.isInRoom(OBJ_REPAIR_LIST) && !local._roxOnStool) {
-		if (_game._trigger == 0) {
-			_game._player._stepEnabled = false;
-			_game._player._visible = false;
+		player.need_to_walk = false;
+	} else if (player_said_2(take, repair_list) && object_is_here(OBJ_REPAIR_LIST) && !local._roxOnStool) {
+		if (kernel.trigger == 0) {
+			player.commands_allowed = false;
+			player.walker_visible = false;
 			_globals._sequenceIndexes[21] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[21], false, 7, 2, 0, 0);
 			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[21], 1, 2);
 			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[21]);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[21], SEQUENCE_TRIGGER_SPRITE, 2, 165);
 			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[21], SEQUENCE_TRIGGER_EXPIRE, 0, 166);
-		} else if (_game._trigger == 165) {
+		} else if (kernel.trigger == 165) {
 			_scene->_sequences.remove(_globals._sequenceIndexes[14]);
-			_game._objects.addToInventory(OBJ_REPAIR_LIST);
+			inter_give_to_player(OBJ_REPAIR_LIST);
 		}
-	} else if (_game._trigger == 166) {
-		_game._player._priorTimer = _scene->_frameStartTime + _game._player._ticksAmount;
-		_game._player._visible = true;
+	} else if (kernel.trigger == 166) {
+		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.walker_visible = true;
 		_scene->_sequences.addTimer(20, 167);
-	} else if (_game._trigger == 167) {
+	} else if (kernel.trigger == 167) {
 		object_examine(OBJ_REPAIR_LIST, 40240, 0);
-		_game._player._stepEnabled = true;
-	} else if (_game._screenObjects._inputMode == kInputConversation)
+		player.commands_allowed = true;
+	} else if (inter_input_mode == kInputConversation)
 		handleDialogs();
 	else if (player_said_2(walk_into, corridor_to_south))
 		_scene->_nextSceneId = 401;
 	else if (player_said_2(walk_onto, dance_floor))
 		; // just... nothing
 	else if (player_said_2(talkto, repair_woman)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 		{
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			int random = g_engine->getRandomNumber(1, 3);
 			if (local._helgaTalkMode == 0)
 				random = 1;
@@ -1900,17 +1902,17 @@ static void room_402_parser() {
 
 			switch (random) {
 			case 1:
-				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, _game.getQuote(0x211));
+				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, 0x211));
 				_scene->_sequences.addTimer(110, 25);
 				break;
 
 			case 2:
-				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, _game.getQuote(0x212));
+				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, 0x212));
 				_scene->_sequences.addTimer(110, 25);
 				break;
 
 			case 3:
-				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, _game.getQuote(0x213));
+				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, 0x213));
 				_scene->_sequences.addTimer(110, 25);
 				break;
 
@@ -1923,32 +1925,32 @@ static void room_402_parser() {
 		case 25:
 			switch (local._helgaTalkMode) {
 			case 0:
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				local._helgaTalkMode = 1;
-				_scene->_kernelMessages.add(Common::Point(177, 33), 0xFBFA, 0, 0, 130, _game.getQuote(0x209));
-				_scene->_kernelMessages.add(Common::Point(182, 47), 0xFBFA, 0, 0, 130, _game.getQuote(0x20A));
-				_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+				_scene->_kernelMessages.add(Common::Point(177, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x209));
+				_scene->_kernelMessages.add(Common::Point(182, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x20A));
+				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(130, 28);
 				break;
 
 			case 1:
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				local._helgaTalkMode = 2;
-				_scene->_kernelMessages.add(Common::Point(157, 47), 0xFBFA, 0, 0, 100, _game.getQuote(0x20B));
-				_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+				_scene->_kernelMessages.add(Common::Point(157, 47), 0xFBFA, 0, 0, 100, quote_string(kernel.quotes, 0x20B));
+				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(100, 28);
 				break;
 
 			case 2:
-				_game._player._stepEnabled = false;
+				player.commands_allowed = false;
 				local._helgaTalkMode = 3;
-				_scene->_kernelMessages.add(Common::Point(172, 47), 0xFBFA, 0, 0, 100, _game.getQuote(0x20C));
-				_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+				_scene->_kernelMessages.add(Common::Point(172, 47), 0xFBFA, 0, 0, 100, quote_string(kernel.quotes, 0x20C));
+				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(100, 28);
 				break;
 
 			case 3:
-				_game._player._stepEnabled = true;
+				player.commands_allowed = true;
 				break;
 
 			default:
@@ -1960,49 +1962,49 @@ static void room_402_parser() {
 			break;
 		}
 	} else if (player_said_2(talkto, woman_in_chair) && !local._firstTalkToGirlInChair) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x1D7));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x1D7));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(150, 39);
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 		local._firstTalkToGirlInChair = true;
 	} else if (player_said_2(talkto, woman_in_chair) && local._firstTalkToGirlInChair) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x1DB));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x1DB));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(150, 42);
-		_game._player._stepEnabled = false;
+		player.commands_allowed = false;
 	} else if (player_said_2(talkto, woman_in_alcove) || player_said_2(walkto, woman_in_alcove)) {
-		_scene->_kernelMessages.add(Common::Point(102, 48), 0xFBFA, 0, 0, 120, _game.getQuote(0x1DE));
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		_scene->_kernelMessages.add(Common::Point(102, 48), 0xFBFA, 0, 0, 120, quote_string(kernel.quotes, 0x1DE));
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(120, 44);
-		_game._player._stepEnabled = false;
-	} else if (player_said_2(sit_on, bar_stool) && (_game._player._targetPos.x == 248)) {
-		_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 120, _game.getQuote(0x20D));
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x20E));
-	} else if (player_said_2(sit_on, bar_stool) && !local._roxOnStool && (_game._player._targetPos.x != 248)) {
-		_game._player._visible = false;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		player.commands_allowed = false;
+	} else if (player_said_2(sit_on, bar_stool) && (player.target_x == 248)) {
+		_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x20D));
+		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x20E));
+	} else if (player_said_2(sit_on, bar_stool) && !local._roxOnStool && (player.target_x != 248)) {
+		player.walker_visible = false;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 11);
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
-		_game._player._stepEnabled = false;
-	} else if (player_said_2(take, credit_chip) && !_game._objects.isInInventory(OBJ_CREDIT_CHIP) && local._roxOnStool) {
+		player.commands_allowed = false;
+	} else if (player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP) && local._roxOnStool) {
 		local._roxMode = 20;
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 92);
-	} else if (player_said_2(take, credit_chip) && !_game._objects.isInInventory(OBJ_CREDIT_CHIP) && !local._roxOnStool) {
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
-		_game._player._stepEnabled = false;
-		_game._player._visible = false;
+	} else if (player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP) && !local._roxOnStool) {
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		player.commands_allowed = false;
+		player.walker_visible = false;
 		_globals._sequenceIndexes[22] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[22], false, 7, 2, 0, 0);
 		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[22], 1, 2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[22], Common::Point(_game._player._playerPos.x, _game._player._playerPos.y + 1));
+		_scene->_sequences.setPosition(_globals._sequenceIndexes[22], Common::Point(player.x, player.y + 1));
 		_scene->_sequences.setDepth(_globals._sequenceIndexes[22], 5);
 		_scene->_sequences.setScale(_globals._sequenceIndexes[22], 88);
-		_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[22], SEQUENCE_TRIGGER_EXPIRE, 0, 104);
 	} else if (player_said_2(talkto, bartender)) {
-		switch (_game._trigger) {
+		switch (kernel.trigger) {
 		case 0:
 		{
 			int centerFlag;
@@ -2015,7 +2017,7 @@ static void room_402_parser() {
 				centerPos = Common::Point(0, 0);
 			}
 
-			_game._player._stepEnabled = false;
+			player.commands_allowed = false;
 			int quoteId;
 			if (local._bartenderCalled) {
 				quoteId = 0x210;
@@ -2024,9 +2026,9 @@ static void room_402_parser() {
 				local._bartenderCalled = true;
 			}
 			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, _game.getQuote(quoteId));
+			_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, quoteId));
 			_scene->_sequences.addTimer(110, 29);
-			_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(90, 28);
 		}
 		break;
@@ -2034,37 +2036,37 @@ static void room_402_parser() {
 		case 29:
 			_scene->_kernelMessages.reset();
 			if (!local._roxOnStool) {
-				if (_game._objects.isInRoom(OBJ_ALIEN_LIQUOR)) {
-					_scene->_kernelMessages.add(Common::Point(177, 41), 0xFDFC, 0, 0, 120, _game.getQuote(0x1DF));
-					_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+				if (object_is_here(OBJ_ALIEN_LIQUOR)) {
+					_scene->_kernelMessages.add(Common::Point(177, 41), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 0x1DF));
+					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 					_scene->_sequences.addTimer(1, 100);
 					local._talkTimer = 120;
 				} else if (local._rexMode == 0) {
-					_scene->_kernelMessages.add(Common::Point(175, 13), 0xFDFC, 0, 0, 180, _game.getQuote(0x1F9));
-					_scene->_kernelMessages.add(Common::Point(184, 27), 0xFDFC, 0, 0, 180, _game.getQuote(0x1FA));
-					_scene->_kernelMessages.add(Common::Point(200, 41), 0xFDFC, 0, 0, 180, _game.getQuote(0x1FB));
-					_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+					_scene->_kernelMessages.add(Common::Point(175, 13), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F9));
+					_scene->_kernelMessages.add(Common::Point(184, 27), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1FA));
+					_scene->_kernelMessages.add(Common::Point(200, 41), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1FB));
+					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 					_scene->_sequences.addTimer(1, 100);
 					local._talkTimer = 180;
 					local._rexMode = 1;
 				} else if (local._rexMode == 1) {
-					_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, 120, _game.getQuote(0x1FC));
-					_game._player._stepEnabled = true;
-					_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+					_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 0x1FC));
+					player.commands_allowed = true;
+					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 					_scene->_sequences.addTimer(1, 100);
 					local._talkTimer = 120;
 					local._rexMode = 3;
 				} else {
-					_game._player._stepEnabled = true;
+					player.commands_allowed = true;
 				}
 			} else {
-				if (_game._objects.isInRoom(OBJ_ALIEN_LIQUOR)) {
+				if (object_is_here(OBJ_ALIEN_LIQUOR)) {
 					if (!local._refuseAlienLiquor) {
 						_scene->_kernelMessages.reset();
-						_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E2));
-						_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, _game.getQuote(0x1E3));
+						_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E2));
+						_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E3));
 						local._bartenderCurrentQuestion = 10;
-						_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
+						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 						_scene->_sequences.addTimer(1, 100);
 						local._talkTimer = 120;
 						local._conversationFl = true;
@@ -2074,8 +2076,8 @@ static void room_402_parser() {


Commit: a3bcab39f433e015484343bb79dd9cbe67876e8c
    https://github.com/scummvm/scummvm/commit/a3bcab39f433e015484343bb79dd9cbe67876e8c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:53+10:00

Commit Message:
MADS: NEBULAR: Refactor Action out of thunks

Changed paths:
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room212.cpp
    engines/mads/nebular/rooms/room213.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room322.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room354.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room366.cpp
    engines/mads/nebular/rooms/room387.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room390.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room409.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room502.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room707.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room711.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room807.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 2ac673e7325..3857417981e 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -275,15 +275,15 @@ static void room_101_pre_parser() {
 }
 
 static void room_101_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		text_show(10125);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(walkto, life_support_section)) {
 		_scene->_nextSceneId = 102;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -298,7 +298,7 @@ static void room_101_parser() {
 				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_action._inProgress = false;
+				player.command_ready = false;
 				return;
 
 			case 1:
@@ -313,7 +313,7 @@ static void room_101_parser() {
 				_scene->_hotspots.activate(71, false);
 				local._chairHotspotId = _scene->_dynamicHotspots.add(words_chair, words_sit_in, -1, Common::Rect(159, 84, 159 + 33, 84 + 36));
 				if (!player_said_2(look, view_screen)) {
-					_action._inProgress = false;
+					player.command_ready = false;
 					return;
 				}
 				kernel.trigger = 0;
@@ -324,7 +324,7 @@ static void room_101_parser() {
 			}
 		} else {
 			text_show(10131);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	}
@@ -352,7 +352,7 @@ static void room_101_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -364,7 +364,7 @@ static void room_101_parser() {
 		_scene->_hotspots.activate(words_shield_modulator, false);
 		object_examine(OBJ_SHIELD_MODULATOR, 10120, 0);
 		g_engine->_soundManager->command(22, 0);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -377,13 +377,13 @@ static void room_101_parser() {
 		} else
 			text_show(10127);
 
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(open, shield_access_panel) && local._panelOpened) {
 		text_show(10130);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -425,139 +425,139 @@ static void room_101_parser() {
 				break;
 			}
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, chair)) {
 		text_show(10101);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if ((player_said_1(look) || player_said_1(peer_through)) && (player_said_1(front_window) || player_said_1(outside))) {
 		text_show(10102);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, hull) || player_said_2(look, outer_hull) || player_said_2(examine, hull) || player_said_2(examine, outer_hull)) {
 		text_show(10103);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, fuzzy_dice)) {
 		text_show(10104);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, mirror) || player_said_2(look_in, mirror)) {
 		text_show(10105);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, curtains)) {
 		text_show(10106);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, plastic_jesus)) {
 		text_show(10107);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, escape_hatch) || (player_said_2(open, escape_hatch) && !player_has(OBJ_REBREATHER))) {
 		text_show(10109);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(open, escape_hatch)) {
 		text_show(10110);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, target_computer)) {
 		text_show(10111);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, library_computer)) {
 		text_show(10126);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, damage_control_panel)) {
 		text_show(10112);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, navigation_controls)) {
 		text_show(10113);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, engineering_controls)) {
 		text_show(10114);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, weapons_display)) {
 		text_show(10115);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, shield_status_panel)) {
 		text_show(10116);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(take, plastic_jesus)) {
 		text_show(10118);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(take, fuzzy_dice)) {
 		text_show(10119);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(open, damage_control_panel)) {
 		text_show(10121);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(open, curtains)) {
 		text_show(10122);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(close, curtains)) {
 		text_show(10123);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if ((player_said_1(look) || player_said_1(play)) && player_said_1(video_game)) {
 		text_show(10124);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 }
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index c29ddd73de3..1b12dda2d65 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -217,9 +217,9 @@ static void room_102_pre_parser() {
 }
 
 static void room_102_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		text_show(10234);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -236,7 +236,7 @@ static void room_102_parser() {
 			}
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 
 		case 1:
@@ -249,7 +249,7 @@ static void room_102_parser() {
 			else
 				delay = 48;
 			_scene->_sequences.addTimer(delay, 2);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 
 		case 2:
@@ -274,7 +274,7 @@ static void room_102_parser() {
 			text_show(10229);
 
 		local._fridgeFirstOpenFl = false;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -288,19 +288,19 @@ static void room_102_parser() {
 		_scene->_kernelMessages.add(Common::Point(210, 60), 0x1110, 0, 73, 120, curQuote);
 		_scene->_kernelMessages.add(Common::Point(214 + width, 60), 0x1110, 0, 73, 120, quote_string(kernel.quotes, 64));
 		local._activeMsgFl = true;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(close, refrigerator)) {
 		text_show(10213);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(take, refrigerator)) {
 		text_show(8);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -320,85 +320,85 @@ static void room_102_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(walkto, engineering_section)) {
 		_scene->_nextSceneId = 103;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(walkto, poster) || player_said_2(look, poster) || player_said_2(walkto, binoculars)) {
 		addRandomMessage();
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, weight_machine)) {
 		text_show(10212);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, engineering_section)) {
 		text_show(10205);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, door)) {
 		text_show(10204);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(stare_at, ceiling) || player_said_2(look, ceiling)) {
 		text_show(10203);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(stare_at, overhead_lamp) || player_said_2(look, overhead_lamp)) {
 		text_show(10202);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, robo_kitchen)) {
 		text_show(10215);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_3(put, burger, robo_kitchen) && player_has(OBJ_BURGER)) {
 		text_show(10216);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
-	if (player_said_2(put, refrigerator) && player_has(object_named(_action._activeAction._objectNameId))) {
+	if (player_said_2(put, refrigerator) && player_has(object_named(player2.words[1]))) {
 		text_show(10217);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_3(put, dead_fish, robo_kitchen) || player_said_3(put, stuffed_fish, robo_kitchen)) {
 		text_show(10230);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(open, robo_kitchen)) {
 		text_show(10218);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, closet)) {
 		text_show(10219);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -406,12 +406,12 @@ static void room_102_parser() {
 		if (player_has(OBJ_REBREATHER)) {
 			if (!player_said_1(climb_up) && !player_said_1(climb_through)) {
 				text_show(10231);
-				_action._inProgress = false;
+				player.command_ready = false;
 				return;
 			}
 		} else if (player_said_1(look) || (game.difficulty != DIFFICULTY_HARD)) {
 			text_show(10222);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	}
@@ -450,57 +450,57 @@ static void room_102_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, power_status_panel)) {
 		text_show(10226);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, window) || player_said_2(look_through, window)) {
 		text_show(10227);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, doorway) || player_said_2(walkto, doorway)) {
 		text_show(10228);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, drawer) || ((player_said_2(close, drawer) || player_said_2(push, drawer)) && !local._drawerDescrFl)) {
 		text_show(10220);
 		local._drawerDescrFl = true;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(close, drawer) || player_said_2(push, drawer)) {
 		text_show(10221);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(open, drawer)) {
 		text_show(10236);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, chair) || (player_said_2(sit_in, chair) && !local._chairDescrFl)) {
 		local._chairDescrFl = true;
 		text_show(10210);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(sit_in, chair)) {
 		text_show(10211);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -510,7 +510,7 @@ static void room_102_parser() {
 		else
 			text_show(10206);
 
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -537,7 +537,7 @@ static void room_102_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -570,7 +570,7 @@ static void room_102_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -597,7 +597,7 @@ static void room_102_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -611,44 +611,44 @@ static void room_102_parser() {
 			player.walker_visible = true;
 			player.commands_allowed = true;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(take, poster)) {
 		text_show(10224);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if ((player_said_1(push) || player_said_1(pull)) && player_said_1(weight_machine)) {
 		text_show(10225);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, floor)) {
 		text_show(10232);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, binoculars) && !player_has(OBJ_BINOCULARS)) {
 		text_show(10233);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
-	if (player_said_2(look, burger) && (_action._mainObjectSource == CAT_HOTSPOT)) {
+	if (player_said_2(look, burger) && (player.main_object_source == CAT_HOTSPOT)) {
 		text_show(801);
-		_action._inProgress = false;
+		player.command_ready = false;
 	}
 }
 
 static void room_102_error() {
-	if (player_said_2(put, robo_kitchen) && player_has(object_named(_action._activeAction._objectNameId))) {
+	if (player_said_2(put, robo_kitchen) && player_has(object_named(player2.words[1]))) {
 		text_show(10217);
-		_action._inProgress = false;
+		player.command_ready = false;
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 6ee2032d5d6..f4061c885d2 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -163,7 +163,7 @@ static void room_103_pre_parser() {
 }
 
 static void room_103_parser() {
-	if (_action._savedFields._lookFlag)
+	if (player.look_around)
 		text_show(10322);
 	else if (player_said_2(walk_through, door)) {
 		switch (kernel.trigger) {
@@ -339,17 +339,17 @@ static void room_103_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_103_error() {
 	if (player_said_1(auxiliary_power) && !player_said_1(walkto)) {
 		text_show(10305);
-		_action._inProgress = false;
+		player.command_ready = false;
 	} else if (player_said_3(put, coal, furnace)) {
 		const char *msg = quote_string(kernel.quotes, 73);
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, msg);
-		_action._inProgress = false;
+		player.command_ready = false;
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 020f0d2dc6e..cb590e5cf6f 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -222,7 +222,7 @@ static void room_104_pre_parser() {
 }
 
 static void room_104_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(10405);
 	else if (player_said_2(look, curious_weed_patch))
 		text_show(10404);
@@ -235,7 +235,7 @@ static void room_104_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_104_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index 4b4a2b432b0..07ff7f5739a 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -145,7 +145,7 @@ static void room_105_pre_parser() {
 }
 
 static void room_105_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(10512);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn105]) {
 		if (player_has(OBJ_DEAD_FISH)) {
@@ -181,7 +181,7 @@ static void room_105_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_105_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index b197000de7e..dbeb83c2c9c 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -199,7 +199,7 @@ static void room_106_pre_parser() {
 }
 
 static void room_106_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(10614);
 	else if (player_said_2(swim_to, main_airlock)) {
 		player.commands_allowed = false;
@@ -239,7 +239,7 @@ static void room_106_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_106_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index 9600754a545..d557a59aa64 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -108,7 +108,7 @@ static void room_107_pre_parser() {
 }
 
 static void room_107_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(10708);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn107]) {
 		if (player_has(OBJ_DEAD_FISH)) {
@@ -125,7 +125,7 @@ static void room_107_parser() {
 		_scene->_nextSceneId = 105;
 	else if (player_said_2(look, northern_sea_cliff))
 		text_show(10701);
-	else if (player_said_2(look, dead_fish) && (_action._mainObjectSource == CAT_HOTSPOT))
+	else if (player_said_2(look, dead_fish) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(10702);
 	else if (player_said_2(look, bush_like_formation))
 		text_show(10703);
@@ -144,7 +144,7 @@ static void room_107_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_107_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index ed1044d6ae0..a603679e10b 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -79,7 +79,7 @@ static void room_108_pre_parser() {
 }
 
 static void room_108_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(10812);
 	else if (player_said_2(take, dead_fish) && _globals[kFishIn108]) {
 		if (player_has(OBJ_DEAD_FISH)) {
@@ -117,7 +117,7 @@ static void room_108_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_108_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 84b0fe80e4e..7a0f47c0b7e 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -204,7 +204,7 @@ static void room_109_pre_parser() {
 	if ((player_said_1(throw) || player_said_1(give) || player_said_1(put))
 		&& (player_said_1(small_hole) || player_said_1(tunnel))
 		&& (player_said_1(dead_fish) || player_said_1(stuffed_fish) || player_said_1(burger))) {
-		int idx = object_named(_action._activeAction._objectNameId);
+		int idx = object_named(player2.words[1]);
 		if ((idx >= 0) && player_has(idx)) {
 			player.prepare_walk_x = 106;
 			player.prepare_walk_y = 38;
@@ -222,15 +222,15 @@ static void room_109_pre_parser() {
 }
 
 static void room_109_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		text_show(10912);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if ((player_said_1(throw) || player_said_1(give)) && (player_said_1(small_hole) || player_said_1(tunnel))) {
 		if (player_said_1(dead_fish) || player_said_1(stuffed_fish) || player_said_1(burger)) {
-			local._throwingObjectId = object_named(_action._activeAction._objectNameId);
+			local._throwingObjectId = object_named(player2.words[1]);
 			if (local._throwingObjectId >= 0) {
 				if ((player_has(local._throwingObjectId) && _globals[kHoovicAlive]) || local._rexThrowingObject) {
 					switch (kernel.trigger) {
@@ -401,7 +401,7 @@ static void room_109_parser() {
 					default:
 						break;
 					}
-					_action._inProgress = false;
+					player.command_ready = false;
 					return;
 				} else if (player_has(local._throwingObjectId)) {
 					// Nothing.
@@ -441,7 +441,7 @@ static void room_109_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_109_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index eaa065cc40e..251882b5179 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -134,7 +134,7 @@ static void room_110_parser() {
 		default:
 			break;
 		}
-	} else if ((_action._lookFlag) || player_said_2(look, cave))
+	} else if ((player.look_around) || player_said_2(look, cave))
 		text_show(11001);
 	else if (player_said_2(look, cave_ceiling) || player_said_2(look_at, cave_ceiling))
 		text_show(11002);
@@ -153,7 +153,7 @@ static void room_110_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_110_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index 652f4fb5cde..197531c8a84 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -176,7 +176,7 @@ static void room_111_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_111_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index 2b38b1b91e0..c8d4cdf83d8 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -196,7 +196,7 @@ static void room_201_daemon() {
 }
 
 static void room_201_parser() {
-	if (_action._lookFlag == false) {
+	if (player.look_around == false) {
 		if (player_said_2(walk_towards, field_to_south))
 			_scene->_nextSceneId = 202;
 		else if (player_said_2(climb_up, steps) || (player_said_2(walk_inside, teleporter)) || (player_said_2(walk_inside, strange_device))) {
@@ -238,7 +238,7 @@ static void room_201_parser() {
 	} else {
 		text_show(20111);
 	}
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_201_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index b41a72ae474..aa235a00dcd 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -259,9 +259,9 @@ static void room_202_daemon() {
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 
 			if (_globals[kMeteorologistWatch] == METEOROLOGIST_GROUND) {
-				_action._activeAction._verbId = words_look;
-				_action._activeAction._objectNameId = words_binoculars;
-				_action._activeAction._indirectObjectId = words_strange_device;
+				player2.words[0] = words_look;
+				player2.words[1] = words_binoculars;
+				player2.words[2] = words_strange_device;
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_PARSER;
 				_scene->_sequences.addTimer(2 * 60, 2);
 				local._meteorologistSpecial = true;
@@ -448,7 +448,7 @@ static void room_202_pre_parser() {
 		}
 	}
 
-	if (player_said_2(look, binoculars) && (_action._activeAction._indirectObjectId > 0)) {
+	if (player_said_2(look, binoculars) && (player2.words[2] > 0)) {
 		if (!player.ready_to_walk || local._ladderTopFl)
 			player.need_to_walk = false;
 		else
@@ -460,13 +460,13 @@ static void room_202_pre_parser() {
 }
 
 static void room_202_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		text_show(20219);
 		return;
 	}
 
 	if (player_said_2(climb_down, ladder)) {
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	} else if (player_said_2(walk_towards, field_to_south)) {
 		_scene->_nextSceneId = 203;
@@ -478,7 +478,7 @@ static void room_202_parser() {
 				_globals[kMeteorologistStatus] = METEOROLOGIST_ABSENT;
 		}
 		_scene->_nextSceneId = 201;
-	} else if (player_said_2(take, bone) && (_action._savedFields._mainObjectSource == 4)) {
+	} else if (player_said_2(take, bone) && (player.main_object_source == 4)) {
 		switch (kernel.trigger) {
 		case 0:
 			if (player_has(OBJ_BONES)) {
@@ -518,7 +518,7 @@ static void room_202_parser() {
 			break;
 		}
 
-		_action._inProgress = false;
+		player.command_ready = false;
 	} else if (player_said_2(climb_up, ladder) && !_globals[kLadderBroken]) {
 		switch (kernel.trigger) {
 		case 0:
@@ -546,7 +546,7 @@ static void room_202_parser() {
 		}
 		break;
 		default:
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	} else if ((player_said_3(look, binoculars, field_to_north) || (player_said_3(look, binoculars, strange_device))) && (_globals[kSexOfRex] == SEX_MALE)) {
@@ -591,7 +591,7 @@ static void room_202_parser() {
 				player.walker_visible = true;
 				break;
 			default:
-				_action._inProgress = false;
+				player.command_ready = false;
 				return;
 			}
 		} else {
@@ -620,7 +620,7 @@ static void room_202_parser() {
 							int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 100));
 							_scene->_kernelMessages.setQuoted(msgIndex, 4, false);
 						} else {
-							_action._inProgress = false;
+							player.command_ready = false;
 							return;
 						}
 					}
@@ -645,7 +645,7 @@ static void room_202_parser() {
 				player.commands_allowed = true;
 				break;
 			default:
-				_action._inProgress = false;
+				player.command_ready = false;
 				return;
 			}
 		}
@@ -685,13 +685,13 @@ static void room_202_parser() {
 		text_show(20215);
 	} else if (player_said_2(take, skull)) {
 		text_show(20216);
-	} else if (player_said_2(look, bones) && _action._commandSource == 4) {
+	} else if (player_said_2(look, bones) && player.command_source == 4) {
 		text_show(20217);
 	} else {
 		return;
 	}
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_202_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index a1470aa98ea..8157f2955b5 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -116,7 +116,7 @@ static void room_203_daemon() {
 static void room_203_pre_parser() {
 	if (local._rhotundaEatFl && !player_said_2(walk_towards, field_to_south)) {
 		player_walk(158, 136, FACING_SOUTH);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -125,7 +125,7 @@ static void room_203_pre_parser() {
 }
 
 static void room_203_parser() {
-	if (_action._savedFields._lookFlag) {
+	if (player.look_around) {
 		text_show(20307);
 	} else if (player_said_2(walk_towards, field_to_south)) {
 		_scene->_nextSceneId = 208;
@@ -146,7 +146,7 @@ static void room_203_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_203_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index 5ac2ecef7ad..d4a523f9281 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -176,12 +176,12 @@ static void room_205_parser() {
 
 		if (kernel.trigger == 0) {
 			player.commands_allowed = false;
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, quote_string(kernel.quotes, _action._activeAction._verbId));
+			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, quote_string(kernel.quotes, player2.words[0]));
 		} else {
-			if ((kernel.trigger > 1) || (_action._activeAction._verbId != 0x76))
+			if ((kernel.trigger > 1) || (player2.words[0] != 0x76))
 				player.commands_allowed = true;
 
-			switch (_action._activeAction._verbId) {
+			switch (player2.words[0]) {
 			case 0x5A:
 				handleWomanSpeech(0x7A);
 				local._dialog1.write(0x78, true);
@@ -197,7 +197,7 @@ static void room_205_parser() {
 			case 0x75:
 			case 0x78:
 				handleWomanSpeech(0x7B);
-				local._dialog1.write(_action._activeAction._verbId, false);
+				local._dialog1.write(player2.words[0], false);
 				text_show(20501);
 				break;
 
@@ -221,10 +221,10 @@ static void room_205_parser() {
 				break;
 			}
 
-			if (_action._activeAction._verbId != 0x77)
+			if (player2.words[0] != 0x77)
 				local._dialog1.start();
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(20502);
 	else if (player_said_3(look, binoculars, opposite_bank))
 		text_show(20518);
@@ -239,7 +239,7 @@ static void room_205_parser() {
 			local._dialog1.write(0x75, true);
 			local._dialog1.start();
 		}
-	} else if (player_said_2(give, native_woman) && player_has(object_named(_action._activeAction._objectNameId))) {
+	} else if (player_said_2(give, native_woman) && player_has(object_named(player2.words[1]))) {
 		if (kernel.trigger == 0) {
 			player.commands_allowed = false;
 			int rndVal = g_engine->getRandomNumber(0xAC, 0xAE);
@@ -286,9 +286,9 @@ static void room_205_parser() {
 			text_show(20503);
 		else if (player_said_2(look, hut))
 			text_show(20504);
-		else if (player_said_2(look, chicken) && (_action._mainObjectSource == CAT_HOTSPOT))
+		else if (player_said_2(look, chicken) && (player.main_object_source == CAT_HOTSPOT))
 			text_show(20505);
-		else if (player_said_2(take, chicken) && (_action._mainObjectSource == CAT_HOTSPOT))
+		else if (player_said_2(take, chicken) && (player.main_object_source == CAT_HOTSPOT))
 			text_show(20506);
 		else if (player_said_2(look, chicken_on_spit))
 			text_show(20507);
@@ -300,7 +300,7 @@ static void room_205_parser() {
 			text_show(20510);
 		else if (player_said_2(look, opposite_bank))
 			text_show(20511);
-		else if (player_has(object_named(_action._activeAction._objectNameId))
+		else if (player_has(object_named(player2.words[1]))
 			&& (player_said_2(give, stream) || player_said_2(throw, stream)
 				|| player_said_2(give, piranha) || player_said_2(throw, piranha)))
 			text_show(20512);
@@ -316,7 +316,7 @@ static void room_205_parser() {
 			return;
 	}
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_205_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index 3faeecb7345..53d84de1eaf 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -172,7 +172,7 @@ static void room_207_pre_parser() {
 }
 
 static void room_207_parser() {
-	if (_action._savedFields._lookFlag)
+	if (player.look_around)
 		text_show(20711);
 	else if (player_said_2(walk_through, doorway))
 		_scene->_nextSceneId = 214;
@@ -224,7 +224,7 @@ static void room_207_parser() {
 			return;
 	}
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_207_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index 5af742d2e8b..0eeb445f1f6 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -320,16 +320,16 @@ static void room_208_parser() {
 		text_show(20815);
 	else if (player_said_2(take, huge_legs) || player_said_2(pull, huge_legs))
 		text_show(20816);
-	else if (_action._savedFields._lookFlag && (_globals[kRhotundaStatus] == 1))
+	else if (player.look_around && (_globals[kRhotundaStatus] == 1))
 		text_show(20819);
-	else if (_action._savedFields._lookFlag && (_globals[kLeavesStatus] == 2))
+	else if (player.look_around && (_globals[kLeavesStatus] == 2))
 		text_show(20818);
-	else if (_action._savedFields._lookFlag)
+	else if (player.look_around)
 		text_show(20817);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_208_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 1d60f0b8834..17466b2da64 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -1437,15 +1437,15 @@ static void room_209_pre_parser() {
 }
 
 static void room_209_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		text_show(20912);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(walk_towards, rocky_area_to_north)) {
 		_scene->_nextSceneId = 203;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -1453,7 +1453,7 @@ static void room_209_parser() {
 		_scene->_sequences.addTimer(1, local._dialogAbortVal);
 		local._playingDialogFl = true;
 		player.commands_allowed = false;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -1461,88 +1461,88 @@ static void room_209_parser() {
 	case 130:
 		player.commands_allowed = true;
 		local._playingDialogFl = false;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 5:
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 6, 180, quote_string(kernel.quotes, 139));
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 6:
 		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 151));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 7;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 7:
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 8, 180, quote_string(kernel.quotes, 140));
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 8:
 		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 149));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 9;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 9:
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, quote_string(kernel.quotes, 141));
 		_scene->_sequences.addTimer(200, 10);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 10:
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 11, 180, quote_string(kernel.quotes, 142));
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 11:
 		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 152));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 12;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 12:
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 130, quote_string(kernel.quotes, 143));
 		_scene->_sequences.addTimer(150, 13);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 13:
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 14, 180, quote_string(kernel.quotes, 145));
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 14:
 		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 151));
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 15;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 15:
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 16, 180, quote_string(kernel.quotes, 146));
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 16:
 		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 17, 60, quote_string(kernel.quotes, 154));
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 17:
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 130, 60, quote_string(kernel.quotes, 147));
 		local._dialogAbortVal = 18;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	case 18:
@@ -1551,7 +1551,7 @@ static void room_209_parser() {
 		local._pitchFl = true;
 		local._playingDialogFl = false;
 		local._dialogAbortVal = 5;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 
 	default:
@@ -1567,7 +1567,7 @@ static void room_209_parser() {
 				local._startShootingInTimerFl = true;
 				player.commands_allowed = false;
 				local._dodgeFl = true;
-				_action._inProgress = false;
+				player.command_ready = false;
 				return;
 			}
 
@@ -1577,7 +1577,7 @@ static void room_209_parser() {
 				player.commands_allowed = false;
 				local._fallFl = true;
 				local._startShootingInTimerFl = true;
-				_action._inProgress = false;
+				player.command_ready = false;
 				return;
 			}
 		}
@@ -1586,7 +1586,7 @@ static void room_209_parser() {
 			local._pitchFl = true;
 			player.commands_allowed = false;
 			text_show(20914);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	}
@@ -1620,7 +1620,7 @@ static void room_209_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -1656,75 +1656,75 @@ static void room_209_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, sky)) {
 		text_show(20901);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, bamboo_like_plant)) {
 		text_show(20902);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, mountainside)) {
 		text_show(20903);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, grassy_field)) {
 		text_show(20904);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, field_to_west)) {
 		text_show(20905);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, rocky_area_to_north)) {
 		text_show(20906);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
-	if (player_said_2(look, plant_stalk) && (_action._savedFields._mainObjectSource == 4)) {
+	if (player_said_2(look, plant_stalk) && (player.main_object_source == 4)) {
 		text_show(20907);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_3(give, twinkifruit, monkey) || player_said_3(throw, twinkifruit, monkey)) {
 		text_show(20909);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, trees)) {
 		text_show(20913);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
-	if (player_said_2(throw, monkey) && player_has(object_named(_action._activeAction._objectNameId))) {
+	if (player_said_2(throw, monkey) && player_has(object_named(player2.words[1]))) {
 		if (!player_said_1(poison_darts)) {
 			text_show(20915);
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_3(throw, poison_darts, monkey)) {
 		text_show(20916);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -1740,19 +1740,19 @@ static void room_209_parser() {
 			else
 				text_show(20919);
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(look, melon_mush)) {
 		text_show(20920);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(take, melon_mush)) {
 		text_show(20921);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 }
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 5c65309875b..147f403e3dd 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -395,7 +395,7 @@ static void setDialogNode(int node) {
 }
 
 static void handleConversation1() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 180:
 		setDialogNode(2);
 		break;
@@ -422,7 +422,7 @@ static void handleConversation1() {
 }
 
 static void handleConversation2() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 187:
 		setDialogNode(3);
 		break;
@@ -441,7 +441,7 @@ static void handleConversation2() {
 }
 
 static void handleConversation3() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 193:
 		setDialogNode(6);
 		break;
@@ -464,7 +464,7 @@ static void handleConversation3() {
 }
 
 static void handleConversation5() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 204:
 		setDialogNode(6);
 		break;
@@ -484,7 +484,7 @@ static void handleConversation5() {
 }
 
 static void handleConversation6() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 211:
 		setDialogNode(7);
 		break;
@@ -503,7 +503,7 @@ static void handleConversation6() {
 }
 
 static void handleConversation7() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 216:
 	case 217:
 	case 219:
@@ -524,7 +524,7 @@ static void handleConversation7() {
 }
 
 static void handleConversation8() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 223:
 	case 224:
 		setDialogNode(4);
@@ -548,7 +548,7 @@ static void handleConversations() {
 	if (kernel.trigger == 0) {
 		_scene->_kernelMessages.reset();
 		player.commands_allowed = false;
-		const char *curQuote = quote_string(kernel.quotes, _action._activeAction._verbId);
+		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
 		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 			static char line1[40], line2[40];
 			quote_split_string(curQuote, line1, line2);
@@ -967,7 +967,7 @@ static void room_210_parser() {
 		default:
 			break;
 		}
-	} else if (player_said_2(give, native_woman) && player_has(object_named(_action._activeAction._objectNameId))) {
+	} else if (player_said_2(give, native_woman) && player_has(object_named(player2.words[1]))) {
 		switch (kernel.trigger) {
 		case 0:
 		{
@@ -1076,7 +1076,7 @@ static void room_210_parser() {
 		return;
 	}
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_210_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index daf4c035065..bb0c117ea36 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -286,7 +286,7 @@ static void room_211_pre_parser() {
 }
 
 static void room_211_parser() {
-	if (_action._lookFlag && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
+	if (player.look_around && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
 		text_show(21111);
 	else if (player_said_3(look, binoculars, palm_tree))
 		text_show(21116);
@@ -323,7 +323,7 @@ static void room_211_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_211_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room212.cpp b/engines/mads/nebular/rooms/room212.cpp
index 2a2979c61e0..e1e8cdc085f 100644
--- a/engines/mads/nebular/rooms/room212.cpp
+++ b/engines/mads/nebular/rooms/room212.cpp
@@ -55,7 +55,7 @@ static void room_212_pre_parser() {
 }
 
 static void room_212_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(21209);
 	else if (player_said_1(walk_towards) && (player_said_1(field_to_north) || player_said_1(mountains)))
 		_scene->_nextSceneId = 208;
@@ -80,7 +80,7 @@ static void room_212_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_212_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room213.cpp b/engines/mads/nebular/rooms/room213.cpp
index f9bef821789..727ea3a8ab7 100644
--- a/engines/mads/nebular/rooms/room213.cpp
+++ b/engines/mads/nebular/rooms/room213.cpp
@@ -51,7 +51,7 @@ static void room_213_daemon() {
 
 static void room_213_parser() {
 	if (teleporter_parser()) {
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -76,7 +76,7 @@ static void room_213_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_213_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index 2bdc2c18501..350728636dd 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -116,7 +116,7 @@ static void room_214_daemon() {
 }
 
 static void room_214_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(21427);
 	else if (player_said_2(walk_outside, hut))
 		_scene->_nextSceneId = 207;
@@ -210,7 +210,7 @@ static void room_214_parser() {
 		text_show(21411);
 	else if (player_said_2(look, large_heads))
 		text_show(21428);
-	else if (player_said_2(look, poison_darts) && (_action._savedFields._mainObjectSource == 4))
+	else if (player_said_2(look, poison_darts) && (player.main_object_source == 4))
 		text_show(21412);
 	else if (player_said_2(open, experiment_cage))
 		text_show(21414);
@@ -243,7 +243,7 @@ static void room_214_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_214_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index 95f1a135c2d..19ab9e6b943 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -77,7 +77,7 @@ static void room_215_daemon() {
 }
 
 static void room_215_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(21509);
 	else if (player_said_2(take, twinkifruit)) {
 		if (!player_has(OBJ_TWINKIFRUIT) || kernel.trigger) {
@@ -132,7 +132,7 @@ static void room_215_parser() {
 		text_show(21505);
 	else if (player_said_2(look, picture))
 		text_show(21506);
-	else if (player_said_2(look, twinkifruit) && (_action._savedFields._mainObjectSource == 4))
+	else if (player_said_2(look, twinkifruit) && (player.main_object_source == 4))
 		text_show(21507);
 	else if (player_said_2(take, bear_rug))
 		text_show(21510);
@@ -147,7 +147,7 @@ static void room_215_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_215_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index d3e86abd66a..dc891ef34d4 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -197,7 +197,7 @@ static void setDialogNode(int node) {
 }
 
 static void handlePrisonerEncounter() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 275:
 		setDialogNode(5);
 		break;
@@ -216,7 +216,7 @@ static void handlePrisonerEncounter() {
 }
 
 static void handlePrisonerDialog() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x11A:
 		setDialogNode(7);
 		break;
@@ -262,7 +262,7 @@ static void handleDialog() {
 	if (kernel.trigger == 0) {
 		_scene->_kernelMessages.reset();
 		player.commands_allowed = false;
-		handleRexDialog(_action._activeAction._verbId);
+		handleRexDialog(player2.words[0]);
 	} else {
 		player.commands_allowed = true;
 
@@ -452,7 +452,7 @@ static void room_307_daemon() {
 }
 
 static void room_307_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(30715);
 	else if (inter_input_mode == kInputConversation)
 		handleDialog();
@@ -740,7 +740,7 @@ static void room_307_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_307_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index 464e9ac3b9a..f94a47f8c79 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -192,7 +192,7 @@ static void room_311_daemon() {
 }
 
 static void room_311_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(31119);
 	else if (local._checkGuardFl) {
 		local._checkGuardFl = false;
@@ -319,7 +319,7 @@ static void room_311_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_311_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index c18168e9ee4..2a341d7f0e2 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -101,7 +101,7 @@ static void room_313_parser() {
 	} else if (!player_said_2(crawl_down, air_shaft))
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_313_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 1f0e91a701e..1999942e867 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -488,7 +488,7 @@ static void room_316_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_316_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index d2d83d375d9..f50437b4432 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -107,7 +107,7 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 static void handleDialog() {
 	if (!kernel.trigger) {
 		player.commands_allowed = false;
-		handleRexDialogs(_action._activeAction._verbId);
+		handleRexDialogs(player2.words[0]);
 	} else if (kernel.trigger == 2) {
 		int synxIdx = _globals._sequenceIndexes[2];
 		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
@@ -118,10 +118,10 @@ static void handleDialog() {
 		_scene->_userInterface.setup(kInputBuildingSentences);
 		player.commands_allowed = true;
 	} else {
-		if (_action._activeAction._verbId < 0x19C)
-			local._dialog1.write(_action._activeAction._verbId, false);
+		if (player2.words[0] < 0x19C)
+			local._dialog1.write(player2.words[0], false);
 
-		switch (_action._activeAction._verbId) {
+		switch (player2.words[0]) {
 		case 0x191:
 			handleInternDialog(0x19E, 2, INDEFINITE_TIMEOUT);
 			local._dialog1.write(0x192, true);
@@ -189,7 +189,7 @@ static void handleDialog() {
 
 			local._dialogFl = false;
 			handleInternDialog(0x1D0, 1, 120);
-			if (local._dialog1.read(0) || (_action._activeAction._verbId == 0x19D)) {
+			if (local._dialog1.read(0) || (player2.words[0] == 0x19D)) {
 				local._explosionFl = true;
 				local._internCounter = 3420;
 			}
@@ -199,7 +199,7 @@ static void handleDialog() {
 			break;
 		}
 
-		if (_action._activeAction._verbId < 0x19C) {
+		if (player2.words[0] < 0x19C) {
 			local._dialog1.start();
 			player.commands_allowed = true;
 		}
@@ -463,7 +463,7 @@ static void room_318_pre_parser() {
 static void room_318_parser() {
 	if (inter_input_mode == kInputConversation) {
 		handleDialog();
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -504,7 +504,7 @@ static void room_318_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -549,14 +549,14 @@ static void room_318_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player.walker_visible) {
 		if (player_said_2(walk_down, corridor_to_south)) {
 			_scene->_nextSceneId = 407;
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 
@@ -567,7 +567,7 @@ static void room_318_parser() {
 			} else
 				text_show(31834);
 
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 
@@ -577,37 +577,37 @@ static void room_318_parser() {
 			else
 				text_show(31834);
 
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 
 		if (player_said_2(walk_into, doctors_office)) {
 			text_show(31831);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 
 		if (player_said_2(look, gurney)) {
 			text_show(31823);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 
 		if (player_said_2(look, instrument_table)) {
 			text_show(31825);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	} else { // Not visible
 		if (player_said_2(look, gurney)) {
 			text_show(31822);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 
 		if (player_said_2(look, instrument_table)) {
 			text_show(31824);
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	}
@@ -644,7 +644,7 @@ static void room_318_parser() {
 		text_show(31832);
 	else if (player_said_2(look, professors_gurney))
 		text_show(31836);
-	else if (_action._lookFlag) {
+	else if (player.look_around) {
 		if (player.walker_visible || player_has(OBJ_SCALPEL))
 			text_show(31828);
 		else if (local._internVisibleFl)
@@ -654,7 +654,7 @@ static void room_318_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_318_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index 05759cb1b87..fa93b5643d3 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -368,9 +368,9 @@ static void room_319_daemon() {
 static void room_319_parser() {
 	if (kernel.trigger == 0) {
 		player.commands_allowed = false;
-		handleRexDialogues(_action._activeAction._verbId);
+		handleRexDialogues(player2.words[0]);
 	} else {
-		if ((_action._activeAction._verbId == 0x165) || (_action._activeAction._verbId == 0x166)) {
+		if ((player2.words[0] == 0x165) || (player2.words[0] == 0x166)) {
 			if (kernel.trigger == 1) {
 				local._nextAction1 = 3;
 				local._slacheTalkingFl = false;
@@ -387,7 +387,7 @@ static void room_319_parser() {
 			}
 		}
 
-		if ((_action._activeAction._verbId == 0x171) || (_action._activeAction._verbId == 0x172)) {
+		if ((player2.words[0] == 0x171) || (player2.words[0] == 0x172)) {
 			if (kernel.trigger == 1) {
 				local._nextAction1 = 2;
 				local._slacheTalkingFl = false;
@@ -404,7 +404,7 @@ static void room_319_parser() {
 			}
 		}
 
-		if ((_action._activeAction._verbId == 0x17D) || (_action._activeAction._verbId == 0x17E)) {
+		if ((player2.words[0] == 0x17D) || (player2.words[0] == 0x17E)) {
 			if (kernel.trigger == 1) {
 				local._nextAction1 = 3;
 				local._slacheTalkingFl = false;
@@ -428,20 +428,20 @@ static void room_319_parser() {
 			}
 		}
 
-		if ((_action._activeAction._verbId == 0x168) || (_action._activeAction._verbId == 0x174) ||
-			(_action._activeAction._verbId == 0x180) || (_action._activeAction._verbId == 0x169) ||
-			(_action._activeAction._verbId == 0x175) || (_action._activeAction._verbId == 0x181) ||
-			(_action._activeAction._verbId == 0x16A) || (_action._activeAction._verbId == 0x176) ||
-			(_action._activeAction._verbId == 0x182) || (_action._activeAction._verbId == 0x183) ||
-			(_action._activeAction._verbId == 0x167) || (_action._activeAction._verbId == 0x173) ||
-			(_action._activeAction._verbId == 0x17F)) {
+		if ((player2.words[0] == 0x168) || (player2.words[0] == 0x174) ||
+			(player2.words[0] == 0x180) || (player2.words[0] == 0x169) ||
+			(player2.words[0] == 0x175) || (player2.words[0] == 0x181) ||
+			(player2.words[0] == 0x16A) || (player2.words[0] == 0x176) ||
+			(player2.words[0] == 0x182) || (player2.words[0] == 0x183) ||
+			(player2.words[0] == 0x167) || (player2.words[0] == 0x173) ||
+			(player2.words[0] == 0x17F)) {
 
-			bool addDialogLine = !((_action._activeAction._verbId == 0x167) || (_action._activeAction._verbId == 0x173) ||
-				(_action._activeAction._verbId == 0x17F) || (_action._activeAction._verbId == 0x16A) ||
-				(_action._activeAction._verbId == 0x176) || (_action._activeAction._verbId == 0x182) ||
-				(_action._activeAction._verbId == 0x183));
+			bool addDialogLine = !((player2.words[0] == 0x167) || (player2.words[0] == 0x173) ||
+				(player2.words[0] == 0x17F) || (player2.words[0] == 0x16A) ||
+				(player2.words[0] == 0x176) || (player2.words[0] == 0x182) ||
+				(player2.words[0] == 0x183));
 
-			int addVerbId = _action._activeAction._verbId + 1;
+			int addVerbId = player2.words[0] + 1;
 			if ((addVerbId == 0x182) && (config_file.naughtiness != STORYMODE_NAUGHTY))
 				addVerbId = 0x183;
 
@@ -456,10 +456,10 @@ static void room_319_parser() {
 				} else {
 					Dialog *curDialog;
 					int nextDocQuote;
-					if ((_action._activeAction._verbId == 0x168) || (_action._activeAction._verbId == 0x167)) {
+					if ((player2.words[0] == 0x168) || (player2.words[0] == 0x167)) {
 						curDialog = &local._dialog1;
 						nextDocQuote = 0x161;
-					} else if ((_action._activeAction._verbId == 0x174) || (_action._activeAction._verbId == 0x1753)) {
+					} else if ((player2.words[0] == 0x174) || (player2.words[0] == 0x1753)) {
 						nextDocQuote = 0x16D;
 						curDialog = &local._dialog2;
 					} else {
@@ -469,7 +469,7 @@ static void room_319_parser() {
 
 					handleSlacheDialogs(nextDocQuote, 2, INDEFINITE_TIMEOUT);
 					if (addDialogLine) {
-						curDialog->write(_action._activeAction._verbId, false);
+						curDialog->write(player2.words[0], false);
 						curDialog->write(addVerbId, true);
 					}
 
@@ -488,10 +488,10 @@ static void room_319_parser() {
 				} else {
 					Dialog *curDialog;
 					int nextDocQuote;
-					if ((_action._activeAction._verbId == 0x168) || (_action._activeAction._verbId == 0x169) || (_action._activeAction._verbId == 0x167)) {
+					if ((player2.words[0] == 0x168) || (player2.words[0] == 0x169) || (player2.words[0] == 0x167)) {
 						curDialog = &local._dialog1;
 						nextDocQuote = 0x163;
-					} else if ((_action._activeAction._verbId == 0x174) || (_action._activeAction._verbId == 0x175) || (_action._activeAction._verbId == 0x173)) {
+					} else if ((player2.words[0] == 0x174) || (player2.words[0] == 0x175) || (player2.words[0] == 0x173)) {
 						nextDocQuote = 0x16F;
 						curDialog = &local._dialog2;
 					} else {
@@ -501,7 +501,7 @@ static void room_319_parser() {
 
 					handleSlacheDialogs(nextDocQuote, 2, INDEFINITE_TIMEOUT);
 					if (addDialogLine) {
-						curDialog->write(_action._activeAction._verbId, false);
+						curDialog->write(player2.words[0], false);
 						curDialog->write(addVerbId, true);
 					}
 
@@ -516,7 +516,7 @@ static void room_319_parser() {
 		}
 	}
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_319_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index 59db8cceafa..f812ad347f8 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -95,7 +95,7 @@ static void setLeftView(int view) {
 }
 
 static void handleButtons() {
-	switch (_action._activeAction._objectNameId) {
+	switch (player2.words[1]) {
 	case 0x2DD:
 		local._buttonId = 5;
 		break;
@@ -237,7 +237,7 @@ static void room_320_daemon() {
 }
 
 static void room_320_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(32011);
 	else if ((player_said_1(press) || player_said_1(push)) &&
 		(player_said_1(left_1_key) || player_said_1(left_2_key) || player_said_1(left_3_key) || player_said_1(left_4_key) ||
@@ -344,7 +344,7 @@ static void room_320_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_320_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room322.cpp b/engines/mads/nebular/rooms/room322.cpp
index 2efcd372e5d..30ab74a093a 100644
--- a/engines/mads/nebular/rooms/room322.cpp
+++ b/engines/mads/nebular/rooms/room322.cpp
@@ -52,14 +52,14 @@ static void room_322_daemon() {
 }
 
 static void room_322_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		text_show(32214);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (teleporter_parser()) {
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -82,7 +82,7 @@ static void room_322_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_322_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index bdcbc84256d..347141cceb9 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -115,7 +115,7 @@ static void room_351_daemon() {
 }
 
 static void room_351_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(35121);
 	else if (player_said_2(step_into, teleporter))
 		_scene->_nextSceneId = 322;
@@ -184,7 +184,7 @@ static void room_351_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_351_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index fc50e57ee40..eb16668ef8a 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -241,9 +241,9 @@ static void room_352_pre_parser() {
 }
 
 static void room_352_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		text_show(35225);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -298,7 +298,7 @@ static void room_352_parser() {
 				break;
 			}
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -325,7 +325,7 @@ static void room_352_parser() {
 		else
 			_scene->_nextSceneId = 351;
 
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -363,7 +363,7 @@ static void room_352_parser() {
 			default:
 				break;
 			}
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	}
@@ -548,11 +548,11 @@ static void room_352_parser() {
 		text_show(35213);
 	else if (player_said_2(look, statue))
 		text_show(35214);
-	else if (player_said_2(look, tape_player) && (_action._savedFields._mainObjectSource == 4))
+	else if (player_said_2(look, tape_player) && (player.main_object_source == 4))
 		text_show(35215);
 	else if (player_said_2(look, air_vent))
 		text_show(35216);
-	else if (player_said_2(look, guards_arm2) && (_action._savedFields._mainObjectSource == 4))
+	else if (player_said_2(look, guards_arm2) && (player.main_object_source == 4))
 		text_show(35217);
 	else if (player_said_2(look, ironing_board))
 		text_show(35218);
@@ -588,7 +588,7 @@ static void room_352_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_352_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index d6d2f715393..b1243560e22 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -56,7 +56,7 @@ static void room_353_init() {
 }
 
 static void room_353_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(35315);
 	else if (player_said_2(walk_through, doorway))
 		_scene->_nextSceneId = 352;
@@ -81,7 +81,7 @@ static void room_353_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_353_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room354.cpp b/engines/mads/nebular/rooms/room354.cpp
index 778e463ce20..86bab53ebf9 100644
--- a/engines/mads/nebular/rooms/room354.cpp
+++ b/engines/mads/nebular/rooms/room354.cpp
@@ -67,7 +67,7 @@ static void room_354_pre_parser() {
 }
 
 static void room_354_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(35414);
 	else if (player_said_2(walk_down, corridor_to_north)) {
 		player_start_walking(208, 0, FACING_NORTHEAST);
@@ -101,7 +101,7 @@ static void room_354_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_354_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index 5df6cc26b0c..b2ce2be74a4 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -63,7 +63,7 @@ static void room_357_pre_parser() {
 }
 
 static void room_357_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(35715);
 	else if (player_said_2(look, air_vent))
 		text_show(35710);
@@ -94,7 +94,7 @@ static void room_357_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_357_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index abb3ee39c2d..4cf16565b70 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -58,7 +58,7 @@ static void room_358_pre_parser() {
 }
 
 static void room_358_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(35815);
 	else if (player_said_2(look, corridor_to_west))
 		text_show(35810);
@@ -77,7 +77,7 @@ static void room_358_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_358_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index a597020bd73..cf207a8bc32 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -78,7 +78,7 @@ static void room_359_pre_parser() {
 }
 
 static void room_359_parser() {
-	if (_action._lookFlag) {
+	if (player.look_around) {
 		if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 			text_show(35914);
 		else
@@ -143,7 +143,7 @@ static void room_359_parser() {
 		text_show(35918);
 	else if (player_said_2(take, limb))
 		text_show(35919);
-	else if (player_said_2(look, security_card) && (_action._mainObjectSource == CAT_HOTSPOT))
+	else if (player_said_2(look, security_card) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(35921);
 	else if (player_said_2(look, blood_stain)) {
 		if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
@@ -168,7 +168,7 @@ static void room_359_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_359_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index ecf74691f3b..4668fe8867a 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -58,7 +58,7 @@ static void room_360_pre_parser() {
 }
 
 static void room_360_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(36015);
 	else if (player_said_2(look, corridor_to_west))
 		text_show(36010);
@@ -79,7 +79,7 @@ static void room_360_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_360_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 8705fe3a408..29b06959f1c 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -385,7 +385,7 @@ static void room_361_pre_parser() {
 }
 
 static void room_361_parser() {
-	if (_action._lookFlag)
+	if (player.look_around)
 		text_show(36119);
 	else if (player_said_2(sit_at, desk)) {
 		_scene->_kernelMessages.reset();
@@ -418,7 +418,7 @@ static void room_361_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_361_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room366.cpp b/engines/mads/nebular/rooms/room366.cpp
index fd729f34636..4408980accf 100644
--- a/engines/mads/nebular/rooms/room366.cpp
+++ b/engines/mads/nebular/rooms/room366.cpp
@@ -55,7 +55,7 @@ static void room_366_parser() {
 		return;
 	}
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_366_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room387.cpp b/engines/mads/nebular/rooms/room387.cpp
index 77c5d3f3c61..d2e208a2fbb 100644
--- a/engines/mads/nebular/rooms/room387.cpp
+++ b/engines/mads/nebular/rooms/room387.cpp
@@ -48,7 +48,7 @@ static void room_387_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_387_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 6eb34dab8e4..3d37e230469 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -85,7 +85,7 @@ static void room_388_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_388_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index 2cfa15ca7b2..3565466e68c 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -110,7 +110,7 @@ static void room_389_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_389_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room390.cpp b/engines/mads/nebular/rooms/room390.cpp
index 56d66a90978..81e78a40a59 100644
--- a/engines/mads/nebular/rooms/room390.cpp
+++ b/engines/mads/nebular/rooms/room390.cpp
@@ -48,7 +48,7 @@ static void room_390_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_390_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index af39ec20e96..ba13e0b0052 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -60,7 +60,7 @@ static void room_391_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_391_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index 4f01c616a12..90109d90f41 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -56,7 +56,7 @@ static void room_399_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_399_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index b77d426a5c6..8f4016f9a09 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -163,12 +163,12 @@ static void room_401_parser() {
 		text_show(40114);
 	else if (player_said_2(look, corridor_to_north))
 		text_show(40115);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(40116);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_401_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index fb0eaf58fb4..4bd453b40da 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -118,7 +118,7 @@ static void setDialogNode(int node) {
 }
 
 static void handleConversation1() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x214:
 	{
 		int quoteId = 0;
@@ -179,7 +179,7 @@ static void handleConversation1() {
 }
 
 static void handleConversation2() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x216:
 		local._dialog2.write(0x216, false);
 		local._dialog2.write(0x21D, true);
@@ -245,7 +245,7 @@ static void handleConversation2() {
 
 	}
 
-	if (_action._activeAction._verbId != 0x21C) {
+	if (player2.words[0] != 0x21C) {
 		switch (g_engine->getRandomNumber(1, 3)) {
 		case 1:
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
@@ -290,7 +290,7 @@ static void handleConversation2() {
 }
 
 static void handleConversation3() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x233:
 	case 0x234:
 	case 0x235:
@@ -319,7 +319,7 @@ static void handleConversation3() {
 }
 
 static void handleConversation4() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x238:
 		_scene->_kernelMessages.reset();
 		setDialogNode(0);
@@ -401,7 +401,7 @@ static void handleDialogs() {
 	if (kernel.trigger == 0) {
 		_scene->_kernelMessages.reset();
 		player.commands_allowed = false;
-		const char *curQuote = quote_string(kernel.quotes, _action._activeAction._verbId);
+		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
 		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
 			static char subQuote1[34], subQuote2[34];
 			quote_split_string(curQuote, subQuote1, subQuote2);
@@ -2136,7 +2136,7 @@ static void room_402_parser() {
 		text_show(40218);
 	else if (player_said_2(look, corridor_to_south))
 		text_show(40219);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(40220);
 	else if (player_said_2(look, women))
 		text_show(40221);
@@ -2179,7 +2179,7 @@ static void room_402_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_402_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index 145a748f279..c0aa47e5c72 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -179,7 +179,7 @@ static void room_405_parser() {
 		text_show(40517);
 	else if (player_said_2(look, monitor))
 		text_show(40518);
-	else if (player_said_2(look, corridor) || _action._lookFlag)
+	else if (player_said_2(look, corridor) || player.look_around)
 		text_show(40519);
 	else if (player_said_2(look, wide_door)) {
 		if (_globals[kArmoryDoorOpen])
@@ -195,7 +195,7 @@ static void room_405_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_405_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index a11c9e8f1ea..e93ad6a1597 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -212,7 +212,7 @@ static void room_406_parser() {
 		text_show(40616);
 	else if (player_said_2(look, corridor_to_west))
 		text_show(40617);
-	else if (player_said_2(look, corridor) || _action._lookFlag)
+	else if (player_said_2(look, corridor) || player.look_around)
 		text_show(40618);
 	else if (player_said_2(look, wall))
 		text_show(40619);
@@ -238,7 +238,7 @@ static void room_406_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_406_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room407.cpp b/engines/mads/nebular/rooms/room407.cpp
index a9f73bf547e..c01a05389af 100644
--- a/engines/mads/nebular/rooms/room407.cpp
+++ b/engines/mads/nebular/rooms/room407.cpp
@@ -137,12 +137,12 @@ static void room_407_parser() {
 		text_show(40713);
 	else if (player_said_2(look, corridor_to_north))
 		text_show(40714);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(40715);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_407_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index 13aed599792..999d0c58d70 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -163,7 +163,7 @@ static void room_408_parser() {
 		text_show(40843);
 	else if (player_said_2(look, corridor_to_south))
 		text_show(40844);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(40845);
 	else if (player_said_2(look, target_module) && object_is_here(OBJ_TARGET_MODULE))
 		text_show(40846);
@@ -174,7 +174,7 @@ static void room_408_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_408_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room409.cpp b/engines/mads/nebular/rooms/room409.cpp
index e14b8fc3a71..78bf611b6e2 100644
--- a/engines/mads/nebular/rooms/room409.cpp
+++ b/engines/mads/nebular/rooms/room409.cpp
@@ -44,7 +44,7 @@ static void room_409_daemon() {
 
 static void room_409_parser() {
 	if (teleporter_parser()) {
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -67,12 +67,12 @@ static void room_409_parser() {
 		text_show(40913);
 	else if (player_said_2(look, device))
 		text_show(40914);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(40914);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_409_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index a04ded9bad6..58ef6128e69 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -179,12 +179,12 @@ static void room_410_parser() {
 		text_show(41030);
 	else if (player_said_2(throw, rat))
 		text_show(41031);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(41033);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_410_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index 7225e1d6a75..f91463d190d 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -115,7 +115,7 @@ static int computeQuoteAndQuantity() {
 	int quoteId;
 	int quantity;
 
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x252:
 		quoteId = 0x26F;
 		quantity = 0;
@@ -229,7 +229,7 @@ static void handleKettleAction() {
 }
 
 static void handleDialog() {
-	if ((_action._activeAction._verbId != 0x262) && (kernel.trigger == 0)) {
+	if ((player2.words[0] != 0x262) && (kernel.trigger == 0)) {
 		if (player_has(local._newIngredient)) {
 			switch (local._newIngredient) {
 			case OBJ_FORMALDEHYDE:
@@ -266,7 +266,7 @@ static void handleDialog() {
 			local._killRox = true;
 
 		_scene->_userInterface.setup(kInputBuildingSentences);
-	} else if (_action._activeAction._verbId == 0x262)
+	} else if (player2.words[0] == 0x262)
 		_scene->_userInterface.setup(kInputBuildingSentences);
 }
 
@@ -523,14 +523,14 @@ static void room_411_pre_parser() {
 static void room_411_parser() {
 	if (inter_input_mode == kInputConversation) {
 		handleDialog();
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(walk_into, corridor_to_south)) {
 		_scene->_nextSceneId = 406;
 		g_engine->_soundManager->command(10, 0);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -584,11 +584,11 @@ static void room_411_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	} else if (!player_has(OBJ_CHARGE_CASES) && player_said_2(take, explosives)) {
 		text_show(41143);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -625,7 +625,7 @@ static void room_411_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -661,7 +661,7 @@ static void room_411_parser() {
 		default:
 			break;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -674,7 +674,7 @@ static void room_411_parser() {
 		_scene->_sequences.addTimer(20, 100);
 		_scene->_sequences.remove(_globals._sequenceIndexes[7]);
 		inter_give_to_player(OBJ_FORMALDEHYDE);
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -694,7 +694,7 @@ static void room_411_parser() {
 			player_said_1(formaldehyde) ||
 			player_said_1(lecithin) ||
 			player_said_1(alien_liquor)) {
-			local._newIngredient = object_named(_action._activeAction._objectNameId);
+			local._newIngredient = object_named(player2.words[1]);
 			switch (local._newIngredient) {
 			case OBJ_ALIEN_LIQUOR:
 				local._dialog1.start();
@@ -761,7 +761,7 @@ static void room_411_parser() {
 		text_show(41130);
 	else if (player_said_2(look, corridor_to_south))
 		text_show(41131);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(41132);
 	else if (player_said_2(look, air_horn))
 		text_show(41133);
@@ -784,7 +784,7 @@ static void room_411_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_411_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index 840136fab3b..3ff9c9da457 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -173,12 +173,12 @@ static void room_413_parser() {
 		text_show(41318);
 	else if (player_said_2(take, plant))
 		text_show(41319);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(41320);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_413_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 3c71e61212e..989181148c7 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -368,7 +368,7 @@ static void room_501_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag || player_said_2(look, street))
+	} else if (player.look_around || player_said_2(look, street))
 		text_show(50121);
 	else if (player_said_2(look, door))
 		text_show(50110);
@@ -403,7 +403,7 @@ static void room_501_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_501_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room502.cpp b/engines/mads/nebular/rooms/room502.cpp
index 802b3d00e61..118f2cc7c4d 100644
--- a/engines/mads/nebular/rooms/room502.cpp
+++ b/engines/mads/nebular/rooms/room502.cpp
@@ -56,7 +56,7 @@ static void room_502_daemon() {
 
 static void room_502_parser() {
 	if (teleporter_parser()) {
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -74,12 +74,12 @@ static void room_502_parser() {
 		|| player_said_2(look, smile_key) || player_said_2(look, enter_key)
 		|| player_said_2(look, frown_key))
 		text_show(50213);
-	else if (player_said_2(look, device) || _action._lookFlag)
+	else if (player_said_2(look, device) || player.look_around)
 		text_show(50214);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_502_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index c407b3eedfb..001c5e68c80 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -108,7 +108,7 @@ static void room_503_parser() {
 				break;
 			}
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(50328);
 	else if (player_said_2(look, monitoring_equipment))
 		text_show(50310);
@@ -139,18 +139,18 @@ static void room_503_parser() {
 			text_show(50323);
 		else
 			text_show(50324);
-	} else if (player_said_2(look, detonators) && (_action._savedFields._mainObjectSource == 4))
+	} else if (player_said_2(look, detonators) && (player.main_object_source == 4))
 		text_show(50325);
 	else if (player_said_2(look, windows))
 		text_show(50327);
 	else if (player_said_2(open, display_case))
 		text_show(50329);
-	else if (player_said_2(throw, display_case) && player_has(object_named(_action._activeAction._objectNameId)))
+	else if (player_said_2(throw, display_case) && player_has(object_named(player2.words[1])))
 		text_show(50330);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_503_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index 0fa486dd3dc..da6ae420672 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -203,7 +203,7 @@ static void room_504_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag || player_said_2(look, interior_of_car))
+	} else if (player.look_around || player_said_2(look, interior_of_car))
 		text_show(50412);
 	else if (player_said_2(look, glove_compartment))
 		text_show(50410);
@@ -228,7 +228,7 @@ static void room_504_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_504_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room505.cpp b/engines/mads/nebular/rooms/room505.cpp
index 39974469da3..87c539e084c 100644
--- a/engines/mads/nebular/rooms/room505.cpp
+++ b/engines/mads/nebular/rooms/room505.cpp
@@ -280,7 +280,7 @@ static void room_505_daemon() {
 
 static void room_505_parser() {
 	if (player_said_1(press))
-		local._nextButtonId = _action._activeAction._objectNameId;
+		local._nextButtonId = player2.words[1];
 	else if (player_said_2(return_to, inside_of_car))
 		_scene->_nextSceneId = 504;
 	else if (player_said_2(look, view_screen))
@@ -290,7 +290,7 @@ static void room_505_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_505_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index bd5afee3aae..d2a47ca4e99 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -287,7 +287,7 @@ static void room_506_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag || player_said_2(look, street))
+	} else if (player.look_around || player_said_2(look, street))
 		text_show(50618);
 	else if (player_said_2(look, restaurant))
 		text_show(50610);
@@ -314,7 +314,7 @@ static void room_506_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_506_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room507.cpp b/engines/mads/nebular/rooms/room507.cpp
index d34f562ba32..feed7e9aec1 100644
--- a/engines/mads/nebular/rooms/room507.cpp
+++ b/engines/mads/nebular/rooms/room507.cpp
@@ -92,7 +92,7 @@ static void room_507_parser() {
 				break;
 			}
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(50722);
 	else if (player_said_2(look, swirling_light))
 		text_show(50710);
@@ -142,7 +142,7 @@ static void room_507_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_507_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index fe7aa5132e3..3ccc5f971ae 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -231,7 +231,7 @@ static void room_508_parser() {
 	} else if (player_said_3(put, compact_case, pedestal) || player_said_3(put, compact_case, laser_beam) || player_said_3(reflect, compact_case, laser_beam)) {
 		local._chosenObject = 2;
 		handlePedestral();
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(50822);
 	else if (player_said_2(look, target_area))
 		text_show(50810);
@@ -288,7 +288,7 @@ static void room_508_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_508_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index 7e31860b09d..0677b5b3f9b 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -305,7 +305,7 @@ static void room_511_parser() {
 				}
 			}
 		}
-	} else if (player_said_2(look, street) || _action._lookFlag) {
+	} else if (player_said_2(look, street) || player.look_around) {
 		if (_globals[kLineStatus] == 2)
 			text_show(51110);
 		else {
@@ -339,9 +339,9 @@ static void room_511_parser() {
 			text_show(51128);
 	} else if (player_said_2(look, porthole))
 		text_show(51122);
-	else if (player_said_2(look, fishing_line) && (_action._mainObjectSource == CAT_HOTSPOT) && (_globals[kLineStatus] == 2))
+	else if (player_said_2(look, fishing_line) && (player.main_object_source == CAT_HOTSPOT) && (_globals[kLineStatus] == 2))
 		text_show(51126);
-	else if (player_said_2(look, fishing_line) && (_action._mainObjectSource == CAT_HOTSPOT) && (_globals[kLineStatus] == 3))
+	else if (player_said_2(look, fishing_line) && (player.main_object_source == CAT_HOTSPOT) && (_globals[kLineStatus] == 3))
 		text_show(51133);
 	else if (player_said_2(look, statue))
 		text_show(51127);
@@ -357,7 +357,7 @@ static void room_511_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_511_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index 3070df56745..5f0ec67baf6 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -268,7 +268,7 @@ static void room_512_parser() {
 				break;
 			}
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(51225);
 	else if (player_said_2(look, padlock_key) && object_is_here(OBJ_PADLOCK_KEY))
 		text_show(51215);
@@ -324,7 +324,7 @@ static void room_512_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_512_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index 194e3b3c7ff..fe86b1383fc 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -218,7 +218,7 @@ static void room_513_parser() {
 		default:
 			break;
 		}
-	} else if ((_action._lookFlag) || player_said_2(look, street))
+	} else if ((player.look_around) || player_said_2(look, street))
 		text_show(51318);
 	else if (player_said_2(look, elevator))
 		text_show(51310);
@@ -247,7 +247,7 @@ static void room_513_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_513_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room551.cpp b/engines/mads/nebular/rooms/room551.cpp
index 555d62cdf8c..f3dcf843d95 100644
--- a/engines/mads/nebular/rooms/room551.cpp
+++ b/engines/mads/nebular/rooms/room551.cpp
@@ -139,7 +139,7 @@ static void room_551_pre_parser() {
 static void room_551_parser() {
 	if (player_said_2(step_into, teleporter))
 		_scene->_nextSceneId = 502;
-	else if ((_action._lookFlag))
+	else if ((player.look_around))
 		text_show(55117);
 	else if (player_said_2(look, skeleton))
 		text_show(55110);
@@ -165,7 +165,7 @@ static void room_551_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_551_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index b6178a45993..5c0defbe720 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -131,7 +131,7 @@ static void room_601_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag || player_said_2(look, street)) {
+	} else if (player.look_around || player_said_2(look, street)) {
 		if (!_globals[kLaserHoleIsThere])
 			text_show(60110);
 		else
@@ -157,7 +157,7 @@ static void room_601_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_601_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index e67734b9989..16675ec58e8 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -288,7 +288,7 @@ static void room_602_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(60210);
 	else if (player_said_2(look, floor))
 		text_show(60211);
@@ -330,7 +330,7 @@ static void room_602_parser() {
 		text_show(60225);
 	else if (player_said_2(pull, safe))
 		text_show(60226);
-	else if (player_said_2(put, fireplace) && player_has(object_named(_action._activeAction._objectNameId)))
+	else if (player_said_2(put, fireplace) && player_has(object_named(player2.words[1])))
 		text_show(60227);
 	else if (player_said_2(look, hole))
 		text_show(60228);
@@ -345,7 +345,7 @@ static void room_602_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_602_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room603.cpp b/engines/mads/nebular/rooms/room603.cpp
index 38da4891c32..553d8c2630f 100644
--- a/engines/mads/nebular/rooms/room603.cpp
+++ b/engines/mads/nebular/rooms/room603.cpp
@@ -120,7 +120,7 @@ static void room_603_parser() {
 			}
 		} else
 			text_show(60323);
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(60310);
 	else if (player_said_2(look, bed))
 		text_show(60311);
@@ -159,7 +159,7 @@ static void room_603_parser() {
 			text_show(60327);
 		else
 			text_show(60328);
-	} else if (player_said_2(look, compact_case) && (_action._mainObjectSource == CAT_HOTSPOT))
+	} else if (player_said_2(look, compact_case) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(60329);
 	// For the next two checks, the second part of the check wasn't surrounded par parenthesis, which was obviously wrong
 	else if (player_said_1(look) && (player_said_1(bra) || player_said_1(boa) || player_said_1(slip)))
@@ -169,7 +169,7 @@ static void room_603_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_603_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index 5931db9f756..ece3c1fca98 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -285,7 +285,7 @@ static void room_604_parser() {
 			local._bombMode = 2;
 			handleBombActions();
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(60411);
 	else if (player_said_2(look, viewport)) {
 		if (local._monsterActive) {
@@ -308,7 +308,7 @@ static void room_604_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_604_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index 659b94a093d..5cc284940b4 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -428,7 +428,7 @@ static void room_607_parser() {
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2F6));
 		}
 		handleThrowingBone();
-	} else if (_action._lookFlag || player_said_2(look, street)) {
+	} else if (player.look_around || player_said_2(look, street)) {
 		if ((_globals[kDogStatus] == DOG_PRESENT) || (game.difficulty == DIFFICULTY_EASY))
 			text_show(60710);
 		else
@@ -476,7 +476,7 @@ static void room_607_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_607_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index 97e073312f2..c76dc22ab35 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -927,7 +927,7 @@ static void room_608_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag) {
+	} else if (player.look_around) {
 		if (game.difficulty != DIFFICULTY_HARD)
 			text_show(60810);
 		else if (_globals[kDogStatus] == DOG_DEAD)
@@ -967,7 +967,7 @@ static void room_608_parser() {
 			text_show(60824);
 	} else if (player_said_2(open, storage_box))
 		text_show(60826);
-	else if (player_said_2(look, rearview_mirror) && (_action._mainObjectSource == CAT_HOTSPOT))
+	else if (player_said_2(look, rearview_mirror) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(60828);
 	else if (player_said_2(look, tool_box)) {
 		if (object[OBJ_POLYCEMENT].location == _scene->_currentSceneId)
@@ -989,7 +989,7 @@ static void room_608_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_608_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index e9c7673a8bf..553fa894c3f 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -330,7 +330,7 @@ static void room_609_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(60910);
 	else if (player_said_2(look, street))
 		text_show(60911);
@@ -356,7 +356,7 @@ static void room_609_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_609_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room610.cpp b/engines/mads/nebular/rooms/room610.cpp
index cfedfccee38..94195094e1c 100644
--- a/engines/mads/nebular/rooms/room610.cpp
+++ b/engines/mads/nebular/rooms/room610.cpp
@@ -173,7 +173,7 @@ static void room_610_parser() {
 		text_show(61013);
 	else if (player_said_2(look, video_store))
 		text_show(61014);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(61015);
 	else if (player_said_2(look, logo))
 		text_show(61018);
@@ -192,14 +192,14 @@ static void room_610_parser() {
 		text_show(61024);
 	else if (player_said_2(look, spotlight))
 		text_show(61025);
-	else if (player_said_2(look, phone_handset) && (_action._mainObjectSource == CAT_HOTSPOT))
+	else if (player_said_2(look, phone_handset) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(61026);
 	else if (player_said_2(look, phone_cradle))
 		text_show(61027);
 	else if (player_said_2(look, return_slot))
 		text_show(61028);
 	else if (player_said_2(put, return_slot)
-		&& player_has(object_named(_action._activeAction._objectNameId)))
+		&& player_has(object_named(player2.words[1])))
 		text_show(61029);
 	else if (player_said_1(classic_videos) || player_said_1(more_classic_videos) || player_said_1(drama_videos)
 		|| player_said_1(new_release_videos) || player_said_1(porno_videos) || player_said_1(educational_videos)
@@ -214,7 +214,7 @@ static void room_610_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_610_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index 40d3c0ee570..cdc0fcd0920 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -619,7 +619,7 @@ static void displayHermitQuestions(int question) {
 }
 
 static void handleSubDialog1() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x287:
 		local._stickFingerFl = true;
 		local._nextFrame = 34;
@@ -833,7 +833,7 @@ static void handleSubDialog1() {
 }
 
 static void handleSubDialog2() {
-	switch (_action._activeAction._verbId) {
+	switch (player2.words[0]) {
 	case 0x29C:
 		displayHermitQuestions(7);
 		setDialogNode(1);
@@ -874,7 +874,7 @@ static void handleDialog() {
 		_scene->_kernelMessages.reset();
 		player.commands_allowed = false;
 
-		const char *curQuote = quote_string(kernel.quotes, _action._activeAction._verbId);
+		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
 		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
 
 		if (width > 200) {
@@ -882,9 +882,9 @@ static void handleDialog() {
 			quote_split_string(curQuote, subQuote1, subQuote2);
 			_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 150, subQuote1);
 
-			if (_action._activeAction._verbId == 0x29D)
+			if (player2.words[0] == 0x29D)
 				_scene->_kernelMessages.add(Common::Point(-18, 0), 0x1110, 34, 1, 150, subQuote2);
-			else if (_action._activeAction._verbId == 0x28A)
+			else if (player2.words[0] == 0x28A)
 				_scene->_kernelMessages.add(Common::Point(-10, 0), 0x1110, 34, 1, 150, subQuote2);
 			else
 				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 150, subQuote2);
@@ -1344,7 +1344,7 @@ static void room_611_parser() {
 	if (inter_input_mode == kInputConversation)
 		handleDialog();
 	else if ((player_said_3(give, phone_cells, hermit)) || (player_said_3(give, durafail_cells, hermit))) {
-		_action._activeAction._verbId = 0x294;
+		player2.words[0] = 0x294;
 		local._giveBatteriesFl = true;
 		handleSubDialog1();
 	} else if (player_said_2(give, hermit)) {
@@ -1428,7 +1428,7 @@ static void room_611_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag) {
+	} else if (player.look_around) {
 		if (_globals[kHasTalkedToHermit])
 			text_show(61111);
 		else
@@ -1460,7 +1460,7 @@ static void room_611_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_611_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index b282d128bf7..04978080167 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -205,7 +205,7 @@ static void room_612_parser() {
 		local._cycleIndex = -2;
 		local._actionMode = 1;
 		handleWinchMovement();
-	} else if (_action._lookFlag || player_said_2(look, expressway))
+	} else if (player.look_around || player_said_2(look, expressway))
 		text_show(61210);
 	else if (player_said_2(look, rope) || player_said_2(look, armature)) {
 		if (_globals[kBoatRaised])
@@ -240,7 +240,7 @@ static void room_612_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_612_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index c5d12d14726..55412ba84c8 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -343,7 +343,7 @@ static void room_701_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag) {
+	} else if (player.look_around) {
 		if (_globals[kBoatStatus] != BOAT_GONE) {
 			if (_globals[kBoatStatus] == BOAT_TIED)
 				text_show(70128);
@@ -382,7 +382,7 @@ static void room_701_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_701_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room702.cpp b/engines/mads/nebular/rooms/room702.cpp
index 4243ef7f670..1aeed6ceca6 100644
--- a/engines/mads/nebular/rooms/room702.cpp
+++ b/engines/mads/nebular/rooms/room702.cpp
@@ -76,7 +76,7 @@ static void room_702_parser() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		_scene->_nextSceneId = 711;
-	} else if (player_said_2(take, bones) && (_action._mainObjectSource == CAT_HOTSPOT) && (!player_has(OBJ_BONES) || kernel.trigger)) {
+	} else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT) && (!player_has(OBJ_BONES) || kernel.trigger)) {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
@@ -101,7 +101,7 @@ static void room_702_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag)
+	} else if (player.look_around)
 		text_show(70210);
 	else if (player_said_2(look, platform))
 		text_show(70211);
@@ -115,9 +115,9 @@ static void room_702_parser() {
 		text_show(70215);
 	else if (player_said_2(look, teleporter))
 		text_show(70216);
-	else if (player_said_2(look, bones) && (_action._mainObjectSource == CAT_HOTSPOT))
+	else if (player_said_2(look, bones) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(70217);
-	else if (player_said_2(take, bones) && (_action._mainObjectSource == CAT_HOTSPOT)) {
+	else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT)) {
 		if (player_has(OBJ_BONES))
 			text_show(70219);
 	} else if (player_said_2(look, submerged_city))
@@ -125,7 +125,7 @@ static void room_702_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_702_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room703.cpp b/engines/mads/nebular/rooms/room703.cpp
index e413787d22b..f0f4864a804 100644
--- a/engines/mads/nebular/rooms/room703.cpp
+++ b/engines/mads/nebular/rooms/room703.cpp
@@ -491,7 +491,7 @@ static void room_703_daemon() {
 
 static void room_703_parser() {
 	if (inter_input_mode == kInputConversation)
-		handleFillBottle(_action._activeAction._verbId);
+		handleFillBottle(player2.words[0]);
 	else if (player_said_2(steer_towards, dock_to_south)) {
 		player.commands_allowed = false;
 		if (_globals[kMonsterAlive])
@@ -548,7 +548,7 @@ static void room_703_parser() {
 			local._dialog1.start();
 		} else
 			text_show(70323);
-	} else if (_action._lookFlag || player_said_2(look, sea_monster)) {
+	} else if (player.look_around || player_said_2(look, sea_monster)) {
 		if (_globals[kMonsterAlive])
 			text_show(70310);
 	} else if (player_said_2(look, water)) {
@@ -568,7 +568,7 @@ static void room_703_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_703_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index 80e3e2894ef..51a32f0d3f9 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -321,7 +321,7 @@ static void room_704_daemon() {
 
 static void room_704_parser() {
 	if (inter_input_mode == kInputConversation)
-		handleFillBottle(_action._activeAction._verbId);
+		handleFillBottle(player2.words[0]);
 	else if (player_said_2(steer_towards, open_water_to_south)) {
 		player.commands_allowed = false;
 		if (local._boatDirection == 1)
@@ -353,7 +353,7 @@ static void room_704_parser() {
 			} else
 				text_show(70323);
 		}
-	} else if (_action._lookFlag || player_said_2(look, water))
+	} else if (player.look_around || player_said_2(look, water))
 		text_show(70410);
 	else if (player_said_2(look, building_to_north)) {
 		if (player_has_been_in_room(710))
@@ -362,7 +362,7 @@ static void room_704_parser() {
 			text_show(70412);
 	} else if (player_said_2(look, volcano_rim))
 		text_show(70413);
-	else if (player_said_2(look, bottle) && (_action._mainObjectSource == CAT_HOTSPOT))
+	else if (player_said_2(look, bottle) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(70414);
 	else if (player_said_2(look, open_water_to_south))
 		text_show(70416);
@@ -371,7 +371,7 @@ static void room_704_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_704_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room705.cpp b/engines/mads/nebular/rooms/room705.cpp
index db2ac487421..4807556868e 100644
--- a/engines/mads/nebular/rooms/room705.cpp
+++ b/engines/mads/nebular/rooms/room705.cpp
@@ -227,7 +227,7 @@ static void room_705_daemon() {
 
 static void room_705_parser() {
 	if (inter_input_mode == kInputConversation)
-		handleFillBottle(_action._activeAction._verbId);
+		handleFillBottle(player2.words[0]);
 	else if (player_said_2(steer_towards, open_water_to_south)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -282,7 +282,7 @@ static void room_705_parser() {
 			local._dialog1.start();
 		} else
 			text_show(70323);
-	} else if (_action._lookFlag || player_said_2(look, water))
+	} else if (player.look_around || player_said_2(look, water))
 		text_show(70511);
 	else if (player_said_2(look, volcano_rim))
 		text_show(70512);
@@ -297,7 +297,7 @@ static void room_705_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_705_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index 21b3cae7072..6c84bf7093a 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -219,13 +219,13 @@ static void room_706_parser() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		_scene->_nextSceneId = 707;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(exit, room)) {
 		_scene->_nextSceneId = 705;
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -237,7 +237,7 @@ static void room_706_parser() {
 			handleTakeVase();
 			local._emptyPedestral = true;
 		}
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -247,26 +247,26 @@ static void room_706_parser() {
 			if (!player_has(OBJ_VASE) || kernel.trigger) {
 				local._vaseMode = 1;
 				handleTakeVase();
-				_action._inProgress = false;
+				player.command_ready = false;
 				return;
 			}
 		} else if (object_is_here(OBJ_VASE) || kernel.trigger) {
 			local._animationMode = 2;
 			handleRexDeath();
-			_action._inProgress = false;
+			player.command_ready = false;
 			return;
 		}
 	}
 
-	if (player_said_2(put, pedestal) && player_has(object_named(_action._activeAction._objectNameId))) {
-		int objectId = object_named(_action._activeAction._objectNameId);
+	if (player_said_2(put, pedestal) && player_has(object_named(player2.words[1]))) {
+		int objectId = object_named(player2.words[1]);
 		if (object_has_quality(objectId, 10))
 			text_show(70626);
 		else
 			text_show(70627);
 	} else if (player_said_2(take, bottle) && player_has(OBJ_VASE))
 		text_show(70631);
-	else if (_action._lookFlag) {
+	else if (player.look_around) {
 		if (object[OBJ_VASE].location == _scene->_currentSceneId)
 			text_show(70610);
 		else
@@ -298,12 +298,12 @@ static void room_706_parser() {
 		text_show(70623);
 	else if (player_said_2(look, vase) && (object[OBJ_VASE].location == _scene->_currentSceneId))
 		text_show(70624);
-	else if (player_said_2(look, bottle) && (_action._mainObjectSource == CAT_HOTSPOT))
+	else if (player_said_2(look, bottle) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(70632);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_706_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room707.cpp b/engines/mads/nebular/rooms/room707.cpp
index acc08ea7d45..40fb1c0b24a 100644
--- a/engines/mads/nebular/rooms/room707.cpp
+++ b/engines/mads/nebular/rooms/room707.cpp
@@ -49,7 +49,7 @@ static void room_707_daemon() {
 
 static void room_707_parser() {
 	if (teleporter_parser()) {
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -67,12 +67,12 @@ static void room_707_parser() {
 		|| player_said_2(look, smile_key) || player_said_2(look, enter_key)
 		|| player_said_2(look, frown_key))
 		text_show(70713);
-	else if (player_said_2(look, device) || _action._lookFlag)
+	else if (player_said_2(look, device) || player.look_around)
 		text_show(70714);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_707_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room710.cpp b/engines/mads/nebular/rooms/room710.cpp
index 064d68e3738..0f4715f4417 100644
--- a/engines/mads/nebular/rooms/room710.cpp
+++ b/engines/mads/nebular/rooms/room710.cpp
@@ -63,7 +63,7 @@ static void room_710_parser() {
 		else
 			_scene->_nextSceneId = 751;
 
-		_action._inProgress = false;
+		player.command_ready = false;
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room711.cpp b/engines/mads/nebular/rooms/room711.cpp
index b87215d5169..0053ed2b3e5 100644
--- a/engines/mads/nebular/rooms/room711.cpp
+++ b/engines/mads/nebular/rooms/room711.cpp
@@ -53,7 +53,7 @@ static void room_711_daemon() {
 
 static void room_711_parser() {
 	if (teleporter_parser())
-		_action._inProgress = false;
+		player.command_ready = false;
 }
 
 void room_711_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room751.cpp b/engines/mads/nebular/rooms/room751.cpp
index 5caa5e4c67e..08efbc7357c 100644
--- a/engines/mads/nebular/rooms/room751.cpp
+++ b/engines/mads/nebular/rooms/room751.cpp
@@ -330,7 +330,7 @@ static void room_751_parser() {
 				break;
 			}
 		}
-	} else if (_action._lookFlag || player_said_2(look, city))
+	} else if (player.look_around || player_said_2(look, city))
 		text_show(75110);
 	else if (player_said_2(look, elevator))
 		text_show(75112);
@@ -358,7 +358,7 @@ static void room_751_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_751_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room752.cpp b/engines/mads/nebular/rooms/room752.cpp
index 199d106a129..18e0827cab1 100644
--- a/engines/mads/nebular/rooms/room752.cpp
+++ b/engines/mads/nebular/rooms/room752.cpp
@@ -141,7 +141,7 @@ static void room_752_parser() {
 		default:
 			break;
 		}
-	} else if (player_said_2(take, bones) && (_action._savedFields._mainObjectSource == CAT_HOTSPOT) &&
+	} else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT) &&
 		(!player_has(OBJ_BONES) || kernel.trigger)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -167,7 +167,7 @@ static void room_752_parser() {
 		default:
 			break;
 		}
-	} else if (_action._lookFlag || player_said_2(look, city)) {
+	} else if (player.look_around || player_said_2(look, city)) {
 		if (_globals[kLaserHoleIsThere])
 			text_show(75212);
 		else
@@ -184,18 +184,18 @@ static void room_752_parser() {
 		text_show(75217);
 	else if (player_said_2(look, teleporter))
 		text_show(75218);
-	else if ((player_said_2(look, bones) || player_said_2(look, id_card)) && (_action._mainObjectSource == CAT_HOTSPOT)) {
+	else if ((player_said_2(look, bones) || player_said_2(look, id_card)) && (player.main_object_source == CAT_HOTSPOT)) {
 		if (object[OBJ_ID_CARD].location == 752)
 			text_show(75219);
 		else
 			text_show(75220);
-	} else if (player_said_2(take, bones) && (_action._savedFields._mainObjectSource == CAT_HOTSPOT)) {
+	} else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT)) {
 		if (player_has(OBJ_BONES))
 			text_show(75222);
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_752_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room801.cpp b/engines/mads/nebular/rooms/room801.cpp
index ac98521a6e1..3cbb3d5555d 100644
--- a/engines/mads/nebular/rooms/room801.cpp
+++ b/engines/mads/nebular/rooms/room801.cpp
@@ -247,7 +247,7 @@ static void room_801_parser() {
 		text_show(80111);
 	else if (player_said_2(look, teleporter))
 		text_show(80112);
-	else if (player_said_2(look, equipment) || _action._lookFlag)
+	else if (player_said_2(look, equipment) || player.look_around)
 		text_show(80113);
 	else if (player_said_2(look, speaker))
 		text_show(80114);
@@ -260,7 +260,7 @@ static void room_801_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_801_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room802.cpp b/engines/mads/nebular/rooms/room802.cpp
index c7cefafd0f9..a89cde29050 100644
--- a/engines/mads/nebular/rooms/room802.cpp
+++ b/engines/mads/nebular/rooms/room802.cpp
@@ -194,16 +194,16 @@ static void room_802_parser() {
 			break;
 		}
 	} else if (!_globals[kRemoteOnGround] && (player_has(OBJ_SHIELD_MODULATOR) || _globals[kShieldModInstalled])
-		&& (player_said_2(look, launch_pad) || _action._lookFlag))
+		&& (player_said_2(look, launch_pad) || player.look_around))
 		text_show(80210);
 	else if (!_globals[kRemoteOnGround] && !player_has(OBJ_SHIELD_MODULATOR) && !_globals[kShieldModInstalled]
-		&& (player_said_2(look, launch_pad) || _action._lookFlag))
+		&& (player_said_2(look, launch_pad) || player.look_around))
 		text_show(80211);
 	else if (_globals[kRemoteOnGround] && !player_has(OBJ_SHIELD_MODULATOR) && !_globals[kShieldModInstalled]
-		&& (player_said_2(look, launch_pad) || _action._lookFlag))
+		&& (player_said_2(look, launch_pad) || player.look_around))
 		text_show(80213);
 	else if (_globals[kRemoteOnGround] && (player_has(OBJ_SHIELD_MODULATOR) || _globals[kShieldModInstalled])
-		&& (player_said_2(look, launch_pad) || _action._lookFlag))
+		&& (player_said_2(look, launch_pad) || player.look_around))
 		text_show(80212);
 	else if (!player_has(OBJ_SHIELD_MODULATOR) && !_globals[kShieldModInstalled] && player_said_2(look, shield_modulator))
 		text_show(80214);
@@ -229,7 +229,7 @@ static void room_802_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_802_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room803.cpp b/engines/mads/nebular/rooms/room803.cpp
index 10ec1f5e86d..867d972eff7 100644
--- a/engines/mads/nebular/rooms/room803.cpp
+++ b/engines/mads/nebular/rooms/room803.cpp
@@ -307,7 +307,7 @@ static void room_803_parser() {
 		_globals[kBeamIsUp] = false;
 	} else if (player_said_2(look, launch_pad))
 		text_show(80310);
-	else if (_action._lookFlag)
+	else if (player.look_around)
 		text_show(80310);
 	else if (player_said_2(look, pad_to_west))
 		text_show(80311);
@@ -331,7 +331,7 @@ static void room_803_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_803_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index 92b9ae4d515..014db273ea6 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -306,7 +306,7 @@ static void room_804_parser() {
 				text_show(80423);
 				player.commands_allowed = true;
 			} else {
-				_action._inProgress = false;
+				player.command_ready = false;
 
 				text_show(80424);
 				local._pullThrottleReally = true;
@@ -333,7 +333,7 @@ static void room_804_parser() {
 		}
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(2, 90);
-	} else  if (_action._lookFlag) {
+	} else  if (player.look_around) {
 		text_show(80410);
 	} else if ((player_said_2(look, window)) ||
 		(player_said_2(look_out, window))) {
@@ -367,7 +367,7 @@ static void room_804_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_804_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room805.cpp b/engines/mads/nebular/rooms/room805.cpp
index 170af8486f0..e814b1096cd 100644
--- a/engines/mads/nebular/rooms/room805.cpp
+++ b/engines/mads/nebular/rooms/room805.cpp
@@ -139,7 +139,7 @@ static void room_805_parser() {
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_805_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room807.cpp b/engines/mads/nebular/rooms/room807.cpp
index eb0f8771fae..de25e85ee79 100644
--- a/engines/mads/nebular/rooms/room807.cpp
+++ b/engines/mads/nebular/rooms/room807.cpp
@@ -48,7 +48,7 @@ static void room_807_daemon() {
 
 static void room_807_parser() {
 	if (teleporter_parser()) {
-		_action._inProgress = false;
+		player.command_ready = false;
 		return;
 	}
 
@@ -67,12 +67,12 @@ static void room_807_parser() {
 		|| player_said_2(look, 9_key) || player_said_2(look, 0_key)
 		|| player_said_2(look, smile_key) || player_said_2(look, frown_key))
 		text_show(80713);
-	else if (player_said_2(look, device) && _action._lookFlag)
+	else if (player_said_2(look, device) && player.look_around)
 		text_show(80714);
 	else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_807_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room808.cpp b/engines/mads/nebular/rooms/room808.cpp
index 48fd4b36e91..e6da81ce4c3 100644
--- a/engines/mads/nebular/rooms/room808.cpp
+++ b/engines/mads/nebular/rooms/room808.cpp
@@ -234,7 +234,7 @@ static void room_808_parser() {
 	} else
 		return;
 
-	_action._inProgress = false;
+	player.command_ready = false;
 }
 
 void room_808_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/teleporter.cpp b/engines/mads/nebular/rooms/teleporter.cpp
index 31aa47731d9..b6a9cf28425 100644
--- a/engines/mads/nebular/rooms/teleporter.cpp
+++ b/engines/mads/nebular/rooms/teleporter.cpp
@@ -276,7 +276,7 @@ bool teleporter_parser() {
 	if (player_said_1(press) || player_said_1(push)) {
 		static int _buttonList[12] = { words_0_key, words_1_key, words_2_key, words_3_key, words_4_key, words_5_key, words_6_key, words_7_key, words_8_key, words_9_key, words_smile_key, words_frown_key };
 		for (int i = 0; i < 12; i++) {
-			if (_action._activeAction._objectNameId == _buttonList[i])
+			if (player2.words[1] == _buttonList[i])
 				_buttonTyped = i;
 		}
 		teleporter_handle_key();
diff --git a/engines/mads/nebular/rooms/thunks.cpp b/engines/mads/nebular/rooms/thunks.cpp
index 2a6ee593be6..5a31a2551d2 100644
--- a/engines/mads/nebular/rooms/thunks.cpp
+++ b/engines/mads/nebular/rooms/thunks.cpp
@@ -30,7 +30,6 @@ namespace MADS {
 namespace RexNebular {
 namespace Rooms {
 
-Action _action;
 Globals _globals;
 Scene _scene;
 
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
index ef36bf7d8ed..46ba3540f19 100644
--- a/engines/mads/nebular/rooms/thunks.h
+++ b/engines/mads/nebular/rooms/thunks.h
@@ -122,27 +122,6 @@ enum StoryMode {
 #define kernel_animation_next_clock     kernel_anim[0].next_clock
 #endif
 
-struct Action {
-	struct ActiveAction {
-		int &_verbId = player2.words[0];
-		int &_objectNameId = player2.words[1];
-		int &_indirectObjectId = player2.words[2];
-	};
-	ActiveAction _activeAction;
-
-	struct SavedFields {
-		int &_lookFlag = player.look_around;
-		int &_mainObjectSource = player.main_object_source;
-	};
-	SavedFields _savedFields;
-
-	int &_mainObjectSource = player.main_object_source;
-	int &_lookFlag = player.look_around;
-	int &_inProgress = player.command_ready;
-	int &_commandSource = player.command_source;
-};
-extern Action _action;
-
 struct Globals {
 	int16 _spriteIndexes[30];
 	int16 _sequenceIndexes[30];


Commit: 32b83e620696e13c5016b3518f0eaa5f14042c4a
    https://github.com/scummvm/scummvm/commit/32b83e620696e13c5016b3518f0eaa5f14042c4a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:53+10:00

Commit Message:
MADS: NEBULAR: Refactor Globals thunk

Changed paths:
    engines/mads/nebular/global.cpp
    engines/mads/nebular/global.h
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room213.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room301.cpp
    engines/mads/nebular/rooms/room303.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room310.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room321.cpp
    engines/mads/nebular/rooms/room322.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room354.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room409.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room502.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room707.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room711.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room807.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/section1.cpp
    engines/mads/nebular/rooms/section2.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/global.cpp b/engines/mads/nebular/global.cpp
index 3f27835a1e7..ef2cdd11cbc 100644
--- a/engines/mads/nebular/global.cpp
+++ b/engines/mads/nebular/global.cpp
@@ -35,6 +35,9 @@ namespace MADS {
 namespace RexNebular {
 namespace Rooms {
 
+int16 g_sprite_ids[30];
+int16 g_sequence_ids[30];
+
 // Section preloads
 extern void section_1_preload();
 extern void section_2_preload();
diff --git a/engines/mads/nebular/global.h b/engines/mads/nebular/global.h
index 3eea86078e2..b590fd8ad07 100644
--- a/engines/mads/nebular/global.h
+++ b/engines/mads/nebular/global.h
@@ -28,6 +28,11 @@
 namespace MADS {
 namespace RexNebular {
 
+namespace Rooms {
+extern int16 g_sprite_ids[30];
+extern int16 g_sequence_ids[30];
+} // namespace Rooms
+
 enum GlobalId {
 	kSexOfRex				= 0,
 	kOldSexOfRex			= 1,
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 3857417981e..84216582efd 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -50,17 +50,17 @@ static void room_101_say_dang() {
 
 	switch (kernel.trigger) {
 	case 0:
-		_scene->_sequences.remove(_globals._sequenceIndexes[11]);
-		_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 6, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 21);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		_scene->_sequences.remove(g_sequence_ids[11]);
+		g_sequence_ids[11] = _scene->_sequences.startPingPongCycle(g_sprite_ids[11], false, 3, 6, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 21);
+		_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		g_engine->_soundManager->command(17, 0);
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 3, 2, 0, 0);
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 3, 2, 0, 0);
 		break;
 
 	case 72:
-		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 17);
+		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
 		_scene->_kernelMessages.add(Common::Point(143, 61), 0x1110, 0, 0, 60, quote_string(kernel.quotes, 57));
 		_scene->_sequences.addTimer(120, 73);
 		break;
@@ -76,37 +76,37 @@ static void room_101_say_dang() {
 }
 
 static void room_101_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('x', 6));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('x', 7));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('b', 2));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(kernel_name('x', 8));
-	_globals._spriteIndexes[14] = _scene->_sprites.addSprites(kernel_name('x', 0));
-
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 0, 0, 25);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 4, 0, 1, 0);
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 2, 0);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 7, 70);
-	_globals._sequenceIndexes[4] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[4], false, 10, 0, 0, 60);
-	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 5, 0, 1, 0);
-	_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 0, 2, 0);
-	_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6, 0, 0, 0);
-	_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 0, 10, 4);
-	_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 6, 0, 32, 47);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('x', 6));
+	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('x', 7));
+	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
+	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('b', 2));
+	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('x', 8));
+	g_sprite_ids[14] = _scene->_sprites.addSprites(kernel_name('x', 0));
+
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 0, 25);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 4, 0, 1, 0);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 2, 0);
+	_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 7, 70);
+	g_sequence_ids[4] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[4], false, 10, 0, 0, 60);
+	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 5, 0, 1, 0);
+	g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 10, 0, 2, 0);
+	g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6, 0, 0, 0);
+	g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, 0, 10, 4);
+	g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[10], false, 6, 0, 32, 47);
 
 	_scene->_hotspots.activate(words_shield_modulator, false);
 	local._panelOpened = false;
 
 	if (_scene->_priorSceneId != RETURNING_FROM_LOADING)
-		_globals[kNeedToStandUp] = false;
+		global[kNeedToStandUp] = false;
 
 	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		player.x = 100;
@@ -119,20 +119,20 @@ static void room_101_init() {
 		player.x = 161;
 		player.y = 123;
 		player.facing = FACING_NORTHEAST;
-		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 17);
+		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
 		_scene->_hotspots.activate(words_chair, false);
 		local._chairHotspotId = _scene->_dynamicHotspots.add(words_chair, words_sit_in, -1, Common::Rect(159, 84, 159 + 33, 84 + 36));
 		if (_scene->_priorSceneId == 112)
 			room_101_say_dang();
 	} else {
-		_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 4);
+		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 6, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[12], 4);
 	}
 
 	kernel.quotes = quote_load(0x31, 0x32, 0x39, 0x36, 0x37, 0x38, 0);
 
-	if (_globals[kNeedToStandUp]) {
+	if (global[kNeedToStandUp]) {
 		_scene->loadAnimation(kernel_full_name(101, 'S', -1, "", EXT_AA), 71);
 		player.walker_visible = false;
 		player.commands_allowed = false;
@@ -164,7 +164,7 @@ static void room_101_daemon() {
 		break;
 
 	case 71:
-		_globals[kNeedToStandUp] = false;
+		global[kNeedToStandUp] = false;
 		player.walker_visible = true;
 		player.commands_allowed = true;
 		player.clock = _scene->_frameStartTime - player.frame_delay;
@@ -225,10 +225,10 @@ static void room_101_pre_parser() {
 			case 0:
 				player.ready_to_walk = false;
 				player.commands_allowed = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[11]);
-				_globals._sequenceIndexes[11] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 1, 17);
+				_scene->_sequences.remove(g_sequence_ids[11]);
+				g_sequence_ids[11] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
+				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				_scene->_sequences.setAnimRange(g_sequence_ids[11], 1, 17);
 				g_engine->_soundManager->command(16, 0);
 				break;
 
@@ -239,8 +239,8 @@ static void room_101_pre_parser() {
 				player.ready_to_walk = true;
 				_scene->_hotspots.activate(71, true);
 				_scene->_dynamicHotspots.remove(local._chairHotspotId);
-				_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 6, 0, 0, 0);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 4);
+				g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 6, 0, 0, 0);
+				_scene->_sequences.setDepth(g_sequence_ids[12], 4);
 				break;
 
 			default:
@@ -253,10 +253,10 @@ static void room_101_pre_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			if (player.need_to_walk) {
-				_scene->_sequences.remove(_globals._sequenceIndexes[13]);
+				_scene->_sequences.remove(g_sequence_ids[13]);
 				local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
-				_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 1, 0, 0);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[local._shieldSpriteIdx], false, 6, 1, 0, 0);
+				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
 			}
@@ -291,11 +291,11 @@ static void room_101_parser() {
 		if (!local._sittingFl) {
 			switch (kernel.trigger) {
 			case 0:
-				_scene->_sequences.remove(_globals._sequenceIndexes[12]);
-				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 1);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 1, 17);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_SPRITE, 10, 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				_scene->_sequences.remove(g_sequence_ids[12]);
+				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 1);
+				_scene->_sequences.setAnimRange(g_sequence_ids[11], 1, 17);
+				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 10, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				player.command_ready = false;
@@ -306,8 +306,8 @@ static void room_101_parser() {
 				break;
 
 			case 2:
-				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 0, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 17);
+				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 0, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
 				player.commands_allowed = true;
 				local._sittingFl = true;
 				_scene->_hotspots.activate(71, false);
@@ -333,16 +333,16 @@ static void room_101_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
-			_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[local._shieldSpriteIdx], false, 6, 1, 0, 0);
+			_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-			_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[local._shieldSpriteIdx], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
+			_scene->_sequences.remove(g_sequence_ids[13]);
+			g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[local._shieldSpriteIdx], false, 6, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
 			player.commands_allowed = true;
 			local._panelOpened = true;
 			if (object_is_here(OBJ_SHIELD_MODULATOR))
@@ -358,9 +358,9 @@ static void room_101_parser() {
 
 	if ((player_said_2(take, shield_modulator) || player_said_2(pull, shield_modulator)) && object_is_here(OBJ_SHIELD_MODULATOR)) {
 		inter_give_to_player(OBJ_SHIELD_MODULATOR);
-		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[14], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
+		_scene->_sequences.remove(g_sequence_ids[13]);
+		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[14], false, 6, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
 		_scene->_hotspots.activate(words_shield_modulator, false);
 		object_examine(OBJ_SHIELD_MODULATOR, 10120, 0);
 		g_engine->_soundManager->command(22, 0);
@@ -388,35 +388,35 @@ static void room_101_parser() {
 	}
 
 	if (player_said_2(look, view_screen) && local._sittingFl) {
-		if (_globals[kWatchedViewScreen])
+		if (global[kWatchedViewScreen])
 			room_101_say_dang();
 		else {
 			switch (kernel.trigger) {
 			case 0:
 				player.commands_allowed = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[11]);
-				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 21);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				_scene->_sequences.remove(g_sequence_ids[11]);
+				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 21);
+				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				g_engine->_soundManager->command(17, 0);
 				break;
 
 			case 1:
-				_globals._sequenceIndexes[11] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 21);
+				g_sequence_ids[11] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
+				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 21);
 				break;
 
 			case 2:
-				_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 3, 0, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], 17, 17);
-				_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 3, 1, 0, 0);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 0, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
+				g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 3, 1, 0, 0);
+				_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 			case 3:
 				player.commands_allowed = true;
-				_globals[kWatchedViewScreen] = true;
+				global[kWatchedViewScreen] = true;
 				local._sittingFl = true;
 				_scene->_nextSceneId = 112;
 				break;
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index 1b12dda2d65..61adec505fe 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -55,43 +55,43 @@ static void addRandomMessage() {
 static void room_102_init() {
 	section_1_music();
 
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('e', -1));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('n', -1));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('g', -1));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites("*RXMRC_8");
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(kernel_name('x', 0));
-
-	_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 8, 0, 0, 0);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 170, 0, 1, 6);
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 11, 0, 2, 3);
-	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 4, 0, 1, 0);
-	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 3, 0, 0, 5);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('e', -1));
+	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('n', -1));
+	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('g', -1));
+	g_sprite_ids[11] = _scene->_sprites.addSprites("*RXMRC_8");
+	g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('x', 0));
+
+	g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 8, 0, 0, 0);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 170, 0, 1, 6);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 11, 0, 2, 3);
+	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 4, 0, 1, 0);
+	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 3, 0, 0, 5);
 
 	if (object_is_here(OBJ_BINOCULARS))
-		_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 24, 0, 0, 24);
+		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 24, 0, 0, 24);
 	else
 		_scene->_hotspots.activate(words_binoculars, false);
 
 	_scene->_hotspots.activate(words_burger, false);
 
-	if (_globals[kMedicineCabinetOpen]) {
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], -2, -2);
+	if (global[kMedicineCabinetOpen]) {
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
 	}
 
 	if (_scene->_priorSceneId == 101) {
 		player.x = 229;
 		player.y = 109;
 		player.commands_allowed = false;
-		_globals._sequenceIndexes[6] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 2, 0);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		g_sequence_ids[6] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[6], false, 6, 1, 2, 0);
+		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	} else if (_scene->_priorSceneId == 103) {
 		player.x = 47;
 		player.y = 152;
@@ -103,17 +103,17 @@ static void room_102_init() {
 	}
 
 	if (_scene->_priorSceneId != 106) {
-		if (_globals[kWaterInAPuddle]) {
-			_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 5);
+		if (global[kWaterInAPuddle]) {
+			g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[13], 5);
 		}
 	} else {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 1, 0, 0);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 5);
+		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 1, 0, 0);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 5);
 		g_engine->_soundManager->command(24, 0);
 		g_engine->_soundManager->command(28, 0);
 	}
@@ -136,9 +136,9 @@ static void room_102_daemon() {
 		player.commands_allowed = true;
 
 	if (kernel.trigger == 72) {
-		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], -2, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 5);
+		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 5);
 		_scene->_sequences.addTimer(48, 90);
 	}
 
@@ -148,7 +148,7 @@ static void room_102_daemon() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 
-			_globals[kWaterInAPuddle] = true;
+			global[kWaterInAPuddle] = true;
 			g_engine->_soundManager->command(24, 0);
 		} else {
 			g_engine->_soundManager->command(23, 0);
@@ -189,10 +189,10 @@ static void room_102_pre_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			if (player.need_to_walk) {
-				_scene->_sequences.remove(_globals._sequenceIndexes[7]);
-				_globals._sequenceIndexes[7] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[7], false, 6, 1, 0, 0);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
+				_scene->_sequences.remove(g_sequence_ids[7]);
+				g_sequence_ids[7] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[7], false, 6, 1, 0, 0);
+				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				_scene->_sequences.setDepth(g_sequence_ids[7], 15);
 				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
 			}
@@ -200,7 +200,7 @@ static void room_102_pre_parser() {
 
 		case 1:
 			if (object_is_here(OBJ_BURGER)) {
-				_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+				_scene->_sequences.remove(g_sequence_ids[10]);
 				_scene->_hotspots.activate(words_burger, false);
 			}
 			local._fridgeOpenedFl = false;
@@ -227,12 +227,12 @@ static void room_102_parser() {
 	if (player_said_1(refrigerator) && !local._fridgeOpenedFl) {
 		switch (kernel.trigger) {
 		case 0:
-			_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6, 1, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[7], 15);
+			_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			if (object_is_here(OBJ_BURGER)) {
-				_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 7, 0, 0, 0);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
+				g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[10], false, 7, 0, 0, 0);
+				_scene->_sequences.setDepth(g_sequence_ids[10], 14);
 			}
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
@@ -240,9 +240,9 @@ static void room_102_parser() {
 			return;
 
 		case 1:
-			_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], -2, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 15);
+			g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[7], -2, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[7], 15);
 			int delay;
 			if (player_said_1(walkto) && !local._fridgeFirstOpenFl)
 				delay = 0;
@@ -307,8 +307,8 @@ static void room_102_parser() {
 	if (player_said_2(walk_through, door)) {
 		switch (kernel.trigger) {
 		case 0:
-			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
+			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
@@ -505,7 +505,7 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(look, medicine_cabinet)) {
-		if (_globals[kMedicineCabinetOpen])
+		if (global[kMedicineCabinetOpen])
 			text_show(10207);
 		else
 			text_show(10206);
@@ -514,12 +514,12 @@ static void room_102_parser() {
 		return;
 	}
 
-	if (player_said_2(close, medicine_cabinet) && _globals[kMedicineCabinetOpen]) {
+	if (player_said_2(close, medicine_cabinet) && global[kMedicineCabinetOpen]) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
-			_globals._sequenceIndexes[8] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			_scene->_sequences.remove(g_sequence_ids[8]);
+			g_sequence_ids[8] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
+			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
@@ -530,7 +530,7 @@ static void room_102_parser() {
 
 		case 2:
 			player.commands_allowed = true;
-			_globals[kMedicineCabinetOpen] = false;
+			global[kMedicineCabinetOpen] = false;
 			text_show(10209);
 			break;
 
@@ -541,30 +541,30 @@ static void room_102_parser() {
 		return;
 	}
 
-	if (player_said_2(open, medicine_cabinet) && !_globals[kMedicineCabinetOpen]) {
+	if (player_said_2(open, medicine_cabinet) && !global[kMedicineCabinetOpen]) {
 		switch (kernel.trigger) {
 		case 0:
-			_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
+			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
 
 		case 1:
-			_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], -2, -2);
+			g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
 			_scene->_sequences.addTimer(48, 2);
 			break;
 
 		case 2:
 			player.commands_allowed = true;
-			_globals[kMedicineCabinetOpen] = true;
-			if (_globals[kMedicineCabinetVirgin]) {
+			global[kMedicineCabinetOpen] = true;
+			if (global[kMedicineCabinetVirgin]) {
 				text_show(10208);
 			} else {
 				text_show(10207);
 			}
-			_globals[kMedicineCabinetVirgin] = false;
+			global[kMedicineCabinetVirgin] = false;
 			break;
 
 		default:
@@ -577,16 +577,16 @@ static void room_102_parser() {
 	if (player_said_2(take, binoculars) && object_is_here(OBJ_BINOCULARS)) {
 		switch (kernel.trigger) {
 		case 0:
-			_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[11]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[11] = _scene->_sequences.startPingPongCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[11]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
 
 		case 1:
 			inter_give_to_player(OBJ_BINOCULARS);
-			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
+			_scene->_sequences.remove(g_sequence_ids[9]);
 			_scene->_hotspots.activate(words_binoculars, false);
 			player.walker_visible = true;
 			player.commands_allowed = true;
@@ -604,7 +604,7 @@ static void room_102_parser() {
 	if (player_said_2(take, burger) && object_is_here(OBJ_BURGER)) {
 		if (kernel.trigger == 0) {
 			object_examine(OBJ_BURGER, 10235, 0);
-			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+			_scene->_sequences.remove(g_sequence_ids[10]);
 			inter_give_to_player(OBJ_BURGER);
 			_scene->_hotspots.activate(words_burger, false);
 			g_engine->_soundManager->command(22, 0);
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index f4061c885d2..32ddc789367 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -41,49 +41,49 @@ static Scratch local;
 
 
 static void room_103_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('h', -1));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('t', -1));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('r', -1));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites("*RXMBD_2");
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites("*RXMRD_3");
-	_globals._spriteIndexes[15] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 7, 0, 1, 0);
-
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 2, 0);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 0);
-
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 25);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 2, 72);
-
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 1, 37);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 2, 73);
-
-	_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8);
-	_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6);
-	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6);
-	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6);
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('h', -1));
+	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
+	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('t', -1));
+	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('r', -1));
+	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[12] = _scene->_sprites.addSprites("*RXMBD_2");
+	g_sprite_ids[13] = _scene->_sprites.addSprites("*RXMRD_3");
+	g_sprite_ids[15] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 7, 0, 1, 0);
+
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 2, 0);
+	_scene->_sequences.setDepth(g_sequence_ids[1], 0);
+
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 25);
+	_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 72);
+
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 1, 37);
+	_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 73);
+
+	g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8);
+	g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6);
+	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6);
+	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6);
 
 	if (object_is_here(OBJ_TIMER_MODULE))
-		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6);
+		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6);
 	else
 		_scene._hotspots.activate(371, false);
 
 	if (object_is_here(OBJ_REBREATHER))
-		_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 6);
+		g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[10], false, 6);
 	else
 		_scene._hotspots.activate(289, false);
 
-	if (_globals[kTurkeyExploded]) {
-		_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], -2, -2);
+	if (global[kTurkeyExploded]) {
+		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6);
+		_scene->_sequences.setAnimRange(g_sequence_ids[9], -2, -2);
 		_scene->_hotspots.activate(362, false);
 	}
 
@@ -94,8 +94,8 @@ static void room_103_init() {
 
 	if (_scene->_priorSceneId == 102) {
 		player.commands_allowed = false;
-		_globals._sequenceIndexes[6] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		g_sequence_ids[6] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
+		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	}
 
 	section_1_music();
@@ -168,8 +168,8 @@ static void room_103_parser() {
 	else if (player_said_2(walk_through, door)) {
 		switch (kernel.trigger) {
 		case 0:
-			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
@@ -187,16 +187,16 @@ static void room_103_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			_scene->changeVariant(1);
-			_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 3, 2);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[13]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 3, 2);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[13]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
 
 		case 1:
-			_scene->_sequences.remove(_globals._sequenceIndexes[11]);
+			_scene->_sequences.remove(g_sequence_ids[11]);
 			break;
 
 		case 2:
@@ -216,16 +216,16 @@ static void room_103_parser() {
 	} else if (player_said_2(take, rebreather) && object_is_here(OBJ_REBREATHER)) {
 		switch (kernel.trigger) {
 		case 0:
-			_globals._sequenceIndexes[12] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[12], false, 3, 2);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[12]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[12] = _scene->_sequences.startPingPongCycle(g_sprite_ids[12], false, 3, 2);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[12]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
 
 		case 1:
-			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+			_scene->_sequences.remove(g_sequence_ids[10]);
 			break;
 
 		case 2:
@@ -248,10 +248,10 @@ static void room_103_parser() {
 			g_engine->_soundManager->command(31, 0);
 
 		if (kernel.trigger < 2) {
-			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, kernel.trigger < 1 ? 1 : 0);
+			g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, kernel.trigger < 1 ? 1 : 0);
 			if (kernel.trigger) {
 				// Lock the turkey into a permanent "exploded" frame
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], -2, -2);
+				_scene->_sequences.setAnimRange(g_sequence_ids[9], -2, -2);
 
 				// Rex says "Gads.."
 				const char *msg = quote_string(kernel.quotes, 51);
@@ -259,13 +259,13 @@ static void room_103_parser() {
 				_scene->_sequences.addTimer(120, kernel.trigger + 1);
 			} else {
 				// Initial turky explosion
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			}
 		}
 
 		// Re-enable player if sequence is ended, and set global flag
 		player.commands_allowed = kernel.trigger == 2;
-		_globals[kTurkeyExploded] = -1;
+		global[kTurkeyExploded] = -1;
 
 		if (kernel.trigger == 2) {
 			// Show exposition dialog at end of sequence
@@ -273,7 +273,7 @@ static void room_103_parser() {
 			_scene->_hotspots.activate(362, false);
 		}
 	} else if (player_said_2(look, oven))
-		text_show(!_globals[kTurkeyExploded] ? 10323 : 10303);
+		text_show(!global[kTurkeyExploded] ? 10323 : 10303);
 	else if (player_said_2(talkto, auxiliary_power)) {
 		switch (kernel.trigger) {
 		case 0:
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index cb590e5cf6f..953c8946f7b 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -40,9 +40,9 @@ struct Scratch {
 static Scratch local;
 
 static void room_104_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('h', -1));
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 0, 0, 1);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 8);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('h', -1));
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 0, 0, 1);
+	_scene->_sequences.setDepth(g_sequence_ids[1], 8);
 
 	if (_scene->_priorSceneId == 105) {
 		player.x = 302;
@@ -89,18 +89,18 @@ static void room_104_daemon() {
 				_scene->resetScene();
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
+				g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
 				kernel_new_palette();
-				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], mirrorFl, 7, 1, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(198, 143));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], mirrorFl, 7, 1, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(198, 143));
+				_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
-				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], mirrorFl, 7, 0, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(198, 143));
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -2, -2);
+				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], mirrorFl, 7, 0, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(198, 143));
+				_scene->_sequences.setAnimRange(g_sequence_ids[2], -2, -2);
 				_scene->_sequences.addTimer(90, 2);
 				break;
 
@@ -122,27 +122,27 @@ static void room_104_daemon() {
 				_scene->resetScene();
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 1));
+				g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 1));
 				kernel_new_palette();
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(198, 143));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 14);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(198, 143));
+				_scene->_sequences.setDepth(g_sequence_ids[3], 4);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 14);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 5, 1, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(198, 143));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 15, 32);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 5, 1, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(198, 143));
+				_scene->_sequences.setDepth(g_sequence_ids[3], 4);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], 15, 32);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 2:
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 3, 0, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(198, 143));
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -2, -2);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 3, 0, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(198, 143));
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], -2, -2);
 				_scene->_sequences.addTimer(90, 3);
 				break;
 
@@ -164,20 +164,20 @@ static void room_104_daemon() {
 				_scene->resetScene();
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
+				g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
 				kernel_new_palette();
-				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 8, 1, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(198, 143));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 4);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 8, 1, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(198, 143));
+				_scene->_sequences.setDepth(g_sequence_ids[4], 4);
+				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				if (config_file.naughtiness >= STORYMODE_NICE)
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 15, 2);
+					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 15, 2);
 				break;
 
 			case 1:
-				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 8, 0, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(198, 143));
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], -2, -2);
+				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 8, 0, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(198, 143));
+				_scene->_sequences.setAnimRange(g_sequence_ids[4], -2, -2);
 				_scene->_sequences.addTimer(90, 2);
 				break;
 
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index 07ff7f5739a..0f46efe2a01 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -39,15 +39,15 @@ static Scratch local;
 
 
 static void room_105_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('m', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('f', 4));
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 0, 0, 0);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('m', 1));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('f', 4));
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 8, 0, 0, 0);
 
-	if (_globals[kFishIn105]) {
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(48, 144));
+	if (global[kFishIn105]) {
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(48, 144));
 
-		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
+		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(56, 141), FACING_NORTHWEST);
 	}
 
@@ -76,38 +76,38 @@ static void room_105_daemon() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 
-			_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('m', 0));
-			_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
-			_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('m', 3));
+			g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('m', 0));
+			g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
+			g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('m', 3));
 			g_engine->_soundManager->command(33, 0);
 			_scene->clearSequenceList();
 			kernel_new_palette();
 
-			_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 8);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 1, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[0], 8);
+			_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 
 			if (config_file.naughtiness >= STORYMODE_NICE)
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 8, 3);
+				_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 8, 3);
 			break;
 
 		case 1:
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 8);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -2, -2);
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 9, 1, 0, 0);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], _globals._sequenceIndexes[0]);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 8);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 5, 7);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 8);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], -2, -2);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 9, 1, 0, 0);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], g_sequence_ids[0]);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 8);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 5, 7);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 9, 0, 0, 0);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 8);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 9, 0, 0, 0);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 8);
 			_scene->_sequences.addTimer(90, 3);
 		}
 		break;
@@ -147,15 +147,15 @@ static void room_105_pre_parser() {
 static void room_105_parser() {
 	if (player.look_around)
 		text_show(10512);
-	else if (player_said_2(take, dead_fish) && _globals[kFishIn105]) {
+	else if (player_said_2(take, dead_fish) && global[kFishIn105]) {
 		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		} else {
-			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
+			_scene->_sequences.remove(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
-			_globals[kFishIn105] = false;
+			global[kFishIn105] = false;
 			object_examine(OBJ_DEAD_FISH, 802, 0);
 		}
 	} else if (player_said_2(look, western_cliff_face))
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index dbeb83c2c9c..bce9e73298a 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -42,21 +42,21 @@ static Scratch local;
 
 
 static void room_106_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('H', -1));
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('H', -1));
 
 	if (player_has(OBJ_REBREATHER) || (_scene->_priorSceneId != 102) || _scene->_roomChanged) {
-		_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('A', 0));
-		_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('A', 1));
+		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('A', 0));
+		g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('A', 1));
 	}
 
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('G', -1));
-	_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 21, 0, 0, 0);
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('I', -1));
-	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 32, 47);
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('G', -1));
+	g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 21, 0, 0, 0);
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('I', -1));
+	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 32, 47);
 
 	if (_scene->_priorSceneId == 102) {
-		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 1, 4, 0);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 1, 4, 0);
+		_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		player.facing = FACING_EAST;
@@ -81,9 +81,9 @@ static void room_106_init() {
 	}
 
 	if (_scene->_priorSceneId != 102) {
-		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -2, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14);
+		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[0], -2, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[0], 14);
 	}
 
 	local._backToShipFl = false;
@@ -96,15 +96,15 @@ static void room_106_init() {
 
 static void room_106_daemon() {
 	if (kernel.trigger == 70) {
-		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -2, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14);
+		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[0], -2, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[0], 14);
 
 		if (!player_has(OBJ_REBREATHER) && !_scene->_roomChanged) {
 			_scene->loadAnimation(kernel_full_name(106, 'A', -1, "", EXT_AA), 75);
 		} else {
-			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 4, 1, 0, 0);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 28, 71);
+			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
+			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 28, 71);
 		}
 	}
 
@@ -169,9 +169,9 @@ static void room_106_daemon() {
 		if (!local._shadowFl) {
 			if (player.x < 204) {
 				local._shadowFl = true;
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 4, 1, 0, 0);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 44, 73);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 4, 1, 0, 0);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 44, 73);
 			}
 		} else if (kernel.trigger == 73)
 			player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index d557a59aa64..b90d3c1f1b4 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -40,22 +40,22 @@ static Scratch local;
 
 static void room_107_init() {
 	for (int i = 0; i < 3; i++)
-		_globals._spriteIndexes[i + 1] = _scene->_sprites.addSprites(kernel_name('G', i));
+		g_sprite_ids[i + 1] = _scene->_sprites.addSprites(kernel_name('G', i));
 
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
 
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 0, 0, 7);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 17, 0, 0, 13);
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 19, 0, 0, 9);
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 0, 0, 7);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 17, 0, 0, 13);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 19, 0, 0, 9);
 
 	for (int i = 1; i < 4; i++)
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[i], 0);
+		_scene->_sequences.setDepth(g_sequence_ids[i], 0);
 
-	if (_globals[kFishIn107]) {
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(68, 151));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
-		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
+	if (global[kFishIn107]) {
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(68, 151));
+		_scene->_sequences.setDepth(g_sequence_ids[4], 1);
+		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(78, 135), FACING_SOUTHWEST);
 	}
 
@@ -73,12 +73,12 @@ static void room_107_init() {
 	}
 
 	if (((_scene->_priorSceneId == 105) || (_scene->_priorSceneId == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_full_name(105, 'R', 1, "", EXT_SS));
-		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], true, 4, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[0], Common::Point(270, 150));
-		_scene->_sequences.setMotion(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
-		_scene->_dynamicHotspots.add(words_manta_ray, words_swim_to, _globals._sequenceIndexes[0], Common::Rect(0, 0, 0, 0));
+		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_full_name(105, 'R', 1, "", EXT_SS));
+		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], true, 4, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[0], Common::Point(270, 150));
+		_scene->_sequences.setMotion(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[0], 2);
+		_scene->_dynamicHotspots.add(words_manta_ray, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
 	}
 
 	kernel.quotes = quote_load(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
@@ -110,15 +110,15 @@ static void room_107_pre_parser() {
 static void room_107_parser() {
 	if (player.look_around)
 		text_show(10708);
-	else if (player_said_2(take, dead_fish) && _globals[kFishIn107]) {
+	else if (player_said_2(take, dead_fish) && global[kFishIn107]) {
 		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		} else {
-			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
+			_scene->_sequences.remove(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
-			_globals[kFishIn107] = false;
+			global[kFishIn107] = false;
 			object_examine(OBJ_DEAD_FISH, 802, 0);
 		}
 	} else if (player_said_2(swim_towards, northern_sea_cliff))
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index a603679e10b..3799f5ad84c 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -32,27 +32,27 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_108_init() {
-	if (_globals[kHoovicSated] == 2)
-		_globals[kHoovicSated] = 0;
+	if (global[kHoovicSated] == 2)
+		global[kHoovicSated] = 0;
 
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
 
-	_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 13, 0, 0, 7);
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 16, 0, 0, 9);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 17, 0, 0, 3);
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 14, 0, 0, 13);
+	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 13, 0, 0, 7);
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 16, 0, 0, 9);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 17, 0, 0, 3);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 14, 0, 0, 13);
 
 	for (int i = 0; i <= 3; i++)
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[i], 0);
+		_scene->_sequences.setDepth(g_sequence_ids[i], 0);
 
-	if (_globals[kFishIn108]) {
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(41, 109));
-		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
+	if (global[kFishIn108]) {
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(41, 109));
+		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(41, 109), FACING_NORTHWEST);
 	}
 
@@ -81,15 +81,15 @@ static void room_108_pre_parser() {
 static void room_108_parser() {
 	if (player.look_around)
 		text_show(10812);
-	else if (player_said_2(take, dead_fish) && _globals[kFishIn108]) {
+	else if (player_said_2(take, dead_fish) && global[kFishIn108]) {
 		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		} else {
-			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
+			_scene->_sequences.remove(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
-			_globals[kFishIn108] = false;
+			global[kFishIn108] = false;
 			object_examine(OBJ_DEAD_FISH, 10808, 0);
 		}
 	} else if (player_said_2(swim_towards, open_area_to_north))
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 7a0f47c0b7e..acd60bfc072 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -49,13 +49,13 @@ static Scratch local;
 
 
 static void room_109_init() {
-	_globals[kFishIn105] = true;
+	global[kFishIn105] = true;
 
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*RXSWRC_6");
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('O', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('O', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('O', 0));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('H', 4));
+	g_sprite_ids[0] = _scene->_sprites.addSprites("*RXSWRC_6");
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('O', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('O', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('O', 0));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('H', 4));
 
 	local._rexThrowingObject = false;
 	local._throwingObjectId = 0;
@@ -66,17 +66,17 @@ static void room_109_init() {
 	if (_scene->_priorSceneId == 110) {
 		player.x = 248;
 		player.y = 38;
-		_globals[kHoovicSated] = 2;
+		global[kHoovicSated] = 2;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		player.x = 20;
 		player.y = 68;
 		player.facing = FACING_EAST;
 	}
 
-	if (!_globals[kHoovicAlive]) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 4);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -2, -2);
+	if (!global[kHoovicAlive]) {
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 4);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], -2, -2);
 
 		int idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(256, 57, 267, 87));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
@@ -86,13 +86,13 @@ static void room_109_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
 	}
 
-	if (!_globals[kHoovicAlive] || _globals[kHoovicSated])
+	if (!global[kHoovicAlive] || global[kHoovicSated])
 		_scene->changeVariant(1);
 
 	if (object_is_here(OBJ_BURGER)) {
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -2, -2);
-		int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], -2, -2);
+		int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
 	} else if (_scene->_roomChanged)
 		inter_give_to_player(OBJ_BURGER);
@@ -109,14 +109,14 @@ static void room_109_init() {
 	local._eatingFirstFish = (!player.been_here_before) && (_scene->_priorSceneId < 110);
 
 	if (local._eatingFirstFish) {
-		_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_full_name(105, 'F', 1, "", EXT_SS));
-		_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('H', 1));
-
-		_globals._sequenceIndexes[10] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[10], true, 4, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 5);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(126, 39));
-		_scene->_sequences.setMotion(_globals._sequenceIndexes[10], 0, 200, 0);
-		_scene->_sequences.setScale(_globals._sequenceIndexes[10], 80);
+		g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_full_name(105, 'F', 1, "", EXT_SS));
+		g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('H', 1));
+
+		g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], true, 4, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[10], 5);
+		_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(126, 39));
+		_scene->_sequences.setMotion(g_sequence_ids[10], 0, 200, 0);
+		_scene->_sequences.setScale(g_sequence_ids[10], 80);
 		player.commands_allowed = false;
 	}
 
@@ -127,10 +127,10 @@ static void room_109_daemon() {
 	if (local._beforeEatingRex) {
 		if (!local._eatingRex) {
 			if (player.x > 205) {
-				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 1, 0, 0);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 4);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 6, 70);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 1, 0, 0);
+				_scene->_sequences.setDepth(g_sequence_ids[4], 4);
+				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 70);
+				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 
 				local._eatingRex = true;
 				g_engine->_soundManager->command(34, 0);
@@ -156,36 +156,36 @@ static void room_109_daemon() {
 		player.commands_allowed = false;
 		local._hungryFl = false;
 		local._beforeEatingRex = true;
-		_scene->_sprites.remove(_globals._spriteIndexes[6]);
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('H', 0));
+		_scene->_sprites.remove(g_sprite_ids[6]);
+		g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('H', 0));
 		kernel_new_palette();
 	}
 
-	if (player.walking && (_scene->_rails.getNext() > 0) && _globals[kHoovicAlive] && !_globals[kHoovicSated] && !local._hungryFl && !local._beforeEatingRex) {
+	if (player.walking && (_scene->_rails.getNext() > 0) && global[kHoovicAlive] && !global[kHoovicSated] && !local._hungryFl && !local._beforeEatingRex) {
 		player_cancel_command();
 		player_start_walking(160, 32, FACING_EAST);
 		_scene->_rails.resetNext();
 		local._hungryFl = true;
 	}
 
-	if (local._eatingFirstFish && (_scene->_sequences[_globals._sequenceIndexes[10]]._position.x >= 178)) {
-		_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 4, 1, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 4);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_SPRITE, 29, 72);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 29, 73);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[10], _globals._sequenceIndexes[9]);
+	if (local._eatingFirstFish && (_scene->_sequences[g_sequence_ids[10]]._position.x >= 178)) {
+		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 4, 1, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 4);
+		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_SPRITE, 29, 72);
+		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 29, 73);
+		_scene->_sequences.updateTimeout(g_sequence_ids[10], g_sequence_ids[9]);
 		local._eatingFirstFish = false;
 		player.commands_allowed = true;
 		g_engine->_soundManager->command(34, 0);
 	}
 
 	if (kernel.trigger == 72)
-		_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+		_scene->_sequences.remove(g_sequence_ids[10]);
 
 	if (kernel.trigger == 73) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-		_scene->_sprites.remove(_globals._spriteIndexes[9]);
-		_scene->_sprites.remove(_globals._spriteIndexes[10]);
+		_scene->_sequences.remove(g_sequence_ids[9]);
+		_scene->_sprites.remove(g_sprite_ids[9]);
+		_scene->_sprites.remove(g_sprite_ids[10]);
 
 		_scene->_spriteSlots.clear();
 		_scene->_spriteSlots.fullRefresh();
@@ -215,7 +215,7 @@ static void room_109_pre_parser() {
 	}
 
 	if ((player_said_2(swim_into, tunnel) || player_said_2(swim_to, small_hole))
-		&& (!_globals[kHoovicAlive] || _globals[kHoovicSated]) && (player_said_1(tunnel)))
+		&& (!global[kHoovicAlive] || global[kHoovicSated]) && (player_said_1(tunnel)))
 		player.walk_off_edge_to_room = 110;
 
 	local._hungryFl = false;
@@ -232,27 +232,27 @@ static void room_109_parser() {
 		if (player_said_1(dead_fish) || player_said_1(stuffed_fish) || player_said_1(burger)) {
 			local._throwingObjectId = object_named(player2.words[1]);
 			if (local._throwingObjectId >= 0) {
-				if ((player_has(local._throwingObjectId) && _globals[kHoovicAlive]) || local._rexThrowingObject) {
+				if ((player_has(local._throwingObjectId) && global[kHoovicAlive]) || local._rexThrowingObject) {
 					switch (kernel.trigger) {
 					case 0:
 						local._rexThrowingObject = true;
 						local._hoovicDifficultFl = false;
 						inter_move_object(local._throwingObjectId, NOWHERE);
-						_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 4, 1, 0, 0);
-						_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[0]);
-						_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+						g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 4, 1, 0, 0);
+						_scene->_sequences.setMsgLayout(g_sequence_ids[0]);
+						_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 						player.walker_visible = false;
 						player.commands_allowed = false;
 
 						switch (local._throwingObjectId) {
 						case OBJ_DEAD_FISH:
 						case OBJ_STUFFED_FISH:
-							_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('H', 1));
+							g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('H', 1));
 							break;
 
 						case OBJ_BURGER:
 							local._hoovicDifficultFl = (game.difficulty == DIFFICULTY_HARD);
-							_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('H', (local._hoovicDifficultFl ? 3 : 1)));
+							g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('H', (local._hoovicDifficultFl ? 3 : 1)));
 							break;
 
 						default:
@@ -267,24 +267,24 @@ static void room_109_parser() {
 						local._hoovicTrigger = 4;
 						switch (local._throwingObjectId) {
 						case OBJ_BURGER:
-							_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, (local._hoovicDifficultFl ? 4 : 6), 1, 0, 0);
-							_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, (local._hoovicDifficultFl ? 4 : 6), 1, 0, 0);
+							_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 2);
 							if (local._hoovicDifficultFl) {
-								_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 30);
-								_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+								_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 30);
+								_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 							} else {
-								_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4);
-								_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+								_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
+								_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 								local._hoovicTrigger = 3;
 							}
 							break;
 						case OBJ_DEAD_FISH:
-							_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 4, 1, 0, 0);
-							_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
+							_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 2);
 							break;
 						case OBJ_STUFFED_FISH:
-							_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 4, 1, 0, 0);
-							_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 4, 1, 0, 0);
+							_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 2);
 							local._hoovicTrigger = 3;
 							break;
 						default:
@@ -294,26 +294,26 @@ static void room_109_parser() {
 
 					case 2:
 						if (local._hoovicDifficultFl)
-							_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], false, 4, 2, 0, 0);
+							g_sequence_ids[8] = _scene->_sequences.startPingPongCycle(g_sprite_ids[8], false, 4, 2, 0, 0);
 						else
-							_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 4, 1, 0, 0);
+							g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 4, 1, 0, 0);
 
-						_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 4);
-						_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, local._hoovicTrigger);
+						_scene->_sequences.setDepth(g_sequence_ids[8], 4);
+						_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, local._hoovicTrigger);
 						g_engine->_soundManager->command(34, 0);
 						break;
 
 					case 3:
 						_scene->loadAnimation(kernel_full_name(109, 'H', 2, "", EXT_AA), 4);
 						g_engine->_soundManager->command(35, 0);
-						_globals[kHoovicAlive] = false;
+						global[kHoovicAlive] = false;
 						break;
 
 					case 4:
-						if (!_globals[kHoovicAlive]) {
-							_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 1, 0, 0);
-							_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 4);
-							_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -2, -2);
+						if (!global[kHoovicAlive]) {
+							g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
+							_scene->_sequences.setDepth(g_sequence_ids[6], 4);
+							_scene->_sequences.setAnimRange(g_sequence_ids[6], -2, -2);
 							int idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(256, 57, 256 + 12, 57 + 31));
 							_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
 							idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(242, 79, 242 + 24, 79 + 12));
@@ -323,7 +323,7 @@ static void room_109_parser() {
 							_scene->changeVariant(1);
 						} else {
 							if (local._throwingObjectId == OBJ_DEAD_FISH) {
-								++_globals[kHoovicFishEaten];
+								++global[kHoovicFishEaten];
 								int threshold;
 								switch (game.difficulty) {
 								case DIFFICULTY_HARD:
@@ -337,18 +337,18 @@ static void room_109_parser() {
 									break;
 								}
 
-								if (_globals[kHoovicFishEaten] >= threshold) {
+								if (global[kHoovicFishEaten] >= threshold) {
 									int randVal = g_engine->getRandomNumber(83, 84);
 									_scene->_kernelMessages.add(Common::Point(230, 24), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, randVal));
-									_globals[kHoovicFishEaten] = 0;
-									_globals[kHoovicSated] = 1;
+									global[kHoovicFishEaten] = 0;
+									global[kHoovicSated] = 1;
 									_scene->changeVariant(1);
 								}
 							}
 						}
 						_scene->freeAnimation();
-						_scene->_sequences.remove(_globals._sequenceIndexes[8]);
-						_scene->_sprites.remove(_globals._spriteIndexes[8]);
+						_scene->_sequences.remove(g_sequence_ids[8]);
+						_scene->_sprites.remove(g_sprite_ids[8]);
 						_scene->_spriteSlots.clear();
 						_scene->_spriteSlots.fullRefresh();
 						_scene->_sequences.scan();
@@ -364,9 +364,9 @@ static void room_109_parser() {
 					case 5:
 					{
 						inter_move_object(OBJ_BURGER, _scene->_currentSceneId);
-						_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
-						_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 30, 30);
-						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+						g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
+						_scene->_sequences.setAnimRange(g_sequence_ids[3], 30, 30);
+						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
 						_scene->_sequences.addTimer(65, 6);
 					}
@@ -374,28 +374,28 @@ static void room_109_parser() {
 
 					case 6:
 					{
-						_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-						_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
-						_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 31, 46);
-						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+						_scene->_sequences.remove(g_sequence_ids[3]);
+						g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
+						_scene->_sequences.setAnimRange(g_sequence_ids[3], 31, 46);
+						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
-						_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
+						_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
 					}
 					break;
 
 					case 7:
 					{
-						_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-						_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
-						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+						_scene->_sequences.remove(g_sequence_ids[3]);
+						g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
+						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
 						text_show(10915);
 					}
 					break;
 
 					case 8:
-						_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 1, 0, 0);
-						_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 5, 16);
+						g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
+						_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, 16);
 						break;
 
 					default:
@@ -411,7 +411,7 @@ static void room_109_parser() {
 	}
 
 	if (player_said_2(take, burger) && object_is_here(OBJ_BURGER)) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
+		_scene->_sequences.remove(g_sequence_ids[3]);
 		inter_give_to_player(OBJ_BURGER);
 	} else if (player_said_2(look, ocean_floor))
 		text_show(10901);
@@ -426,7 +426,7 @@ static void room_109_parser() {
 	else if (player_said_2(look, cave_wall))
 		text_show(10906);
 	else if (player_said_2(look, tunnel)) {
-		if (_globals[kHoovicAlive])
+		if (global[kHoovicAlive])
 			text_show(10907);
 		else
 			text_show(10913);
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 251882b5179..12353de5442 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -39,10 +39,10 @@ static Scratch local;
 
 
 static void room_110_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
 
 	local._crabsFl = false;
 
@@ -51,20 +51,20 @@ static void room_110_init() {
 		player.y = 71;
 		player.facing = FACING_EAST;
 
-		_globals._sequenceIndexes[0] = _scene->_sequences.startCycle(_globals._spriteIndexes[0], false, 1);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
+		g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 
 		local._crabsFl = true;
 
-		int idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[0], Common::Rect(0, 0, 0, 0));
+		int idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
+		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		player.x = 194;
@@ -96,23 +96,23 @@ static void room_110_pre_parser() {
 	if (local._crabsFl) {
 		local._crabsFl = false;
 
-		_scene->_sequences.remove(_globals._sequenceIndexes[0]);
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
+		_scene->_sequences.remove(g_sequence_ids[0]);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		_scene->_sequences.remove(g_sequence_ids[2]);
+		_scene->_sequences.remove(g_sequence_ids[3]);
 
-		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 16, 1, 0, 0);
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 16, 1, 0, 0);
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 16, 1, 0, 0);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 16, 1, 0, 0);
+		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 16, 1, 0, 0);
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 16, 1, 0, 0);
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 16, 1, 0, 0);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 16, 1, 0, 0);
 
-		int idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[0], Common::Rect(0, 0, 0, 0));
+		int idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
+		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
 	}
 }
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index 197531c8a84..dcc1cb9f1e8 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -42,30 +42,30 @@ static Scratch local;
 
 
 static void room_111_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('B', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('B', 1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('B', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('B', 0));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('B', 1));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('B', 2));
 
-	_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 8, 0, 0, 0);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 9, 73);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 13, 73);
+	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 8, 0, 0, 0);
+	_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 9, 73);
+	_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 13, 73);
 
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 0, 0, 0);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 71, 71);
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 0, 0);
+	_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 71, 71);
 
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 0, 0, 0);
-	_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-	_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 0, 0, 0);
+	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+	g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
 
-	int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+	int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
-	idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
+	idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
-	idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+	idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 
 	local._launch1Fl = false;
@@ -105,27 +105,27 @@ static void room_111_daemon() {
 
 	if ((kernel.trigger == 71) && !local._stampedFl) {
 		local._stampedFl = true;
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 18, 1, 0, 0);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 18, 1, 0, 0);
+		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 	}
 
 	if (kernel.trigger == 72) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 20);
+		_scene->_sequences.remove(g_sequence_ids[2]);
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 20);
 	}
 
 	if (!local._launch1Fl && (g_engine->getRandomNumber(1, 5000) == 1)) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 5, 1, 0, 0);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 5, 1, 0, 0);
 		local._launch1Fl = true;
-		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
+		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 	}
 
 	if (!local._launched2Fl && (g_engine->getRandomNumber(1, 30000) == 1)) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 5, 1, 0, 0);
-		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+		_scene->_sequences.remove(g_sequence_ids[5]);
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 5, 1, 0, 0);
+		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 		local._launched2Fl = true;
 	}
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index 6a2adaed8b6..95263d3414c 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -34,14 +34,14 @@ namespace Rooms {
 static void room_112_init() {
 	section_1_music();
 
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('X', 5));
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('X', 5));
 
-	_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 10, 0, 17, 20);
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 4, 0, 0, 0);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 3, 0);
+	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 10, 0, 17, 20);
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 0, 0, 0);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 3, 0);
 
 	player.commands_allowed = false;
 	player.walker_visible = false;
@@ -61,9 +61,9 @@ static void room_112_daemon() {
 	}
 
 	if (kernel.trigger == 70) {
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 3, 0, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 1);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 3, 0, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 1);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (kernel.trigger == 71) {
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index c8d4cdf83d8..87dba1671b6 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -40,19 +40,19 @@ static Scratch local;
 
 
 static void room_201_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('m', -1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*SC002Z1");
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 1, 0);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 0, 0, 50);
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 4, 0, 0, 0);
-	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 0, 0, 0);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 8);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(185, 46));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('m', -1));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	g_sprite_ids[5] = _scene->_sprites.addSprites("*SC002Z1");
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 1, 0);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 0, 0, 50);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 4, 0, 0, 0);
+	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
+	_scene->_sequences.setDepth(g_sequence_ids[4], 8);
+	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(185, 46));
 
-	int idx = _scene->_dynamicHotspots.add(words_birds, words_look_at, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
+	int idx = _scene->_dynamicHotspots.add(words_birds, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 81), FACING_NORTH);
 
 	if ((_scene->_priorSceneId == 202) || (_scene->_priorSceneId == RETURNING_FROM_LOADING)) {
@@ -64,18 +64,18 @@ static void room_201_init() {
 		player.facing = FACING_SOUTH;
 	}
 
-	if (_globals[kTeleporterCommand]) {
+	if (global[kTeleporterCommand]) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		int sepChar = (_globals[kSexOfRex] == SEX_MALE) ? 't' : 'u';
+		int sepChar = (global[kSexOfRex] == SEX_MALE) ? 't' : 'u';
 		// Guess values. What is the default value used by the compiler?
 		int suffixNum = -1;
 		int endTrigger = -1;
-		switch (_globals[kTeleporterCommand]) {
+		switch (global[kTeleporterCommand]) {
 		case 1:
 			suffixNum = 3;
 			endTrigger = 76;
-			_globals[kTeleporterUnderstood] = true;
+			global[kTeleporterUnderstood] = true;
 			break;
 		case 2:
 			suffixNum = 1;
@@ -93,20 +93,20 @@ static void room_201_init() {
 		default:
 			break;
 		}
-		_globals[kTeleporterCommand] = 0;
+		global[kTeleporterCommand] = 0;
 		if (suffixNum >= 0)
 			_scene->loadAnimation(kernel_name(sepChar, suffixNum), endTrigger);
 	}
 
-	if ((_scene->_priorSceneId == 202) && (_globals[kMeteorologistStatus] == METEOROLOGIST_PRESENT) && !_scene->_roomChanged) {
-		_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
-		_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	if ((_scene->_priorSceneId == 202) && (global[kMeteorologistStatus] == METEOROLOGIST_PRESENT) && !_scene->_roomChanged) {
+		g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
+		g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
 		kernel.quotes = quote_load(90, 91, 0);
 		player.commands_allowed = false;
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -1, 12);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_SPRITE, 12, 70);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 7, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], -1, 12);
+		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 12, 70);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
 		local._pterodactylFlag = false;
 		player_walk(157, 143, FACING_NORTH);
 		pal_change_color(252, 45, 63, 45);
@@ -115,7 +115,7 @@ static void room_201_init() {
 	} else
 		local._pterodactylFlag = true;
 
-	if (_globals[kTeleporterUnderstood])
+	if (global[kTeleporterUnderstood])
 		_scene->_hotspots.activate(words_strange_device, false);
 
 	section_2_music();
@@ -123,25 +123,25 @@ static void room_201_init() {
 
 static void room_201_daemon() {
 	if (local._pterodactylFlag && (g_engine->getRandomNumber(5000) == 9)) {
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 5, 1, 6, 0);
-		int idx = _scene->_dynamicHotspots.add(words_swooping_creature, words_walkto, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 5, 1, 6, 0);
+		int idx = _scene->_dynamicHotspots.add(words_swooping_creature, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(270, 80), FACING_EAST);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 8);
+		_scene->_sequences.setDepth(g_sequence_ids[5], 8);
 		g_engine->_soundManager->command(14, 0);
 		local._pterodactylFlag = false;
 	}
 
 	if (kernel.trigger == 70) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 9, 1, 0, 0);
 		player.walker_visible = false;
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 12, 16);
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], 12, 16);
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 9, 1, 0, 0);
 		g_engine->_soundManager->command(42, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 3, 81);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 1);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 3, 81);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 	}
 
 	if (kernel.trigger == 81) {
@@ -149,30 +149,30 @@ static void room_201_daemon() {
 	}
 
 	if (kernel.trigger == 71) {
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], -2, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 9, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], -2, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 1);
 	}
 
 	if (kernel.trigger == 73) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 17, -2);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 9, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], 17, -2);
+		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
 	}
 
 	if (kernel.trigger == 74) {
 		g_engine->_soundManager->command(40, 0);
 
 		_scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, quote_string(kernel.quotes, 91));
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 9, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 1);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -2, -2);
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 9, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], -2, -2);
 		_scene->_sequences.addTimer(180, 75);
 	}
 
 	if (kernel.trigger == 75) {
-		_globals[kMeteorologistEverSeen] = 0;
+		global[kMeteorologistEverSeen] = 0;
 		_scene->_nextSceneId = 202;
 	}
 
@@ -183,8 +183,8 @@ static void room_201_daemon() {
 	}
 
 	if (kernel.trigger == 77) {
-		_globals[kTeleporterCommand] = 1;
-		_scene->_nextSceneId = _globals[kTeleporterDestination];
+		global[kTeleporterCommand] = 1;
+		_scene->_nextSceneId = global[kTeleporterDestination];
 		_scene->_reloadSceneFlag = true;
 	}
 
@@ -203,7 +203,7 @@ static void room_201_parser() {
 			if (kernel.trigger == 0) {
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				int sepChar = (_globals[kSexOfRex] == SEX_MALE) ? 't' : 'u';
+				int sepChar = (global[kSexOfRex] == SEX_MALE) ? 't' : 'u';
 				_scene->loadAnimation(kernel_name(sepChar, 0), 1);
 			} else if (kernel.trigger == 1) {
 				_scene->_nextSceneId = 213;
@@ -227,7 +227,7 @@ static void room_201_parser() {
 		} else if (player_said_2(look, field_to_south)) {
 			text_show(20110);
 		} else if (player_said_2(look, strange_device)) {
-			if (_globals[kMeteorologistEverSeen])
+			if (global[kMeteorologistEverSeen])
 				text_show(20112);
 			else
 				text_show(20109);
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index aa235a00dcd..6655d38b460 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -52,45 +52,45 @@ static Scratch local;
 
 static void room_202_init() {
 	player.walker_been_visible = true;
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('b', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('l', -1));
-	if (_globals[kSexOfRex] != SEX_MALE) {
-		_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*ROXBD_2");
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('l', -1));
+	if (global[kSexOfRex] != SEX_MALE) {
+		g_sprite_ids[7] = _scene->_sprites.addSprites("*ROXBD_2");
 	} else {
-		_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*RXMBD_2");
+		g_sprite_ids[7] = _scene->_sprites.addSprites("*RXMBD_2");
 	}
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('a', 2));
-
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 0);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(149, 113));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10);
-	int idx = _scene->_dynamicHotspots.add(words_skull, words_walkto, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
+	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('a', 2));
+
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
+	_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(149, 113));
+	_scene->_sequences.setDepth(g_sequence_ids[2], 10);
+	int idx = _scene->_dynamicHotspots.add(words_skull, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(153, 97), FACING_SOUTH);
 
-	if (!(_globals[kBone202Status] & 1)) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(130, 108));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
-		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+	if (!(global[kBone202Status] & 1)) {
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(130, 108));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 10);
+		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(132, 97), FACING_SOUTH);
 	}
 
-	if (!(_globals[kBone202Status] & 2)) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[6], Common::Point(166, 110));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 10);
-		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, _globals._sequenceIndexes[6], Common::Rect(0, 0, 0, 0));
+	if (!(global[kBone202Status] & 2)) {
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[6], Common::Point(166, 110));
+		_scene->_sequences.setDepth(g_sequence_ids[6], 10);
+		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(165, 99), FACING_SOUTH);
 	}
 
-	if (_globals[kBone202Status])
-		_scene->changeVariant(_globals[kBone202Status]);
+	if (global[kBone202Status])
+		_scene->changeVariant(global[kBone202Status]);
 
 	if (_scene->_priorSceneId == 201) {
 		player.x = 190;
@@ -102,11 +102,11 @@ static void room_202_init() {
 		player.facing = FACING_NORTH;
 	}
 
-	if (_globals[kLadderBroken]) {
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 6);
+	if (global[kLadderBroken]) {
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[5], 6);
 		_scene->_hotspots.activate(words_ladder, false);
-		idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+		idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
 	}
 
@@ -115,7 +115,7 @@ static void room_202_init() {
 
 	if (_scene->_priorSceneId == RETURNING_FROM_DIALOG) {
 		if (local._waitingMeteoFl) {
-			_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
+			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
 			player.walker_visible = false;
 		}
 	} else {
@@ -128,25 +128,25 @@ static void room_202_init() {
 	if (_scene->_roomChanged)
 		inter_give_to_player(OBJ_BINOCULARS);
 
-	if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
+	if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		local._ladderTopFl = (_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER);
+		local._ladderTopFl = (global[kMeteorologistWatch] == METEOROLOGIST_TOWER);
 
 		if (local._ladderTopFl) {
-			_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 8);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
+			g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 8);
+			_scene->_sequences.setDepth(g_sequence_ids[10], 1);
 
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(247, 82));
+			_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(247, 82));
 			player.x = 246;
 			player.y = 124;
 			player.facing = FACING_NORTH;
-			_globals[kTeleporterUnderstood] = true;
+			global[kTeleporterUnderstood] = true;
 		} else {
-			_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
+			g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 6);
+			_scene->_sequences.setDepth(g_sequence_ids[10], 1);
 
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
+			_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
 			player.x = 171;
 			player.y = 122;
 			player.facing = FACING_NORTH;
@@ -157,9 +157,9 @@ static void room_202_init() {
 	} else {
 		if (local._ladderTopFl) {
 			player.walker_visible = false;
-			_scene->_sequences.startCycle(_globals._sequenceIndexes[9], true, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
+			_scene->_sequences.startCycle(g_sequence_ids[9], true, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[9], 1);
+			_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
 			player.x = 246;
 			player.y = 124;
 			player.facing = FACING_NORTH;
@@ -245,7 +245,7 @@ static void room_202_daemon() {
 
 		local._meteoClock1 = _scene->_frameStartTime + 15 * 60;
 
-		if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
+		if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
 			Common::Point msgPos;
 			int msgFlag;
 			if (!local._ladderTopFl) {
@@ -258,56 +258,56 @@ static void room_202_daemon() {
 			int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, quote_string(kernel.quotes, 102));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 
-			if (_globals[kMeteorologistWatch] == METEOROLOGIST_GROUND) {
+			if (global[kMeteorologistWatch] == METEOROLOGIST_GROUND) {
 				player2.words[0] = words_look;
 				player2.words[1] = words_binoculars;
 				player2.words[2] = words_strange_device;
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_PARSER;
 				_scene->_sequences.addTimer(2 * 60, 2);
 				local._meteorologistSpecial = true;
-			} else if (_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER) {
+			} else if (global[kMeteorologistWatch] == METEOROLOGIST_TOWER) {
 				_scene->_sequences.addTimer(2 * 60, 90);
 			}
 		}
 
-		_globals[kMeteorologistWatch] = METEOROLOGIST_NORMAL;
+		global[kMeteorologistWatch] = METEOROLOGIST_NORMAL;
 	}
 
 	switch (kernel.trigger) {
 	case 90:
 		g_engine->_soundManager->command(41, 0);
-		_scene->_sequences.remove(_globals._sequenceIndexes[10]);
-		_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], true, 6, 1, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
+		_scene->_sequences.remove(g_sequence_ids[10]);
+		g_sequence_ids[9] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[9], true, 6, 1, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
+		_scene->_sequences.setDepth(g_sequence_ids[9], 1);
+		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
 		break;
 	case 91:
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 1);
+		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
+		_scene->_sequences.setDepth(g_sequence_ids[9], 1);
 		_scene->_sequences.addTimer(60, 92);
 		break;
 	case 92:
 	{
-		_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-		_globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6, 1, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 1);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
+		_scene->_sequences.remove(g_sequence_ids[9]);
+		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6, 1, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[11], 1);
+		_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
 		_scene->_kernelMessages.reset();
 		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, -65), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 98));
-		_scene->_kernelMessages.setSeqIndex(msgIndex, _globals._sequenceIndexes[11]);
+		_scene->_kernelMessages.setSeqIndex(msgIndex, g_sequence_ids[11]);
 	}
 	break;
 	case 93:
 	{
-		_globals[kLadderBroken] = false;
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 0, 0, 0);
+		global[kLadderBroken] = false;
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 0, 0, 0);
 		_scene->_hotspots.activate(words_ladder, false);
-		int idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+		int idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[11], _globals._sequenceIndexes[5]);
-		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[11]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[11], g_sequence_ids[5]);
+		_scene->_sequences.updateTimeout(-1, g_sequence_ids[11]);
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		local._ladderTopFl = false;
@@ -319,19 +319,19 @@ static void room_202_daemon() {
 		break;
 	}
 
-	if (!_scene->_animation[0] && (_globals[kMeteorologistStatus] != METEOROLOGIST_GONE) && (local._meteoClock2 <= _scene->_frameStartTime) && (local._meteoClock1 <= _scene->_frameStartTime)) {
+	if (!_scene->_animation[0] && (global[kMeteorologistStatus] != METEOROLOGIST_GONE) && (local._meteoClock2 <= _scene->_frameStartTime) && (local._meteoClock1 <= _scene->_frameStartTime)) {
 		int randVal = g_engine->getRandomNumber(1, 500);
 		int threshold = 1;
 		if (local._ladderTopFl)
 			threshold += 25;
-		if (!_globals[kMeteorologistEverSeen])
+		if (!global[kMeteorologistEverSeen])
 			threshold += 25;
 		if (threshold >= randVal) {
 			g_engine->_soundManager->command(17, 0);
 			_scene->loadAnimation(kernel_name('M', -1), 71);
 			local._toStationFl = true;
 			local._toTeleportFl = false;
-			_globals[kMeteorologistEverSeen] = true;
+			global[kMeteorologistEverSeen] = true;
 			local._lastRoute = 0;
 			local._stationCounter = 0;
 			local._meteoClock2 = _scene->_frameStartTime + 2;
@@ -343,7 +343,7 @@ static void room_202_daemon() {
 
 	if (local._waitingMeteoFl) {
 		if (_scene->_animation[0]->getCurrentFrame() >= 200) {
-			if ((_globals[kMeteorologistWatch] == METEOROLOGIST_TOWER) || _globals[kLadderBroken]) {
+			if ((global[kMeteorologistWatch] == METEOROLOGIST_TOWER) || global[kLadderBroken]) {
 				_scene->_nextSceneId = 213;
 			} else {
 				text_show(20201);
@@ -434,12 +434,12 @@ static void room_202_pre_parser() {
 			g_engine->_soundManager->command(29, 0);
 			player.ready_to_walk = false;
 			player.commands_allowed = false;
-			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-			_globals._sequenceIndexes[8] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			_scene->_sequences.remove(g_sequence_ids[9]);
+			g_sequence_ids[8] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[8], 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 		} else if (kernel.trigger == 1) {
-			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[8]);
+			_scene->_sequences.updateTimeout(-1, g_sequence_ids[8]);
 			_scene->_dynamicHotspots.remove(local._ladderHotspotId);
 			player.walker_visible = true;
 			player.ready_to_walk = true;
@@ -471,11 +471,11 @@ static void room_202_parser() {
 	} else if (player_said_2(walk_towards, field_to_south)) {
 		_scene->_nextSceneId = 203;
 	} else if (player_said_2(walk_towards, field_to_north)) {
-		if (_globals[kMeteorologistStatus] != METEOROLOGIST_GONE) {
+		if (global[kMeteorologistStatus] != METEOROLOGIST_GONE) {
 			if (_scene->_animation[0])
-				_globals[kMeteorologistStatus] = METEOROLOGIST_PRESENT;
+				global[kMeteorologistStatus] = METEOROLOGIST_PRESENT;
 			else
-				_globals[kMeteorologistStatus] = METEOROLOGIST_ABSENT;
+				global[kMeteorologistStatus] = METEOROLOGIST_ABSENT;
 		}
 		_scene->_nextSceneId = 201;
 	} else if (player_said_2(take, bone) && (player.main_object_source == 4)) {
@@ -486,19 +486,19 @@ static void room_202_parser() {
 			} else {
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_globals._sequenceIndexes[7] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[7], false, 3, 2, 0, 0);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[7]);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[7] = _scene->_sequences.startPingPongCycle(g_sprite_ids[7], false, 3, 2, 0, 0);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[7]);
+				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 		case 1:
 			if (Common::Point(player.x, player.y) == Common::Point(132, 97)) {
-				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-				_globals[kBone202Status] |= BONE_202_LEFT_GONE;
+				_scene->_sequences.remove(g_sequence_ids[1]);
+				global[kBone202Status] |= BONE_202_LEFT_GONE;
 			} else {
-				_scene->_sequences.remove(_globals._sequenceIndexes[6]);
-				_globals[kBone202Status] |= BONE_202_RIGHT_GONE;
+				_scene->_sequences.remove(g_sequence_ids[6]);
+				global[kBone202Status] |= BONE_202_RIGHT_GONE;
 			}
 			break;
 		case 2:
@@ -510,7 +510,7 @@ static void room_202_parser() {
 				inter_give_to_player(OBJ_BONE);
 				object_examine(OBJ_BONE, 20218, 0);
 			}
-			_scene->changeVariant(_globals[kBone202Status]);
+			_scene->changeVariant(global[kBone202Status]);
 			player.commands_allowed = true;
 			player.walker_visible = true;
 			break;
@@ -519,7 +519,7 @@ static void room_202_parser() {
 		}
 
 		player.command_ready = false;
-	} else if (player_said_2(climb_up, ladder) && !_globals[kLadderBroken]) {
+	} else if (player_said_2(climb_up, ladder) && !global[kLadderBroken]) {
 		switch (kernel.trigger) {
 		case 0:
 			g_engine->_soundManager->command(29, 0);
@@ -529,16 +529,16 @@ static void room_202_parser() {
 
 			local._ladderHotspotId = _scene->_dynamicHotspots.add(words_ladder, words_climb_down, -1, Common::Rect(241, 68, 241 + 12, 68 + 54));
 			_scene->_dynamicHotspots.setPosition(local._ladderHotspotId, Common::Point(246, 124), FACING_NORTH);
-			_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[8], 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 		case 1:
 		{
-			_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[8], _globals._sequenceIndexes[9]);
+			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 1);
+			_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
+			_scene->_sequences.setDepth(g_sequence_ids[9], 1);
+			_scene->_sequences.updateTimeout(g_sequence_ids[8], g_sequence_ids[9]);
 			local._ladderTopFl = true;
 			player.commands_allowed = true;
 			int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 97));
@@ -549,27 +549,27 @@ static void room_202_parser() {
 			player.command_ready = false;
 			return;
 		}
-	} else if ((player_said_3(look, binoculars, field_to_north) || (player_said_3(look, binoculars, strange_device))) && (_globals[kSexOfRex] == SEX_MALE)) {
+	} else if ((player_said_3(look, binoculars, field_to_north) || (player_said_3(look, binoculars, strange_device))) && (global[kSexOfRex] == SEX_MALE)) {
 		if (!local._ladderTopFl) {
 			switch (kernel.trigger) {
 			case 0:
 				local._toTeleportFl = true;
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 1, 6);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[10]);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[10], 1, 6);
+				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
+				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[10]);
+				_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 			case 1:
-				_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
+				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 6);
+				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
+				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
 				if (_scene->_animation[0]) {
 					local._waitingMeteoFl = true;
-					_globals[kMeteorologistWatch] = METEOROLOGIST_GROUND;
+					global[kMeteorologistWatch] = METEOROLOGIST_GROUND;
 				} else {
 					_scene->_sequences.addTimer(120, 2);
 				}
@@ -578,15 +578,15 @@ static void room_202_parser() {
 				if (!_scene->_animation[0] && !local._meteorologistSpecial) {
 					text_show(20222);
 				}
-				_scene->_sequences.remove(_globals._sequenceIndexes[10]);
-				_globals._sequenceIndexes[10] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 1, 6);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(172, 123));
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				_scene->_sequences.remove(g_sequence_ids[10]);
+				g_sequence_ids[10] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
+				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
+				_scene->_sequences.setAnimRange(g_sequence_ids[10], 1, 6);
+				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
+				_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 			case 3:
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[10]);
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[10]);
 				player.commands_allowed = true;
 				player.walker_visible = true;
 				break;
@@ -599,22 +599,22 @@ static void room_202_parser() {
 			case 0:
 				local._toTeleportFl = true;
 				player.commands_allowed = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-				_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], true, 6, 1, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				_scene->_sequences.remove(g_sequence_ids[9]);
+				g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], true, 6, 1, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
+				_scene->_sequences.setDepth(g_sequence_ids[9], 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 			case 1:
-				_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, -2);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[10], Common::Point(247, 82));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
+				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], true, -2);
+				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(247, 82));
+				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
 				if (_scene->_animation[0]) {
 					if (_scene->_animation[0]->getCurrentFrame() > 200) {
 						_scene->_sequences.addTimer(120, 2);
 					} else {
 						local._waitingMeteoFl = true;
-						_globals[kMeteorologistWatch] = METEOROLOGIST_GONE;
+						global[kMeteorologistWatch] = METEOROLOGIST_GONE;
 						if ((_scene->_animation[0]->getCurrentFrame() >= 44) && (_scene->_animation[0]->getCurrentFrame() <= 75)) {
 							_scene->_kernelMessages.reset();
 							int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 100));
@@ -632,16 +632,16 @@ static void room_202_parser() {
 				if (!_scene->_animation[0])
 					text_show(20222);
 				local._meteorologistSpecial = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[10]);
-				_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				_scene->_sequences.remove(g_sequence_ids[10]);
+				g_sequence_ids[9] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
+				_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
+				_scene->_sequences.setDepth(g_sequence_ids[9], 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 			case 3:
-				_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], true, 1);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(247, 82));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
+				g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 1);
+				_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
+				_scene->_sequences.setDepth(g_sequence_ids[9], 1);
 				player.commands_allowed = true;
 				break;
 			default:
@@ -658,9 +658,9 @@ static void room_202_parser() {
 	} else if (player_said_2(look, grass)) {
 		text_show(20204);
 	} else if (player_said_2(look, field_to_north)) {
-		if ((_globals[kMeteorologistStatus] == METEOROLOGIST_ABSENT) || (_globals[kMeteorologistStatus] == METEOROLOGIST_GONE))
+		if ((global[kMeteorologistStatus] == METEOROLOGIST_ABSENT) || (global[kMeteorologistStatus] == METEOROLOGIST_GONE))
 			text_show(20205);
-		else if (_globals[kMeteorologistStatus] == METEOROLOGIST_PRESENT)
+		else if (global[kMeteorologistStatus] == METEOROLOGIST_PRESENT)
 			text_show(20220);
 	} else if (player_said_2(look, watch_tower)) {
 		text_show(20206);
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 8157f2955b5..3a84de6a405 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -59,7 +59,7 @@ static void room_203_init() {
 	local._rhotundaEatFl = false;
 	local._rhotundaEat2Fl = false;
 
-	if ((_globals[kRhotundaStatus] == 0) && (!_scene->_roomChanged)) {
+	if ((global[kRhotundaStatus] == 0) && (!_scene->_roomChanged)) {
 		local._rhotundaEatFl = true;
 		player_walk(158, 135, FACING_SOUTH);
 		int idx = _scene->_dynamicHotspots.add(words_field_to_south, words_walk_towards, 0, Common::Rect(0, 0, 320, 156));
@@ -68,10 +68,10 @@ static void room_203_init() {
 	}
 
 	if (!local._rhotundaEatFl) {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('b', -1));
+		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('b', -1));
 		if (g_engine->getRandomNumber(1, 3) == 2) {
-			_globals._spriteIndexes[15] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 9, 1, 0, 0);
-			int idx = _scene->_dynamicHotspots.add(words_yellow_bird, words_look_at, _globals._spriteIndexes[15], Common::Rect(0, 0, 0, 0));
+			g_sprite_ids[15] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 9, 1, 0, 0);
+			int idx = _scene->_dynamicHotspots.add(words_yellow_bird, words_look_at, g_sprite_ids[15], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 			g_engine->_soundManager->command(14, 0);
 		}
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index d4a523f9281..b507a7ad53c 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -45,37 +45,37 @@ static Scratch local;
 
 
 static void room_205_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('f', -1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('p', -1));
-
-	if (_globals[kSexOfRex] == SEX_MALE)
-		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('a', 1));
-
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 10, 0, 0, 3);
-	int idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('f', -1));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('p', -1));
+
+	if (global[kSexOfRex] == SEX_MALE)
+		g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('a', 1));
+
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 10, 0, 0, 3);
+	int idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
 
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 0, 0, 0);
-	idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 0, 0, 0);
+	idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
 
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 0, 0, 0);
-	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 0, 0, 0);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 11);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 0, 0, 0);
+	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 0, 0, 0);
+	_scene->_sequences.setDepth(g_sequence_ids[5], 11);
 
 	if (!player.been_here_before) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
-		idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, _globals._sequenceIndexes[6], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 7, 1, 0, 0);
+		idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
 	}
 
 	if (object[12].location == 205) {
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 11);
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 7, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[4], 11);
 	} else {
 		_scene->_hotspots.activate(450, false);
 	}
@@ -95,7 +95,7 @@ static void room_205_init() {
 
 	local._chickenTime = _scene._frameStartTime;
 
-	if (_globals[kSexOfRex] == SEX_FEMALE)
+	if (global[kSexOfRex] == SEX_FEMALE)
 		_scene->_kernelMessages.initRandomMessages(3,
 			Common::Rect(195, 99, 264, 134), 13, 2, 0xFDFC, 60,
 			108, 108, 109, 109, 110, 110, 111, 108, 0);
@@ -105,25 +105,25 @@ static void room_205_init() {
 		player.y = 152;
 	}
 
-	if (_globals[kSexOfRex] != SEX_MALE) {
+	if (global[kSexOfRex] != SEX_MALE) {
 		_scene->loadAnimation(kernel_name('a', -1));
 		_scene->_animation[0]->_repeatFlag = true;
 	} else {
 		local._beingKicked = true;
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 2);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 6, 73);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 11, 74);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 2);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 6, 73);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 11, 74);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	section_2_music();
 }
 
 static void room_205_daemon() {
-	if (_globals[kSexOfRex] == SEX_FEMALE) {
+	if (global[kSexOfRex] == SEX_FEMALE) {
 		_scene->_kernelMessages.randomServer();
 
 		if (_scene._frameStartTime >= local._chickenTime) {
@@ -136,9 +136,9 @@ static void room_205_daemon() {
 	}
 
 	if (_scene._frameStartTime - local._lastFishTime > 1300) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(
-			_globals._spriteIndexes[6], false, 5, 1, 0, 0);
-		int idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, _globals._sequenceIndexes[6],
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(
+			g_sprite_ids[6], false, 5, 1, 0, 0);
+		int idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, g_sequence_ids[6],
 			Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
 		local._lastFishTime = _scene._frameStartTime;
@@ -153,9 +153,9 @@ static void room_205_daemon() {
 	}
 
 	if (kernel.trigger == 71) {
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 2);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], -2, -2);
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 2);
+		_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 72, 180, quote_string(kernel.quotes, 114));
 	}
@@ -208,7 +208,7 @@ static void room_205_parser() {
 				} else if (kernel.trigger == 2) {
 					handleWomanSpeech(0x7E);
 					local._dialog1.write(0x76, false);
-					_globals[kChickenPermitted] = true;
+					global[kChickenPermitted] = true;
 				}
 				break;
 
@@ -253,11 +253,11 @@ static void room_205_parser() {
 			pal_lock();
 			_scene->_kernelMessages.reset();
 			kernel_dump_walker_only();
-			_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('a', 0));
+			g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('a', 0));
 			kernel_new_palette();
-			_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], -1);
+			g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
+			_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			_scene->_sequences.updateTimeout(g_sequence_ids[9], -1);
 			g_engine->_soundManager->command(27, 0);
 		} else if (kernel.trigger == 1) {
 			if (_scene->_animation[0] != nullptr)
@@ -275,12 +275,12 @@ static void room_205_parser() {
 				_scene->_kernelMessages.reset();
 				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x6B));
 			}
-		} else if (player_said_2(take, chicken_on_spit) && _globals[kChickenPermitted] && object_is_here(OBJ_CHICKEN)) {
+		} else if (player_said_2(take, chicken_on_spit) && global[kChickenPermitted] && object_is_here(OBJ_CHICKEN)) {
 			inter_give_to_player(OBJ_CHICKEN);
-			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
+			_scene->_sequences.remove(g_sequence_ids[4]);
 			_scene->_hotspots.activate(words_chicken_on_spit, false);
 			object_examine(OBJ_CHICKEN, 812, 0);
-		} else if (player_said_2(take, chicken_on_spit) && (!_globals[kChickenPermitted]))
+		} else if (player_said_2(take, chicken_on_spit) && (!global[kChickenPermitted]))
 			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 0, 120, quote_string(kernel.quotes, 0x80));
 		else if (player_said_2(look, native_woman))
 			text_show(20503);
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index 53d84de1eaf..bd15f4cc315 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -45,15 +45,15 @@ static Scratch local;
 
 
 static void room_207_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('h', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('h', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('e', 1));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('g', 1));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('g', 0));
-	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 7, 0, 0, 0);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 7);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('h', 0));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('h', 1));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('e', 1));
+	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('g', 1));
+	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('g', 0));
+	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 7, 0, 0, 0);
+	_scene->_sequences.setDepth(g_sequence_ids[5], 7);
 
 	int var2;
 	if (!player.been_here_before) {
@@ -70,15 +70,15 @@ static void room_207_init() {
 	local._spiderFl = (var2 & 1);
 
 	if (local._vultureFl) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 30, 0, 0, 400);
-		local._vultureHotspotId = _scene->_dynamicHotspots.add(words_vulture, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 30, 0, 0, 400);
+		local._vultureHotspotId = _scene->_dynamicHotspots.add(words_vulture, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._vultureHotspotId, Common::Point(254, 94), FACING_WEST);
 	}
 
 	if (local._spiderFl) {
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], -1, -1);
-		local._spiderHotspotId = _scene->_dynamicHotspots.add(words_spider, words_walkto, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 7, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], -1, -1);
+		local._spiderHotspotId = _scene->_dynamicHotspots.add(words_spider, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._spiderHotspotId, Common::Point(59, 132), FACING_SOUTH);
 	}
 
@@ -98,15 +98,15 @@ static void room_207_init() {
 
 	section_2_music();
 
-	_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 1, 0, 0);
-	_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 22);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 6);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+	g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 10, 1, 0, 0);
+	_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 22);
+	_scene->_sequences.setDepth(g_sequence_ids[6], 6);
+	_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 }
 
 static void moveVulture() {
-	_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
+	_scene->_sequences.remove(g_sequence_ids[1]);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 7, 1, 0, 0);
 	g_engine->_soundManager->command(43, 0);
 	local._vultureFl = false;
 	local._vultureTime = player.clock;
@@ -114,8 +114,8 @@ static void moveVulture() {
 }
 
 static void moveSpider() {
-	_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-	_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 5, 1, 0, 0);
+	_scene->_sequences.remove(g_sequence_ids[4]);
+	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 5, 1, 0, 0);
 	local._spiderFl = false;
 	local._spiderTime = player.clock;
 	_scene->_dynamicHotspots.remove(local._spiderHotspotId);
@@ -134,9 +134,9 @@ static void room_207_daemon() {
 	}
 
 	if (kernel.trigger == 70) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 23, 34);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 6);
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 10, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], 23, 34);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 6);
 	}
 
 	if (kernel.trigger == 71)
@@ -146,11 +146,11 @@ static void room_207_daemon() {
 		return;
 
 	if ((player.x >= 124) && (player.x <= 201)) {
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 6);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 6);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 6);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 		local._eyeFl = true;
 	}
 }
@@ -181,14 +181,14 @@ static void room_207_parser() {
 			(player.y > 111) && (player.y < 130)) {
 			if ((player.x <= 162) || (player.x >= 181) ||
 				(player.y <= 115) || (player.y >= 126)) {
-				_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 2, 0, 0);
-				_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 2, 0, 0);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 6);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
+				g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 2, 0, 0);
+				g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 2, 0, 0);
+				_scene->_sequences.setDepth(g_sequence_ids[7], 6);
+				_scene->_sequences.setDepth(g_sequence_ids[8], 6);
 			}
 		} else if (local._eyeFl) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[7]);
-			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
+			_scene->_sequences.remove(g_sequence_ids[7]);
+			_scene->_sequences.remove(g_sequence_ids[8]);
 			local._eyeFl = false;
 		}
 
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index 0eeb445f1f6..bd96b1cf18b 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -42,30 +42,30 @@ static Scratch local;
 
 
 static void updateTrap() {
-	if (_globals[kRhotundaStatus] == 1) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 0, 0, 24);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
-		int idx = _scene->_dynamicHotspots.add(words_huge_legs, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+	if (global[kRhotundaStatus] == 1) {
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 8, 0, 0, 24);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 5);
+		int idx = _scene->_dynamicHotspots.add(words_huge_legs, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
 		_scene->_hotspots.activate(414, false);
 		return;
 	}
 
-	switch (_globals[kLeavesStatus]) {
+	switch (global[kLeavesStatus]) {
 	case LEAVES_ON_GROUND:
 	{
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 15);
-		int idx = _scene->_dynamicHotspots.add(words_pile_of_leaves, words_walkto, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[2], 15);
+		int idx = _scene->_dynamicHotspots.add(words_pile_of_leaves, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(60, 152), FACING_NORTH);
 	}
 	break;
 	case LEAVES_ON_TRAP:
 	{
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 15);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 		_scene->_hotspots.activate(words_deep_pit, false);
-		int idx = _scene->_dynamicHotspots.add(words_leaf_covered_pit, words_walkto, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+		int idx = _scene->_dynamicHotspots.add(words_leaf_covered_pit, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
 		_scene->_dynamicHotspots[idx]._articleNumber = PREP_ON;
 	}
@@ -76,11 +76,11 @@ static void updateTrap() {
 }
 
 static void room_208_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RXMBD_8");
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	g_sprite_ids[5] = _scene->_sprites.addSprites("*RXMBD_8");
 
 	updateTrap();
 
@@ -109,7 +109,7 @@ static void room_208_init() {
 
 	kernel.quotes = quote_load(0x81, 0x46, 0);
 
-	if ((_scene->_priorSceneId == 207) && (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
+	if ((_scene->_priorSceneId == 207) && (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
 		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 129));
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 	}
@@ -126,7 +126,7 @@ static void room_208_daemon() {
 		local._rhotundaTime = _scene->_animation[0]->getCurrentFrame();
 
 		if (local._rhotundaTime == 125)
-			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
+			_scene->_sequences.remove(g_sequence_ids[4]);
 	}
 
 	if (!local._rhotundaTurnFl)
@@ -146,8 +146,8 @@ static void room_208_daemon() {
 		local._rhotundaTime = 0;
 		break;
 	case 81:
-		_scene->_sequences.remove(_globals._spriteIndexes[15]);
-		_globals[kRhotundaStatus] = 1;
+		_scene->_sequences.remove(g_sprite_ids[15]);
+		global[kRhotundaStatus] = 1;
 		updateTrap();
 		_scene->_sequences.addTimer(90, 82);
 		break;
@@ -177,8 +177,8 @@ static void subAction(int mode) {
 	{
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 6, 1, 0, 0);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 1, 0, 0);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
 
 		int endTrigger;
 		if ((mode == 1) || (mode == 2))
@@ -186,17 +186,17 @@ static void subAction(int mode) {
 		else
 			endTrigger = 2;
 
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, endTrigger);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, endTrigger);
 	}
 	break;
 	case 1:
 	{
-		int oldSeq = _globals._sequenceIndexes[5];
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 3, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 3, 4);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldSeq);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		int oldSeq = g_sequence_ids[5];
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 3, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[5], 3, 4);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[5], oldSeq);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		g_engine->_soundManager->command(20, 0);
 	}
 	break;
@@ -206,19 +206,19 @@ static void subAction(int mode) {
 		switch (mode) {
 		case 1:
 			inter_give_to_player(OBJ_BIG_LEAVES);
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals[kLeavesStatus] = 1;
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			global[kLeavesStatus] = 1;
 			break;
 
 		case 2:
 			inter_move_object(OBJ_BIG_LEAVES, 1);
-			_globals[kLeavesStatus] = 2;
+			global[kLeavesStatus] = 2;
 			updateTrap();
 			break;
 
 		case 3:
-			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
+			_scene->_sequences.remove(g_sequence_ids[3]);
+			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
 			inter_take_from_player(OBJ_TWINKIFRUIT, 1);
 			g_engine->_soundManager->command(34, 0);
 			break;
@@ -237,12 +237,12 @@ static void subAction(int mode) {
 			break;
 		}
 
-		int oldVal = _globals._sequenceIndexes[5];
-		_globals._sequenceIndexes[5] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[5], false, 6, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 3);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldVal);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		int oldVal = g_sequence_ids[5];
+		g_sequence_ids[5] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[5], false, 6, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[5], 1, 3);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[5], oldVal);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
@@ -258,7 +258,7 @@ static void subAction(int mode) {
 
 static void room_208_parser() {
 	if (player_said_2(walk_towards, lowlands_to_north)) {
-		if (_globals[kRhotundaStatus])
+		if (global[kRhotundaStatus])
 			_scene->_nextSceneId = 203;
 		else if (kernel.trigger == 0) {
 			player.commands_allowed = false;
@@ -268,11 +268,11 @@ static void room_208_parser() {
 			_scene->_nextSceneId = 203;
 	} else if (player_said_2(walk_towards, field_to_south))
 		_scene->_nextSceneId = 212;
-	else if (player_said_2(take, pile_of_leaves) && (!_globals[kLeavesStatus] || kernel.trigger)) {
+	else if (player_said_2(take, pile_of_leaves) && (!global[kLeavesStatus] || kernel.trigger)) {
 		subAction(1);
 		if (player.commands_allowed)
 			object_examine(OBJ_BIG_LEAVES, 0x326, 0);
-	} else if (player_said_3(put, big_leaves, deep_pit) && (_globals[kLeavesStatus] == 1 || kernel.trigger))
+	} else if (player_said_3(put, big_leaves, deep_pit) && (global[kLeavesStatus] == 1 || kernel.trigger))
 		subAction(2);
 	else if (player_said_3(put, twinkifruit, leaf_covered_pit)) {
 		subAction(3);
@@ -320,9 +320,9 @@ static void room_208_parser() {
 		text_show(20815);
 	else if (player_said_2(take, huge_legs) || player_said_2(pull, huge_legs))
 		text_show(20816);
-	else if (player.look_around && (_globals[kRhotundaStatus] == 1))
+	else if (player.look_around && (global[kRhotundaStatus] == 1))
 		text_show(20819);
-	else if (player.look_around && (_globals[kLeavesStatus] == 2))
+	else if (player.look_around && (global[kLeavesStatus] == 2))
 		text_show(20818);
 	else if (player.look_around)
 		text_show(20817);
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 17466b2da64..26755d090ed 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -88,37 +88,37 @@ static void handlePeek() {
 	switch (kernel.trigger) {
 	case 133:
 		g_engine->_soundManager->command(18, 0);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 134);
+		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 51, 52);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 134);
 		break;
 
 	case 134:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(60, 135);
 	}
 	break;
 
 	case 135:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
 		_scene->_sequences.addTimer(10, 136);
 		break;
 
 	case 136:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
 		_scene->_sequences.addTimer(50, 137);
 		break;
 
 	case 137:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 138);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 51, 52);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 138);
 		break;
 
 	case 138:
@@ -135,26 +135,26 @@ static void handlePeek() {
 static void handleVerticalMove() {
 	switch (kernel.trigger) {
 	case 140:
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 8, 0, 1);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 5);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 141);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 8, 0, 1);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 5);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 141);
 		break;
 
 	case 141:
 	{
 		g_engine->_soundManager->command(18, 0);
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 5);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(60, 142);
 	}
 	break;
 
 	case 142:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 5);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 143);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 5);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 143);
 		break;
 
 	case 143:
@@ -173,29 +173,29 @@ static void handleLookStay() {
 	case 145:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 2;
-		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 51, 52);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 146);
+		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 51, 52);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 146);
 		break;
 
 	case 146:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(15, 147);
 	}
 	break;
 
 	case 147:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
 		_scene->_sequences.addTimer(8, 148);
 		break;
 
 	case 148:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
 
 		if (!local._dodgeFl) {
 			_scene->_sequences.addTimer(90, 149);
@@ -217,17 +217,17 @@ static void handleLookStay() {
 static void handleLookRight() {
 	switch (kernel.trigger) {
 	case 151:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 2, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 8, 14);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 152);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 2, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 14);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 152);
 		break;
 
 	case 152:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(60, 153);
 	}
 	break;
@@ -246,20 +246,20 @@ static void handleLookRight() {
 static void handleBlink() {
 	switch (kernel.trigger) {
 	case 155:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
 		_scene->_sequences.addTimer(50, 156);
 		break;
 
 	case 156:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
 		_scene->_sequences.addTimer(10, 157);
 		break;
 
 	case 157:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
 		_scene->_sequences.addTimer(50, 158);
 		break;
 
@@ -279,33 +279,33 @@ static void handleGetBinoculars() {
 	case 161:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 3;
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 8, 24);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 20, 165);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 24);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 20, 165);
 		if (!local._fallFl && !local._dodgeFl) {
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 162);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 162);
 		} else {
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
 		}
 		break;
 
 	case 162:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 6, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 25);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 6, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 25);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
 	}
 	break;
 
 	case 163:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 24);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 24);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(8, 164);
 	}
 	break;
@@ -329,21 +329,21 @@ static void handleBinocularBlink() {
 	switch (kernel.trigger) {
 	case 167:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 2, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 25);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 168);
+		int oldIdx = g_sequence_ids[3];
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 2, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 25);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 168);
 	}
 	break;
 
 	case 168:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 8, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 24);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 24);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(30, 169);
 	}
 	break;
@@ -363,51 +363,51 @@ static void handleBinocularScan() {
 	switch (kernel.trigger) {
 	case 171:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 43, 45);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 172);
+		int oldIdx = g_sequence_ids[3];
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 43, 45);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 172);
 	}
 	break;
 
 	case 172:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
+		int oldIdx = g_sequence_ids[3];
 		int randAction = g_engine->getRandomNumber(1, 2);
 		switch (randAction) {
 		case 1:
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
 			break;
 		case 2:
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 4, 0, 0);
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 4, 0, 0);
 			break;
 		default:
 			break;
 		}
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 25);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 173);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 25);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 173);
 	}
 	break;
 
 	case 173:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 26, 30);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 174);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 26, 30);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 174);
 	}
 	break;
 
 	case 174:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 23, 24);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 24);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(60, 175);
 	}
 	break;
@@ -430,27 +430,27 @@ static void handleJumpInTree() {
 		int oldIdx = 0;
 		local._monkeyPosition = 1;
 		if (local._removeMonkeyFl)
-			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
+			_scene->_sequences.remove(g_sequence_ids[3]);
 		else
-			oldIdx = _globals._sequenceIndexes[3];
+			oldIdx = g_sequence_ids[3];
 
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 46, 49);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 46, 49);
 		if (!local._removeMonkeyFl)
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 179);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 179);
 	}
 	break;
 
 	case 179:
 	{
 		g_engine->_soundManager->command(18, 0);
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 53, 61);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 180);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 53, 61);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 180);
 	}
 	break;
 
@@ -470,53 +470,53 @@ static void handleTongue() {
 	switch (kernel.trigger) {
 	case 182:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 26, 30);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 183);
+		int oldIdx = g_sequence_ids[3];
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 26, 30);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 183);
 	}
 	break;
 
 	case 183:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 31, 33);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 184);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 31, 33);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 184);
 	}
 	break;
 
 	case 184:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 36, 37);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 185);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 36, 37);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 185);
 	}
 	break;
 
 	case 185:
 	{
 		g_engine->_soundManager->command(18, 0);
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 6, 20, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 38, 39);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 186);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 6, 20, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 38, 39);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 186);
 	}
 	break;
 
 	case 186:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 40, 41);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 178);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 40, 41);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 178);
 		local._removeMonkeyFl = false;
 	}
 	break;
@@ -530,37 +530,37 @@ static void handleStandFromPeek() {
 	switch (kernel.trigger) {
 	case 189:
 		local._monkeyPosition = 4;
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 50);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 50);
 		_scene->_sequences.addTimer(8, 190);
 		break;
 
 	case 190:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
 		_scene->_sequences.addTimer(8, 191);
 		break;
 
 	case 191:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 5);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 192);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 5);
+		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 192);
 		break;
 
 	case 192:
 	{
 		g_engine->_soundManager->command(18, 0);
-		int oldIdx = _globals._sequenceIndexes[6];
-		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldIdx);
+		int oldIdx = g_sequence_ids[6];
+		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
+		_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
 		_scene->_sequences.addTimer(8, 193);
 	}
 	break;
 
 	case 193:
-		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
+		_scene->_sequences.remove(g_sequence_ids[5]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
 		_scene->_sequences.addTimer(5, 194);
 		break;
 
@@ -577,20 +577,20 @@ static void handleStandFromPeek() {
 static void handleStandBlink() {
 	switch (kernel.trigger) {
 	case 246:
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
 		_scene->_sequences.addTimer(10, 247);
 		break;
 
 	case 247:
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 23);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 23);
 		_scene->_sequences.addTimer(8, 248);
 		break;
 
 	case 248:
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
 		_scene->_sequences.addTimer(10, 249);
 		break;
 
@@ -608,10 +608,10 @@ static void handleJumpAndHide() {
 	case 196:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 1;
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 16);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 197);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[5], 1, 16);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 197);
 		break;
 
 	case 197:
@@ -629,70 +629,70 @@ static void handleMonkeyEating() {
 	switch (kernel.trigger) {
 	case 199:
 		g_engine->_soundManager->command(18, 0);
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 14);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 200);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 1, 14);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 200);
 		break;
 
 	case 200:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 10, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 15, 16);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 201);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 10, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 15, 16);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 201);
 	}
 	break;
 
 	case 201:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 12);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 12);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
 		_scene->_sequences.addTimer(20, 202);
 	}
 	break;
 
 	case 202:
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 19);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 19);
 		_scene->_sequences.addTimer(20, 203);
 		break;
 
 	case 203:
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 17);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 17);
 		_scene->_sequences.addTimer(20, 204);
 		break;
 
 	case 204:
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 8, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 18, 19);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 205);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 8, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 18, 19);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 205);
 		break;
 
 	case 205:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 8, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 20, 21);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 206);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 8, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 20, 21);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 206);
 	}
 	break;
 
 	case 206:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 22, 25);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 22, 25);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
 		if (!local._dodgeFl && !local._fallFl)
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 207);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 207);
 		else
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
 	}
 	break;
 
@@ -702,30 +702,30 @@ static void handleMonkeyEating() {
 		int msgIndex = _scene->_kernelMessages.add(Common::Point(180, 25), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 130));
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 15, 4, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 26, 27);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 208);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 15, 4, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 26, 27);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 208);
 	}
 	break;
 
 	case 208:
 	{
 		_scene->_kernelMessages.add(Common::Point(180, 39), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 131));
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 10, 4, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 28, 29);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 4, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 28, 29);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
 	}
 	break;
 
 	case 209:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
 		_scene->_sequences.addTimer(1, 210);
 	}
 	break;
@@ -744,23 +744,23 @@ static void handleMonkeyFall() {
 	case 219:
 	{
 		g_engine->_soundManager->command(25, 0);
-		_scene->_sprites.remove(_globals._spriteIndexes[7]);
-		_scene->_sprites.remove(_globals._spriteIndexes[6]);
-		_scene->_sprites.remove(_globals._spriteIndexes[5]);
-		_scene->_sprites.remove(_globals._spriteIndexes[4]);
+		_scene->_sprites.remove(g_sprite_ids[7]);
+		_scene->_sprites.remove(g_sprite_ids[6]);
+		_scene->_sprites.remove(g_sprite_ids[5]);
+		_scene->_sprites.remove(g_sprite_ids[4]);
 
-		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('m', 4));
+		g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('m', 4));
 		_scene->_kernelMessages.add(Common::Point(180, 26), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 151));
 		_scene->_sequences.addTimer(40, 100);
 		_scene->_hotspots.activate(227, false);
-		int oldIdx = _globals._sequenceIndexes[3];
+		int oldIdx = g_sequence_ids[3];
 		local._monkeyPosition = 1;
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 35);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 220);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[8], 1, 35);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 6);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 220);
 	}
 	break;
 
@@ -769,14 +769,14 @@ static void handleMonkeyFall() {
 		g_engine->_soundManager->command(18, 0);
 		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 159));
 		_scene->_hotspots.activate(227, false);
-		int oldIdx = _globals._sequenceIndexes[3];
+		int oldIdx = g_sequence_ids[3];
 		local._monkeyPosition = 1;
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 36, 42);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 6);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 221);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[8], 36, 42);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 6);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 221);
 	}
 	break;
 
@@ -784,16 +784,16 @@ static void handleMonkeyFall() {
 	{
 		inter_move_object(OBJ_BINOCULARS, 209);
 		local._binocularsDroppedFl = true;
-		int oldIdx = _globals._sequenceIndexes[8];
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], oldIdx);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(201, 131));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[8], oldIdx);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 43, 72);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 222);
-		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+		int oldIdx = g_sequence_ids[8];
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		_scene->_sequences.updateTimeout(g_sequence_ids[9], oldIdx);
+		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(201, 131));
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[8], oldIdx);
+		_scene->_sequences.setAnimRange(g_sequence_ids[8], 43, 72);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 222);
+		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
 	}
 	break;
@@ -801,11 +801,11 @@ static void handleMonkeyFall() {
 	case 222:
 	{
 		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 70, quote_string(kernel.quotes, 160));
-		int oldIdx = _globals._sequenceIndexes[8];
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 73, 78);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[8], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 223);
+		int oldIdx = g_sequence_ids[8];
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[8], 73, 78);
+		_scene->_sequences.updateTimeout(g_sequence_ids[8], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 223);
 	}
 	break;
 
@@ -831,29 +831,29 @@ static void handleMonkeyFall() {
 static void handleMonkey1() {
 	switch (kernel.trigger) {
 	case 212:
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 9, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 13);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 213);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 9, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 1, 13);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 213);
 		break;
 
 	case 213:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 1, 22);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 214);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 7, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 1, 22);
+		_scene->_sequences.updateTimeout(g_sequence_ids[7], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 214);
 	}
 	break;
 
 	case 214:
 	{
-		int oldIdx = _globals._sequenceIndexes[7];
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 23, 26);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
+		int oldIdx = g_sequence_ids[7];
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 7, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 23, 26);
+		_scene->_sequences.updateTimeout(g_sequence_ids[7], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
 		int msgIndex = _scene->_kernelMessages.add(Common::Point(170, 21), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 156));
 		_scene->_kernelMessages.setQuoted(msgIndex, 3, true);
 	}
@@ -863,19 +863,19 @@ static void handleMonkey1() {
 	{
 		g_engine->_soundManager->command(18, 0);
 		_scene->loadAnimation(kernel_full_name(209, 'a', -1, "", EXT_AA), 251);
-		int oldIdx = _globals._sequenceIndexes[7];
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 27, 35);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], oldIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 216);
+		int oldIdx = g_sequence_ids[7];
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 7, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 27, 35);
+		_scene->_sequences.updateTimeout(g_sequence_ids[7], oldIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 216);
 	}
 	break;
 
 	case 216:
 	{
-		int oldIdx = _globals._sequenceIndexes[7];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 22);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
+		int oldIdx = g_sequence_ids[7];
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
 		_scene->_sequences.addTimer(25, 217);
 	}
 	break;
@@ -897,11 +897,11 @@ static void handleMonkey2() {
 	case 251:
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 137));
 		g_engine->_soundManager->command(22, 0);
-		_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 11, 1, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[12], Common::Point(111, 133));
-		_scene->_sequences.setScale(_globals._sequenceIndexes[12], 79);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[12], 1, 6);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
+		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 11, 1, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[12], Common::Point(111, 133));
+		_scene->_sequences.setScale(g_sequence_ids[12], 79);
+		_scene->_sequences.setAnimRange(g_sequence_ids[12], 1, 6);
+		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
 		player.clock = _scene->_frameStartTime - player.frame_delay;
 		player.walker_visible = false;
 		break;
@@ -910,17 +910,17 @@ static void handleMonkey2() {
 	{
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 132));
-		int oldIdx = _globals._sequenceIndexes[12];
-		_globals._sequenceIndexes[12] = _scene->_sequences.startCycle(_globals._spriteIndexes[12], false, 7);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[12], Common::Point(111, 133));
-		_scene->_sequences.setScale(_globals._sequenceIndexes[12], 79);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[12], oldIdx);
+		int oldIdx = g_sequence_ids[12];
+		g_sequence_ids[12] = _scene->_sequences.startCycle(g_sprite_ids[12], false, 7);
+		_scene->_sequences.setPosition(g_sequence_ids[12], Common::Point(111, 133));
+		_scene->_sequences.setScale(g_sequence_ids[12], 79);
+		_scene->_sequences.updateTimeout(g_sequence_ids[12], oldIdx);
 		_scene->_sequences.addTimer(120, 253);
 	}
 	break;
 
 	case 253:
-		_scene->_sequences.remove(_globals._sequenceIndexes[12]);
+		_scene->_sequences.remove(g_sequence_ids[12]);
 		player.clock = _scene->_frameStartTime - player.frame_delay;
 		player.walker_visible = true;
 		player.commands_allowed = true;
@@ -935,22 +935,22 @@ static void handleDodge() {
 	switch (kernel.trigger) {
 	case 241:
 		_scene->_hotspots.activate(227, true);
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
 		_scene->_sequences.addTimer(6, 242);
 		break;
 
 	case 242:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 5);
 		_scene->_sequences.addTimer(25, 243);
 		g_engine->_soundManager->command(24, 0);
 		break;
 
 	case 243:
 		g_engine->_soundManager->command(18, 0);
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
 		local._playingAnimFl = false;
 		local._pauseMode = 0;
 		_scene->_kernelMessages.reset();
@@ -969,16 +969,16 @@ static void handleDodge() {
 }
 
 static void room_209_init() {
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites("*RXMBD_2");
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('e', -1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('m', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('m', 1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('m', 3));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('m', 6));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('m', 8));
+	g_sprite_ids[11] = _scene->_sprites.addSprites("*RXMBD_2");
+	g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('e', -1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('m', 0));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('m', 1));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('m', 3));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('m', 6));
+	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('m', 8));
 
 	kernel.quotes = quote_load(0x82, 0x83, 0x84, 0x9C, 0x97, 0x95, 0x99, 0x9E, 0x98, 0x9B, 0xA0, 0x96, 0x9F,
 		0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x94, 0x89, 0x85, 0x8A, 0x86, 0x87, 0x88, 0);
@@ -987,10 +987,10 @@ static void room_209_init() {
 	pal_change_color(253, 63, 20, 22);
 
 	if (object_is_here(OBJ_PLANT_STALK)) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_plant_stalk, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		int idx = _scene->_dynamicHotspots.add(words_plant_stalk, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(263, 129), FACING_SOUTH);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 13);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 13);
 	}
 
 	if (_scene->_priorSceneId == 208) {
@@ -1004,17 +1004,17 @@ static void room_209_init() {
 	}
 
 	if (object_is_here(OBJ_BINOCULARS)) {
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[9], Common::Point(201, 131));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
-		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(201, 131));
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
 	}
 
 	if (_scene->_roomChanged) {
 		inter_give_to_player(OBJ_POISON_DARTS);
 		inter_give_to_player(OBJ_BLOWGUN);
-		_globals[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
+		global[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
 	}
 
 	local._pitchFl = false;
@@ -1042,7 +1042,7 @@ static void room_209_init() {
 }
 
 static void room_209_daemon() {
-	if (!local._playingAnimFl && !local._pitchFl && !local._fallFl && !local._dodgeFl && (local._pauseMode == 0) && (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
+	if (!local._playingAnimFl && !local._pitchFl && !local._fallFl && !local._dodgeFl && (local._pauseMode == 0) && (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
 		int randAction = g_engine->getRandomNumber(1, 50);
 		switch (randAction) {
 		case 1:
@@ -1265,55 +1265,55 @@ static void room_209_daemon() {
 		switch (kernel.trigger) {
 		case 228:
 			player.walker_visible = false;
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 7);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 229);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 7);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 229);
 			break;
 
 		case 229:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 7);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 7);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addTimer(35, 230);
 		}
 		break;
 
 		case 230:
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 7);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 231);
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 7);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 231);
 			break;
 
 		case 231:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 8, 10);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 8, 10);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
 			player.clock = _scene->_frameStartTime - player.frame_delay;
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], -1);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], -1);
 			player.walker_visible = false;
 		}
 		break;
 
 		case 232:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 10);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 10);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addTimer(2, 233);
 			_scene->_kernelMessages.reset();
 			if (local._dodgeFl && (local._monkeyPosition != 1) && (local._monkeyPosition != 2))
@@ -1328,32 +1328,32 @@ static void room_209_daemon() {
 			break;
 
 		case 234:
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
+			_scene->_sequences.remove(g_sequence_ids[2]);
 			_scene->_kernelMessages.reset();
 			if (player_said_3(hose_down, blowgun, monkey)) {
-				_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 7, 16, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 11, 12);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 12, 239);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
+				g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 7, 16, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[2], 11, 12);
+				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+				_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 12, 239);
+				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
 			} else if (player_said_3(shoot, blowgun, monkey)) {
-				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 11, 12);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
+				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[2], 11, 12);
+				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+				_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
 				g_engine->_soundManager->command(23, 0);
 			}
 			break;
 
 		case 235:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 13);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 13);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addTimer(12, 236);
 			local._forceFallFl = true;
 			local._forceDodgeFl = true;
@@ -1361,12 +1361,12 @@ static void room_209_daemon() {
 		break;
 
 		case 236:
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 14, 16);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 237);
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 14, 16);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 237);
 			break;
 
 		case 237:
@@ -1376,14 +1376,14 @@ static void room_209_daemon() {
 			break;
 
 		case 238:
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
+			_scene->_sequences.remove(g_sequence_ids[2]);
 			if (local._dodgeFl)
 				player.commands_allowed = true;
 
 			local._startShootingInTimerFl = false;
 
 			if (local._fallFl) {
-				_globals[kMonkeyStatus] = MONKEY_IS_GONE;
+				global[kMonkeyStatus] = MONKEY_IS_GONE;
 				inter_move_object(OBJ_POISON_DARTS, NOWHERE);
 			}
 			local._dodgeFl = false;
@@ -1416,7 +1416,7 @@ static void room_209_pre_parser() {
 	if (player_said_2(walk_towards, field_to_west))
 		player.walk_off_edge_to_room = 208;
 
-	if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
+	if (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
 		if ((player_said_1(shoot) || player_said_1(hose_down)) && player_said_1(monkey)
 			&& player_said_1(blowgun) && player_has(OBJ_BLOWGUN) && player_has(OBJ_POISON_DARTS)) {
 			player.prepare_walk_x = 111;
@@ -1558,7 +1558,7 @@ static void room_209_parser() {
 		break;
 	}
 
-	if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
+	if (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
 		if ((player_said_1(shoot) || player_said_1(hose_down)) && player_said_1(monkey)
 			&& player_said_1(blowgun) && player_has(OBJ_BLOWGUN) && player_has(OBJ_POISON_DARTS)) {
 			if (player_said_3(shoot, blowgun, monkey) && !local._startShootingInTimerFl) {
@@ -1596,14 +1596,14 @@ static void room_209_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 3, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[11]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[11] = _scene->_sequences.startPingPongCycle(g_sprite_ids[11], false, 3, 2, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[11]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 4, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
+			_scene->_sequences.remove(g_sequence_ids[1]);
 			inter_give_to_player(OBJ_PLANT_STALK);
 			break;
 
@@ -1627,17 +1627,17 @@ static void room_209_parser() {
 	if (player_said_2(take, binoculars) && (kernel.trigger || object_is_here(OBJ_BINOCULARS))) {
 		switch (kernel.trigger) {
 		case 0:
-			_globals._spriteIndexes[10] = _scene->_sprites.addSprites("*RXMBD_8");
+			g_sprite_ids[10] = _scene->_sprites.addSprites("*RXMBD_8");
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			_globals._sequenceIndexes[10] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[10], false, 3, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[10]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], false, 3, 2, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[10]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_SPRITE, 4, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
+			_scene->_sequences.remove(g_sequence_ids[9]);
 			inter_give_to_player(OBJ_BINOCULARS);
 			break;
 
@@ -1650,7 +1650,7 @@ static void room_209_parser() {
 
 		case 3:
 			object_examine(OBJ_BINOCULARS, 0x51AF, 0);
-			_scene->_sprites.remove(_globals._spriteIndexes[10]);
+			_scene->_sprites.remove(g_sprite_ids[10]);
 			break;
 
 		default:
@@ -1729,13 +1729,13 @@ static void room_209_parser() {
 	}
 
 	if (player_said_2(look, palm_tree)) {
-		if (_globals[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
+		if (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS) {
 			if (local._monkeyPosition == 1)
 				text_show(20917);
 			else
 				text_show(20918);
 		} else {
-			if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
+			if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY)
 				text_show(20917);
 			else
 				text_show(20919);
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 147f403e3dd..10ff34b92b7 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -336,22 +336,22 @@ static void setDialogNode(int node) {
 
 		case 3:
 			local._twinkleAnimationType = 2;
-			_globals[kCurtainOpen] = true;
+			global[kCurtainOpen] = true;
 			player.walker_visible = false;
 			pal_lock();
 			_scene->_kernelMessages.reset();
 			_scene->freeAnimation();
 			_scene->resetScene();
 
-			_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+			g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
 			kernel.quotes = quote_load(0xE6, 0xE9, 0xEA, 0xE7, 0xE8, 0);
 			_scene->loadAnimation(kernel_name('B', -1), 4);
 			break;
 
 		case 4:
 		{
-			_globals._spriteIndexes[8] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
-			_scene->_sequences.setDepth(_globals._spriteIndexes[8], 1);
+			g_sprite_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 5);
+			_scene->_sequences.setDepth(g_sprite_ids[8], 1);
 
 			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 20), 0x1110, 32, 5, 180, quote_string(kernel.quotes, 231));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
@@ -380,7 +380,7 @@ static void setDialogNode(int node) {
 		break;
 
 		case 8:
-			_globals[kTwinklesStatus] = TWINKLES_GONE;
+			global[kTwinklesStatus] = TWINKLES_GONE;
 			_scene->_nextSceneId = 216;
 			break;
 
@@ -613,10 +613,10 @@ static void restoreDialogNode(int node, int msgId, int posY) {
 }
 
 static void room_210_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
 
 	if (!player.been_here_before)
-		_globals[kCurtainOpen] = 0;
+		global[kCurtainOpen] = 0;
 
 	if (_scene->_priorSceneId == 205) {
 		player.x = 277;
@@ -626,15 +626,15 @@ static void room_210_init() {
 		player.x = 168;
 		player.y = 128;
 		player.facing = FACING_SOUTH;
-		_globals[kCurtainOpen] = true;
+		global[kCurtainOpen] = true;
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		player.x = 308;
 		player.y = 132;
 	}
 
-	if (!_globals[kCurtainOpen]) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
+	if (!global[kCurtainOpen]) {
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 5);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 5);
 	} else {
 		int idx = _scene->_dynamicHotspots.add(words_doorway, words_walk_through, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
 		local._doorway = _scene->_dynamicHotspots.setPosition(idx, Common::Point(168, 127), FACING_NORTH);
@@ -674,10 +674,10 @@ static void room_210_init() {
 		local._twinklesTalking = false;
 		local._curDialogNode = 0;
 		local._stopWalking = false;
-		local._twinklesTalk2 = (_globals[kTwinklesApproached] > 0);
+		local._twinklesTalk2 = (global[kTwinklesApproached] > 0);
 	}
 
-	if (_globals[kTwinklesStatus] == 0) {
+	if (global[kTwinklesStatus] == 0) {
 		_scene->loadAnimation(kernel_name('A', -1));
 		local._twinkleAnimationType = 1;
 	} else
@@ -919,9 +919,9 @@ static void room_210_parser() {
 		{
 			player.commands_allowed = false;
 			int quote;
-			if (_globals[kTwinklesApproached] == 0)
+			if (global[kTwinklesApproached] == 0)
 				quote = 90;
-			else if (_globals[kTwinklesApproached] == 1)
+			else if (global[kTwinklesApproached] == 1)
 				quote = 115;
 			else
 				quote = 171;
@@ -938,10 +938,10 @@ static void room_210_parser() {
 			if (!local._twinklesTalking) {
 				_scene->_sequences.addTimer(6, 1);
 			} else {
-				if (_globals[kTwinklesApproached] == 0) {
+				if (global[kTwinklesApproached] == 0) {
 					handleTwinklesSpeech(0xAF, -1, 0);
 					handleTwinklesSpeech(0xB0, 0, 0);
-				} else if (_globals[kTwinklesApproached] == 1) {
+				} else if (global[kTwinklesApproached] == 1) {
 					handleTwinklesSpeech(0xB1, 0, 0);
 				} else {
 					int quote = local._twinklesTalk2 ? 0xB3 : 0xB2;
@@ -957,8 +957,8 @@ static void room_210_parser() {
 			local._shouldMoveHead = false;
 			local._shouldTalk = false;
 
-			if (_globals[kTwinklesApproached] < 2)
-				_globals[kTwinklesApproached]++;
+			if (global[kTwinklesApproached] < 2)
+				global[kTwinklesApproached]++;
 
 			local._conv1.start();
 			local._curDialogNode = 1;
@@ -991,19 +991,19 @@ static void room_210_parser() {
 		_scene->_nextSceneId = 205;
 	} else if (player_said_2(walk_through, doorway)) {
 		_scene->_nextSceneId = 215;
-	} else if ((player_said_2(pull, curtain) || player_said_2(open, curtain)) && !_globals[kCurtainOpen]) {
+	} else if ((player_said_2(pull, curtain) || player_said_2(open, curtain)) && !global[kCurtainOpen]) {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 12, 1, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[1], false, 12, 1, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[1], 5);
+			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
 			player.commands_allowed = true;
-			_globals[kCurtainOpen] = true;
+			global[kCurtainOpen] = true;
 			local._doorway = _scene->_dynamicHotspots.add(words_doorway, words_walk_through, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
 			_scene->_dynamicHotspots.setPosition(local._doorway, Common::Point(168, 127), FACING_NORTH);
 			_scene->_dynamicHotspots.setCursor(local._doorway, CURSOR_GO_UP);
@@ -1012,32 +1012,32 @@ static void room_210_parser() {
 		default:
 			break;
 		}
-	} else if ((player_said_2(pull, curtain) || player_said_2(close, curtain)) && _globals[kCurtainOpen]) {
+	} else if ((player_said_2(pull, curtain) || player_said_2(close, curtain)) && global[kCurtainOpen]) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
+			_scene->_sequences.remove(g_sequence_ids[1]);
 			player.commands_allowed = false;
 			player.facing = FACING_NORTH;
-			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 12, 0, 0, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 12, 0, 0, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[1], 5);
+			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			break;
 		case 1:
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 5);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 5);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 5);
+			_scene->_sequences.setDepth(g_sequence_ids[1], 5);
 			_scene->_sequences.addTimer(48, 2);
 			break;
 		case 2:
 			_scene->_dynamicHotspots.remove(local._doorway);
 			player.commands_allowed = true;
-			_globals[kCurtainOpen] = false;
+			global[kCurtainOpen] = false;
 			break;
 		default:
 			break;
 		}
 	} else if (player_said_2(look, hut)) {
-		if (_globals[kTwinklesStatus] == TWINKLES_GONE) {
+		if (global[kTwinklesStatus] == TWINKLES_GONE) {
 			if (config_file.naughtiness == STORYMODE_NAUGHTY)
 				text_show(21003);
 			else
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index bb0c117ea36..ca2c1e99cd4 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -44,7 +44,7 @@ static Scratch local;
 
 
 static void room_211_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC002Z2");
+	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC002Z2");
 	local._wakeFl = false;
 
 	if (_scene->_priorSceneId == 210) {
@@ -67,11 +67,11 @@ static void room_211_init() {
 	}
 
 	if (g_engine->getRandomNumber(1, 8) == 1) {
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(202, 126));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 8);
-		_scene->_sequences.setMotion(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, -200, 0);
-		_scene->_dynamicHotspots.add(words_slithering_snake, words_walkto, _globals._sequenceIndexes[2], Common::Rect(1, 1, 1 + 41, 1 + 10));
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(202, 126));
+		_scene->_sequences.setDepth(g_sequence_ids[2], 8);
+		_scene->_sequences.setMotion(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, -200, 0);
+		_scene->_dynamicHotspots.add(words_slithering_snake, words_walkto, g_sequence_ids[2], Common::Rect(1, 1, 1 + 41, 1 + 10));
 	}
 
 	if (_scene->_roomChanged)
@@ -81,7 +81,7 @@ static void room_211_init() {
 	pal_change_color(253, 63, 20, 22);
 	kernel.quotes = quote_load(0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 1, 0);
 
-	if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
+	if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY)
 		_scene->_kernelMessages.initRandomMessages(2,
 			Common::Rect(0, 0, 54, 30), 13, 2, 0xFDFC, 60,
 			151, 152, 153, 154, 0);
@@ -96,7 +96,7 @@ static void room_211_init() {
 }
 
 static void room_211_daemon() {
-	if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
+	if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
 		_scene->_kernelMessages.randomServer();
 
 		if (!local._ambushFl && !local._wakeFl && (_scene._frameStartTime >= local._monkeyTime)) {
@@ -134,7 +134,7 @@ static void room_211_daemon() {
 				player.x = 49;
 				player.y = 133;
 				local._ambushFl = false;
-				_globals[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
+				global[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
 				break;
 
 			default:
@@ -270,12 +270,12 @@ static void room_211_daemon() {
 }
 
 static void room_211_pre_parser() {
-	if (player_said_2(walk_down, jungle_path) && player_has(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY)
+	if (player_said_2(walk_down, jungle_path) && player_has(OBJ_BINOCULARS) && (global[kMonkeyStatus] == MONKEY_AMBUSH_READY)
 		&& (_scene->_customDest.x <= 52) && (_scene->_customDest.y >= 132))
 		player_walk(52, 132, FACING_WEST);
 
 	if (player_said_2(walk_down, path_to_west)) {
-		if (player_has(OBJ_BINOCULARS) && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
+		if (player_has(OBJ_BINOCULARS) && (global[kMonkeyStatus] == MONKEY_AMBUSH_READY))
 			player_walk(52, 132, FACING_WEST);
 		else
 			player.walk_off_edge_to_room = 210;
@@ -286,7 +286,7 @@ static void room_211_pre_parser() {
 }
 
 static void room_211_parser() {
-	if (player.look_around && (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY))
+	if (player.look_around && (global[kMonkeyStatus] == MONKEY_AMBUSH_READY))
 		text_show(21111);
 	else if (player_said_3(look, binoculars, palm_tree))
 		text_show(21116);
@@ -295,7 +295,7 @@ static void room_211_parser() {
 	else if (player_said_2(look, jungle_path))
 		text_show(21102);
 	else if (player_said_2(look, palm_tree)) {
-		if (_globals[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
+		if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
 			if (config_file.naughtiness == STORYMODE_NAUGHTY)
 				text_show(21103);
 			else
diff --git a/engines/mads/nebular/rooms/room213.cpp b/engines/mads/nebular/rooms/room213.cpp
index 727ea3a8ab7..b6765345c18 100644
--- a/engines/mads/nebular/rooms/room213.cpp
+++ b/engines/mads/nebular/rooms/room213.cpp
@@ -33,12 +33,12 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_213_init() {
-	if (_globals[kMeteorologistWatch] != METEOROLOGIST_NORMAL)
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*METHAND");
-	else if (_globals[kSexOfRex] == REX_MALE)
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*REXHAND");
+	if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL)
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*METHAND");
+	else if (global[kSexOfRex] == REX_MALE)
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
 	else
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*ROXHAND");
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
 
 	teleporter_init();
 
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index 350728636dd..edebb89a01f 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -40,26 +40,26 @@ static Scratch local;
 
 
 static void room_214_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('e', 1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('t', -1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXMRD_7");
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('e', 1));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('t', -1));
+	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXMRD_7");
 
 	local._devilTime = player.clock;
 	local._devilRunningFl = false;
 
 	if (object_is_here(OBJ_POISON_DARTS)) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(103, 86));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 11);
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(103, 86));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 11);
 	} else {
 		_scene->_hotspots.activate(words_poison_darts, false);
 	}
 
 	if (object_is_here(OBJ_BLOWGUN)) {
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(90, 87));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13);
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
+		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(90, 87));
+		_scene->_sequences.setDepth(g_sequence_ids[2], 13);
 	} else {
 		_scene->_hotspots.activate(words_blowgun, false);
 	}
@@ -75,35 +75,35 @@ static void room_214_init() {
 static void room_214_daemon() {
 	if ((player.clock - local._devilTime > 800) && !local._devilRunningFl) {
 		local._devilRunningFl = true;
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 6, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
-		_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 6, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 2);
+		_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (local._devilRunningFl) {
 		switch (kernel.trigger) {
 		case 71:
 		{
-			int oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 5, 0, 0);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 5, 8);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			int oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 5, 0, 0);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, 8);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 2);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		}
 		break;
 
 		case 72:
 		{
-			int oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 9, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
+			int oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 9, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 2);
 			local._devilTime = player.clock;
 			local._devilRunningFl = false;
 		}
@@ -125,16 +125,16 @@ static void room_214_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], true, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], true, 6, 1, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
-			_globals._sequenceIndexes[4] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[4], true, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
+			g_sequence_ids[4] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[4], true, 6, 1, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			_scene->_sequences.remove(g_sequence_ids[1]);
 			inter_give_to_player(OBJ_POISON_DARTS);
 			_scene->_hotspots.activate(words_poison_darts, false);
 			break;
@@ -157,16 +157,16 @@ static void room_214_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 1, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
-			_globals._sequenceIndexes[4] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[4], false, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
+			g_sequence_ids[4] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[4], false, 6, 1, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			_scene->_sequences.remove(g_sequence_ids[2]);
 			inter_give_to_player(OBJ_BLOWGUN);
 			_scene->_hotspots.activate(words_blowgun, false);
 			break;
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index 19ab9e6b943..bcb7f163e4f 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -32,17 +32,17 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_215_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
 
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 0, 0, 0);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(235, 83));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 0, 0, 0);
+	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(235, 83));
+	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
-	if (_globals[kSexOfRex] == REX_MALE)
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMRC_9");
+	if (global[kSexOfRex] == REX_MALE)
+		g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMRC_9");
 	else
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*ROXRC_9");
+		g_sprite_ids[2] = _scene->_sprites.addSprites("*ROXRC_9");
 
 	if (_scene->_priorSceneId == 216) {
 		player.x = 140;
@@ -50,7 +50,7 @@ static void room_215_init() {
 		player.facing = FACING_SOUTHWEST;
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 		_scene->_sequences.addTimer(120, 70);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		player.x = 204;
@@ -64,13 +64,13 @@ static void room_215_init() {
 
 static void room_215_daemon() {
 	if (kernel.trigger == 70) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (kernel.trigger == 71) {
-		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
+		_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
 		player.walker_visible = true;
 		player.commands_allowed = true;
 	}
@@ -83,14 +83,14 @@ static void room_215_parser() {
 		if (!player_has(OBJ_TWINKIFRUIT) || kernel.trigger) {
 			switch (kernel.trigger) {
 			case 0:
-				if (_globals[kSexOfRex] == REX_MALE) {
+				if (global[kSexOfRex] == REX_MALE) {
 					player.walker_visible = false;
 					player.commands_allowed = false;
-					_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 6, 2, 0, 0);
-					_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 4);
-					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_LOOP, 0, 1);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 6, 2, 0, 0);
+					_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 4);
+					_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_LOOP, 0, 1);
+					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					inter_give_to_player(OBJ_TWINKIFRUIT);
 					object_examine(OBJ_TWINKIFRUIT, 0x5404, 0);
@@ -107,7 +107,7 @@ static void room_215_parser() {
 			case 2:
 				player.walker_visible = true;
 				player.commands_allowed = true;
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[2]);
 				break;
 
 			default:
diff --git a/engines/mads/nebular/rooms/room301.cpp b/engines/mads/nebular/rooms/room301.cpp
index d9f1c19a2a1..a2ce9cd4cbd 100644
--- a/engines/mads/nebular/rooms/room301.cpp
+++ b/engines/mads/nebular/rooms/room301.cpp
@@ -32,11 +32,11 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_301_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 9, 0, 0, 0);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
 
-	_globals[kMeteorologistStatus] = METEOROLOGIST_GONE;
-	_globals[kTeleporterCommand] = TELEPORTER_NONE;
+	global[kMeteorologistStatus] = METEOROLOGIST_GONE;
+	global[kTeleporterCommand] = TELEPORTER_NONE;
 
 	player.commands_allowed = false;
 	player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room303.cpp b/engines/mads/nebular/rooms/room303.cpp
index 08daa10c269..19ad79c1e0c 100644
--- a/engines/mads/nebular/rooms/room303.cpp
+++ b/engines/mads/nebular/rooms/room303.cpp
@@ -32,12 +32,12 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_303_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
 
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 10, 0, 50, 120);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 10, 0, 0, 0);
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 10, 0, 50, 120);
+	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 10, 0, 0, 0);
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index a56e3fea670..c0bbe47e02c 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -44,20 +44,20 @@ static void room_304_init() {
 		player.commands_allowed = false;
 		_scene->loadAnimation(kernel_name('a', -1), 60);
 	} else {
-		if (_globals[kSexOfRex] == REX_MALE)
-			_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('a', 0));
+		if (global[kSexOfRex] == REX_MALE)
+			g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 0));
 		else
-			_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
+			g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
 
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 1));
-		_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
+		g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
 
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 150, 0, 3, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 2);
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 150, 0, 3, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 2);
 		pal_change_color(252, 45, 63, 45);
 		pal_change_color(253, 20, 45, 20);
 
-		if (_globals[kSexOfRex] == REX_MALE) {
+		if (global[kSexOfRex] == REX_MALE) {
 			player.x = 111;
 			player.y = 117;
 		}
@@ -66,8 +66,8 @@ static void room_304_init() {
 			player.y = 116;
 		}
 
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 11, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, -1);
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 11, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[2], -1, -1);
 		_scene->_sequences.addTimer(48, 70);
 	}
 
@@ -84,20 +84,20 @@ static void room_304_daemon() {
 		case 70:
 		{
 			player.walker_visible = false;
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 2, 4);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			if (_globals[kSexOfRex] == REX_MALE)
-				local._explosionSpriteId = _globals._spriteIndexes[1];
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, 4);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			if (global[kSexOfRex] == REX_MALE)
+				local._explosionSpriteId = g_sprite_ids[1];
 			else
-				local._explosionSpriteId = _globals._spriteIndexes[4];
+				local._explosionSpriteId = g_sprite_ids[4];
 
 			int sprIdx = _scene->_sequences.addSpriteCycle(local._explosionSpriteId, false, 8, 1, 0, 0);
 			_scene->_sequences.setAnimRange(sprIdx, -1, 4);
 			_scene->_sequences.setDepth(sprIdx, 1);
 			_scene->_sequences.addSubEntry(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 		}
 		break;
 
@@ -128,23 +128,23 @@ static void room_304_daemon() {
 		break;
 
 		case 74:
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 5, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 5, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 			break;
 
 		case 75:
-			_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 2, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 			break;
 
 		case 76:
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 0, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 2, 2);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 0, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, 2);
 			_scene->_sequences.addTimer(48, 77);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index dc891ef34d4..90537cab517 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -97,13 +97,13 @@ static void setDialogNode(int node) {
 		break;
 
 	case 1:
-		_globals[kMetBuddyBeast] = true;
+		global[kMetBuddyBeast] = true;
 		handlePrisonerSpeech(0x10F, 2, INDEFINITE_TIMEOUT);
 		local._dialog1.start();
 		break;
 
 	case 2:
-		_globals[kMetBuddyBeast] = true;
+		global[kMetBuddyBeast] = true;
 		handlePrisonerSpeech(0x111, 2, INDEFINITE_TIMEOUT);
 		local._dialog1.start();
 		break;
@@ -114,7 +114,7 @@ static void setDialogNode(int node) {
 		break;
 
 	case 5:
-		_globals[kKnowsBuddyBeast] = true;
+		global[kKnowsBuddyBeast] = true;
 		handlePrisonerSpeech(0x117, 2, INDEFINITE_TIMEOUT);
 		local._dialog2.start();
 		break;
@@ -125,7 +125,7 @@ static void setDialogNode(int node) {
 		break;
 
 	case 7:
-		_globals[kKnowsBuddyBeast] = true;
+		global[kKnowsBuddyBeast] = true;
 		handlePrisonerSpeech(0x124, 10, INDEFINITE_TIMEOUT);
 		local._dialog2.write(0x11A, false);
 		local._dialog2.write(0x11B, true);
@@ -186,7 +186,7 @@ static void setDialogNode(int node) {
 		break;
 
 	case 16:
-		_globals[kKnowsBuddyBeast] = true;
+		global[kKnowsBuddyBeast] = true;
 		handlePrisonerSpeech(0x10C, 1, INDEFINITE_TIMEOUT);
 		local._dialog2.start();
 		break;
@@ -266,7 +266,7 @@ static void handleDialog() {
 	} else {
 		player.commands_allowed = true;
 
-		if (!_globals[kKnowsBuddyBeast]) {
+		if (!global[kKnowsBuddyBeast]) {
 			handlePrisonerEncounter();
 		} else {
 			handlePrisonerDialog();
@@ -275,16 +275,16 @@ static void handleDialog() {
 }
 
 static void room_307_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC003x0");
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*SC003x1");
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*SC003x2");
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
+	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
+	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 0));
 
 	init_forcefield(&local._forcefield, true);
 
-	_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
+	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[4], 15);
 
 	local._animationMode = 0;
 	local._fieldCollisionCounter = 0;
@@ -352,10 +352,10 @@ static void room_307_init() {
 		int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(129, 104), FACING_NORTH);
 		_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_UP);
 
-		_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
+		_scene->_sequences.remove(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 2);
+		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+		_scene->_sequences.setDepth(g_sequence_ids[4], 15);
 	}
 
 	pal_change_color(252, 63, 30, 20);
@@ -368,7 +368,7 @@ static void room_307_init() {
 }
 
 static void room_307_daemon() {
-	handle_forcefield(&local._forcefield, &_globals._spriteIndexes[0]);
+	handle_forcefield(&local._forcefield, &g_sprite_ids[0]);
 
 	if ((local._animationMode == 1) && (_scene->_animation[0] != nullptr)) {
 		if (_scene->_animation[0]->getCurrentFrame() == 126) {
@@ -412,7 +412,7 @@ static void room_307_daemon() {
 		local._lastFrameTime = _scene->_frameStartTime;
 
 		if ((local._guardTime > 3000) && !local._duringPeeingFl && (_scene->_animation[0] == nullptr)
-			&& (inter_input_mode != kInputConversation) && _globals[kMetBuddyBeast] && !local._activePrisonerFl) {
+			&& (inter_input_mode != kInputConversation) && global[kMetBuddyBeast] && !local._activePrisonerFl) {
 			if (!player_has(OBJ_SCALPEL) && !local._grateOpenedFl) {
 				player.commands_allowed = false;
 				player_walk(151, 119, FACING_SOUTHEAST);
@@ -422,7 +422,7 @@ static void room_307_daemon() {
 			}
 			local._guardTime = 0;
 		} else if ((local._prisonerTimer > 300) && (inter_input_mode != kInputConversation) && (_scene->_animation[0] == nullptr) && !local._activePrisonerFl) {
-			if (!_globals[kMetBuddyBeast]) {
+			if (!global[kMetBuddyBeast]) {
 				if (local._prisonerMessageId == -1)
 					local._prisonerMessageId = 0x104;
 
@@ -431,7 +431,7 @@ static void room_307_daemon() {
 				local._prisonerMessageId++;
 				if (local._prisonerMessageId > 0x10A)
 					local._prisonerMessageId = 0x104;
-			} else if (_globals[kKnowsBuddyBeast] && (local._dialog2.read(0) > 1) && (g_engine->getRandomNumber(1, 3) == 1)) {
+			} else if (global[kKnowsBuddyBeast] && (local._dialog2.read(0) > 1) && (g_engine->getRandomNumber(1, 3) == 1)) {
 				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, quote_string(kernel.quotes, 267));
 				_scene->_kernelMessages.setQuoted(idx, 4, true);
 			}
@@ -458,10 +458,10 @@ static void room_307_parser() {
 		handleDialog();
 	else if (player_said_2(talkto, cell_wall) || player_said_2(talkto, wall) || player_said_2(talkto, toilet)) {
 		int node, say;
-		if (_globals[kKnowsBuddyBeast]) {
+		if (global[kKnowsBuddyBeast]) {
 			say = 0x10E;
 			node = 16;
-		} else if (_globals[kMetBuddyBeast]) {
+		} else if (global[kMetBuddyBeast]) {
 			say = 0x10E;
 			node = 2;
 		} else {
@@ -491,41 +491,41 @@ static void room_307_parser() {
 			break;
 
 		case 1:
-			_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RXCL_8");
+			g_sprite_ids[5] = _scene->_sprites.addSprites("*RXCL_8");
 			player.walker_visible = false;
-			_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], -1, 3);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[5], -1, 3);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
 		{
-			int oldIdx = _globals._sequenceIndexes[5];
-			_globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], false, 12, 6, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 2, 3);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldIdx);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			int oldIdx = g_sequence_ids[5];
+			g_sequence_ids[5] = _scene->_sequences.startPingPongCycle(g_sprite_ids[5], false, 12, 6, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+			_scene->_sequences.setAnimRange(g_sequence_ids[5], 2, 3);
+			_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
+			_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
 		case 3:
 		{
-			int oldIdx = _globals._sequenceIndexes[5];
-			_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldIdx);
+			int oldIdx = g_sequence_ids[5];
+			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+			_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
 			_scene->_sequences.addTimer(48, 4);
 		}
 		break;
 
 		case 4:
 			g_engine->_soundManager->command(26, 0);
-			_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-			_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 2);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
+			_scene->_sequences.remove(g_sequence_ids[4]);
+			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 2);
+			_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+			_scene->_sequences.setDepth(g_sequence_ids[4], 15);
 			_scene->_sequences.addTimer(90, 5);
 			break;
 
@@ -540,7 +540,7 @@ static void room_307_parser() {
 		{
 			player.walker_visible = true;
 			player.clock = _scene->_frameStartTime - player.frame_delay;
-			_scene->_sequences.remove(_globals._sequenceIndexes[5]);
+			_scene->_sequences.remove(g_sequence_ids[5]);
 			local._grateOpenedFl = true;
 			_scene->_hotspots.activate(17, false);
 			int idx = _scene->_dynamicHotspots.add(words_air_vent, words_climb_into, -1, Common::Rect(117, 67, 117 + 19, 67 + 13));
@@ -552,7 +552,7 @@ static void room_307_parser() {
 		break;
 
 		case 7:
-			_scene->_sprites.remove(_globals._spriteIndexes[5]);
+			_scene->_sprites.remove(g_sprite_ids[5]);
 			player.commands_allowed = true;
 			break;
 
@@ -563,75 +563,75 @@ static void room_307_parser() {
 		if (local._grateOpenedFl) {
 			switch (kernel.trigger) {
 			case 0:
-				_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RXCL_8");
+				g_sprite_ids[5] = _scene->_sprites.addSprites("*RXCL_8");
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-				_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 60, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 3, -2);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
-				_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 18, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], -1, 4);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				_scene->_sequences.remove(g_sequence_ids[4]);
+				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 60, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[4], 3, -2);
+				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+				_scene->_sequences.setDepth(g_sequence_ids[4], 15);
+				g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 18, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[5], -1, 4);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
-				_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, -2);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
+				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
+				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+				_scene->_sequences.setDepth(g_sequence_ids[4], 15);
 				break;
 
 			case 2:
 			{
-				int oldIdx = _globals._sequenceIndexes[5];
-				_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 4, 10);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-				_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], oldIdx);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				int oldIdx = g_sequence_ids[5];
+				g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[5], 4, 10);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+				_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
+				_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 			}
 			break;
 
 			case 3:
-				_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-				_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 3);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
-				_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 11);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[5], Common::Point(129, 102));
+				_scene->_sequences.remove(g_sequence_ids[4]);
+				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 3);
+				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+				_scene->_sequences.setDepth(g_sequence_ids[4], 1);
+				g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 11);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+				_scene->_sequences.setPosition(g_sequence_ids[5], Common::Point(129, 102));
 				_scene->_sequences.addTimer(48, 4);
 				break;
 
 			case 4:
-				_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-				_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 2);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
-				_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-				_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 12, 14);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[5], Common::Point(129, 102));
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+				_scene->_sequences.remove(g_sequence_ids[4]);
+				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 2);
+				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+				_scene->_sequences.setDepth(g_sequence_ids[4], 1);
+				_scene->_sequences.remove(g_sequence_ids[5]);
+				g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[5], 12, 14);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+				_scene->_sequences.setPosition(g_sequence_ids[5], Common::Point(129, 102));
+				_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 				break;
 
 			case 5:
-				_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 15);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[5], Common::Point(129, 102));
+				g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 15);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+				_scene->_sequences.setPosition(g_sequence_ids[5], Common::Point(129, 102));
 				_scene->_sequences.addTimer(48, 6);
 				break;
 
 			case 6:
-				_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-				_scene->_sequences.remove(_globals._sequenceIndexes[4]);
-				_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-				_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
+				_scene->_sequences.remove(g_sequence_ids[5]);
+				_scene->_sequences.remove(g_sequence_ids[4]);
+				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+				_scene->_sequences.setDepth(g_sequence_ids[4], 1);
 				_scene->_sequences.addTimer(48, 7);
 				break;
 
@@ -650,32 +650,32 @@ static void room_307_parser() {
 			switch (kernel.trigger) {
 			case 0:
 				g_engine->_soundManager->command(25, 0);
-				_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
+				g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
 				local._duringPeeingFl = true;
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, 2);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], -1, 2);
+				_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 5, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 3, -2);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 5, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], 3, -2);
+				_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 2:
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
 				player.walker_visible = true;
 				_scene->_sequences.addTimer(48, 3);
 				break;
 
 			case 3:
 			{
-				_scene->_sprites.remove(_globals._spriteIndexes[3]);
+				_scene->_sprites.remove(g_sprite_ids[3]);
 				_scene->_kernelMessages.reset();
 				int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 4, 120, quote_string(kernel.quotes, 237));
 				_scene->_kernelMessages.setQuoted(idx, 4, true);
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index 0bfb1a3cce5..73c3a438ae2 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -41,23 +41,23 @@ static Scratch local;
 
 
 static void room_308_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC003x0");
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*SC003x1");
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*SC003x2");
+	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
+	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
+	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
 
 	init_forcefield(&local._forcefield, true);
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
 	pal_change_color(252, 63, 30, 20);
 	pal_change_color(253, 45, 15, 12);
 
-	_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
-	_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
+	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[4], 15);
+	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+	_scene->_sequences.setDepth(g_sequence_ids[3], 9);
 	_scene->_sequences.addTimer(48, 70);
 
 	player.walker_visible = false;
@@ -69,7 +69,7 @@ static void room_308_init() {
 }
 
 static void room_308_daemon() {
-	handle_forcefield(&local._forcefield, &_globals._spriteIndexes[0]);
+	handle_forcefield(&local._forcefield, &g_sprite_ids[0]);
 
 	if (kernel.trigger == 60)
 		_scene->_nextSceneId = 307;
@@ -80,80 +80,80 @@ static void room_308_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 	{
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 18, 9, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 18, 9, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
 		_scene->_kernelMessages.reset();
 		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 244));
 		_scene->_kernelMessages.setQuoted(idx, 2, true);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 	break;
 
 	case 71:
 	{
-		int seqIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
+		int seqIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
 		_scene->_sequences.addTimer(48, 72);
 	}
 	break;
 
 	case 72:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 20, 5, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 3, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 20, 5, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 3, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
 		_scene->_kernelMessages.reset();
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 		break;
 
 	case 73:
 	{
-		int seqIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
+		int seqIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 5);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
 		_scene->_sequences.addTimer(48, 74);
 	}
 	break;
 
 	case 74:
 	{
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 20, 8, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 6, 7);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 20, 8, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 6, 7);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
 		_scene->_kernelMessages.reset();
 		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 245));
 		_scene->_kernelMessages.setQuoted(idx, 2, true);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 	}
 	break;
 
 	case 75:
 	{
-		int seqIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 23, 5, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 8, 10);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+		int seqIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 23, 5, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 10);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 	}
 	break;
 
 	case 76:
 	{
-		int seqIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 26, 0, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
+		int seqIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 26, 0, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
 		_scene->_kernelMessages.reset();
 		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 246));
 		_scene->_kernelMessages.setQuoted(idx, 2, true);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
 	}
 	break;
 
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index f4f9d2a9fbd..f560f16fb14 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -44,23 +44,23 @@ static Scratch local;
 
 
 static void room_309_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC003x0");
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*SC003x1");
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*SC003x2");
+	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
+	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
+	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
 
 	init_forcefield(&local._forcefield, true);
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
-	_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
+	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[4], 15);
 
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 1, 0, 0);
-	_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, 3);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-	_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 3, 70);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
+	_scene->_sequences.setAnimRange(g_sequence_ids[3], -1, 3);
+	_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+	_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 3, 70);
 
 	pal_change_color(252, 63, 37, 26);
 	pal_change_color(253, 45, 24, 17);
@@ -87,7 +87,7 @@ static void room_309_init() {
 }
 
 static void room_309_daemon() {
-	handle_forcefield(&local._forcefield, &_globals._spriteIndexes[0]);
+	handle_forcefield(&local._forcefield, &g_sprite_ids[0]);
 
 	if (kernel.trigger == 61) {
 		local._messagesIndexes[0] = -1;
@@ -134,90 +134,90 @@ static void room_309_daemon() {
 		switch (kernel.trigger) {
 		case 70:
 		{
-			int idx = _scene->_dynamicHotspots.add(words_ghastly_beast, words_gawk_at, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+			int idx = _scene->_dynamicHotspots.add(words_ghastly_beast, words_gawk_at, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(142, 146), FACING_NORTHEAST);
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 7, 4, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 4, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 		}
 		break;
 
 		case 71:
 		{
-			int _oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 4, 7);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
+			int _oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 7);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
 			int idx = _scene->_kernelMessages.add(Common::Point(85, 37), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 248));
 			_scene->_kernelMessages.setQuoted(idx, 2, true);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		}
 		break;
 
 		case 72:
 		{
-			int _oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 7, 8, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 8, 11);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			int _oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 8, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 11);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 		}
 		break;
 
 		case 73:
 		{
-			int _oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 12, 20);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
+			int _oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 12, 20);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
 			int idx = _scene->_kernelMessages.add(Common::Point(170, 49), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 249));
 			_scene->_kernelMessages.setQuoted(idx, 2, true);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 		}
 		break;
 
 		case 74:
 		{
-			int _oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 7, 6, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 21, 23);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			int _oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 6, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 21, 23);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 		}
 		break;
 
 		case 75:
 		{
-			int _oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 6, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 24, 25);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			int _oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 6, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 24, 25);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 		}
 		break;
 
 		case 76:
 		{
-			int _oldIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 26, 28);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], _oldIdx);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
+			int _oldIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 26, 28);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
 		}
 		break;
 
 		case 77:
 		{
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 90, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 29, 30);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 11);
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 90, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 29, 30);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
 			int idx = _scene->_kernelMessages.add(Common::Point(15, 46), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 247));
 			_scene->_kernelMessages.setQuoted(idx, 2, true);
 			_scene->_sequences.addTimer(120, 78);
diff --git a/engines/mads/nebular/rooms/room310.cpp b/engines/mads/nebular/rooms/room310.cpp
index 100611089c6..bc081177c9c 100644
--- a/engines/mads/nebular/rooms/room310.cpp
+++ b/engines/mads/nebular/rooms/room310.cpp
@@ -40,16 +40,16 @@ static Scratch local;
 
 
 static void room_310_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC003x0");
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*SC003x1");
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*SC003x2");
+	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
+	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
+	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
 
 	init_forcefield(&local._forcefield, true);
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
-	_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15);
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[3], 15);
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
@@ -59,7 +59,7 @@ static void room_310_init() {
 }
 
 static void room_310_daemon() {
-	handle_forcefield(&local._forcefield, &_globals._spriteIndexes[0]);
+	handle_forcefield(&local._forcefield, &g_sprite_ids[0]);
 
 	if (kernel.trigger == 70)
 		_scene->_nextSceneId = 309;
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index f94a47f8c79..096af8461fc 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -39,19 +39,19 @@ static Scratch local;
 
 
 static void room_311_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXCL_8");
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RXCL_2");
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[2] = _scene->_sprites.addSprites("*RXCL_8");
+	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCL_2");
 
-	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
+	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
 	local._checkGuardFl = false;
 	kernel.quotes = quote_load(0xFA, 0);
 
 	if (_scene->_priorSceneId == 391) {
-		_globals[kSexOfRex] = REX_MALE;
+		global[kSexOfRex] = REX_MALE;
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		player.facing = FACING_SOUTH;
@@ -84,92 +84,92 @@ static void room_311_daemon() {
 		break;
 
 	case 71:
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 		_scene->_sequences.addTimer(15, 72);
 		break;
 
 	case 72:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 2);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+		_scene->_sequences.setDone(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 		_scene->_sequences.addTimer(15, 73);
 		break;
 
 	case 73:
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 3);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-		_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 3);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+		_scene->_sequences.setDone(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 		_scene->_sequences.addTimer(15, 74);
 		break;
 
 	case 74:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 4, 5);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		_scene->_sequences.setDone(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 		break;
 
 	case 75:
-		oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(15, 76);
 		break;
 
 	case 76:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+		_scene->_sequences.setDone(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 		_scene->_sequences.addTimer(15, 77);
 		break;
 
 	case 77:
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-		_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 8);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+		_scene->_sequences.setDone(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 8);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 		_scene->_sequences.addTimer(15, 78);
 		break;
 
 	case 78:
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-
-		_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 9);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+
+		_scene->_sequences.setDone(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 9);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 		_scene->_sequences.addTimer(15, 79);
 		break;
 
 	case 79:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 10, -2);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		_scene->_sequences.setDone(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 10, -2);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
 		break;
 
 	case 80:
-		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
+		_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		break;
@@ -205,87 +205,87 @@ static void room_311_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 50, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 3, -2);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, 4);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 50, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[1], 3, -2);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], -1, 4);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
 		{
-			int oldIdx = _globals._sequenceIndexes[1];
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -2);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[1], oldIdx);
+			int oldIdx = g_sequence_ids[1];
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -2);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+			_scene->_sequences.updateTimeout(g_sequence_ids[1], oldIdx);
 		}
 		break;
 
 		case 2:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 4, 10);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 4, 10);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
 		case 3:
 		{
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 3);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 11);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(167, 100));
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 11);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addTimer(15, 4);
 		}
 		break;
 
 		case 4:
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 12, 14);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(167, 100));
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 12, 14);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 			break;
 
 		case 5:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 15);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(167, 100));
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 15);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addTimer(15, 6);
 		}
 		break;
 
 		case 6:
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 			_scene->_sequences.addTimer(15, 7);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index 2a341d7f0e2..d333b8f8eb8 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -62,7 +62,7 @@ static void room_313_init() {
 		player.facing = FACING_WEST;
 	}
 
-	if (_globals[kAfterHavoc]) {
+	if (global[kAfterHavoc]) {
 		for (uint16 i = 0; i < cycle_list.num_cycles; i++) {
 			int palIdx = cycle_list.table[i].first_list_color;
 			int size = cycle_list.table[i].num_colors * 3;
@@ -80,21 +80,21 @@ static void room_313_parser() {
 	else if (player_said_2(crawl_to, third_cell))
 		_scene->_nextSceneId = 388;
 	else if (player_said_2(crawl_to, second_cell)) {
-		if (_globals[kAfterHavoc])
+		if (global[kAfterHavoc])
 			_scene->_nextSceneId = 399;
 		else
 			_scene->_nextSceneId = 389;
 	} else if (player_said_2(crawl_to, first_cell))
 		_scene->_nextSceneId = 390;
 	else if (player_said_2(crawl_to, security_station)) {
-		if (_globals[kSexOfRex] == REX_FEMALE) {
-			_globals[kSexOfRex] = REX_MALE;
+		if (global[kSexOfRex] == REX_FEMALE) {
+			global[kSexOfRex] = REX_MALE;
 			text_show(31301);
 		}
 		_scene->_nextSceneId = 391;
 	} else if (player_said_2(crawl_to, equipment_room)) {
-		if (_globals[kSexOfRex] == REX_FEMALE) {
-			_globals[kSexOfRex] = REX_MALE;
+		if (global[kSexOfRex] == REX_FEMALE) {
+			global[kSexOfRex] = REX_MALE;
 			text_show(31301);
 		}
 		_scene->_nextSceneId = 366;
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 1999942e867..71d1d9926f2 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -36,111 +36,111 @@ static void handleRexInGrate() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
 		_scene->_sequences.addTimer(15, 1);
 		break;
 
 	case 1:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 12, 3, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 2, 3);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		_scene->_sequences.setDone(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 12, 3, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 2, 3);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 2:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 4, 8);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
-
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 4, 8);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
+
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 	}
 	break;
 
 	case 3:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 	}
 	break;
 
 	case 4:
 	{
-		int oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 10, 11);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
-
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 5, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		int oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 10, 11);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
+
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 	}
 	break;
 
 	case 5:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 3);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
-
-		oldIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 12);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+
+		oldIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 12);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
 		_scene->_sequences.addTimer(15, 6);
 	}
 	break;
 
 	case 6:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 13, 14);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+		_scene->_sequences.setDone(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 13, 14);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 		break;
 
 	case 7:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 15);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], -1);
+		_scene->_sequences.setDone(g_sequence_ids[4]);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 15);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], -1);
 		break;
 
 	case 8:
 	{
-		int oldIdx = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], oldIdx);
+		int oldIdx = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
 		_scene->_sequences.addTimer(15, 9);
 	}
 	break;
 
 	case 9:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[4]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
+		_scene->_sequences.setDone(g_sequence_ids[4]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
 		_scene->_sequences.addTimer(48, 10);
 		break;
 
@@ -161,101 +161,101 @@ static void handleRoxInGrate() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
+		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
 		_scene->_sequences.addTimer(15, 1);
 		break;
 
 	case 1:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], false, 17, 3, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 2, 3);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		_scene->_sequences.setDone(g_sequence_ids[5]);
+		g_sequence_ids[5] = _scene->_sequences.startPingPongCycle(g_sprite_ids[5], false, 17, 3, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[5], 2, 3);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 2:
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
-
-		temp = _globals._sequenceIndexes[5];
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 4, 8);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], temp);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 17, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+
+		temp = g_sequence_ids[5];
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 17, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[5], 4, 8);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[5], temp);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 		break;
 
 	case 3:
-		temp1 = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], temp1);
+		temp1 = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], temp1);
 		break;
 
 	case 4:
-		temp = _globals._sequenceIndexes[5];
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 10, 11);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], temp);
-
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 5, -2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		temp = g_sequence_ids[5];
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 17, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[5], 10, 11);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[5], temp);
+
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 17, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, -2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 		break;
 
 	case 5:
-		temp = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 3);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], temp);
-
-		temp = _globals._sequenceIndexes[5];
-		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 12);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], temp);
+		temp = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], temp);
+
+		temp = g_sequence_ids[5];
+		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 12);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[5], temp);
 		_scene->_sequences.addTimer(20, 6);
 		break;
 
 	case 6:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 13, 15);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-
-		_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+		_scene->_sequences.setDone(g_sequence_ids[5]);
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 17, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[5], 13, 15);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+
+		_scene->_sequences.remove(g_sequence_ids[3]);
+		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 17, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
+		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 		break;
 
 	case 7:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 16);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[5]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[5], -1);
+		_scene->_sequences.setDone(g_sequence_ids[5]);
+		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 16);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[5], -1);
 		break;
 
 	case 8:
-		temp = _globals._sequenceIndexes[3];
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], temp);
+		temp = g_sequence_ids[3];
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+		_scene->_sequences.updateTimeout(g_sequence_ids[3], temp);
 		_scene->_sequences.addTimer(20, 9);
 		break;
 
 	case 9:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
+		_scene->_sequences.setDone(g_sequence_ids[5]);
+		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
 		_scene->_sequences.addTimer(48, 10);
 		break;
 
@@ -269,18 +269,18 @@ static void handleRoxInGrate() {
 }
 
 static void room_316_init() {
-	if (_globals[kSexOfRex] == REX_MALE) {
-		_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('g', -1));
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXCL_8");
-		_globals._spriteIndexes[6] = _scene->_sprites.addSprites("*RXCL_2");
+	if (global[kSexOfRex] == REX_MALE) {
+		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('g', -1));
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*RXCL_8");
+		g_sprite_ids[6] = _scene->_sprites.addSprites("*RXCL_2");
 	} else {
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('g', 0));
-		_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*ROXCL_8");
+		g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('g', 0));
+		g_sprite_ids[5] = _scene->_sprites.addSprites("*ROXCL_8");
 	}
 
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('v', 0));
-	_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('v', 0));
+	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+	_scene->_sequences.setDepth(g_sequence_ids[3], 12);
 
 	if (_scene->_priorSceneId == 366) {
 		player.commands_allowed = false;
@@ -296,10 +296,10 @@ static void room_316_init() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		g_engine->_soundManager->command(44, 0);
-		int spriteIdx = (_globals[kSexOfRex] == REX_MALE) ? 1 : 2;
-		_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[spriteIdx], false, 6, 1, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+		int spriteIdx = (global[kSexOfRex] == REX_MALE) ? 1 : 2;
+		g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[spriteIdx], false, 6, 1, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 2);
+		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
 	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		player.x = 291;
 		player.y = 126;
@@ -311,7 +311,7 @@ static void room_316_init() {
 
 static void room_316_daemon() {
 	if (kernel.trigger == 60) {
-		_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[1]);
+		_scene->_sequences.updateTimeout(-1, g_sequence_ids[1]);
 		player.walker_visible = true;
 		player.commands_allowed = true;
 	}
@@ -319,63 +319,63 @@ static void room_316_daemon() {
 	if (kernel.trigger >= 70) {
 		switch (kernel.trigger) {
 		case 70:
-			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 6);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-
-			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 5);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[6]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			_scene->_sequences.remove(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 6);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+
+			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 5);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 			break;
 
 		case 71:
 		{
-			int synxIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], synxIdx);
+			int synxIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 3);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], synxIdx);
 		}
 		break;
 
 		case 72:
 		{
-			int synxIdx = _globals._sequenceIndexes[6];
-			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 6, 9);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[6]);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[6], synxIdx);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			int synxIdx = g_sequence_ids[6];
+			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[6], 6, 9);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
+			_scene->_sequences.updateTimeout(g_sequence_ids[6], synxIdx);
+			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 		}
 		break;
 
 		case 73:
-			_scene->_sequences.remove(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 5);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[6]);
-
-			_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 10, -2);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[6]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			_scene->_sequences.remove(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 5);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
+
+			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[6], 10, -2);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 			break;
 
 		case 74:
 		{
-			int synxIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 12);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], synxIdx);
+			int synxIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], synxIdx);
 		}
 		break;
 
 		case 75:
-			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[6]);
+			_scene->_sequences.updateTimeout(-1, g_sequence_ids[6]);
 			player.commands_allowed = true;
 			player.walker_visible = true;
 			break;
@@ -388,7 +388,7 @@ static void room_316_daemon() {
 
 static void room_316_pre_parser() {
 	if (player_said_2(walk_down, corridor_to_east)) {
-		if (_globals[kAfterHavoc])
+		if (global[kAfterHavoc])
 			player.walk_off_edge_to_room = 354;
 		else
 			player.walk_off_edge_to_room = 304;
@@ -397,54 +397,54 @@ static void room_316_pre_parser() {
 
 static void room_316_parser() {
 	if (player_said_2(climb_into, air_vent)) {
-		if (_globals[kSexOfRex] == REX_FEMALE)
+		if (global[kSexOfRex] == REX_FEMALE)
 			handleRoxInGrate();
 		else
 			handleRexInGrate();
 	} else if (player_said_2(walk_up, ramp) || player_said_2(walk_onto, platform)) {
 		switch (kernel.trigger) {
 		case 0:
-			if (_globals[kCityFlooded]) {
+			if (global[kCityFlooded]) {
 				text_show(31623);
 			} else {
 				g_engine->_soundManager->command(45, 0);
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				if (_globals[kSexOfRex] == REX_MALE) {
-					_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 1, 0, 0);
-					_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], -1, 7);
-					_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				if (global[kSexOfRex] == REX_MALE) {
+					g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
+					_scene->_sequences.setAnimRange(g_sequence_ids[1], -1, 7);
+					_scene->_sequences.setDepth(g_sequence_ids[1], 2);
+					_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				} else {
-					_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
-					_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+					g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 7, 1, 0, 0);
+					_scene->_sequences.setDepth(g_sequence_ids[2], 2);
+					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				}
 			}
 			break;
 
 		case 1:
-			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 8, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
+			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[1], 8, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[1], 2);
 			_scene->_kernelMessages.reset();
 			if (!player_has_been_in_room(321))
 				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 253));
 
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
-			_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], -2, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
+			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[1], -2, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[1], 2);
 			_scene->_sequences.addTimer(48, 4);
 			break;
 
 		case 3:
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -2, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 7, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], -2, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 2);
 			_scene->_sequences.addTimer(48, 4);
 			break;
 
@@ -475,7 +475,7 @@ static void room_316_parser() {
 	else if (player_said_2(look, air_vent))
 		text_show(31618);
 	else if (player_said_2(look, corridor_to_east)) {
-		if (!_globals[kAfterHavoc]) {
+		if (!global[kAfterHavoc]) {
 			if (game.difficulty != DIFFICULTY_EASY)
 				text_show(31620);
 			else
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index f50437b4432..02190f878bb 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -109,11 +109,11 @@ static void handleDialog() {
 		player.commands_allowed = false;
 		handleRexDialogs(player2.words[0]);
 	} else if (kernel.trigger == 2) {
-		int synxIdx = _globals._sequenceIndexes[2];
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], synxIdx);
+		int synxIdx = g_sequence_ids[2];
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
+		_scene->_sequences.updateTimeout(g_sequence_ids[2], synxIdx);
 		g_engine->_soundManager->command(3, 0);
 		_scene->_userInterface.setup(kInputBuildingSentences);
 		player.commands_allowed = true;
@@ -180,12 +180,12 @@ static void handleDialog() {
 
 		case 0x19C:
 		case 0x19D:
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 6, 8);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 6, 8);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 
 			local._dialogFl = false;
 			handleInternDialog(0x1D0, 1, 120);
@@ -208,22 +208,22 @@ static void handleDialog() {
 }
 
 static void room_318_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('k', -1));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('k', -1));
 
-	if (_globals[kAfterHavoc]) {
+	if (global[kAfterHavoc]) {
 		_scene->loadAnimation(kernel_name('f', -1));
 		_scene->_animation[0]->_repeatFlag = true;
-	} else if (!_globals[kHasSeenProfPyro]) {
+	} else if (!global[kHasSeenProfPyro]) {
 		_scene->_hotspots.activate(words_professors_gurney, false);
 		_scene->_hotspots.activate(words_professor, false);
 		_scene->_hotspots.activate(words_tape_player, false);
 	}
 
 	if (object_is_here(OBJ_SCALPEL)) {
-		_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 0, 0, 120);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4);
-		_scene->_dynamicHotspots.add(words_scalpel, words_take, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 120);
+		_scene->_sequences.setDepth(g_sequence_ids[3], 4);
+		_scene->_dynamicHotspots.add(words_scalpel, words_take, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 	}
 
 	if (_scene->_priorSceneId == 357) {
@@ -271,10 +271,10 @@ static void room_318_init() {
 		0x190, 0x19D, 0);
 
 	if ((_scene->_priorSceneId == RETURNING_FROM_DIALOG) || (((_scene->_priorSceneId == 318) ||
-		(_scene->_priorSceneId == RETURNING_FROM_LOADING)) && (!_globals[kAfterHavoc]))) {
-		if (!_globals[kAfterHavoc]) {
+		(_scene->_priorSceneId == RETURNING_FROM_LOADING)) && (!global[kAfterHavoc]))) {
+		if (!global[kAfterHavoc]) {
 			player.walker_visible = false;
-			_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
+			g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
 			local._animMode = 2;
 
 			if (player_has_been_in_room(319) || !local._internVisibleFl) {
@@ -287,12 +287,12 @@ static void room_318_init() {
 
 			if (local._dialogFl) {
 				local._dialog1.start();
-				_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 8);
+				g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 8);
 			} else
-				_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
+				g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
 
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
 		}
 	}
 
@@ -300,9 +300,9 @@ static void room_318_init() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		local._animMode = 4;
-		if (!_globals[kHasSeenProfPyro]) {
+		if (!global[kHasSeenProfPyro]) {
 			_scene->loadAnimation(kernel_name('d', -1), 64);
-			_globals[kHasSeenProfPyro] = true;
+			global[kHasSeenProfPyro] = true;
 		} else {
 			_scene->loadAnimation(kernel_name('e', -1), 64);
 		}
@@ -446,8 +446,8 @@ static void room_318_daemon() {
 
 	if ((_scene._frameStartTime - local._dropTimer) > 600) {
 		g_engine->_soundManager->command(51, 0);
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 14, 1, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 1, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 10);
 		local._dropTimer = _scene._frameStartTime;
 	}
 }
@@ -476,12 +476,12 @@ static void room_318_parser() {
 			player.commands_allowed = false;
 			handleRexDialogs(g_engine->getRandomNumber(0x18C, 0x18E));
 
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 80);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 6, 8);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 80);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 6, 8);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		}
 		break;
 
@@ -493,11 +493,11 @@ static void room_318_parser() {
 
 		case 2:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 8);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 8);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 		}
 		break;
 
@@ -512,13 +512,13 @@ static void room_318_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-			_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 8, 2, 0, 80);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 2, 5);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 8, 2, 0, 80);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
+			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, 5);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -527,17 +527,17 @@ static void room_318_parser() {
 			else {
 				inter_give_to_player(OBJ_SCALPEL);
 				object_examine(OBJ_SCALPEL, 0x7C5D, 0);
-				_scene->_sequences.remove(_globals._sequenceIndexes[3]);
+				_scene->_sequences.remove(g_sequence_ids[3]);
 			}
 			break;
 
 		case 2:
 		{
-			int oldIdx = _globals._sequenceIndexes[2];
-			_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(142, 121));
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], oldIdx);
+			int oldIdx = g_sequence_ids[2];
+			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
+			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addTimer(60, 3);
 		}
 		break;
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index fa93b5643d3..449d30200ea 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -81,26 +81,26 @@ static void handleSlacheDialogs(int quoteId, int counter, uint32 timer) {
 }
 
 static void room_319_init() {
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('a', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('a', 3));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('k', -1));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 3));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('k', -1));
 
 	if (!player_has(OBJ_SCALPEL)) {
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1);
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[4], 1);
 	}
 
-	_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 18, 0, 0, 300);
-	_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 67, 0, 0, 377);
-	_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 173, 0, 0, 233);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
+	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 18, 0, 0, 300);
+	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 67, 0, 0, 377);
+	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 173, 0, 0, 233);
+	_scene->_sequences.setDepth(g_sequence_ids[2], 14);
+	_scene->_sequences.setDepth(g_sequence_ids[3], 14);
 
-	_globals._sequenceIndexes[0] = _scene->_sequences.startCycle(_globals._spriteIndexes[0], false, 1);
-	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
+	g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
+	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 
 	local._dialog1.setup(0x43, 0x165, 0x166, 0x167, 0x168, 0x169, 0x16A, 0);
 	local._dialog2.setup(0x44, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0);
@@ -137,7 +137,7 @@ static void room_319_init() {
 		local._slacheTopic = 1;
 		local._slacheInitFl = true;
 
-		if (_globals[kRexHasMetSlache]) {
+		if (global[kRexHasMetSlache]) {
 			handleSlacheDialogs(words_walk_outside, 2, INDEFINITE_TIMEOUT);
 			local._slachePosY = 3;
 		} else {
@@ -260,14 +260,14 @@ static void room_319_daemon() {
 				}
 
 				if (!local._animFrame) {
-					_scene->_sequences.remove(_globals._sequenceIndexes[0]);
-					_scene->_sequences.remove(_globals._sequenceIndexes[1]);
+					_scene->_sequences.remove(g_sequence_ids[0]);
+					_scene->_sequences.remove(g_sequence_ids[1]);
 
 					for (int i = 0; i <= 1; i++) {
-						_globals._sequenceIndexes[i] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[i], false, 8, 1, 0, 0);
-						_scene->_sequences.setAnimRange(_globals._sequenceIndexes[i], 1, 7);
+						g_sequence_ids[i] = _scene->_sequences.addSpriteCycle(g_sprite_ids[i], false, 8, 1, 0, 0);
+						_scene->_sequences.setAnimRange(g_sequence_ids[i], 1, 7);
 					}
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+					_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 				}
 			}
 		}
@@ -316,13 +316,13 @@ static void room_319_daemon() {
 		mcga_shakes = 1;
 
 		for (int i = 0; i <= 1; i++) {
-			int oldIdx = _globals._sequenceIndexes[i];
-			_scene->_sequences.remove(_globals._sequenceIndexes[i]);
-			_globals._sequenceIndexes[i] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[i], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[i], 8, 13);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[i], oldIdx);
+			int oldIdx = g_sequence_ids[i];
+			_scene->_sequences.remove(g_sequence_ids[i]);
+			g_sequence_ids[i] = _scene->_sequences.addSpriteCycle(g_sprite_ids[i], false, 8, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[i], 8, 13);
+			_scene->_sequences.updateTimeout(g_sequence_ids[i], oldIdx);
 		}
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+		_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 
 		// WORKAROUND: This fixes the game sometimes going into an endless waiting
 		// loop even after the doctor has finished hitting Rex. Note sure if it's due
@@ -343,20 +343,20 @@ static void room_319_daemon() {
 
 	case 73:
 		for (int i = 0; i <= 1; i++) {
-			int oldIdx = _globals._sequenceIndexes[i];
-			_scene->_sequences.remove(_globals._sequenceIndexes[i]);
-			_globals._sequenceIndexes[i] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[i], false, 8, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[i], 6, 7);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[i], oldIdx);
+			int oldIdx = g_sequence_ids[i];
+			_scene->_sequences.remove(g_sequence_ids[i]);
+			g_sequence_ids[i] = _scene->_sequences.addSpriteCycle(g_sprite_ids[i], false, 8, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[i], 6, 7);
+			_scene->_sequences.updateTimeout(g_sequence_ids[i], oldIdx);
 		}
 		break;
 
 	case 74:
 		for (int i = 0; i <= 1; i++) {
-			int oldIdx = _globals._sequenceIndexes[i];
-			_scene->_sequences.remove(_globals._sequenceIndexes[i]);
-			_globals._sequenceIndexes[i] = _scene->_sequences.startCycle(_globals._spriteIndexes[i], false, 1);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[i], oldIdx);
+			int oldIdx = g_sequence_ids[i];
+			_scene->_sequences.remove(g_sequence_ids[i]);
+			g_sequence_ids[i] = _scene->_sequences.startCycle(g_sprite_ids[i], false, 1);
+			_scene->_sequences.updateTimeout(g_sequence_ids[i], oldIdx);
 		}
 		break;
 
@@ -422,7 +422,7 @@ static void room_319_parser() {
 				if (!local._slacheReady) {
 					_scene->_sequences.addTimer(120, 3);
 				} else {
-					_globals[kRexHasMetSlache] = true;
+					global[kRexHasMetSlache] = true;
 					_scene->_nextSceneId = 318;
 				}
 			}
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index f812ad347f8..9257b7bde73 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -47,7 +47,7 @@ static Scratch local;
 
 
 static void setRightView(int view) {
-	if (local._rightItemId < 8) _scene->_sequences.remove(_globals._sequenceIndexes[10]);
+	if (local._rightItemId < 8) _scene->_sequences.remove(g_sequence_ids[10]);
 
 	int spriteNum;
 	switch (view) {
@@ -73,22 +73,22 @@ static void setRightView(int view) {
 	}
 
 	if (view != 8) {
-		_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[spriteNum], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 0);
+		g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[spriteNum], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[10], 0);
 	}
 
-	_globals[kRightView320] = local._rightItemId = view;
+	global[kRightView320] = local._rightItemId = view;
 }
 
 static void setLeftView(int view) {
 	if (local._leftItemId < 10)
-		_scene->_sequences.remove(_globals._sequenceIndexes[0]);
+		_scene->_sequences.remove(g_sequence_ids[0]);
 
 	if (view != 10) {
-		_globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[view], false, 6, 0, 0, 18);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 0);
+		g_sequence_ids[0] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[view], false, 6, 0, 0, 18);
+		_scene->_sequences.setDepth(g_sequence_ids[0], 0);
 		if (!local._blinkFl)
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 2, 2);
+			_scene->_sequences.setAnimRange(g_sequence_ids[0], 2, 2);
 	}
 
 	local._leftItemId = view;
@@ -175,15 +175,15 @@ static void room_320_init() {
 	local._lastFrame = 0;
 
 	for (int i = 0; i < 10; i++)
-		_globals._spriteIndexes[i] = _scene->_sprites.addSprites(kernel_name('M', i));
+		g_sprite_ids[i] = _scene->_sprites.addSprites(kernel_name('M', i));
 
 	for (int i = 0; i < 8; i++)
-		_globals._spriteIndexes[10 + i] = _scene->_sprites.addSprites(kernel_name('N', i));
+		g_sprite_ids[10 + i] = _scene->_sprites.addSprites(kernel_name('N', i));
 
-	_globals._spriteIndexes[18] = _scene->_sprites.addSprites("*REXHAND");
+	g_sprite_ids[18] = _scene->_sprites.addSprites("*REXHAND");
 	player.walker_visible = false;
 
-	setRightView(_globals[kRightView320]);
+	setRightView(global[kRightView320]);
 	setLeftView(0);
 
 	pal_change_color(252, 63, 30, 20);
@@ -230,8 +230,8 @@ static void room_320_daemon() {
 	}
 
 	if (kernel.trigger == 70) {
-		_globals[kAfterHavoc] = true;
-		_globals[kTeleporterRoom + 1] = 351;
+		global[kAfterHavoc] = true;
+		global[kTeleporterRoom + 1] = 351;
 		_scene->_nextSceneId = 361;
 	}
 }
@@ -249,12 +249,12 @@ static void room_320_parser() {
 		case 0:
 			player.commands_allowed = false;
 			handleButtons();
-			_globals._sequenceIndexes[18] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[18], local._flippedFl, 4, 2, 0, 0);
-			_scene->_sequences.setScale(_globals._sequenceIndexes[18], 60);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[18], Common::Point(local._posX, 170));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[18], 0);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[18], SEQUENCE_TRIGGER_LOOP, 0, 1);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[18], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[18] = _scene->_sequences.startPingPongCycle(g_sprite_ids[18], local._flippedFl, 4, 2, 0, 0);
+			_scene->_sequences.setScale(g_sequence_ids[18], 60);
+			_scene->_sequences.setPosition(g_sequence_ids[18], Common::Point(local._posX, 170));
+			_scene->_sequences.setDepth(g_sequence_ids[18], 0);
+			_scene->_sequences.addSubEntry(g_sequence_ids[18], SEQUENCE_TRIGGER_LOOP, 0, 1);
+			_scene->_sequences.addSubEntry(g_sequence_ids[18], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -291,9 +291,9 @@ static void room_320_parser() {
 					setLeftView(10);
 					_scene->_kernelMessages.reset();
 					_scene->resetScene();
-					_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
-					_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('m', 4));
-					_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('m', 9));
+					g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
+					g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('m', 4));
+					g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('m', 9));
 					local._blinkFl = false;
 					setLeftView(2);
 					kernel.quotes = quote_load(0xFE, 0);
diff --git a/engines/mads/nebular/rooms/room321.cpp b/engines/mads/nebular/rooms/room321.cpp
index 98119876831..48c81d26f92 100644
--- a/engines/mads/nebular/rooms/room321.cpp
+++ b/engines/mads/nebular/rooms/room321.cpp
@@ -39,11 +39,11 @@ static void room_321_init() {
 	_scene->_userInterface.setup(kInputConversation);
 
 	int suffixNum;
-	if (_globals[kSexOfRex] == REX_FEMALE) {
-		_globals[kSexOfRex] = REX_MALE;
+	if (global[kSexOfRex] == REX_FEMALE) {
+		global[kSexOfRex] = REX_MALE;
 		suffixNum = 1;
 	} else {
-		_globals[kSexOfRex] = REX_FEMALE;
+		global[kSexOfRex] = REX_FEMALE;
 		suffixNum = player.been_here_before ? 2 : 0;
 	}
 
@@ -53,7 +53,7 @@ static void room_321_init() {
 
 static void room_321_daemon() {
 	if (_scene->_animation[0] != nullptr) {
-		if ((_scene->_animation[0]->getCurrentFrame() >= 260) && (_globals[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= STORYMODE_NICE))
+		if ((_scene->_animation[0]->getCurrentFrame() >= 260) && (global[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= STORYMODE_NICE))
 			_scene->_nextSceneId = 316;
 	}
 
diff --git a/engines/mads/nebular/rooms/room322.cpp b/engines/mads/nebular/rooms/room322.cpp
index 30ab74a093a..a4ee007c29d 100644
--- a/engines/mads/nebular/rooms/room322.cpp
+++ b/engines/mads/nebular/rooms/room322.cpp
@@ -33,10 +33,10 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_322_init() {
-	if (_globals[kSexOfRex] == REX_MALE)
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*REXHAND");
+	if (global[kSexOfRex] == REX_MALE)
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
 	else
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*ROXHAND");
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
 
 	teleporter_init();
 
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index 347141cceb9..88a49c36aa8 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -32,16 +32,16 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_351_init() {
-	_globals[kAfterHavoc] = -1;
-	_globals[kTeleporterRoom + 1] = 351;
+	global[kAfterHavoc] = -1;
+	global[kTeleporterRoom + 1] = 351;
 
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*ROXRC_7");
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RXRD_7");
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[2] = _scene->_sprites.addSprites("*ROXRC_7");
+	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXRD_7");
 
 	if (object_is_here(OBJ_CREDIT_CHIP)) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 4);
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 4);
 	} else
 		_scene->_hotspots.activate(words_credit_chip, false);
 
@@ -55,22 +55,22 @@ static void room_351_init() {
 		player.facing = FACING_NORTH;
 	}
 
-	if (_globals[kTeleporterCommand]) {
+	if (global[kTeleporterCommand]) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
 
 		char sepChar = 'a';
-		if (_globals[kSexOfRex] != REX_MALE)
+		if (global[kSexOfRex] != REX_MALE)
 			sepChar = 'b';
 
 		int suffixNum = -1;
 		int trigger = 0;
 
-		switch (_globals[kTeleporterCommand]) {
+		switch (global[kTeleporterCommand]) {
 		case 1:
 			suffixNum = 0;
 			trigger = 60;
-			_globals[kTeleporterCommand] = true;
+			global[kTeleporterCommand] = true;
 			break;
 
 		case 2:
@@ -90,7 +90,7 @@ static void room_351_init() {
 			break;
 		}
 
-		_globals[kTeleporterCommand] = 0;
+		global[kTeleporterCommand] = 0;
 
 		if (suffixNum >= 0)
 			_scene->loadAnimation(kernel_name(sepChar, suffixNum), trigger);
@@ -108,8 +108,8 @@ static void room_351_daemon() {
 	}
 
 	if (kernel.trigger == 61) {
-		_globals[kTeleporterCommand] = 1;
-		_scene->_nextSceneId = _globals[kTeleporterDestination];
+		global[kTeleporterCommand] = 1;
+		_scene->_nextSceneId = global[kTeleporterDestination];
 		_scene->_reloadSceneFlag = true;
 	}
 }
@@ -127,22 +127,22 @@ static void room_351_parser() {
 			case 0:
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				if (_globals[kSexOfRex] == REX_FEMALE) {
-					_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				if (global[kSexOfRex] == REX_FEMALE) {
+					g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 5, 2, 0, 0);
+					_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
+					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 5, 2, 0, 0);
+					_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
 			case 1:
 				_scene->_hotspots.activate(words_credit_chip, false);
-				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
+				_scene->_sequences.remove(g_sequence_ids[1]);
 				inter_give_to_player(OBJ_CREDIT_CHIP);
 				break;
 
@@ -197,7 +197,7 @@ void room_351_preload() {
 	room_daemon_code_pointer = room_351_daemon;
 
 	if (_scene->_currentSceneId == 391)
-		_globals[kSexOfRex] = REX_MALE;
+		global[kSexOfRex] = REX_MALE;
 
 	section_3_walker();
 	section_3_interface();
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index eb16668ef8a..3862647bff8 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -56,23 +56,23 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 	case 1:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		if (_globals[kSexOfRex] == REX_FEMALE) {
-			_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 5, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 5, 2);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		if (global[kSexOfRex] == REX_FEMALE) {
+			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 5, 2, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 2);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		} else {
-			_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 5, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 6, 2);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 5, 2, 0, 0);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 2);
+			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
 	case 2:
 	{
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
-		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
+		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
 		_scene->changeVariant(0);
 	}
@@ -126,33 +126,33 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 }
 
 static void room_352_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RM302x0");
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites("*RM302x2");
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites("*RM302x3");
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('b', -1));
-
-
-	if (_globals[kSexOfRex] == REX_FEMALE) {
-		_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*ROXRC_7");
-		_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*ROXRC_6");
-		_globals._spriteIndexes[15] = _scene->_sprites.addSprites("*ROXRC_9");
-		_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('a', 3));
-		_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('a', 2));
+	g_sprite_ids[1] = _scene->_sprites.addSprites("*RM302x0");
+	g_sprite_ids[13] = _scene->_sprites.addSprites("*RM302x2");
+	g_sprite_ids[12] = _scene->_sprites.addSprites("*RM302x3");
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('b', -1));
+
+
+	if (global[kSexOfRex] == REX_FEMALE) {
+		g_sprite_ids[3] = _scene->_sprites.addSprites("*ROXRC_7");
+		g_sprite_ids[7] = _scene->_sprites.addSprites("*ROXRC_6");
+		g_sprite_ids[15] = _scene->_sprites.addSprites("*ROXRC_9");
+		g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('a', 3));
+		g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('a', 2));
 	} else {
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXRD_7");
-		_globals._spriteIndexes[6] = _scene->_sprites.addSprites("*RXRC_6");
-		_globals._spriteIndexes[14] = _scene->_sprites.addSprites("*RXMRC_9");
-		_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('a', 1));
-		_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*RXRD_7");
+		g_sprite_ids[6] = _scene->_sprites.addSprites("*RXRC_6");
+		g_sprite_ids[14] = _scene->_sprites.addSprites("*RXMRC_9");
+		g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
 	}
 
 	local._leaveRoomFl = false;
 
 	if (object_is_here(OBJ_TAPE_PLAYER)) {
-		_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 12, 0, 0, 0);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 5);
-		int idx = _scene->_dynamicHotspots.add(words_tape_player, words_walkto, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 0, 0, 0);
+		_scene->_sequences.setDepth(g_sequence_ids[5], 5);
+		int idx = _scene->_dynamicHotspots.add(words_tape_player, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		local._tapePlayerHotspotIdx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(84, 145), FACING_WEST);
 	}
 
@@ -161,12 +161,12 @@ static void room_352_init() {
 	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
 		local._mustPutArmDownFl = false;
 		if (!player.been_here_before)
-			_globals[kHaveYourStuff] = false;
+			global[kHaveYourStuff] = false;
 	}
 
 	if (object_is_here(OBJ_GUARDS_ARM)) {
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
-		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
+		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
 	} else
 		local._mustPutArmDownFl = true;
@@ -192,12 +192,12 @@ static void room_352_pre_parser() {
 		player_walk(266, 111, FACING_NORTHEAST);
 
 	if (local._vaultOpenFl && !player_said_1(vault) && !player_said_1(lamp) && !player_said_1(other_stuff) && !player_said_1(your_stuff)) {
-		if (_globals[kHaveYourStuff]) {
-			local._commonSpriteIndex = _globals._spriteIndexes[13];
-			local._commonSequenceIdx = _globals._sequenceIndexes[13];
+		if (global[kHaveYourStuff]) {
+			local._commonSpriteIndex = g_sprite_ids[13];
+			local._commonSequenceIdx = g_sequence_ids[13];
 		} else {
-			local._commonSpriteIndex = _globals._spriteIndexes[1];
-			local._commonSequenceIdx = _globals._sequenceIndexes[1];
+			local._commonSpriteIndex = g_sprite_ids[1];
+			local._commonSequenceIdx = g_sequence_ids[1];
 		}
 
 		switch (kernel.trigger) {
@@ -213,7 +213,7 @@ static void room_352_pre_parser() {
 			break;
 
 		case 1:
-			if (!_globals[kHaveYourStuff])
+			if (!global[kHaveYourStuff])
 				_scene->_dynamicHotspots.remove(local._hotspot2Idx);
 
 			_scene->_dynamicHotspots.remove(local._hotspot1Idx);
@@ -228,7 +228,7 @@ static void room_352_pre_parser() {
 	}
 
 	if (player_said_3(put, guards_arm2, scanner)) {
-		if (_globals[kSexOfRex] == REX_MALE)
+		if (global[kSexOfRex] == REX_MALE)
 			player_walk(269, 111, FACING_NORTHEAST);
 		else
 			player_walk(271, 111, FACING_NORTHEAST);
@@ -253,10 +253,10 @@ static void room_352_parser() {
 			case 0:
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				if (_globals[kSexOfRex] == REX_FEMALE)
-					local._commonSpriteIndex = _globals._spriteIndexes[9];
+				if (global[kSexOfRex] == REX_FEMALE)
+					local._commonSpriteIndex = g_sprite_ids[9];
 				else
-					local._commonSpriteIndex = _globals._spriteIndexes[8];
+					local._commonSpriteIndex = g_sprite_ids[8];
 
 				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
 				_scene->_sequences.updateTimeout(local._commonSequenceIdx, -1);
@@ -266,12 +266,12 @@ static void room_352_parser() {
 			case 1:
 			{
 				g_engine->_soundManager->command(21, 0);
-				_globals._sequenceIndexes[12] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[12], false, 7, 2, 20, 0);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[12], FACING_NORTH);
+				g_sequence_ids[12] = _scene->_sequences.startPingPongCycle(g_sprite_ids[12], false, 7, 2, 20, 0);
+				_scene->_sequences.setDepth(g_sequence_ids[12], FACING_NORTH);
 				int oldIdx = local._commonSequenceIdx;
 				local._commonSequenceIdx = _scene->_sequences.startCycle(local._commonSpriteIndex, false, -2);
 				_scene->_sequences.updateTimeout(local._commonSequenceIdx, oldIdx);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -335,21 +335,21 @@ static void room_352_parser() {
 			case 0:
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				if (_globals[kSexOfRex] == REX_FEMALE) {
-					_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				if (global[kSexOfRex] == REX_FEMALE) {
+					g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 5, 2, 0, 0);
+					_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 1);
+					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 5, 2, 0, 0);
+					_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
 			case 1:
-				_scene->_sequences.remove(_globals._sequenceIndexes[2]);
+				_scene->_sequences.remove(g_sequence_ids[2]);
 				inter_give_to_player(OBJ_GUARDS_ARM);
 				_scene->changeVariant(1);
 				break;
@@ -374,10 +374,10 @@ static void room_352_parser() {
 			case 0:
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				if (_globals[kSexOfRex] == REX_FEMALE)
-					local._commonSpriteIndex = _globals._spriteIndexes[11];
+				if (global[kSexOfRex] == REX_FEMALE)
+					local._commonSpriteIndex = g_sprite_ids[11];
 				else
-					local._commonSpriteIndex = _globals._spriteIndexes[10];
+					local._commonSpriteIndex = g_sprite_ids[10];
 
 				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
 				_scene->_sequences.updateTimeout(local._commonSequenceIdx, -1);
@@ -387,12 +387,12 @@ static void room_352_parser() {
 			case 1:
 			{
 				g_engine->_soundManager->command(21, 0);
-				_globals._sequenceIndexes[12] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[12], false, 7, 2, 20, 0);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 8);
+				g_sequence_ids[12] = _scene->_sequences.startPingPongCycle(g_sprite_ids[12], false, 7, 2, 20, 0);
+				_scene->_sequences.setDepth(g_sequence_ids[12], 8);
 				int oldIdx = local._commonSequenceIdx;
 				local._commonSequenceIdx = _scene->_sequences.startCycle(local._commonSpriteIndex, false, -2);
 				_scene->_sequences.updateTimeout(local._commonSequenceIdx, oldIdx);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -408,10 +408,10 @@ static void room_352_parser() {
 			case 3:
 				_scene->_sequences.updateTimeout(-1, local._commonSequenceIdx);
 				player.walker_visible = true;
-				if (_globals[kHaveYourStuff])
-					local._commonSpriteIndex = _globals._spriteIndexes[13];
+				if (global[kHaveYourStuff])
+					local._commonSpriteIndex = g_sprite_ids[13];
 				else
-					local._commonSpriteIndex = _globals._spriteIndexes[1];
+					local._commonSpriteIndex = g_sprite_ids[1];
 
 				g_engine->_soundManager->command(20, 0);
 				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 6, 1, 0, 0);
@@ -430,13 +430,13 @@ static void room_352_parser() {
 			{
 				local._vaultOpenFl = true;
 				int idx;
-				if (!_globals[kHaveYourStuff]) {
+				if (!global[kHaveYourStuff]) {
 					idx = _scene->_dynamicHotspots.add(words_your_stuff, words_walkto, -1, Common::Rect(282, 87, 282 + 13, 87 + 7));
 					local._hotspot2Idx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(280, 111), FACING_NORTHEAST);
-					_globals._sequenceIndexes[1] = local._commonSequenceIdx;
+					g_sequence_ids[1] = local._commonSequenceIdx;
 					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x102));
 				} else {
-					_globals._sequenceIndexes[13] = local._commonSequenceIdx;
+					g_sequence_ids[13] = local._commonSequenceIdx;
 					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x103));
 				}
 
@@ -457,40 +457,40 @@ static void room_352_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			if (_globals[kSexOfRex] == REX_MALE) {
-				_globals._sequenceIndexes[14] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[14], false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[14], 1, 2);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[14]);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[14], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[14], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			if (global[kSexOfRex] == REX_MALE) {
+				g_sequence_ids[14] = _scene->_sequences.startPingPongCycle(g_sprite_ids[14], false, 8, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[14], 1, 2);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[14]);
+				_scene->_sequences.addSubEntry(g_sequence_ids[14], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[14], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			} else {
-				_globals._sequenceIndexes[15] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[15], false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[15], 1, 2);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[15]);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[15], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[15], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[15] = _scene->_sequences.startPingPongCycle(g_sprite_ids[15], false, 8, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[15], 1, 2);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[15]);
+				_scene->_sequences.addSubEntry(g_sequence_ids[15], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[15], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
 		case 1:
 			_scene->_dynamicHotspots.remove(local._hotspot2Idx);
-			_globals[kHaveYourStuff] = true;
+			global[kHaveYourStuff] = true;
 
 			for (uint16 i = 0; i < num_objects; i++) {
 				if (object[i].location == 50)
 					inter_give_to_player(i);
 			}
 
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, -2);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 15);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, -2);
+			_scene->_sequences.setDepth(g_sequence_ids[13], 15);
 			break;
 
 		case 2:
-			if (_globals[kSexOfRex] == REX_MALE)
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[14]);
+			if (global[kSexOfRex] == REX_MALE)
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[14]);
 			else
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[15]);
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[15]);
 
 			player.walker_visible = true;
 			player.commands_allowed = true;
@@ -504,30 +504,30 @@ static void room_352_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			if (_globals[kSexOfRex] == REX_MALE) {
-				_globals._sequenceIndexes[6] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[6], true, 6, 2, 0, 0);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[6]);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			if (global[kSexOfRex] == REX_MALE) {
+				g_sequence_ids[6] = _scene->_sequences.startPingPongCycle(g_sprite_ids[6], true, 6, 2, 0, 0);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
+				_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			} else {
-				_globals._sequenceIndexes[7] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[7], true, 6, 2, 0, 0);
-				_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[7]);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[7] = _scene->_sequences.startPingPongCycle(g_sprite_ids[7], true, 6, 2, 0, 0);
+				_scene->_sequences.setMsgLayout(g_sequence_ids[7]);
+				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
 		case 1:
-			_scene->_sequences.remove(_globals._sequenceIndexes[5]);
+			_scene->_sequences.remove(g_sequence_ids[5]);
 			_scene->_dynamicHotspots.remove(local._tapePlayerHotspotIdx);
 			break;
 
 		case 2:
 			inter_give_to_player(OBJ_TAPE_PLAYER);
-			if (_globals[kSexOfRex] == REX_MALE)
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[6]);
+			if (global[kSexOfRex] == REX_MALE)
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[6]);
 			else
-				_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[7]);
+				_scene->_sequences.updateTimeout(-1, g_sequence_ids[7]);
 
 			player.walker_visible = true;
 			player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index b1243560e22..a9e1ee83ae1 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -39,9 +39,9 @@ static Scratch local;
 
 
 static void room_353_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(303, 'B', 0, "", EXT_SS));
-	_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 0, 5, 0);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(303, 'B', 0, "", EXT_SS));
+	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 5, 0);
+	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 
 	if (_scene->_priorSceneId == 352) {
 		player.x = 144;
diff --git a/engines/mads/nebular/rooms/room354.cpp b/engines/mads/nebular/rooms/room354.cpp
index 86bab53ebf9..e5542839e2b 100644
--- a/engines/mads/nebular/rooms/room354.cpp
+++ b/engines/mads/nebular/rooms/room354.cpp
@@ -38,8 +38,8 @@ struct Scratch {
 static Scratch local;
 
 static void room_354_init() {
-	_globals[kAfterHavoc] = true;
-	_globals[kTeleporterRoom + 1] = 351;
+	global[kAfterHavoc] = true;
+	global[kTeleporterRoom + 1] = 351;
 
 	if (_scene->_priorSceneId == 361) {
 		player.x = 231;
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index b2ce2be74a4..7ee3561d4b4 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -32,11 +32,11 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_357_init() {
-	_globals[kAfterHavoc] = true;
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
-	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
+	global[kAfterHavoc] = true;
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
 	if (_scene->_priorSceneId == 318) {
 		player.x = 298;
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index 4cf16565b70..afc2d50c9ae 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -32,10 +32,10 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_358_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
-	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
 	if (_scene->_priorSceneId == 357) {
 		player.x = 305;
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index cf207a8bc32..9acacfad7c1 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -39,21 +39,21 @@ static Scratch local;
 
 
 static void room_359_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
-	if (_globals[kSexOfRex] == REX_MALE)
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMBD_2");
+	if (global[kSexOfRex] == REX_MALE)
+		g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMBD_2");
 	else
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*ROXBD_2");
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXBD_2");
 
-	_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15);
+	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[3], 15);
 
 	if (object_is_here(OBJ_SECURITY_CARD)) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 9, 0, 0, 0);
-		local._cardHotspotId = _scene->_dynamicHotspots.add(words_security_card, words_walkto, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
+		local._cardHotspotId = _scene->_dynamicHotspots.add(words_security_card, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._cardHotspotId, Common::Point(107, 107), FACING_SOUTH);
 	}
 
@@ -90,22 +90,22 @@ static void room_359_parser() {
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				text_show(35920);
-				if (_globals[kSexOfRex] == REX_MALE) {
-					_globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 4, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				if (global[kSexOfRex] == REX_MALE) {
+					g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 4, 2, 0, 0);
+					_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					_globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], true, 7, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-					_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(106, 110));
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], true, 7, 2, 0, 0);
+					_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+					_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(106, 110));
+					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
 			case 1:
-				_scene->_sequences.remove(_globals._sequenceIndexes[1]);
+				_scene->_sequences.remove(g_sequence_ids[1]);
 				_scene->_dynamicHotspots.remove(local._cardHotspotId);
 				g_engine->_soundManager->command(57, 0);
 				inter_give_to_player(OBJ_SECURITY_CARD);
@@ -114,10 +114,10 @@ static void room_359_parser() {
 				break;
 
 			case 2:
-				if (_globals[kSexOfRex] == REX_MALE)
-					_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
+				if (global[kSexOfRex] == REX_MALE)
+					_scene->_sequences.updateTimeout(-1, g_sequence_ids[2]);
 				else
-					_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[4]);
+					_scene->_sequences.updateTimeout(-1, g_sequence_ids[4]);
 
 				player.walker_visible = true;
 				player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index 4668fe8867a..3bc33fb3b1d 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -32,10 +32,10 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_360_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
-	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(127, 78));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
+	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
 	if (_scene->_priorSceneId == 359) {
 		player.x = 304;
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 29b06959f1c..303fcad7595 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -36,87 +36,87 @@ static void handleRexAction() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 50, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 3, -2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, 4);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 50, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[1], 3, -2);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[2], -1, 4);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
 	{
-		int seqIdx = _globals._sequenceIndexes[1];
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 4);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[1], seqIdx);
+		int seqIdx = g_sequence_ids[1];
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 4);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+		_scene->_sequences.updateTimeout(g_sequence_ids[1], seqIdx);
 	}
 	break;
 
 	case 2:
 	{
-		int seqIdx = _globals._sequenceIndexes[2];
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 4, 10);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		int seqIdx = g_sequence_ids[2];
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[2], 4, 10);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
 	case 3:
 	{
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 3);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-		int seqIdx = _globals._sequenceIndexes[2];
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 11);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], seqIdx);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+		int seqIdx = g_sequence_ids[2];
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 11);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
+		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
 		_scene->_sequences.addTimer(15, 4);
 	}
 	break;
 
 	case 4:
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-		_scene->_sequences.setDone(_globals._sequenceIndexes[2]);
-		_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 12, 14);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(167, 100));
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+		_scene->_sequences.setDone(g_sequence_ids[2]);
+		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[2], 12, 14);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
+		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 		break;
 
 	case 5:
 	{
-		int seqIdx = _globals._sequenceIndexes[2];
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 15);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[2], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], seqIdx);
+		int seqIdx = g_sequence_ids[2];
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 15);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
+		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
+		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
 		_scene->_sequences.addTimer(15, 6);
 	}
 	break;
 
 	case 6:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[2]);
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
+		_scene->_sequences.setDone(g_sequence_ids[2]);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 		_scene->_sequences.addTimer(48, 7);
 		break;
 
@@ -134,92 +134,92 @@ static void handleRoxAction() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 18, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 2, 4);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 18, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], -1, 3);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 18, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[1], 2, 4);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 18, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], -1, 3);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
 	{
-		int tmpIdx = _globals._sequenceIndexes[1];
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 4);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[1], tmpIdx);
+		int tmpIdx = g_sequence_ids[1];
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 4);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+		_scene->_sequences.updateTimeout(g_sequence_ids[1], tmpIdx);
 	}
 	break;
 
 	case 2:
 	{
-		int tmpIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 4, 8);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], tmpIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		int tmpIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 4, 8);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
 	case 3:
 	{
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 3);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-		int tmpIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 9, 10);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], tmpIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+		int tmpIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 9, 10);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(167, 100));
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 	}
 	break;
 
 	case 4:
 	{
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-		int tmpIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 11, 15);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], tmpIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+		int tmpIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 11, 15);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(167, 100));
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 	}
 	break;
 
 	case 5:
 	{
-		int tmpIdx = _globals._sequenceIndexes[4];
-		_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 16);
-		_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[4], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], tmpIdx);
+		int tmpIdx = g_sequence_ids[4];
+		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 16);
+		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
+		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(167, 100));
+		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
 		_scene->_sequences.addTimer(48, 6);
 	}
 	break;
 
 	case 6:
-		_scene->_sequences.setDone(_globals._sequenceIndexes[4]);
+		_scene->_sequences.setDone(g_sequence_ids[4]);
 
-		_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-		_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
+		_scene->_sequences.remove(g_sequence_ids[1]);
+		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 		_scene->_sequences.addTimer(48, 7);
 		break;
 
@@ -233,20 +233,20 @@ static void handleRoxAction() {
 }
 
 static void room_361_init() {
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
 
-	if (_globals[kSexOfRex] == REX_MALE) {
-		_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXCL_8");
-		_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RXCL_2");
+	if (global[kSexOfRex] == REX_MALE) {
+		g_sprite_ids[2] = _scene->_sprites.addSprites("*RXCL_8");
+		g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCL_2");
 	} else
-		_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*ROXCL_8");
+		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXCL_8");
 
-	_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
+	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
 	if (_scene->_priorSceneId == 391) {
-		_globals[kSexOfRex] = REX_MALE;
+		global[kSexOfRex] = REX_MALE;
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		player.facing = FACING_SOUTH;
@@ -278,94 +278,94 @@ static void room_361_daemon() {
 	if (kernel.trigger >= 70) {
 		switch (kernel.trigger) {
 		case 70:
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.addTimer(15, 71);
 			break;
 
 		case 71:
-			_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 2);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+			_scene->_sequences.setDone(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.addTimer(15, 72);
 			break;
 
 		case 72:
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 3);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-			_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 3);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+			_scene->_sequences.setDone(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.addTimer(15, 73);
 			break;
 
 		case 73:
-			_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 4, 5);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			_scene->_sequences.setDone(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 			break;
 
 		case 74:
 		{
-			int seqIdx = _globals._sequenceIndexes[3];
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 6);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-			_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
+			int seqIdx = g_sequence_ids[3];
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+			_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
 			_scene->_sequences.addTimer(15, 75);
 		}
 		break;
 
 		case 75:
-			_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 7);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+			_scene->_sequences.setDone(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.addTimer(15, 76);
 			break;
 
 		case 76:
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 2);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
-
-			_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 8);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+
+			_scene->_sequences.setDone(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 8);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.addTimer(15, 77);
 			break;
 
 		case 77:
-			_scene->_sequences.remove(_globals._sequenceIndexes[1]);
-			_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 15);
-
-			_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 9);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
+			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
+			_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+
+			_scene->_sequences.setDone(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 9);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.addTimer(15, 78);
 			break;
 
 		case 78:
-			_scene->_sequences.setDone(_globals._sequenceIndexes[3]);
-			_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 10, -2);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
+			_scene->_sequences.setDone(g_sequence_ids[3]);
+			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[3], 10, -2);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
 			break;
 
 		case 79:
-			_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
+			_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
 			player.commands_allowed = true;
 			player.walker_visible = true;
 			break;
@@ -391,7 +391,7 @@ static void room_361_parser() {
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.addQuote(252, 0, 120);
 	} else if (player_said_2(climb_into, air_vent)) {
-		if (_globals[kSexOfRex] == REX_FEMALE)
+		if (global[kSexOfRex] == REX_FEMALE)
 			handleRoxAction();
 		else
 			handleRexAction();
@@ -432,7 +432,7 @@ void room_361_preload() {
 	room_daemon_code_pointer = room_361_daemon;
 
 	if (_scene->_currentSceneId == 391)
-		_globals[kSexOfRex] = REX_MALE;
+		global[kSexOfRex] = REX_MALE;
 
 	section_3_walker();
 	section_3_interface();
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 3d37e230469..57e9eb067c2 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -35,11 +35,11 @@ namespace Rooms {
 static void room_388_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
 
-	if (_globals[kAfterHavoc])
+	if (global[kAfterHavoc])
 		_scene->_hotspots.activate(words_sauropod, false);
 	else {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('b', 0));
-		_globals._sequenceIndexes[0] = _scene->_sequences.startCycle(_globals._spriteIndexes[0], false, 1);
+		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('b', 0));
+		g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
 	}
 
 	player.walker_visible = false;
@@ -76,7 +76,7 @@ static void room_388_parser() {
 			break;
 		}
 	} else if (player_said_2(look_through, grate)) {
-		if (_globals[kAfterHavoc])
+		if (global[kAfterHavoc])
 			text_show(38811);
 		else
 			text_show(38810);
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index 3565466e68c..e170e845779 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -46,11 +46,11 @@ static void room_389_init() {
 	local._monsterTime = 0;
 	local._circularQuoteId = 0x159;
 
-	if (_globals[kAfterHavoc])
+	if (global[kAfterHavoc])
 		_scene->_hotspots.activate(words_monster, false);
 	else {
-		_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('m', -1));
-		_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 0, 0, 0);
+		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('m', -1));
+		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
 		_scene->_kernelMessages.initRandomMessages(1,
 			Common::Rect(88, 19, 177, 77), 13, 2, 0xFDFC, 60,
 			247, 248, 249, 0);
@@ -95,7 +95,7 @@ static void room_389_parser() {
 			break;
 		}
 	} else if (player_said_2(look_through, grate)) {
-		if (_globals[kAfterHavoc]) {
+		if (global[kAfterHavoc]) {
 			if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 				text_show(38911);
 			else
@@ -103,7 +103,7 @@ static void room_389_parser() {
 		} else
 			text_show(38910);
 	} else if (player_said_2(open, grate)) {
-		if (_globals[kAfterHavoc])
+		if (global[kAfterHavoc])
 			text_show(38914);
 		else
 			text_show(38913);
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index ba13e0b0052..d2658f096ef 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -41,19 +41,19 @@ static void room_391_parser() {
 	if (player_said_2(return_to, air_shaft))
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(open, grate)) {
-		if (_globals[kKickedIn391Grate])
+		if (global[kKickedIn391Grate])
 			text_show(39113);
 		else {
 			text_show(39112);
-			_globals[kKickedIn391Grate] = true;
+			global[kKickedIn391Grate] = true;
 		}
 
-		if (_globals[kAfterHavoc])
+		if (global[kAfterHavoc])
 			_scene->_nextSceneId = 361;
 		else
 			_scene->_nextSceneId = 311;
 	} else if (player_said_2(look_through, grate)) {
-		if (_globals[kAfterHavoc])
+		if (global[kAfterHavoc])
 			text_show(39111);
 		else
 			text_show(39110);
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index 90109d90f41..0d8e140d9d5 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -41,7 +41,7 @@ static void room_399_parser() {
 	if (player_said_2(return_to, air_shaft))
 		_scene->_nextSceneId = 313;
 	else if (player_said_2(look_through, grate)) {
-		if (_globals[kAfterHavoc]) {
+		if (global[kAfterHavoc]) {
 			if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
 				text_show(38911);
 			else
@@ -49,7 +49,7 @@ static void room_399_parser() {
 		} else
 			text_show(38910);
 	} else if (player_said_2(open, grate)) {
-		if (_globals[kAfterHavoc])
+		if (global[kAfterHavoc])
 			text_show(38914);
 		else
 			text_show(38913);
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index 8f4016f9a09..59ccf0da92c 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -108,7 +108,7 @@ static void room_401_pre_parser() {
 		player.need_to_walk = false;
 
 	if (player.need_to_walk && local._northFl) {
-		if (_globals[kSexOfRex] == REX_MALE) {
+		if (global[kSexOfRex] == REX_MALE) {
 			local._dest_x = 148;
 			local._dest_y = 94;
 		} else {
@@ -122,26 +122,26 @@ static void room_401_pre_parser() {
 
 static void room_401_parser() {
 	if (player.x == local._dest_x && player.y && local._northFl) {
-		if (_globals[kSexOfRex] == REX_MALE) {
+		if (global[kSexOfRex] == REX_MALE) {
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
 			_scene->loadAnimation(kernel_name('s', 1), 70);
-			_globals[kHasBeenScanned] = true;
+			global[kHasBeenScanned] = true;
 			g_engine->_soundManager->command(22, 0);
 			int idx = _scene->_kernelMessages.add(Common::Point(153, 46), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 0x1D4));
 			_scene->_kernelMessages.setQuoted(idx, 4, true);
 		}
 
-		if (_globals[kSexOfRex] == REX_FEMALE) {
+		if (global[kSexOfRex] == REX_FEMALE) {
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
 			_scene->loadAnimation(kernel_name('s', 2), 80);
 			g_engine->_soundManager->command(23, 0);
-			_globals[kHasBeenScanned] = true;
+			global[kHasBeenScanned] = true;
 		}
 	}
 
@@ -151,7 +151,7 @@ static void room_401_parser() {
 	} else if (player_said_2(walk_down, corridor_to_north))
 		_scene->_nextSceneId = 354;
 	else if (player_said_2(look, scanner)) {
-		if (_globals[kHasBeenScanned])
+		if (global[kHasBeenScanned])
 			text_show(40111);
 		else
 			text_show(40110);
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 4bd453b40da..29c2cdc9649 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -352,7 +352,7 @@ static void handleConversation4() {
 		_scene->_kernelMessages.add(Common::Point(193, 27), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F4));
 		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F5));
 		local._dialog4.write(0x23A, false);
-		_globals[kHasSaidTimer] = true;
+		global[kHasSaidTimer] = true;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1100;
@@ -368,7 +368,7 @@ static void handleConversation4() {
 		_scene->_kernelMessages.add(Common::Point(153, 27), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F6));
 		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F7));
 		local._dialog4.write(0x23D, false);
-		_globals[kHasSaidBinocs] = true;
+		global[kHasSaidBinocs] = true;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1100;
@@ -438,29 +438,29 @@ static void handleDialogs() {
 }
 
 static void room_402_init() {
-	_globals._spriteIndexes[0] = _scene->_sprites.addSprites(kernel_name('n', -1));
-	_globals._spriteIndexes[1] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	_globals._spriteIndexes[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	_globals._spriteIndexes[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	_globals._spriteIndexes[4] = _scene->_sprites.addSprites(kernel_name('g', 0));
-	_globals._spriteIndexes[5] = _scene->_sprites.addSprites(kernel_name('g', 1));
-	_globals._spriteIndexes[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	_globals._spriteIndexes[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	_globals._spriteIndexes[15] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	_globals._spriteIndexes[8] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	_globals._spriteIndexes[9] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	_globals._spriteIndexes[10] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	_globals._spriteIndexes[11] = _scene->_sprites.addSprites(kernel_name('b', 2));
-	_globals._spriteIndexes[12] = _scene->_sprites.addSprites(kernel_name('b', 3));
-	_globals._spriteIndexes[13] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	_globals._spriteIndexes[14] = _scene->_sprites.addSprites(kernel_name('l', 0));
-	_globals._spriteIndexes[16] = _scene->_sprites.addSprites(kernel_name('h', 0));
-	_globals._spriteIndexes[17] = _scene->_sprites.addSprites(kernel_name('z', 0));
-	_globals._spriteIndexes[18] = _scene->_sprites.addSprites(kernel_name('z', 1));
-	_globals._spriteIndexes[19] = _scene->_sprites.addSprites(kernel_name('z', 2));
-	_globals._spriteIndexes[20] = _scene->_sprites.addSprites(kernel_name('x', 6));
-	_globals._spriteIndexes[21] = _scene->_sprites.addSprites("*ROXRC_9");
-	_globals._spriteIndexes[22] = _scene->_sprites.addSprites("*ROXCL_8");
+	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('n', -1));
+	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 2));
+	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('g', 0));
+	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('g', 1));
+	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
+	g_sprite_ids[15] = _scene->_sprites.addSprites(kernel_name('x', 5));
+	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('x', 4));
+	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('b', 2));
+	g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('b', 3));
+	g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('c', 0));
+	g_sprite_ids[14] = _scene->_sprites.addSprites(kernel_name('l', 0));
+	g_sprite_ids[16] = _scene->_sprites.addSprites(kernel_name('h', 0));
+	g_sprite_ids[17] = _scene->_sprites.addSprites(kernel_name('z', 0));
+	g_sprite_ids[18] = _scene->_sprites.addSprites(kernel_name('z', 1));
+	g_sprite_ids[19] = _scene->_sprites.addSprites(kernel_name('z', 2));
+	g_sprite_ids[20] = _scene->_sprites.addSprites(kernel_name('x', 6));
+	g_sprite_ids[21] = _scene->_sprites.addSprites("*ROXRC_9");
+	g_sprite_ids[22] = _scene->_sprites.addSprites("*ROXCL_8");
 
 	if (_scene->_priorSceneId == 401) {
 		player.x = 160;
@@ -509,12 +509,12 @@ static void room_402_init() {
 	else
 		local._dialog4.write(0x239, false);
 
-	if (player_has(OBJ_BINOCULARS) && !_globals[kHasSaidBinocs])
+	if (player_has(OBJ_BINOCULARS) && !global[kHasSaidBinocs])
 		local._dialog4.write(0x23D, true);
 	else
 		local._dialog4.write(0x23D, false);
 
-	if (player_has(OBJ_TIMER_MODULE) && !_globals[kHasSaidTimer])
+	if (player_has(OBJ_TIMER_MODULE) && !global[kHasSaidTimer])
 		local._dialog4.write(0x23A, true);
 	else
 		local._dialog4.write(0x23A, false);
@@ -630,47 +630,47 @@ static void room_402_init() {
 	_scene->loadAnimation(kernel_full_name(402, 'd', 1, "", EXT_AA));
 	_scene->_animation[0]->_repeatFlag = true;
 
-	_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
+	g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
+	_scene->_sequences.setDepth(g_sequence_ids[5], 1);
 
-	_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+	g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
+	_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 
 	if (!player_has(OBJ_REPAIR_LIST)) {
-		_globals._sequenceIndexes[14] = _scene->_sequences.startCycle(_globals._spriteIndexes[14], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[14], 7);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[14], Common::Point(210, 80));
-		int idx = _scene->_dynamicHotspots.add(words_repair_list, words_look_at, _globals._sequenceIndexes[14], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[14] = _scene->_sequences.startCycle(g_sprite_ids[14], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[14], 7);
+		_scene->_sequences.setPosition(g_sequence_ids[14], Common::Point(210, 80));
+		int idx = _scene->_dynamicHotspots.add(words_repair_list, words_look_at, g_sequence_ids[14], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
 	}
 
 	{
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 	}
 
 	if (!object_is_here(OBJ_ALIEN_LIQUOR) && !player_has(OBJ_CREDIT_CHIP)) {
-		_globals._sequenceIndexes[15] = _scene->_sequences.startCycle(_globals._spriteIndexes[15], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[15], 8);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[15], Common::Point(250, 80));
-		int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, _globals._sequenceIndexes[15], Common::Rect(0, 0, 0, 0));
+		g_sequence_ids[15] = _scene->_sequences.startCycle(g_sprite_ids[15], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[15], 8);
+		_scene->_sequences.setPosition(g_sequence_ids[15], Common::Point(250, 80));
+		int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, g_sequence_ids[15], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
 	}
 
-	_globals._sequenceIndexes[20] = _scene->_sequences.startCycle(_globals._spriteIndexes[20], false, 1);
-	_scene->_sequences.setDepth(_globals._sequenceIndexes[20], 7);
-	_scene->_sequences.setPosition(_globals._sequenceIndexes[20], Common::Point(234, 72));
+	g_sequence_ids[20] = _scene->_sequences.startCycle(g_sprite_ids[20], false, 1);
+	_scene->_sequences.setDepth(g_sequence_ids[20], 7);
+	_scene->_sequences.setPosition(g_sequence_ids[20], Common::Point(234, 72));
 
-	if (_globals[kBottleDisplayed]) {
-		_globals._sequenceIndexes[8] = _scene->_sequences.startCycle(_globals._spriteIndexes[8], false, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 7);
+	if (global[kBottleDisplayed]) {
+		g_sequence_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[8], false, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 7);
 	}
 
 	if (local._roxOnStool) {
-		_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
+		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
 		player.walker_visible = false;
 	}
 
@@ -681,7 +681,7 @@ static void room_402_daemon() {
 	if (kernel.trigger == 104) {
 		player.clock = _scene->_frameStartTime + player.frame_delay;
 		player.walker_visible = true;
-		_scene->_sequences.remove(_globals._sequenceIndexes[15]);
+		_scene->_sequences.remove(g_sequence_ids[15]);
 		inter_give_to_player(OBJ_CREDIT_CHIP);
 		object_examine(OBJ_CREDIT_CHIP, 40242, 0);
 		player.commands_allowed = true;
@@ -689,12 +689,12 @@ static void room_402_daemon() {
 
 	if ((g_engine->getRandomNumber(1, 1500) == 1) && (!local._activeTeleporter) && (player.x < 150)) {
 		g_engine->_soundManager->command(30, 0);
-		_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 13, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 48);
+		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 13, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[4], 1, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[4], 14);
+		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 48);
 		local._activeTeleporter = true;
-		_globals[kSomeoneHasExploded] = true;
+		global[kSomeoneHasExploded] = true;
 	}
 
 	if (kernel.trigger == 48)
@@ -703,21 +703,21 @@ static void room_402_daemon() {
 	if (kernel.trigger == 100) {
 		local._bartenderReady = false;
 		if (local._bartenderHandsHips) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+			_scene->_sequences.remove(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
 		} else if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[11]);
+			_scene->_sequences.remove(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
 		} else if (local._bartenderSteady) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
+			_scene->_sequences.remove(g_sequence_ids[9]);
 			local._bartenderSteady = false;
 		}
 
 		if (!local._bartenderTalking) {
-			_globals._sequenceIndexes[10] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[10], false, 7, 0, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 3, 4);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 8);
-			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[10], Common::Rect(0, 0, 0, 0));
+			g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], false, 7, 0, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[10], 3, 4);
+			_scene->_sequences.setDepth(g_sequence_ids[10], 8);
+			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[10], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 			local._bartenderTalking = true;
 			if (local._talkTimer > 1000)
@@ -728,11 +728,11 @@ static void room_402_daemon() {
 	}
 
 	if ((kernel.trigger == 101) && local._bartenderTalking) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[10]);
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+		_scene->_sequences.remove(g_sequence_ids[10]);
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		local._bartenderSteady = true;
 		local._bartenderTalking = false;
 		if (local._talkTimer < 1000)
@@ -745,46 +745,46 @@ static void room_402_daemon() {
 	switch (kernel.trigger) {
 	case 92:
 		player.commands_allowed = false;
-		_scene->_sequences.remove(_globals._sequenceIndexes[6]);
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 1, 2);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 5);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
+		_scene->_sequences.remove(g_sequence_ids[6]);
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 1, 2);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
 		break;
 
 	case 93:
 	{
-		int seqIdx = _globals._sequenceIndexes[7];
+		int seqIdx = g_sequence_ids[7];
 		switch (local._roxMode) {
 		case 20:
 			g_engine->_soundManager->command(57, 0);
-			_scene->_sequences.remove(_globals._sequenceIndexes[15]);
+			_scene->_sequences.remove(g_sequence_ids[15]);
 			inter_give_to_player(OBJ_CREDIT_CHIP);
 			object_examine(OBJ_CREDIT_CHIP, 40242, 0);
 			break;
 
 		case 22:
 			g_engine->_soundManager->command(57, 0);
-			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
+			_scene->_sequences.remove(g_sequence_ids[8]);
 			inter_give_to_player(OBJ_ALIEN_LIQUOR);
-			_globals[kBottleDisplayed] = false;
+			global[kBottleDisplayed] = false;
 			object_examine(OBJ_ALIEN_LIQUOR, 40241, 0);
 			break;
 
 		case 21:
-			_globals._sequenceIndexes[15] = _scene->_sequences.startCycle(_globals._spriteIndexes[15], false, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[15], 8);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[15], Common::Point(250, 80));
+			g_sequence_ids[15] = _scene->_sequences.startCycle(g_sprite_ids[15], false, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[15], 8);
+			_scene->_sequences.setPosition(g_sequence_ids[15], Common::Point(250, 80));
 			break;
 
 		default:
 			break;
 		}
-		_globals._sequenceIndexes[7] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 1, 3);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 5);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 94);
+		g_sequence_ids[7] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 1, 3);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
+		_scene->_sequences.updateTimeout(g_sequence_ids[7], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 94);
 
 		if (local._roxMode == 21) {
 			if (player_has(OBJ_CREDIT_CHIP))
@@ -798,15 +798,15 @@ static void room_402_daemon() {
 
 	case 94:
 	{
-		int seqIdx = _globals._sequenceIndexes[7];
-		_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[6], seqIdx);
+		int seqIdx = g_sequence_ids[7];
+		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
+		_scene->_sequences.updateTimeout(g_sequence_ids[6], seqIdx);
 		if (local._roxMode == 22) {
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 0, 120, quote_string(kernel.quotes, 0x23F));
 			local._bartenderMode = 21;
-			_globals[kHasPurchased] = true;
+			global[kHasPurchased] = true;
 			_scene->_sequences.addTimer(140, 95);
 		} else if (local._roxMode == 20)
 			player.commands_allowed = true;
@@ -823,88 +823,88 @@ static void room_402_daemon() {
 		local._bartenderReady = false;
 		player.commands_allowed = false;
 		if (local._bartenderHandsHips || local._bartenderTalking) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+			_scene->_sequences.remove(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
 			local._bartenderTalking = false;
 		}
 
 		if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[11]);
+			_scene->_sequences.remove(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
 		}
 
 		if (local._bartenderSteady) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
+			_scene->_sequences.remove(g_sequence_ids[9]);
 			local._bartenderSteady = false;
 		}
-		_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[12], 1, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 96);
+		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[12], 1, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 96);
 		break;
 
 	case 96:
 	{
-		int seqIdx = _globals._sequenceIndexes[12];
-		_globals._sequenceIndexes[12] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[12], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[12], 6, 7);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[12], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 97);
+		int seqIdx = g_sequence_ids[12];
+		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[12], 6, 7);
+		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[12], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 97);
 	}
 	break;
 
 	case 97:
 	{
-		int seqIdx = _globals._sequenceIndexes[12];
+		int seqIdx = g_sequence_ids[12];
 		switch (local._bartenderMode) {
 		case 20:
-			_scene->_sequences.remove(_globals._sequenceIndexes[15]);
+			_scene->_sequences.remove(g_sequence_ids[15]);
 			break;
 
 		case 21:
 		{
-			_globals._sequenceIndexes[15] = _scene->_sequences.startCycle(_globals._spriteIndexes[15], false, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[15], 8);
-			_scene->_sequences.setPosition(_globals._sequenceIndexes[15], Common::Point(250, 80));
-			int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, _globals._sequenceIndexes[15], Common::Rect(0, 0, 0, 0));
+			g_sequence_ids[15] = _scene->_sequences.startCycle(g_sprite_ids[15], false, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[15], 8);
+			_scene->_sequences.setPosition(g_sequence_ids[15], Common::Point(250, 80));
+			int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, g_sequence_ids[15], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
 		}
 		break;
 
 		case 22:
-			_scene->_sequences.remove(_globals._sequenceIndexes[8]);
-			_globals[kBottleDisplayed] = false;
+			_scene->_sequences.remove(g_sequence_ids[8]);
+			global[kBottleDisplayed] = false;
 			break;
 
 		default:
 			break;
 		}
 
-		_globals._sequenceIndexes[12] = _scene->_sequences.startCycle(_globals._spriteIndexes[12], false, 6);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[12], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 8);
+		g_sequence_ids[12] = _scene->_sequences.startCycle(g_sprite_ids[12], false, 6);
+		_scene->_sequences.updateTimeout(g_sequence_ids[12], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
 		_scene->_sequences.addTimer(10, 98);
 	}
 	break;
 
 	case 98:
-		_scene->_sequences.remove(_globals._sequenceIndexes[12]);
-		_globals._sequenceIndexes[12] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[12], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[12], 1, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[12], SEQUENCE_TRIGGER_EXPIRE, 0, 99);
+		_scene->_sequences.remove(g_sequence_ids[12]);
+		g_sequence_ids[12] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[12], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[12], 1, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 99);
 		break;
 
 	case 99:
 	{
-		int seqIdx = _globals._sequenceIndexes[12];
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
+		int seqIdx = g_sequence_ids[12];
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
 		local._bartenderSteady = true;
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[9], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		if (local._bartenderMode == 20) {
 			_scene->_kernelMessages.reset();
 			_scene->_kernelMessages.add(Common::Point(210, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1F3));
@@ -929,64 +929,64 @@ static void room_402_daemon() {
 		local._bartenderReady = false;
 		player.commands_allowed = false;
 		if ((local._bartenderHandsHips) || (local._bartenderTalking)) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+			_scene->_sequences.remove(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
 			local._bartenderTalking = false;
 		} else if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[11]);
+			_scene->_sequences.remove(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
 		} else if (local._bartenderSteady) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[9]);
+			_scene->_sequences.remove(g_sequence_ids[9]);
 			local._bartenderSteady = false;
 		}
-		_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 1, 9);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 87);
+		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[9], 1, 9);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 87);
 		break;
 
 	case 87:
 	{
-		int seqIdx = _globals._sequenceIndexes[9];
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 9);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[9], seqIdx);
+		int seqIdx = g_sequence_ids[9];
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 9);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[9], seqIdx);
 		_scene->_sequences.addTimer(10, 89);
 
-		_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 7);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 88);
+		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[8], 1, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 7);
+		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 88);
 	}
 	break;
 
 	case 88:
-		_globals._sequenceIndexes[8] = _scene->_sequences.startCycle(_globals._spriteIndexes[8], false, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 7);
-		_globals[kBottleDisplayed] = true;
+		g_sequence_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[8], false, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[8], 7);
+		global[kBottleDisplayed] = true;
 		break;
 
 	case 89:
-		_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 6);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
+		_scene->_sequences.remove(g_sequence_ids[9]);
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 6);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		_scene->_sequences.addTimer(10, 90);
 		break;
 
 	case 90:
-		_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 5);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
+		_scene->_sequences.remove(g_sequence_ids[9]);
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 5);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		_scene->_sequences.addTimer(10, 91);
 		break;
 
 	case 91:
 	{
-		_scene->_sequences.remove(_globals._sequenceIndexes[9]);
-		_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+		_scene->_sequences.remove(g_sequence_ids[9]);
+		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
+		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		local._bartenderSteady = true;
 		player.commands_allowed = true;
 		local._bartenderReady = true;
@@ -1011,38 +1011,38 @@ static void room_402_daemon() {
 
 	switch (kernel.trigger) {
 	case 75:
-		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
+		_scene->_sequences.remove(g_sequence_ids[5]);
 		local._bigBeatFl = !local._bigBeatFl;
 
 		if (local._bigBeatFl) {
-			_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 5);
+			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 5);
 			_scene->_sequences.addTimer(8, 130);
 		} else {
-			_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 5);
+			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 5);
 			_scene->_sequences.addTimer(8, 53);
 		}
 
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
+		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
 		break;
 
 	case 130:
-		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 6);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
+		_scene->_sequences.remove(g_sequence_ids[5]);
+		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 6);
+		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
 		_scene->_sequences.addTimer(8, 131);
 		break;
 
 	case 131:
-		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 5);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
+		_scene->_sequences.remove(g_sequence_ids[5]);
+		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 5);
+		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
 		_scene->_sequences.addTimer(8, 53);
 		break;
 
 	case 53:
-		_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-		_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
+		_scene->_sequences.remove(g_sequence_ids[5]);
+		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
 		local._waitingGinnyMove = false;
 		break;
 
@@ -1058,9 +1058,9 @@ static void room_402_daemon() {
 			local._beatCounter = 0;
 			local._bigBeatFl = true;
 		} else {
-			_scene->_sequences.remove(_globals._sequenceIndexes[5]);
-			_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, g_engine->getRandomNumber(1, 4));
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1);
+			_scene->_sequences.remove(g_sequence_ids[5]);
+			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, g_engine->getRandomNumber(1, 4));
+			_scene->_sequences.setDepth(g_sequence_ids[5], 1);
 			_scene->_sequences.addTimer(60, 54);
 		}
 	}
@@ -1068,22 +1068,22 @@ static void room_402_daemon() {
 	if (local._bartenderReady) {
 		if (g_engine->getRandomNumber(1, 250) == 1) {
 			if (local._bartenderLooksLeft) {
-				_scene->_sequences.remove(_globals._sequenceIndexes[11]);
+				_scene->_sequences.remove(g_sequence_ids[11]);
 				local._bartenderLooksLeft = false;
 			} else if (local._bartenderHandsHips) {
-				_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+				_scene->_sequences.remove(g_sequence_ids[10]);
 				local._bartenderHandsHips = false;
 			} else if (local._bartenderSteady) {
-				_scene->_sequences.remove(_globals._sequenceIndexes[9]);
+				_scene->_sequences.remove(g_sequence_ids[9]);
 				local._bartenderSteady = false;
 			}
 
 			switch (g_engine->getRandomNumber(1, 3)) {
 			case 1:
 			{
-				_globals._sequenceIndexes[10] = _scene->_sequences.startCycle(_globals._spriteIndexes[10], false, 4);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 8);
-				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[10], Common::Rect(0, 0, 0, 0));
+				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[10], false, 4);
+				_scene->_sequences.setDepth(g_sequence_ids[10], 8);
+				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[10], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 				local._bartenderHandsHips = true;
 			}
@@ -1091,9 +1091,9 @@ static void room_402_daemon() {
 
 			case 2:
 			{
-				_globals._sequenceIndexes[11] = _scene->_sequences.startCycle(_globals._spriteIndexes[11], false, 2);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 8);
-				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[11], Common::Rect(0, 0, 0, 0));
+				g_sequence_ids[11] = _scene->_sequences.startCycle(g_sprite_ids[11], false, 2);
+				_scene->_sequences.setDepth(g_sequence_ids[11], 8);
+				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[11], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 				local._bartenderLooksLeft = true;
 			}
@@ -1101,9 +1101,9 @@ static void room_402_daemon() {
 
 			case 3:
 			{
-				_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
-				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+				g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+				_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 				local._bartenderSteady = true;
 			}
@@ -1116,11 +1116,11 @@ static void room_402_daemon() {
 	}
 
 	if (kernel.trigger == 76) {
-		int seqIdx = _globals._sequenceIndexes[6];
-		_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[6], seqIdx);
-		if (!_globals[kBeenThruHelgaScene]) {
+		int seqIdx = g_sequence_ids[6];
+		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
+		_scene->_sequences.updateTimeout(g_sequence_ids[6], seqIdx);
+		if (!global[kBeenThruHelgaScene]) {
 			player.commands_allowed = false;
 			local._cutSceneNeeded = true;
 		} else {
@@ -1132,33 +1132,33 @@ static void room_402_daemon() {
 	switch (kernel.trigger) {
 	case 77:
 		player.commands_allowed = false;
-		_scene->_sequences.remove(_globals._sequenceIndexes[6]);
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 10, 12);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 5);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 78);
+		_scene->_sequences.remove(g_sequence_ids[6]);
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 10, 12);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 78);
 		break;
 
 	case 78:
 	{
 		g_engine->_soundManager->command(57, 0);
-		int seqIdx = _globals._sequenceIndexes[7];
+		int seqIdx = g_sequence_ids[7];
 		inter_give_to_player(OBJ_REPAIR_LIST);
-		_scene->_sequences.remove(_globals._sequenceIndexes[14]);
-		_globals._sequenceIndexes[7] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 10, 12);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 5);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[7], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
+		_scene->_sequences.remove(g_sequence_ids[14]);
+		g_sequence_ids[7] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 10, 12);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
+		_scene->_sequences.updateTimeout(g_sequence_ids[7], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
 	}
 	break;
 
 	case 79:
 	{
-		int seqIdx = _globals._sequenceIndexes[7];
-		_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[6], seqIdx);
+		int seqIdx = g_sequence_ids[7];
+		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
+		_scene->_sequences.updateTimeout(g_sequence_ids[6], seqIdx);
 		_scene->_sequences.addTimer(20, 180);
 	}
 	break;
@@ -1181,28 +1181,28 @@ static void room_402_daemon() {
 
 	if (g_engine->getRandomNumber(1, 25) == 1) {
 		if (local._lightOn) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[0]);
+			_scene->_sequences.remove(g_sequence_ids[0]);
 			local._lightOn = false;
 		} else {
-			_globals._sequenceIndexes[0] = _scene->_sequences.startCycle(_globals._spriteIndexes[0], false, 1);
+			g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
 			local._lightOn = true;
 		}
 	}
 
 	if (!local._blowingSmoke && (g_engine->getRandomNumber(1, 300) == 1)) {
-		_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 14);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 30);
+		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[1], 1, 14);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 14);
+		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 30);
 		local._blowingSmoke = true;
 	}
 
 	switch (kernel.trigger) {
 	case 30:
-		_globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 5);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 31);
+		g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[1], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[1], 1, 5);
+		_scene->_sequences.setDepth(g_sequence_ids[1], 14);
+		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 31);
 		break;
 
 	case 31:
@@ -1217,14 +1217,14 @@ static void room_402_daemon() {
 		if (g_engine->getRandomNumber(1, 1000) == 1) {
 			switch (g_engine->getRandomNumber(1, 2)) {
 			case 1:
-				_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 8);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 33);
+				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 8);
+				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 33);
 				local._leftWomanMoving = true;
 				break;
 
 			case 2:
-				_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
+				g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
 				_scene->_sequences.addTimer(12, 35);
 				local._leftWomanMoving = true;
 				break;
@@ -1238,34 +1238,34 @@ static void room_402_daemon() {
 	switch (kernel.trigger) {
 	case 33:
 	{
-		int seqIdx = _globals._sequenceIndexes[2];
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 9);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], seqIdx);
+		int seqIdx = g_sequence_ids[2];
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 9);
+		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 250), 34);
 	}
 	break;
 
 	case 34:
-		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-		_globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 38);
+		_scene->_sequences.remove(g_sequence_ids[2]);
+		g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 38);
 		break;
 
 	case 35:
-		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 2);
+		_scene->_sequences.remove(g_sequence_ids[2]);
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 2);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 300), 36);
 		break;
 
 	case 36:
-		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
-		_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
+		_scene->_sequences.remove(g_sequence_ids[2]);
+		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
 		_scene->_sequences.addTimer(12, 37);
 		break;
 
 	case 37:
-		_scene->_sequences.remove(_globals._sequenceIndexes[2]);
+		_scene->_sequences.remove(g_sequence_ids[2]);
 		local._leftWomanMoving = false;
 		break;
 
@@ -1281,30 +1281,30 @@ static void room_402_daemon() {
 		if (g_engine->getRandomNumber(1, 300) == 1) {
 			switch (g_engine->getRandomNumber(1, 4)) {
 			case 1:
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 2:
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 4, 5);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 3:
-				_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 4, 5);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 4:
-				_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 2, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 3, 4);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[3], 3, 4);
+				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
@@ -1399,21 +1399,21 @@ static void room_402_daemon() {
 	switch (kernel.trigger) {
 	case 55:
 		if (local._bartenderHandsHips) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[10]);
+			_scene->_sequences.remove(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
-			_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 			local._bartenderSteady = true;
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
+			_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		} else if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[11]);
+			_scene->_sequences.remove(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
-			_globals._sequenceIndexes[9] = _scene->_sequences.startCycle(_globals._spriteIndexes[9], false, 1);
-			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, _globals._sequenceIndexes[9], Common::Rect(0, 0, 0, 0));
+			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 			local._bartenderSteady = true;
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
+			_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		}
 		player.commands_allowed = false;
 		_scene->_kernelMessages.reset();
@@ -1422,56 +1422,56 @@ static void room_402_daemon() {
 		break;
 
 	case 56:
-		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 2, 5);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 57);
+		_scene->_sequences.remove(g_sequence_ids[13]);
+		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 2, 5);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 57);
 		break;
 
 	case 57:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_scene->_sequences.remove(_globals._sequenceIndexes[20]);
-		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 6, 9);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 58);
+		int seqIdx = g_sequence_ids[13];
+		_scene->_sequences.remove(g_sequence_ids[20]);
+		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 6, 9);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 58);
 	}
 	break;
 
 	case 58:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 5, 9);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 59);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 5, 9);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 59);
 	}
 	break;
 
 	case 59:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 1, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
-		_globals._sequenceIndexes[20] = _scene->_sequences.startCycle(_globals._spriteIndexes[20], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[20], 8);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[20], Common::Point(234, 72));
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 1, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+		g_sequence_ids[20] = _scene->_sequences.startCycle(g_sprite_ids[20], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[20], 8);
+		_scene->_sequences.setPosition(g_sequence_ids[20], Common::Point(234, 72));
 	}
 	break;
 
 	case 60:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 		_scene->_sequences.addTimer(10, 61);
 	}
 	break;
@@ -1481,19 +1481,19 @@ static void room_402_daemon() {
 		_scene->_kernelMessages.add(Common::Point(181, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x1FF));
 		_scene->_kernelMessages.add(Common::Point(171, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x200));
 		_scene->_sequences.addTimer(150, 63);
-		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-		_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 30, 4, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 10, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 62);
+		_scene->_sequences.remove(g_sequence_ids[13]);
+		g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 30, 4, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 62);
 		break;
 
 	case 62:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 	}
 	break;
 
@@ -1515,67 +1515,67 @@ static void room_402_daemon() {
 
 	case 65:
 		g_engine->_soundManager->command(30, 0);
-		_globals._sequenceIndexes[16] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[16], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[16], 1, 6);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[16], 9);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[16], SEQUENCE_TRIGGER_EXPIRE, 0, 66);
+		g_sequence_ids[16] = _scene->_sequences.addSpriteCycle(g_sprite_ids[16], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[16], 1, 6);
+		_scene->_sequences.setDepth(g_sequence_ids[16], 9);
+		_scene->_sequences.addSubEntry(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 66);
 		break;
 
 	case 66:
 	{
-		int seqIdx = _globals._sequenceIndexes[16];
-		_globals._sequenceIndexes[16] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[16], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[16], 7, 37);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[16], 9);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[16], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[16], SEQUENCE_TRIGGER_EXPIRE, 0, 68);
-
-		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 12, 13);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 67);
+		int seqIdx = g_sequence_ids[16];
+		g_sequence_ids[16] = _scene->_sequences.addSpriteCycle(g_sprite_ids[16], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[16], 7, 37);
+		_scene->_sequences.setDepth(g_sequence_ids[16], 9);
+		_scene->_sequences.updateTimeout(g_sequence_ids[16], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 68);
+
+		_scene->_sequences.remove(g_sequence_ids[13]);
+		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 12, 13);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 67);
 	}
 	break;
 
 	case 67:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 13);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 13);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 	}
 	break;
 
 	case 68:
-		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 12, 13);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 69);
+		_scene->_sequences.remove(g_sequence_ids[13]);
+		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 12, 13);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 69);
 		break;
 
 	case 69:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 25, 4, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 10, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 25, 4, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
 
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(179, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x203));
 		_scene->_kernelMessages.add(Common::Point(167, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x204));
 		_scene->_sequences.addTimer(150, 71);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	}
 	break;
 
 	case 70:
-		_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 25, 4, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 10, 12);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 25, 4, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 12);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 71:
@@ -1589,10 +1589,10 @@ static void room_402_daemon() {
 
 	case 72:
 	{
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 	}
 	break;
 
@@ -1604,7 +1604,7 @@ static void room_402_daemon() {
 		player.commands_allowed = true;
 		local._helgaReady = true;
 		local._bartenderReady = true;
-		_globals[kBeenThruHelgaScene] = true;
+		global[kBeenThruHelgaScene] = true;
 		local._activeArrows = false;
 		break;
 
@@ -1619,51 +1619,51 @@ static void room_402_daemon() {
 			case 1:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-				_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 2, 5);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
+				_scene->_sequences.remove(g_sequence_ids[13]);
+				g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[13], 2, 5);
+				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
 				break;
 
 			case 2:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-				_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 15, 2, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 11, 13);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				_scene->_sequences.remove(g_sequence_ids[13]);
+				g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 15, 2, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[13], 11, 13);
+				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 3:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-				_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 10, 11);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				_scene->_sequences.remove(g_sequence_ids[13]);
+				g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 11);
+				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 4:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-				_globals._sequenceIndexes[13] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[13], false, 15, 2, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 14, 15);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				_scene->_sequences.remove(g_sequence_ids[13]);
+				g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 15, 2, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[13], 14, 15);
+				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 5:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-				_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-				_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 16, 19);
-				_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-				_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+				_scene->_sequences.remove(g_sequence_ids[13]);
+				g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+				_scene->_sequences.setAnimRange(g_sequence_ids[13], 16, 19);
+				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
 				break;
 
 			default:
@@ -1672,26 +1672,26 @@ static void room_402_daemon() {
 	}
 
 	if (kernel.trigger == 80) {
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 19);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 19);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 120), 81);
 	}
 
 	if (kernel.trigger == 81) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[13]);
-		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 16, 19);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+		_scene->_sequences.remove(g_sequence_ids[13]);
+		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 16, 19);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 	}
 
 	if (kernel.trigger == 26) {
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 		local._cutSceneReady = true;
 
 		if (!local._cutSceneNeeded)
@@ -1699,54 +1699,54 @@ static void room_402_daemon() {
 	}
 
 	if (kernel.trigger == 82) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[20]);
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 6, 9);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+		_scene->_sequences.remove(g_sequence_ids[20]);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 6, 9);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
 	}
 
 	if (kernel.trigger == 83) {
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 5, 9);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 84);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 5, 9);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 84);
 	}
 
 	if (kernel.trigger == 84) {
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[13], 1, 4);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 85);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[13], 1, 4);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 85);
 
-		_globals._sequenceIndexes[20] = _scene->_sequences.startCycle(_globals._spriteIndexes[20], false, 1);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[20], 8);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[20], Common::Point(234, 72));
+		g_sequence_ids[20] = _scene->_sequences.startCycle(g_sprite_ids[20], false, 1);
+		_scene->_sequences.setDepth(g_sequence_ids[20], 8);
+		_scene->_sequences.setPosition(g_sequence_ids[20], Common::Point(234, 72));
 	}
 
 	if (kernel.trigger == 85) {
-		int seqIdx = _globals._sequenceIndexes[13];
-		_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, 2);
-		_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], seqIdx);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
+		int seqIdx = g_sequence_ids[13];
+		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
+		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 		local._cutSceneReady = true;
 		if (!local._cutSceneNeeded)
 			local._helgaReady = true;
 	}
 
 	if (kernel.trigger == 102) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[6]);
+		_scene->_sequences.remove(g_sequence_ids[6]);
 		player.clock = _scene->_frameStartTime - player.frame_delay;
-		_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], 14, 18);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 5);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 103);
+		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 8, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[7], 14, 18);
+		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
+		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 103);
 	} else if (kernel.trigger == 103) {
 		player.clock = _scene->_frameStartTime + player.frame_delay;
 		local._roxOnStool = false;
@@ -1759,29 +1759,29 @@ static void room_402_daemon() {
 
 	if (local._activeArrows) {
 		if (!local._activeArrow1) {
-			_globals._sequenceIndexes[17] = _scene->_sequences.startCycle(_globals._spriteIndexes[17], false, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[17], 1);
+			g_sequence_ids[17] = _scene->_sequences.startCycle(g_sprite_ids[17], false, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[17], 1);
 			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 49);
 			local._activeArrow1 = true;
 		}
 
 		if (!local._activeArrow2) {
-			_globals._sequenceIndexes[18] = _scene->_sequences.startCycle(_globals._spriteIndexes[18], false, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[18], 1);
+			g_sequence_ids[18] = _scene->_sequences.startCycle(g_sprite_ids[18], false, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[18], 1);
 			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 50);
 			local._activeArrow2 = true;
 		}
 
 		if (!local._activeArrow3) {
-			_globals._sequenceIndexes[19] = _scene->_sequences.startCycle(_globals._spriteIndexes[19], false, 1);
-			_scene->_sequences.setDepth(_globals._sequenceIndexes[19], 1);
+			g_sequence_ids[19] = _scene->_sequences.startCycle(g_sprite_ids[19], false, 1);
+			_scene->_sequences.setDepth(g_sequence_ids[19], 1);
 			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 51);
 			local._activeArrow3 = true;
 		}
 	}
 
 	if (kernel.trigger == 49) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[17]);
+		_scene->_sequences.remove(g_sequence_ids[17]);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 45);
 	}
 
@@ -1789,7 +1789,7 @@ static void room_402_daemon() {
 		local._activeArrow1 = false;
 
 	if (kernel.trigger == 50) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[18]);
+		_scene->_sequences.remove(g_sequence_ids[18]);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 46);
 	}
 
@@ -1797,7 +1797,7 @@ static void room_402_daemon() {
 		local._activeArrow2 = false;
 
 	if (kernel.trigger == 51) {
-		_scene->_sequences.remove(_globals._sequenceIndexes[19]);
+		_scene->_sequences.remove(g_sequence_ids[19]);
 		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 47);
 	}
 
@@ -1859,13 +1859,13 @@ static void room_402_parser() {
 		if (kernel.trigger == 0) {
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			_globals._sequenceIndexes[21] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[21], false, 7, 2, 0, 0);
-			_scene->_sequences.setAnimRange(_globals._sequenceIndexes[21], 1, 2);
-			_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[21]);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[21], SEQUENCE_TRIGGER_SPRITE, 2, 165);
-			_scene->_sequences.addSubEntry(_globals._sequenceIndexes[21], SEQUENCE_TRIGGER_EXPIRE, 0, 166);
+			g_sequence_ids[21] = _scene->_sequences.startPingPongCycle(g_sprite_ids[21], false, 7, 2, 0, 0);
+			_scene->_sequences.setAnimRange(g_sequence_ids[21], 1, 2);
+			_scene->_sequences.setMsgLayout(g_sequence_ids[21]);
+			_scene->_sequences.addSubEntry(g_sequence_ids[21], SEQUENCE_TRIGGER_SPRITE, 2, 165);
+			_scene->_sequences.addSubEntry(g_sequence_ids[21], SEQUENCE_TRIGGER_EXPIRE, 0, 166);
 		} else if (kernel.trigger == 165) {
-			_scene->_sequences.remove(_globals._sequenceIndexes[14]);
+			_scene->_sequences.remove(g_sequence_ids[14]);
 			inter_give_to_player(OBJ_REPAIR_LIST);
 		}
 	} else if (kernel.trigger == 166) {
@@ -1983,10 +1983,10 @@ static void room_402_parser() {
 	} else if (player_said_2(sit_on, bar_stool) && !local._roxOnStool && (player.target_x != 248)) {
 		player.walker_visible = false;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 11);
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 5);
-		_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 7, 1, 0, 0);
+		_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 11);
+		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
+		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 		player.commands_allowed = false;
 	} else if (player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP) && local._roxOnStool) {
 		local._roxMode = 20;
@@ -1996,13 +1996,13 @@ static void room_402_parser() {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_globals._sequenceIndexes[22] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[22], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(_globals._sequenceIndexes[22], 1, 2);
-		_scene->_sequences.setPosition(_globals._sequenceIndexes[22], Common::Point(player.x, player.y + 1));
-		_scene->_sequences.setDepth(_globals._sequenceIndexes[22], 5);
-		_scene->_sequences.setScale(_globals._sequenceIndexes[22], 88);
+		g_sequence_ids[22] = _scene->_sequences.startPingPongCycle(g_sprite_ids[22], false, 7, 2, 0, 0);


Commit: ef05808e7a22a4f025d8fe896243af18a20d19c4
    https://github.com/scummvm/scummvm/commit/ef05808e7a22a4f025d8fe896243af18a20d19c4
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:54+10:00

Commit Message:
MADS: NEBULAR: Refactor the Sprites thunk

Changed paths:
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room213.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room301.cpp
    engines/mads/nebular/rooms/room303.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room310.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room322.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room409.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room502.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room707.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room711.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room807.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 84216582efd..76113f24dad 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -76,20 +76,20 @@ static void room_101_say_dang() {
 }
 
 static void room_101_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('x', 6));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('x', 7));
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('b', 2));
-	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('x', 8));
-	g_sprite_ids[14] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 3), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 4), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('x', 5), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('x', 6), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('x', 7), 0);
+	g_sprite_ids[8] = kernel_load_series(kernel_name('m', -1), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[10] = kernel_load_series(kernel_name('b', 2), 0);
+	g_sprite_ids[11] = kernel_load_series(kernel_name('a', 0), 0);
+	g_sprite_ids[12] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[13] = kernel_load_series(kernel_name('x', 8), 0);
+	g_sprite_ids[14] = kernel_load_series(kernel_name('x', 0), 0);
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 0, 25);
 	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 4, 0, 1, 0);
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index 61adec505fe..d2a6d962519 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -55,18 +55,18 @@ static void addRandomMessage() {
 static void room_102_init() {
 	section_1_music();
 
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('e', -1));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('n', -1));
-	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('g', -1));
-	g_sprite_ids[11] = _scene->_sprites.addSprites("*RXMRC_8");
-	g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 3), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 4), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('x', 5), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('b', -1), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('c', -1), 0);
+	g_sprite_ids[8] = kernel_load_series(kernel_name('e', -1), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('n', -1), 0);
+	g_sprite_ids[10] = kernel_load_series(kernel_name('g', -1), 0);
+	g_sprite_ids[11] = kernel_load_series("*RXMRC_8", 0);
+	g_sprite_ids[13] = kernel_load_series(kernel_name('x', 0), 0);
 
 	g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 8, 0, 0, 0);
 	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 170, 0, 1, 6);
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 32ddc789367..1f6c23c3dcf 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -41,20 +41,20 @@ static Scratch local;
 
 
 static void room_103_init() {
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('h', -1));
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('m', -1));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('t', -1));
-	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('r', -1));
-	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	g_sprite_ids[12] = _scene->_sprites.addSprites("*RXMBD_2");
-	g_sprite_ids[13] = _scene->_sprites.addSprites("*RXMRD_3");
+	g_sprite_ids[0] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 3), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 4), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('x', 5), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('b', -1), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('h', -1), 0);
+	g_sprite_ids[8] = kernel_load_series(kernel_name('m', -1), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('t', -1), 0);
+	g_sprite_ids[10] = kernel_load_series(kernel_name('r', -1), 0);
+	g_sprite_ids[11] = kernel_load_series(kernel_name('c', -1), 0);
+	g_sprite_ids[12] = kernel_load_series("*RXMBD_2", 0);
+	g_sprite_ids[13] = kernel_load_series("*RXMRD_3", 0);
 	g_sprite_ids[15] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 7, 0, 1, 0);
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 2, 0);
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 953c8946f7b..acb6e63822a 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -40,7 +40,7 @@ struct Scratch {
 static Scratch local;
 
 static void room_104_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('h', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('h', -1), 0);
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 0, 0, 1);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 8);
 
@@ -89,7 +89,7 @@ static void room_104_daemon() {
 				_scene->resetScene();
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
+				g_sprite_ids[2] = kernel_load_series(kernel_name('a', 0), 0);
 				kernel_new_palette();
 				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], mirrorFl, 7, 1, 0, 0);
 				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(198, 143));
@@ -122,7 +122,7 @@ static void room_104_daemon() {
 				_scene->resetScene();
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 1));
+				g_sprite_ids[3] = kernel_load_series(kernel_name('a', 1), 0);
 				kernel_new_palette();
 				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
 				_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(198, 143));
@@ -164,7 +164,7 @@ static void room_104_daemon() {
 				_scene->resetScene();
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
+				g_sprite_ids[4] = kernel_load_series(kernel_name('a', 2), 0);
 				kernel_new_palette();
 				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 8, 1, 0, 0);
 				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(198, 143));
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index 0f46efe2a01..bf56f6f2fe6 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -39,8 +39,8 @@ static Scratch local;
 
 
 static void room_105_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('m', 1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('f', 4));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('m', 1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('f', 4), 0);
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 8, 0, 0, 0);
 
 	if (global[kFishIn105]) {
@@ -76,9 +76,9 @@ static void room_105_daemon() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 
-			g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('m', 0));
-			g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
-			g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('m', 3));
+			g_sprite_ids[0] = kernel_load_series(kernel_name('m', 0), 0);
+			g_sprite_ids[2] = kernel_load_series(kernel_name('m', 2), 0);
+			g_sprite_ids[3] = kernel_load_series(kernel_name('m', 3), 0);
 			g_engine->_soundManager->command(33, 0);
 			_scene->clearSequenceList();
 			kernel_new_palette();
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index bce9e73298a..fb89b842f51 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/matte.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/mads/inventory.h"
@@ -42,16 +43,16 @@ static Scratch local;
 
 
 static void room_106_init() {
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('H', -1));
+	g_sprite_ids[0] = kernel_load_series(kernel_name('H', -1), 0);
 
 	if (player_has(OBJ_REBREATHER) || (_scene->_priorSceneId != 102) || _scene->_roomChanged) {
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('A', 0));
-		g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('A', 1));
+		g_sprite_ids[1] = kernel_load_series(kernel_name('A', 0), 0);
+		g_sprite_ids[3] = kernel_load_series(kernel_name('A', 1), 0);
 	}
 
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('G', -1));
+	g_sprite_ids[2] = kernel_load_series(kernel_name('G', -1), 0);
 	g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 21, 0, 0, 0);
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('I', -1));
+	g_sprite_ids[4] = kernel_load_series(kernel_name('I', -1), 0);
 	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 32, 47);
 
 	if (_scene->_priorSceneId == 102) {
@@ -71,7 +72,7 @@ static void room_106_init() {
 			player.x = 319;
 			player.y = 44;
 			player.facing = player.prepare_walk_facing = FACING_SOUTHWEST;
-			_scene->_sprites[player.series_base + 3]->_charInfo->_velocity = 24;
+			series_list[player.series_base + 3]->walker->velocity = 24;
 		}
 
 		player.prepare_walk_x = 246;
@@ -190,7 +191,7 @@ static void room_106_daemon() {
 static void room_106_pre_parser() {
 	if (player_said_2(swim_towards, sea_cliff) || player_said_2(swim_towards, seaweed_bank)) {
 		player.commands_allowed = false;
-		_scene->_sprites[player.series_base + 1]->_charInfo->_velocity = 24;
+		series_list[player.series_base + 1]->walker->velocity = 24;
 		player.walk_off_edge_to_room = 104;
 	}
 
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index b90d3c1f1b4..ebdf97cce64 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -40,9 +40,9 @@ static Scratch local;
 
 static void room_107_init() {
 	for (int i = 0; i < 3; i++)
-		g_sprite_ids[i + 1] = _scene->_sprites.addSprites(kernel_name('G', i));
+		g_sprite_ids[i + 1] = kernel_load_series(kernel_name('G', i), 0);
 
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", EXT_SS), 0);
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 0, 0, 7);
 	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 17, 0, 0, 13);
@@ -73,7 +73,7 @@ static void room_107_init() {
 	}
 
 	if (((_scene->_priorSceneId == 105) || (_scene->_priorSceneId == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
-		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_full_name(105, 'R', 1, "", EXT_SS));
+		g_sprite_ids[0] = kernel_load_series(kernel_full_name(105, 'R', 1, "", EXT_SS), 0);
 		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], true, 4, 0, 0, 0);
 		_scene->_sequences.setPosition(g_sequence_ids[0], Common::Point(270, 150));
 		_scene->_sequences.setMotion(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index 3799f5ad84c..f8e3191e18a 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -35,11 +35,11 @@ static void room_108_init() {
 	if (global[kHoovicSated] == 2)
 		global[kHoovicSated] = 0;
 
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(105, 'f', 4, "", EXT_SS));
+	g_sprite_ids[0] = kernel_load_series(kernel_name('X', 0), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('X', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('X', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('X', 3), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", EXT_SS), 0);
 
 	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 13, 0, 0, 7);
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 16, 0, 0, 9);
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index acd60bfc072..19adfdcd30e 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -21,6 +21,7 @@
 
 #include "mads/core/game.h"
 #include "mads/core/himem.h"
+#include "mads/core/matte.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -51,11 +52,11 @@ static Scratch local;
 static void room_109_init() {
 	global[kFishIn105] = true;
 
-	g_sprite_ids[0] = _scene->_sprites.addSprites("*RXSWRC_6");
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('O', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('O', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('O', 0));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('H', 4));
+	g_sprite_ids[0] = kernel_load_series("*RXSWRC_6", 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('O', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('O', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('O', 0), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('H', 4), 0);
 
 	local._rexThrowingObject = false;
 	local._throwingObjectId = 0;
@@ -109,8 +110,8 @@ static void room_109_init() {
 	local._eatingFirstFish = (!player.been_here_before) && (_scene->_priorSceneId < 110);
 
 	if (local._eatingFirstFish) {
-		g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_full_name(105, 'F', 1, "", EXT_SS));
-		g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('H', 1));
+		g_sprite_ids[10] = kernel_load_series(kernel_full_name(105, 'F', 1, "", EXT_SS), 0);
+		g_sprite_ids[9] = kernel_load_series(kernel_name('H', 1), 0);
 
 		g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], true, 4, 0, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[10], 5);
@@ -156,8 +157,8 @@ static void room_109_daemon() {
 		player.commands_allowed = false;
 		local._hungryFl = false;
 		local._beforeEatingRex = true;
-		_scene->_sprites.remove(g_sprite_ids[6]);
-		g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('H', 0));
+		matte_deallocate_series(g_sprite_ids[6], true);
+		g_sprite_ids[4] = kernel_load_series(kernel_name('H', 0), 0);
 		kernel_new_palette();
 	}
 
@@ -184,8 +185,8 @@ static void room_109_daemon() {
 
 	if (kernel.trigger == 73) {
 		_scene->_sequences.remove(g_sequence_ids[9]);
-		_scene->_sprites.remove(g_sprite_ids[9]);
-		_scene->_sprites.remove(g_sprite_ids[10]);
+		matte_deallocate_series(g_sprite_ids[9], true);
+		matte_deallocate_series(g_sprite_ids[10], true);
 
 		_scene->_spriteSlots.clear();
 		_scene->_spriteSlots.fullRefresh();
@@ -247,12 +248,12 @@ static void room_109_parser() {
 						switch (local._throwingObjectId) {
 						case OBJ_DEAD_FISH:
 						case OBJ_STUFFED_FISH:
-							g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('H', 1));
+							g_sprite_ids[8] = kernel_load_series(kernel_name('H', 1), 0);
 							break;
 
 						case OBJ_BURGER:
 							local._hoovicDifficultFl = (game.difficulty == DIFFICULTY_HARD);
-							g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('H', (local._hoovicDifficultFl ? 3 : 1)));
+							g_sprite_ids[8] = kernel_load_series(kernel_name('H', (local._hoovicDifficultFl ? 3 : 1)), 0);
 							break;
 
 						default:
@@ -348,7 +349,7 @@ static void room_109_parser() {
 						}
 						_scene->freeAnimation();
 						_scene->_sequences.remove(g_sequence_ids[8]);
-						_scene->_sprites.remove(g_sprite_ids[8]);
+						matte_deallocate_series(g_sprite_ids[8], true);
 						_scene->_spriteSlots.clear();
 						_scene->_spriteSlots.fullRefresh();
 						_scene->_sequences.scan();
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 12353de5442..c1c5171b102 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -39,10 +39,10 @@ static Scratch local;
 
 
 static void room_110_init() {
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('X', 3));
+	g_sprite_ids[0] = kernel_load_series(kernel_name('X', 0), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('X', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('X', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('X', 3), 0);
 
 	local._crabsFl = false;
 
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index dcc1cb9f1e8..a612bba66c2 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -42,13 +42,13 @@ static Scratch local;
 
 
 static void room_111_init() {
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
+	g_sprite_ids[0] = kernel_load_series(kernel_name('X', 0), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('X', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('X', 2), 0);
 
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('B', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('B', 1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('B', 2));
+	g_sprite_ids[3] = kernel_load_series(kernel_name('B', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('B', 1), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('B', 2), 0);
 
 	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 8, 0, 0, 0);
 	_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 9, 73);
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index 95263d3414c..2fe02d4ee59 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -34,10 +34,10 @@ namespace Rooms {
 static void room_112_init() {
 	section_1_music();
 
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('X', 0));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('X', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('X', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('X', 5));
+	g_sprite_ids[0] = kernel_load_series(kernel_name('X', 0), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('X', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('X', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('X', 5), 0);
 
 	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 10, 0, 17, 20);
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index 87dba1671b6..05df1486c07 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -40,11 +40,11 @@ static Scratch local;
 
 
 static void room_201_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('m', -1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites("*SC002Z1");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('m', -1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('b', -1), 0);
+	g_sprite_ids[5] = kernel_load_series("*SC002Z1", 0);
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 1, 0);
 	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 0, 0, 50);
 	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 4, 0, 0, 0);
@@ -99,8 +99,8 @@ static void room_201_init() {
 	}
 
 	if ((_scene->_priorSceneId == 202) && (global[kMeteorologistStatus] == METEOROLOGIST_PRESENT) && !_scene->_roomChanged) {
-		g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
-		g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		g_sprite_ids[6] = kernel_load_series(kernel_name('a', 0), 0);
+		g_sprite_ids[7] = kernel_load_series(kernel_name('a', 1), 0);
 		kernel.quotes = quote_load(90, 91, 0);
 		player.commands_allowed = false;
 		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 7, 1, 0, 0);
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index 6655d38b460..4f6511e49a5 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -52,19 +52,19 @@ static Scratch local;
 
 static void room_202_init() {
 	player.walker_been_visible = true;
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('l', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('b', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('l', -1), 0);
 	if (global[kSexOfRex] != SEX_MALE) {
-		g_sprite_ids[7] = _scene->_sprites.addSprites("*ROXBD_2");
+		g_sprite_ids[7] = kernel_load_series("*ROXBD_2", 0);
 	} else {
-		g_sprite_ids[7] = _scene->_sprites.addSprites("*RXMBD_2");
+		g_sprite_ids[7] = kernel_load_series("*RXMBD_2", 0);
 	}
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('a', 2));
+	g_sprite_ids[8] = kernel_load_series(kernel_name('a', 0), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[11] = kernel_load_series(kernel_name('a', 2), 0);
 
 	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
 	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 3a84de6a405..157bf3bea1d 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -68,7 +68,7 @@ static void room_203_init() {
 	}
 
 	if (!local._rhotundaEatFl) {
-		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('b', -1));
+		g_sprite_ids[0] = kernel_load_series(kernel_name('b', -1), 0);
 		if (g_engine->getRandomNumber(1, 3) == 2) {
 			g_sprite_ids[15] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 9, 1, 0, 0);
 			int idx = _scene->_dynamicHotspots.add(words_yellow_bird, words_look_at, g_sprite_ids[15], Common::Rect(0, 0, 0, 0));
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index b507a7ad53c..98c9c78be94 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -45,15 +45,15 @@ static Scratch local;
 
 
 static void room_205_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('f', -1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('p', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('f', -1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('c', -1), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('p', -1), 0);
 
 	if (global[kSexOfRex] == SEX_MALE)
-		g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		g_sprite_ids[8] = kernel_load_series(kernel_name('a', 1), 0);
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 10, 0, 0, 3);
 	int idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
@@ -253,7 +253,7 @@ static void room_205_parser() {
 			pal_lock();
 			_scene->_kernelMessages.reset();
 			kernel_dump_walker_only();
-			g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('a', 0));
+			g_sprite_ids[9] = kernel_load_series(kernel_name('a', 0), 0);
 			kernel_new_palette();
 			g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
 			_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index bd15f4cc315..d81a989263b 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -45,13 +45,13 @@ static Scratch local;
 
 
 static void room_207_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('h', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('h', 1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('e', 1));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('g', 1));
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('g', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('h', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('h', 1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('c', -1), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('e', 0), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('e', 1), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('g', 1), 0);
+	g_sprite_ids[8] = kernel_load_series(kernel_name('g', 0), 0);
 	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 7, 0, 0, 0);
 	_scene->_sequences.setDepth(g_sequence_ids[5], 7);
 
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index bd96b1cf18b..6eb56f1f32b 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -76,11 +76,11 @@ static void updateTrap() {
 }
 
 static void room_208_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[5] = _scene->_sprites.addSprites("*RXMBD_8");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[5] = kernel_load_series("*RXMBD_8", 0);
 
 	updateTrap();
 
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 26755d090ed..81cb44ae4a9 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/matte.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -744,12 +745,12 @@ static void handleMonkeyFall() {
 	case 219:
 	{
 		g_engine->_soundManager->command(25, 0);
-		_scene->_sprites.remove(g_sprite_ids[7]);
-		_scene->_sprites.remove(g_sprite_ids[6]);
-		_scene->_sprites.remove(g_sprite_ids[5]);
-		_scene->_sprites.remove(g_sprite_ids[4]);
+		matte_deallocate_series(g_sprite_ids[7], true);
+		matte_deallocate_series(g_sprite_ids[6], true);
+		matte_deallocate_series(g_sprite_ids[5], true);
+		matte_deallocate_series(g_sprite_ids[4], true);
 
-		g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('m', 4));
+		g_sprite_ids[8] = kernel_load_series(kernel_name('m', 4), 0);
 		_scene->_kernelMessages.add(Common::Point(180, 26), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 151));
 		_scene->_sequences.addTimer(40, 100);
 		_scene->_hotspots.activate(227, false);
@@ -969,16 +970,16 @@ static void handleDodge() {
 }
 
 static void room_209_init() {
-	g_sprite_ids[11] = _scene->_sprites.addSprites("*RXMBD_2");
-	g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('e', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('m', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('m', 1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('m', 3));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('m', 6));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('m', 8));
+	g_sprite_ids[11] = kernel_load_series("*RXMBD_2", 0);
+	g_sprite_ids[12] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('e', -1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('a', 0), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('m', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('m', 1), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('m', 3), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('m', 6), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('m', 8), 0);
 
 	kernel.quotes = quote_load(0x82, 0x83, 0x84, 0x9C, 0x97, 0x95, 0x99, 0x9E, 0x98, 0x9B, 0xA0, 0x96, 0x9F,
 		0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x91, 0x92, 0x93, 0x94, 0x89, 0x85, 0x8A, 0x86, 0x87, 0x88, 0);
@@ -1627,7 +1628,7 @@ static void room_209_parser() {
 	if (player_said_2(take, binoculars) && (kernel.trigger || object_is_here(OBJ_BINOCULARS))) {
 		switch (kernel.trigger) {
 		case 0:
-			g_sprite_ids[10] = _scene->_sprites.addSprites("*RXMBD_8");
+			g_sprite_ids[10] = kernel_load_series("*RXMBD_8", 0);
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], false, 3, 2, 0, 0);
@@ -1650,7 +1651,7 @@ static void room_209_parser() {
 
 		case 3:
 			object_examine(OBJ_BINOCULARS, 0x51AF, 0);
-			_scene->_sprites.remove(g_sprite_ids[10]);
+			matte_deallocate_series(g_sprite_ids[10], true);
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 10ff34b92b7..909ea9de6b5 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -343,7 +343,7 @@ static void setDialogNode(int node) {
 			_scene->freeAnimation();
 			_scene->resetScene();
 
-			g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+			g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
 			kernel.quotes = quote_load(0xE6, 0xE9, 0xEA, 0xE7, 0xE8, 0);
 			_scene->loadAnimation(kernel_name('B', -1), 4);
 			break;
@@ -613,7 +613,7 @@ static void restoreDialogNode(int node, int msgId, int posY) {
 }
 
 static void room_210_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
 
 	if (!player.been_here_before)
 		global[kCurtainOpen] = 0;
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index ca2c1e99cd4..d99be01d3f4 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -44,7 +44,7 @@ static Scratch local;
 
 
 static void room_211_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC002Z2");
+	g_sprite_ids[1] = kernel_load_series("*SC002Z2", 0);
 	local._wakeFl = false;
 
 	if (_scene->_priorSceneId == 210) {
diff --git a/engines/mads/nebular/rooms/room213.cpp b/engines/mads/nebular/rooms/room213.cpp
index b6765345c18..315b34f9b09 100644
--- a/engines/mads/nebular/rooms/room213.cpp
+++ b/engines/mads/nebular/rooms/room213.cpp
@@ -34,11 +34,11 @@ namespace Rooms {
 
 static void room_213_init() {
 	if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL)
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*METHAND");
+		g_sprite_ids[4] = kernel_load_series("*METHAND", 0);
 	else if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
+		g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 	else
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
+		g_sprite_ids[4] = kernel_load_series("*ROXHAND", 0);
 
 	teleporter_init();
 
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index edebb89a01f..941ac5b4bf4 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -40,10 +40,10 @@ static Scratch local;
 
 
 static void room_214_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('e', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('t', -1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXMRD_7");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('e', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('e', 1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('t', -1), 0);
+	g_sprite_ids[4] = kernel_load_series("*RXMRD_7", 0);
 
 	local._devilTime = player.clock;
 	local._devilRunningFl = false;
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index bcb7f163e4f..5760aa5dac5 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -32,17 +32,17 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_215_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('e', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('a', 0), 0);
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 0, 0, 0);
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(235, 83));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
 	if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMRC_9");
+		g_sprite_ids[2] = kernel_load_series("*RXMRC_9", 0);
 	else
-		g_sprite_ids[2] = _scene->_sprites.addSprites("*ROXRC_9");
+		g_sprite_ids[2] = kernel_load_series("*ROXRC_9", 0);
 
 	if (_scene->_priorSceneId == 216) {
 		player.x = 140;
diff --git a/engines/mads/nebular/rooms/room301.cpp b/engines/mads/nebular/rooms/room301.cpp
index a2ce9cd4cbd..b7f755a67e3 100644
--- a/engines/mads/nebular/rooms/room301.cpp
+++ b/engines/mads/nebular/rooms/room301.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_301_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
 
 	global[kMeteorologistStatus] = METEOROLOGIST_GONE;
diff --git a/engines/mads/nebular/rooms/room303.cpp b/engines/mads/nebular/rooms/room303.cpp
index 19ad79c1e0c..1796bed68e2 100644
--- a/engines/mads/nebular/rooms/room303.cpp
+++ b/engines/mads/nebular/rooms/room303.cpp
@@ -32,8 +32,8 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_303_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('b', 1), 0);
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 10, 0, 50, 120);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index c0bbe47e02c..7fdbd29cab1 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -45,12 +45,12 @@ static void room_304_init() {
 		_scene->loadAnimation(kernel_name('a', -1), 60);
 	} else {
 		if (global[kSexOfRex] == REX_MALE)
-			g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 0));
+			g_sprite_ids[1] = kernel_load_series(kernel_name('a', 0), 0);
 		else
-			g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
+			g_sprite_ids[4] = kernel_load_series(kernel_name('a', 2), 0);
 
-		g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 1));
-		g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
+		g_sprite_ids[2] = kernel_load_series(kernel_name('a', 1), 0);
+		g_sprite_ids[3] = kernel_load_series(kernel_name('b', 0), 0);
 
 		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 150, 0, 3, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 2);
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 90537cab517..902fb7468a0 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/core/game.h"
+#include "mads/core/matte.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -275,10 +276,10 @@ static void handleDialog() {
 }
 
 static void room_307_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
-	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[1] = kernel_load_series("*SC003x0", 0);
+	g_sprite_ids[0] = kernel_load_series("*SC003x1", 0);
+	g_sprite_ids[2] = kernel_load_series("*SC003x2", 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 0), 0);
 
 	init_forcefield(&local._forcefield, true);
 
@@ -491,7 +492,7 @@ static void room_307_parser() {
 			break;
 
 		case 1:
-			g_sprite_ids[5] = _scene->_sprites.addSprites("*RXCL_8");
+			g_sprite_ids[5] = kernel_load_series("*RXCL_8", 0);
 			player.walker_visible = false;
 			g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
 			_scene->_sequences.setAnimRange(g_sequence_ids[5], -1, 3);
@@ -552,7 +553,7 @@ static void room_307_parser() {
 		break;
 
 		case 7:
-			_scene->_sprites.remove(g_sprite_ids[5]);
+			matte_deallocate_series(g_sprite_ids[5], true);
 			player.commands_allowed = true;
 			break;
 
@@ -563,7 +564,7 @@ static void room_307_parser() {
 		if (local._grateOpenedFl) {
 			switch (kernel.trigger) {
 			case 0:
-				g_sprite_ids[5] = _scene->_sprites.addSprites("*RXCL_8");
+				g_sprite_ids[5] = kernel_load_series("*RXCL_8", 0);
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				_scene->_sequences.remove(g_sequence_ids[4]);
@@ -650,7 +651,7 @@ static void room_307_parser() {
 			switch (kernel.trigger) {
 			case 0:
 				g_engine->_soundManager->command(25, 0);
-				g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
+				g_sprite_ids[3] = kernel_load_series(kernel_name('a', 0), 0);
 				local._duringPeeingFl = true;
 				player.commands_allowed = false;
 				player.walker_visible = false;
@@ -675,7 +676,7 @@ static void room_307_parser() {
 
 			case 3:
 			{
-				_scene->_sprites.remove(g_sprite_ids[3]);
+				matte_deallocate_series(g_sprite_ids[3], true);
 				_scene->_kernelMessages.reset();
 				int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 4, 120, quote_string(kernel.quotes, 237));
 				_scene->_kernelMessages.setQuoted(idx, 4, true);
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index 73c3a438ae2..e0d4d60b67e 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -41,14 +41,14 @@ static Scratch local;
 
 
 static void room_308_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
-	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
+	g_sprite_ids[1] = kernel_load_series("*SC003x0", 0);
+	g_sprite_ids[0] = kernel_load_series("*SC003x1", 0);
+	g_sprite_ids[2] = kernel_load_series("*SC003x2", 0);
 
 	init_forcefield(&local._forcefield, true);
 
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[3] = kernel_load_series(kernel_name('b', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 
 	pal_change_color(252, 63, 30, 20);
 	pal_change_color(253, 45, 15, 12);
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index f560f16fb14..820698071f7 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -44,14 +44,14 @@ static Scratch local;
 
 
 static void room_309_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
-	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
+	g_sprite_ids[1] = kernel_load_series("*SC003x0", 0);
+	g_sprite_ids[0] = kernel_load_series("*SC003x1", 0);
+	g_sprite_ids[2] = kernel_load_series("*SC003x2", 0);
 
 	init_forcefield(&local._forcefield, true);
 
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 
 	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
diff --git a/engines/mads/nebular/rooms/room310.cpp b/engines/mads/nebular/rooms/room310.cpp
index bc081177c9c..68c2de042d4 100644
--- a/engines/mads/nebular/rooms/room310.cpp
+++ b/engines/mads/nebular/rooms/room310.cpp
@@ -40,13 +40,13 @@ static Scratch local;
 
 
 static void room_310_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*SC003x0");
-	g_sprite_ids[0] = _scene->_sprites.addSprites("*SC003x1");
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*SC003x2");
+	g_sprite_ids[1] = kernel_load_series("*SC003x0", 0);
+	g_sprite_ids[0] = kernel_load_series("*SC003x1", 0);
+	g_sprite_ids[2] = kernel_load_series("*SC003x2", 0);
 
 	init_forcefield(&local._forcefield, true);
 
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[3] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(127, 78));
 	_scene->_sequences.setDepth(g_sequence_ids[3], 15);
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index 096af8461fc..67f39910fb1 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -39,9 +39,9 @@ static Scratch local;
 
 
 static void room_311_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*RXCL_8");
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCL_2");
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[2] = kernel_load_series("*RXCL_8", 0);
+	g_sprite_ids[3] = kernel_load_series("*RXCL_2", 0);
 
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 71d1d9926f2..5a072eb6e73 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -270,15 +270,15 @@ static void handleRoxInGrate() {
 
 static void room_316_init() {
 	if (global[kSexOfRex] == REX_MALE) {
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('g', -1));
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*RXCL_8");
-		g_sprite_ids[6] = _scene->_sprites.addSprites("*RXCL_2");
+		g_sprite_ids[1] = kernel_load_series(kernel_name('g', -1), 0);
+		g_sprite_ids[4] = kernel_load_series("*RXCL_8", 0);
+		g_sprite_ids[6] = kernel_load_series("*RXCL_2", 0);
 	} else {
-		g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('g', 0));
-		g_sprite_ids[5] = _scene->_sprites.addSprites("*ROXCL_8");
+		g_sprite_ids[2] = kernel_load_series(kernel_name('g', 0), 0);
+		g_sprite_ids[5] = kernel_load_series("*ROXCL_8", 0);
 	}
 
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('v', 0));
+	g_sprite_ids[3] = kernel_load_series(kernel_name('v', 0), 0);
 	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 	_scene->_sequences.setDepth(g_sequence_ids[3], 12);
 
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index 02190f878bb..a9c1f29a8a4 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -208,8 +208,8 @@ static void handleDialog() {
 }
 
 static void room_318_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('k', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('k', -1), 0);
 
 	if (global[kAfterHavoc]) {
 		_scene->loadAnimation(kernel_name('f', -1));
@@ -274,7 +274,7 @@ static void room_318_init() {
 		(_scene->_priorSceneId == RETURNING_FROM_LOADING)) && (!global[kAfterHavoc]))) {
 		if (!global[kAfterHavoc]) {
 			player.walker_visible = false;
-			g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
+			g_sprite_ids[2] = kernel_load_series(kernel_name('g', -1), 0);
 			local._animMode = 2;
 
 			if (player_has_been_in_room(319) || !local._internVisibleFl) {
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index 449d30200ea..e0fdb1a7076 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -81,12 +81,12 @@ static void handleSlacheDialogs(int quoteId, int counter, uint32 timer) {
 }
 
 static void room_319_init() {
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('e', 0));
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 3));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('k', -1));
+	g_sprite_ids[5] = kernel_load_series(kernel_name('e', 0), 0);
+	g_sprite_ids[0] = kernel_load_series(kernel_name('a', 0), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('a', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('a', 3), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('k', -1), 0);
 
 	if (!player_has(OBJ_SCALPEL)) {
 		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index 9257b7bde73..57d7f643e97 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -175,12 +175,12 @@ static void room_320_init() {
 	local._lastFrame = 0;
 
 	for (int i = 0; i < 10; i++)
-		g_sprite_ids[i] = _scene->_sprites.addSprites(kernel_name('M', i));
+		g_sprite_ids[i] = kernel_load_series(kernel_name('M', i), 0);
 
 	for (int i = 0; i < 8; i++)
-		g_sprite_ids[10 + i] = _scene->_sprites.addSprites(kernel_name('N', i));
+		g_sprite_ids[10 + i] = kernel_load_series(kernel_name('N', i), 0);
 
-	g_sprite_ids[18] = _scene->_sprites.addSprites("*REXHAND");
+	g_sprite_ids[18] = kernel_load_series("*REXHAND", 0);
 	player.walker_visible = false;
 
 	setRightView(global[kRightView320]);
@@ -291,9 +291,9 @@ static void room_320_parser() {
 					setLeftView(10);
 					_scene->_kernelMessages.reset();
 					_scene->resetScene();
-					g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('m', 2));
-					g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('m', 4));
-					g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('m', 9));
+					g_sprite_ids[2] = kernel_load_series(kernel_name('m', 2), 0);
+					g_sprite_ids[4] = kernel_load_series(kernel_name('m', 4), 0);
+					g_sprite_ids[9] = kernel_load_series(kernel_name('m', 9), 0);
 					local._blinkFl = false;
 					setLeftView(2);
 					kernel.quotes = quote_load(0xFE, 0);
diff --git a/engines/mads/nebular/rooms/room322.cpp b/engines/mads/nebular/rooms/room322.cpp
index a4ee007c29d..6d87cae9902 100644
--- a/engines/mads/nebular/rooms/room322.cpp
+++ b/engines/mads/nebular/rooms/room322.cpp
@@ -34,9 +34,9 @@ namespace Rooms {
 
 static void room_322_init() {
 	if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
+		g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 	else
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
+		g_sprite_ids[4] = kernel_load_series("*ROXHAND", 0);
 
 	teleporter_init();
 
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index 88a49c36aa8..73b7f9d83ae 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -35,9 +35,9 @@ static void room_351_init() {
 	global[kAfterHavoc] = -1;
 	global[kTeleporterRoom + 1] = 351;
 
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*ROXRC_7");
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXRD_7");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
+	g_sprite_ids[2] = kernel_load_series("*ROXRC_7", 0);
+	g_sprite_ids[3] = kernel_load_series("*RXRD_7", 0);
 
 	if (object_is_here(OBJ_CREDIT_CHIP)) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index 3862647bff8..c495ffb3c89 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -126,25 +126,25 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 }
 
 static void room_352_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*RM302x0");
-	g_sprite_ids[13] = _scene->_sprites.addSprites("*RM302x2");
-	g_sprite_ids[12] = _scene->_sprites.addSprites("*RM302x3");
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('g', -1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	g_sprite_ids[1] = kernel_load_series("*RM302x0", 0);
+	g_sprite_ids[13] = kernel_load_series("*RM302x2", 0);
+	g_sprite_ids[12] = kernel_load_series("*RM302x3", 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('g', -1), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('b', -1), 0);
 
 
 	if (global[kSexOfRex] == REX_FEMALE) {
-		g_sprite_ids[3] = _scene->_sprites.addSprites("*ROXRC_7");
-		g_sprite_ids[7] = _scene->_sprites.addSprites("*ROXRC_6");
-		g_sprite_ids[15] = _scene->_sprites.addSprites("*ROXRC_9");
-		g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('a', 3));
-		g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('a', 2));
+		g_sprite_ids[3] = kernel_load_series("*ROXRC_7", 0);
+		g_sprite_ids[7] = kernel_load_series("*ROXRC_6", 0);
+		g_sprite_ids[15] = kernel_load_series("*ROXRC_9", 0);
+		g_sprite_ids[11] = kernel_load_series(kernel_name('a', 3), 0);
+		g_sprite_ids[9] = kernel_load_series(kernel_name('a', 2), 0);
 	} else {
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*RXRD_7");
-		g_sprite_ids[6] = _scene->_sprites.addSprites("*RXRC_6");
-		g_sprite_ids[14] = _scene->_sprites.addSprites("*RXMRC_9");
-		g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('a', 1));
-		g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('a', 0));
+		g_sprite_ids[4] = kernel_load_series("*RXRD_7", 0);
+		g_sprite_ids[6] = kernel_load_series("*RXRC_6", 0);
+		g_sprite_ids[14] = kernel_load_series("*RXMRC_9", 0);
+		g_sprite_ids[10] = kernel_load_series(kernel_name('a', 1), 0);
+		g_sprite_ids[8] = kernel_load_series(kernel_name('a', 0), 0);
 	}
 
 	local._leaveRoomFl = false;
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index a9e1ee83ae1..a4ab3cba959 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -39,7 +39,7 @@ static Scratch local;
 
 
 static void room_353_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(303, 'B', 0, "", EXT_SS));
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(303, 'B', 0, "", EXT_SS), 0);
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 5, 0);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index 7ee3561d4b4..4d62762da6a 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_357_init() {
 	global[kAfterHavoc] = true;
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index afc2d50c9ae..5be07b40972 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_358_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index 9acacfad7c1..208c2892b57 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -39,13 +39,13 @@ static Scratch local;
 
 
 static void room_359_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('b', -1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 
 	if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMBD_2");
+		g_sprite_ids[2] = kernel_load_series("*RXMBD_2", 0);
 	else
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXBD_2");
+		g_sprite_ids[4] = kernel_load_series("*ROXBD_2", 0);
 
 	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(127, 78));
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index 3bc33fb3b1d..7716fec704c 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_360_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 303fcad7595..246f3286f6f 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -233,13 +233,13 @@ static void handleRoxAction() {
 }
 
 static void room_361_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_full_name(307, 'X', 0, "", EXT_SS));
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 
 	if (global[kSexOfRex] == REX_MALE) {
-		g_sprite_ids[2] = _scene->_sprites.addSprites("*RXCL_8");
-		g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCL_2");
+		g_sprite_ids[2] = kernel_load_series("*RXCL_8", 0);
+		g_sprite_ids[3] = kernel_load_series("*RXCL_2", 0);
 	} else
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXCL_8");
+		g_sprite_ids[4] = kernel_load_series("*ROXCL_8", 0);
 
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 57e9eb067c2..375881c218a 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -38,7 +38,7 @@ static void room_388_init() {
 	if (global[kAfterHavoc])
 		_scene->_hotspots.activate(words_sauropod, false);
 	else {
-		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('b', 0));
+		g_sprite_ids[0] = kernel_load_series(kernel_name('b', 0), 0);
 		g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
 	}
 
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index e170e845779..8e5fe3d7165 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -49,7 +49,7 @@ static void room_389_init() {
 	if (global[kAfterHavoc])
 		_scene->_hotspots.activate(words_monster, false);
 	else {
-		g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('m', -1));
+		g_sprite_ids[0] = kernel_load_series(kernel_name('m', -1), 0);
 		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
 		_scene->_kernelMessages.initRandomMessages(1,
 			Common::Rect(88, 19, 177, 77), 13, 2, 0xFDFC, 60,
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 29c2cdc9649..2d803157e30 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -438,29 +438,29 @@ static void handleDialogs() {
 }
 
 static void room_402_init() {
-	g_sprite_ids[0] = _scene->_sprites.addSprites(kernel_name('n', -1));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('g', 0));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('g', 1));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[15] = _scene->_sprites.addSprites(kernel_name('x', 5));
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('b', 2));
-	g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('b', 3));
-	g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[14] = _scene->_sprites.addSprites(kernel_name('l', 0));
-	g_sprite_ids[16] = _scene->_sprites.addSprites(kernel_name('h', 0));
-	g_sprite_ids[17] = _scene->_sprites.addSprites(kernel_name('z', 0));
-	g_sprite_ids[18] = _scene->_sprites.addSprites(kernel_name('z', 1));
-	g_sprite_ids[19] = _scene->_sprites.addSprites(kernel_name('z', 2));
-	g_sprite_ids[20] = _scene->_sprites.addSprites(kernel_name('x', 6));
-	g_sprite_ids[21] = _scene->_sprites.addSprites("*ROXRC_9");
-	g_sprite_ids[22] = _scene->_sprites.addSprites("*ROXCL_8");
+	g_sprite_ids[0] = kernel_load_series(kernel_name('n', -1), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('g', 0), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('g', 1), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('a', 0), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[15] = kernel_load_series(kernel_name('x', 5), 0);
+	g_sprite_ids[8] = kernel_load_series(kernel_name('x', 4), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('b', 0), 0);
+	g_sprite_ids[10] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[11] = kernel_load_series(kernel_name('b', 2), 0);
+	g_sprite_ids[12] = kernel_load_series(kernel_name('b', 3), 0);
+	g_sprite_ids[13] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[14] = kernel_load_series(kernel_name('l', 0), 0);
+	g_sprite_ids[16] = kernel_load_series(kernel_name('h', 0), 0);
+	g_sprite_ids[17] = kernel_load_series(kernel_name('z', 0), 0);
+	g_sprite_ids[18] = kernel_load_series(kernel_name('z', 1), 0);
+	g_sprite_ids[19] = kernel_load_series(kernel_name('z', 2), 0);
+	g_sprite_ids[20] = kernel_load_series(kernel_name('x', 6), 0);
+	g_sprite_ids[21] = kernel_load_series("*ROXRC_9", 0);
+	g_sprite_ids[22] = kernel_load_series("*ROXCL_8", 0);
 
 	if (_scene->_priorSceneId == 401) {
 		player.x = 160;
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index 07a7765e09b..a5ef5d5b61b 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -32,9 +32,9 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_405_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*ROXCL_8");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[3] = kernel_load_series("*ROXCL_8", 0);
 
 	if (_scene->_priorSceneId == 401) {
 		player.x = 23;
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index 6676ba426f5..df237d734bf 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -62,9 +62,9 @@ static void room_406_init() {
 		player.facing = FACING_EAST;
 	}
 
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*ROXCL_8");
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[2] = kernel_load_series("*ROXCL_8", 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 1), 0);
 
 	if (_scene->_roomChanged) {
 		global[kStorageDoorOpen] = false;
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index 039a4778533..a7430382203 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -36,8 +36,8 @@ static void room_408_init() {
 	player.y = 150;
 	player.facing = FACING_NORTH;
 
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*ROXRC_7");
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('m', -1));
+	g_sprite_ids[1] = kernel_load_series("*ROXRC_7", 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('m', -1), 0);
 
 	if (object_is_here(OBJ_TARGET_MODULE)) {
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
diff --git a/engines/mads/nebular/rooms/room409.cpp b/engines/mads/nebular/rooms/room409.cpp
index dae682003f2..934fa278660 100644
--- a/engines/mads/nebular/rooms/room409.cpp
+++ b/engines/mads/nebular/rooms/room409.cpp
@@ -33,7 +33,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_409_init() {
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
+	g_sprite_ids[4] = kernel_load_series("*ROXHAND", 0);
 	teleporter_init();
 	section_4_music();
 }
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index 638fffc825b..cc4221bf1d6 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -32,8 +32,8 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_410_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('y', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*ROXRC_7");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('y', -1), 0);
+	g_sprite_ids[2] = kernel_load_series("*ROXRC_7", 0);
 
 	if (object_is_here(OBJ_CHARGE_CASES))
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index a9a2c760645..b837b89a99e 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -305,16 +305,16 @@ static void room_411_init() {
 		global[kBadFirstIngredient] = -1;
 	}
 
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('f', 0));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('f', 1));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('f', 2));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('c', 1));
-	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('a', 6));
-	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[8] = _scene->_sprites.addSprites("*ROXRC_9");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('f', 0), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('f', 1), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('f', 2), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('c', 1), 0);
+	g_sprite_ids[10] = kernel_load_series(kernel_name('a', 6), 0);
+	g_sprite_ids[11] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[8] = kernel_load_series("*ROXRC_9", 0);
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 0, 0);
 	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 50, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index ba0574ee020..2ab217ab2f1 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -40,7 +40,7 @@ static Scratch  local;
 
 
 static void room_413_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 2));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 2), 0);
 	local._rexDeath = false;
 
 	if (_scene->_priorSceneId == 405) {
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 5ebdfaa7623..3cb7fbcca22 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -86,16 +86,16 @@ static void handleSlotActions() {
 }
 
 static void room_501_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
 
 	if (global[kSexOfRex] == REX_MALE) {
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*RXMRC_9");
-		g_sprite_ids[6] = _scene->_sprites.addSprites("*RXCD_7");
+		g_sprite_ids[4] = kernel_load_series("*RXMRC_9", 0);
+		g_sprite_ids[6] = kernel_load_series("*RXCD_7", 0);
 	} else {
-		g_sprite_ids[5] = _scene->_sprites.addSprites("*ROXRC_9");
-		g_sprite_ids[7] = _scene->_sprites.addSprites("*ROXCD_7");
+		g_sprite_ids[5] = kernel_load_series("*ROXRC_9", 0);
+		g_sprite_ids[7] = kernel_load_series("*ROXCD_7", 0);
 	}
 
 	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
diff --git a/engines/mads/nebular/rooms/room502.cpp b/engines/mads/nebular/rooms/room502.cpp
index a606128fae7..fa3f9b616d9 100644
--- a/engines/mads/nebular/rooms/room502.cpp
+++ b/engines/mads/nebular/rooms/room502.cpp
@@ -35,9 +35,9 @@ namespace Rooms {
 
 static void room_502_init() {
 	if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
+		g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 	else
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
+		g_sprite_ids[4] = kernel_load_series("*ROXHAND", 0);
 
 	teleporter_init();
 
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index d7c0e16ad6b..221367bb450 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -40,12 +40,12 @@ static Scratch local;
 
 
 static void room_503_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
 
 	if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMBD_2");
+		g_sprite_ids[2] = kernel_load_series("*RXMBD_2", 0);
 	else
-		g_sprite_ids[3] = _scene->_sprites.addSprites("*ROXBD_2");
+		g_sprite_ids[3] = kernel_load_series("*ROXBD_2", 0);
 
 	if (object[OBJ_DETONATORS].location == _scene->_currentSceneId) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index d03a971fca8..499c119e0a6 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -41,15 +41,15 @@ static Scratch local;
 
 
 static void room_504_init() {
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 2));
+	g_sprite_ids[2] = kernel_load_series(kernel_name('a', 2), 0);
 
 	for (int i = 0; i < 4; i++)
-		g_sprite_ids[5 + i] = _scene->_sprites.addSprites(kernel_name('m', i));
+		g_sprite_ids[5 + i] = kernel_load_series(kernel_name('m', i), 0);
 
 	if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 0));
+		g_sprite_ids[1] = kernel_load_series(kernel_name('a', 0), 0);
 	else {
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		g_sprite_ids[1] = kernel_load_series(kernel_name('a', 1), 0);
 		_scene->changeVariant(1);
 	}
 
@@ -65,7 +65,7 @@ static void room_504_init() {
 		_scene->_sequences.addTimer(1, 70);
 		player.commands_allowed = false;
 	} else {
-		g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 3));
+		g_sprite_ids[3] = kernel_load_series(kernel_name('a', 3), 0);
 		local._carAnimationMode = 1;
 		_scene->loadAnimation(kernel_name('A', -1));
 		if ((_scene->_priorSceneId != RETURNING_FROM_DIALOG) && (_scene->_priorSceneId != 505))
diff --git a/engines/mads/nebular/rooms/room505.cpp b/engines/mads/nebular/rooms/room505.cpp
index 35fad5b656b..39f43ad3b14 100644
--- a/engines/mads/nebular/rooms/room505.cpp
+++ b/engines/mads/nebular/rooms/room505.cpp
@@ -46,13 +46,13 @@ static Scratch local;
 
 static void room_505_init() {
 	for (int i = 0; i < 9; i++)
-		g_sprite_ids[i] = _scene->_sprites.addSprites(kernel_name('a', i + 1));
+		g_sprite_ids[i] = kernel_load_series(kernel_name('a', i + 1), 0);
 
-	g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('g', 1));
-	g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('g', 0));
-	g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('t', -1));
-	g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('e', -1));
+	g_sprite_ids[13] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[9] = kernel_load_series(kernel_name('g', 1), 0);
+	g_sprite_ids[10] = kernel_load_series(kernel_name('g', 0), 0);
+	g_sprite_ids[11] = kernel_load_series(kernel_name('t', -1), 0);
+	g_sprite_ids[12] = kernel_load_series(kernel_name('e', -1), 0);
 
 	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
 		g_sequence_ids[12] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[12], false, 6, 1, 0, 0);
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index c0f9c3c993c..b456fc995c5 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -133,10 +133,10 @@ static void handleDoorSequences() {
 }
 
 static void room_506_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('q', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('q', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXCD_3");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('q', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('q', 1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('c', -1), 0);
+	g_sprite_ids[4] = kernel_load_series("*RXCD_3", 0);
 
 	// WORKAROUND: Set the animation before creating the door hotspots, since otherwise
 	// with the newer engine core the hotspot areas were never updated to match the attached sprites
diff --git a/engines/mads/nebular/rooms/room507.cpp b/engines/mads/nebular/rooms/room507.cpp
index f5499b23cb8..6ecfdd8a456 100644
--- a/engines/mads/nebular/rooms/room507.cpp
+++ b/engines/mads/nebular/rooms/room507.cpp
@@ -40,8 +40,8 @@ static Scratch local;
 
 
 static void room_507_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('p', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMRD_3");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('p', -1), 0);
+	g_sprite_ids[2] = kernel_load_series("*RXMRD_3", 0);
 
 	if ((game.difficulty != DIFFICULTY_EASY) && (object[OBJ_PENLIGHT].location == _scene->_currentSceneId)) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index cb88ff61ec0..329655b3b93 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -40,13 +40,13 @@ static Scratch local;
 
 
 static void room_508_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('m', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('h', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('l', 2));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('t', 0));
-	g_sprite_ids[6] = _scene->_sprites.addSprites("*RXMRC_9");
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('l', 3));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('m', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('h', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('l', 2), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('t', 0), 0);
+	g_sprite_ids[6] = kernel_load_series("*RXMRC_9", 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('l', 3), 0);
 
 	if (!player.been_here_before) {
 		global[kLaserOn] = false;
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index d6bb49279f8..f056c8f4752 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -44,8 +44,8 @@ static Scratch local;
 
 
 static void room_511_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXCD_6");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[4] = kernel_load_series("*RXCD_6", 0);
 
 	// WORKARUND: Doing this earlier to allow to ensure hotspot bounds will get set from it's image
 	int frame = 0;
@@ -55,7 +55,7 @@ static void room_511_init() {
 		frame = -2;
 
 	if (global[kLineStatus] == 2 || global[kLineStatus] == 3) {
-		g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('b', 4));
+		g_sprite_ids[7] = kernel_load_series(kernel_name('b', 4), 0);
 		g_sequence_ids[7] = _scene->_sequences.startCycle(g_sprite_ids[7], false, frame);
 		int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[7], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(26, 153), FACING_NORTHEAST);
@@ -68,7 +68,7 @@ static void room_511_init() {
 		local._handingLine = false;
 
 	if (global[kBoatRaised]) {
-		g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 0));
+		g_sprite_ids[2] = kernel_load_series(kernel_name('b', 0), 0);
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 3);
 		_scene->_hotspots.activate(words_boat, false);
@@ -76,9 +76,9 @@ static void room_511_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(75, 124), FACING_NORTH);
 		_scene->_hotspots.activate(words_rope, false);
 	} else {
-		g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('b', 2));
-		g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', 3));
-		g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('b', 1));
+		g_sprite_ids[5] = kernel_load_series(kernel_name('b', 2), 0);
+		g_sprite_ids[6] = kernel_load_series(kernel_name('b', 3), 0);
+		g_sprite_ids[3] = kernel_load_series(kernel_name('b', 1), 0);
 
 		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 1, 1, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 5);
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index 49948dfbc15..e09153fd000 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -41,13 +41,13 @@ static Scratch local;
 
 
 static void room_512_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('r', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMRC_9");
-	g_sprite_ids[8] = _scene->_sprites.addSprites("*RXMRC_8");
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('x', 3));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('r', -1), 0);
+	g_sprite_ids[2] = kernel_load_series("*RXMRC_9", 0);
+	g_sprite_ids[8] = kernel_load_series("*RXMRC_8", 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('x', 3), 0);
 
 	if (object[OBJ_FISHING_ROD].location == _scene->_currentSceneId) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index b1876a383bc..828ce6f44ce 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -33,10 +33,10 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_513_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCD_9");
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXMRC_9");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[3] = kernel_load_series("*RXCD_9", 0);
+	g_sprite_ids[4] = kernel_load_series("*RXMRC_9", 0);
 
 	g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
 	_scene->_sequences.setDepth(g_sequence_ids[2], 2);
diff --git a/engines/mads/nebular/rooms/room551.cpp b/engines/mads/nebular/rooms/room551.cpp
index a6c01e0b4c7..4b2ae61ba33 100644
--- a/engines/mads/nebular/rooms/room551.cpp
+++ b/engines/mads/nebular/rooms/room551.cpp
@@ -34,9 +34,9 @@ namespace Rooms {
 
 static void room_551_init() {
 	if (global[kSexOfRex] == REX_MALE)
-		g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
+		g_sprite_ids[2] = kernel_load_series(kernel_name('a', 0), 0);
 	else
-		g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 1));
+		g_sprite_ids[3] = kernel_load_series(kernel_name('a', 1), 0);
 
 	if (_scene->_priorSceneId == 501) {
 		player.x = 18;
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index 0eafce28612..3f811c52801 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -32,9 +32,9 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_601_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCD_4");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[3] = kernel_load_series("*RXCD_4", 0);
 
 	if (global[kLaserHoleIsThere]) {
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -2);
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index cd684028612..3073620c459 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -42,11 +42,11 @@ static Scratch local;
 
 
 static void room_602_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('h', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('l', 0));
-	g_sprite_ids[5] = _scene->_sprites.addSprites("*RXMRC_9");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('h', -1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('l', 0), 0);
+	g_sprite_ids[5] = kernel_load_series("*RXMRC_9", 0);
 
 	if (!player.been_here_before)
 		global[kSafeStatus] = 0;
@@ -82,7 +82,7 @@ static void room_602_init() {
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(185, 113), FACING_NORTHWEST);
 
 	if (object_is_here(OBJ_DOOR_KEY)) {
-		g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('k', -1));
+		g_sprite_ids[6] = kernel_load_series(kernel_name('k', -1), 0);
 		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[6], 15);
 		if (global[kSafeStatus] == 0 || global[kSafeStatus] == 2)
diff --git a/engines/mads/nebular/rooms/room603.cpp b/engines/mads/nebular/rooms/room603.cpp
index 5f4a2a83726..6ae9086f2c7 100644
--- a/engines/mads/nebular/rooms/room603.cpp
+++ b/engines/mads/nebular/rooms/room603.cpp
@@ -41,8 +41,8 @@ static Scratch local;
 
 static void room_603_init() {
 	if (object[OBJ_COMPACT_CASE].location == _scene->_currentSceneId) {
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*RXMRD_3");
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
+		g_sprite_ids[4] = kernel_load_series("*RXMRD_3", 0);
+		g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 		local._compactCaseHotspotId = _scene->_dynamicHotspots.add(words_compact_case, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
@@ -50,8 +50,8 @@ static void room_603_init() {
 	}
 
 	if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_NOTE].location == _scene->_currentSceneId)) {
-		g_sprite_ids[3] = _scene->_sprites.addSprites("*RXMRC_9");
-		g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('p', -1));
+		g_sprite_ids[3] = kernel_load_series("*RXMRC_9", 0);
+		g_sprite_ids[2] = kernel_load_series(kernel_name('p', -1), 0);
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 14);
 		local._noteHotspotId = _scene->_dynamicHotspots.add(words_note, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index 5dd61d86e3e..6702dff2ac8 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -45,10 +45,10 @@ static Scratch local;
 
 
 static void room_604_init() {
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXCD_9");
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_full_name(620, 'b', 0, "", EXT_SS));
-	g_sprite_ids[5] = _scene->_sprites.addSprites("*RXMRC_9");
+	g_sprite_ids[2] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[4] = kernel_load_series("*RXCD_9", 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_full_name(620, 'b', 0, "", EXT_SS), 0);
+	g_sprite_ids[5] = kernel_load_series("*RXMRC_9", 0);
 
 	if (global[kTimebombStatus] == 1) {
 		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, -1);
diff --git a/engines/mads/nebular/rooms/room605.cpp b/engines/mads/nebular/rooms/room605.cpp
index b97bba2b8c8..9791a553d1e 100644
--- a/engines/mads/nebular/rooms/room605.cpp
+++ b/engines/mads/nebular/rooms/room605.cpp
@@ -32,12 +32,12 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_605_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('r', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', -1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('l', -1));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('p', -1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('n', -1));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('f', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('r', -1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('b', -1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('l', -1), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('p', -1), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('n', -1), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('f', -1), 0);
 
 	g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 15, 0, 0, 0);
 	g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 17, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index b4df01bbfde..38626efe9c0 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -48,8 +48,8 @@ static Scratch local;
 
 
 static void room_607_init() {
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCD_3");
+	g_sprite_ids[2] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[3] = kernel_load_series("*RXCD_3", 0);
 
 	if (!player.been_here_before && (_scene->_priorSceneId != 608))
 		global[kDogStatus] = DOG_PRESENT;
@@ -60,9 +60,9 @@ static void room_607_init() {
 	local._animationActive = 0;
 
 	if ((global[kDogStatus] == DOG_PRESENT) && (game.difficulty != DIFFICULTY_EASY)) {
-		g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('g', 3));
-		g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('g', 7));
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('g', 0));
+		g_sprite_ids[4] = kernel_load_series(kernel_name('g', 3), 0);
+		g_sprite_ids[5] = kernel_load_series(kernel_name('g', 7), 0);
+		g_sprite_ids[1] = kernel_load_series(kernel_name('g', 0), 0);
 
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 6);
@@ -92,9 +92,9 @@ static void room_607_init() {
 		_scene->_sequences.setDepth(g_sequence_ids[2], 4);
 		_scene->loadAnimation(kernel_name('R', 1), 80);
 	} else if (global[kDogStatus] == DOG_LEFT) {
-		g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('g', 3));
-		g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('g', 7));
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('g', 0));
+		g_sprite_ids[4] = kernel_load_series(kernel_name('g', 3), 0);
+		g_sprite_ids[5] = kernel_load_series(kernel_name('g', 7), 0);
+		g_sprite_ids[1] = kernel_load_series(kernel_name('g', 0), 0);
 	}
 
 	section_6_music();
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index 5c0635c0477..ae4413f75a2 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -172,14 +172,14 @@ static void handleThrowingBone() {
 }
 
 static void room_608_init() {
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMRD_7");
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXMRC_9");
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('c', 2));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('c', 1));
+	g_sprite_ids[2] = kernel_load_series("*RXMRD_7", 0);
+	g_sprite_ids[3] = kernel_load_series("*RXMRC_9", 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('c', 2), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[8] = kernel_load_series(kernel_name('c', 1), 0);
 
 	if (object_is_here(OBJ_POLYCEMENT)) {
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('g', -1));
+		g_sprite_ids[1] = kernel_load_series(kernel_name('g', -1), 0);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_polycement, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		local._polycementHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(249, 129), FACING_NORTHEAST);
@@ -187,7 +187,7 @@ static void room_608_init() {
 	}
 
 	if (object_is_here(OBJ_REARVIEW_MIRROR)) {
-		g_sprite_ids[12] = _scene->_sprites.addSprites(kernel_name('m', -1));
+		g_sprite_ids[12] = kernel_load_series(kernel_name('m', -1), 0);
 		g_sequence_ids[12] = _scene->_sequences.startCycle(g_sprite_ids[12], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_rearview_mirror, words_walkto, g_sequence_ids[12], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(71, 113), FACING_NORTHEAST);
@@ -195,11 +195,11 @@ static void room_608_init() {
 	}
 
 	if (game.difficulty == DIFFICULTY_HARD) {
-		g_sprite_ids[9] = _scene->_sprites.addSprites(kernel_name('g', 0));
-		g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('g', 1));
-		g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('g', 2));
-		g_sprite_ids[10] = _scene->_sprites.addSprites(kernel_name('h', 2));
-		g_sprite_ids[11] = _scene->_sprites.addSprites(kernel_name('h', 3));
+		g_sprite_ids[9] = kernel_load_series(kernel_name('g', 0), 0);
+		g_sprite_ids[4] = kernel_load_series(kernel_name('g', 1), 0);
+		g_sprite_ids[5] = kernel_load_series(kernel_name('g', 2), 0);
+		g_sprite_ids[10] = kernel_load_series(kernel_name('h', 2), 0);
+		g_sprite_ids[11] = kernel_load_series(kernel_name('h', 3), 0);
 		local._rexBeingEaten = false;
 
 		if (!player.been_here_before) {
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index f4bb60fff9f..c4812ae897d 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -39,11 +39,11 @@ static Scratch local;
 
 
 static void room_609_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('h', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXCD_9");
-	g_sprite_ids[5] = _scene->_sprites.addSprites("*RXMRC_9");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('c', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('h', 0), 0);
+	g_sprite_ids[4] = kernel_load_series("*RXCD_9", 0);
+	g_sprite_ids[5] = kernel_load_series("*RXMRC_9", 0);
 
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -2);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 5);
diff --git a/engines/mads/nebular/rooms/room610.cpp b/engines/mads/nebular/rooms/room610.cpp
index dd1ddb83786..f4180aa767f 100644
--- a/engines/mads/nebular/rooms/room610.cpp
+++ b/engines/mads/nebular/rooms/room610.cpp
@@ -43,10 +43,10 @@ static Scratch local;
 
 
 static void room_610_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('p', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMRC_9");
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('p', -1), 0);
+	g_sprite_ids[2] = kernel_load_series("*RXMRC_9", 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 1), 0);
 
 	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 60, 0, 0, 0);
 	_scene->_sequences.setDepth(g_sequence_ids[4], 13);
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index cb1ed888741..5d3a8193368 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -903,9 +903,9 @@ static void handleDialog() {
 }
 
 static void room_611_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXMRC_9");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[3] = kernel_load_series("*RXMRC_9", 0);
 
 	kernel.quotes = quote_load(0x279, 0x27A, 0x27B, 0x27C, 0x27D, 0x27E, 0x27F, 0x280, 0x281, 0x282, 0x283, 0x284,
 		0x285, 0x286, 0x287, 0x288, 0x289, 0x28A, 0x28B, 0x28C, 0x28D, 0x28E, 0x28F, 0x290, 0x291, 0x292,
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index 97d2c626f82..d7e20688174 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -94,13 +94,13 @@ static void handleWinchMovement() {
 }
 
 static void room_612_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('c', -1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('p', -1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXCD_3");
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RXRC_6");
+	g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('p', -1), 0);
+	g_sprite_ids[3] = kernel_load_series("*RXCD_3", 0);
+	g_sprite_ids[4] = kernel_load_series("*RXRC_6", 0);
 
 	if ((global[kLineStatus] == 2) || (global[kLineStatus] == 3)) {
-		g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('f', -1));
+		g_sprite_ids[5] = kernel_load_series(kernel_name('f', -1), 0);
 		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
 		int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
diff --git a/engines/mads/nebular/rooms/room620.cpp b/engines/mads/nebular/rooms/room620.cpp
index 12d32b60401..432c7303bb4 100644
--- a/engines/mads/nebular/rooms/room620.cpp
+++ b/engines/mads/nebular/rooms/room620.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_620_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
 	player.commands_allowed = false;
 	player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index f309066e0b3..883995f0eef 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -39,12 +39,12 @@ static Scratch local;
 
 
 static void room_701_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 5));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites("*RM202A1");
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('b', 8));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('b', 5), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('b', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[5] = kernel_load_series("*RM202A1", 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('b', 8), 0);
 
 	if (_scene->_roomChanged) {
 		inter_give_to_player(OBJ_BINOCULARS);
diff --git a/engines/mads/nebular/rooms/room702.cpp b/engines/mads/nebular/rooms/room702.cpp
index 0f2574cc91f..8df2cf7f8c0 100644
--- a/engines/mads/nebular/rooms/room702.cpp
+++ b/engines/mads/nebular/rooms/room702.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_702_init() {
-	g_sprite_ids[12] = _scene->_sprites.addSprites("*RXMBD_8");
+	g_sprite_ids[12] = kernel_load_series("*RXMBD_8", 0);
 
 	if (_scene->_priorSceneId == 701) {
 		player.x = 13;
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index 0fdd165970d..b78a9c63bd0 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -125,7 +125,7 @@ static void handleFillBottle(int quote) {
 
 static void room_704_init() {
 	if (object[OBJ_BOTTLE].location == _scene->_currentSceneId) {
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
+		g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
 		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 		if (_scene->_priorSceneId == 705) {
diff --git a/engines/mads/nebular/rooms/room705.cpp b/engines/mads/nebular/rooms/room705.cpp
index 6ef790d81a8..afbbccac57c 100644
--- a/engines/mads/nebular/rooms/room705.cpp
+++ b/engines/mads/nebular/rooms/room705.cpp
@@ -118,9 +118,9 @@ static void handleFillBottle(int quote) {
 }
 
 static void room_705_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 0));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('a', 0), 0);
 
 	player.walker_visible = false;
 
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index 6428e7358da..13fcc7906cc 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -109,14 +109,14 @@ static void handleTakeVase() {
 }
 
 static void room_706_init() {
-	g_sprite_ids[3] = _scene->_sprites.addSprites("*RXMRC_3");
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('b', -1));
+	g_sprite_ids[3] = kernel_load_series("*RXMRC_3", 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('b', -1), 0);
 
 	if (!player.been_here_before)
 		local._emptyPedestral = false;
 
 	if (object[OBJ_VASE].location == _scene->_currentSceneId) {
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('v', -1));
+		g_sprite_ids[1] = kernel_load_series(kernel_name('v', -1), 0);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 4);
 		int idx = _scene->_dynamicHotspots.add(words_vase, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
diff --git a/engines/mads/nebular/rooms/room707.cpp b/engines/mads/nebular/rooms/room707.cpp
index f9255c0b2b1..0a7364b09c3 100644
--- a/engines/mads/nebular/rooms/room707.cpp
+++ b/engines/mads/nebular/rooms/room707.cpp
@@ -33,7 +33,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_707_init() {
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
+	g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 	teleporter_init();
 
 	// The original uses Scene7xx_section_7_music
diff --git a/engines/mads/nebular/rooms/room710.cpp b/engines/mads/nebular/rooms/room710.cpp
index 0b8862f0182..5c65baccc07 100644
--- a/engines/mads/nebular/rooms/room710.cpp
+++ b/engines/mads/nebular/rooms/room710.cpp
@@ -35,7 +35,7 @@ static void room_710_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
 
 	if (object[OBJ_VASE].location == 706) {
-		g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('g', -1));
+		g_sprite_ids[1] = kernel_load_series(kernel_name('g', -1), 0);
 		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
 	}
 
diff --git a/engines/mads/nebular/rooms/room711.cpp b/engines/mads/nebular/rooms/room711.cpp
index 0a94c5cd660..b14f77f1bc9 100644
--- a/engines/mads/nebular/rooms/room711.cpp
+++ b/engines/mads/nebular/rooms/room711.cpp
@@ -34,9 +34,9 @@ namespace Rooms {
 
 static void room_711_init() {
 	if (global[kSexOfRex] == REX_FEMALE)
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
+		g_sprite_ids[4] = kernel_load_series("*ROXHAND", 0);
 	else
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
+		g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 
 	teleporter_init();
 
diff --git a/engines/mads/nebular/rooms/room751.cpp b/engines/mads/nebular/rooms/room751.cpp
index 1a7f889afad..3f7d967a963 100644
--- a/engines/mads/nebular/rooms/room751.cpp
+++ b/engines/mads/nebular/rooms/room751.cpp
@@ -39,10 +39,10 @@ static Scratch local;
 
 
 static void room_751_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites("*RM701X0");
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('f', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*RM202A1");
+	g_sprite_ids[1] = kernel_load_series("*RM701X0", 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('a', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('f', 0), 0);
+	g_sprite_ids[4] = kernel_load_series("*RM202A1", 0);
 
 	if (!player.been_here_before)
 		local._rexHandingLine = false;
diff --git a/engines/mads/nebular/rooms/room752.cpp b/engines/mads/nebular/rooms/room752.cpp
index ece15924e63..a8a5a9883d3 100644
--- a/engines/mads/nebular/rooms/room752.cpp
+++ b/engines/mads/nebular/rooms/room752.cpp
@@ -39,8 +39,8 @@ static Scratch local;
 
 
 static void room_752_init() {
-	g_sprite_ids[14] = _scene->_sprites.addSprites(kernel_name('l', -1));
-	g_sprite_ids[12] = _scene->_sprites.addSprites("*RXMBD_8");
+	g_sprite_ids[14] = kernel_load_series(kernel_name('l', -1), 0);
+	g_sprite_ids[12] = kernel_load_series("*RXMBD_8", 0);
 
 	if (_scene->_priorSceneId == 751) {
 		player.x = 13;
@@ -55,7 +55,7 @@ static void room_752_init() {
 	}
 
 	if (object[OBJ_ID_CARD].location == 752) {
-		g_sprite_ids[13] = _scene->_sprites.addSprites(kernel_name('i', -1));
+		g_sprite_ids[13] = kernel_load_series(kernel_name('i', -1), 0);
 		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 1);
 		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 		int idx = _scene->_dynamicHotspots.add(words_id_card, words_walkto, g_sequence_ids[13], Common::Rect(0, 0, 0, 0));
diff --git a/engines/mads/nebular/rooms/room801.cpp b/engines/mads/nebular/rooms/room801.cpp
index a47b53627e4..3eaa8127375 100644
--- a/engines/mads/nebular/rooms/room801.cpp
+++ b/engines/mads/nebular/rooms/room801.cpp
@@ -39,11 +39,11 @@ static Scratch local;
 
 
 static void room_801_init() {
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('a', -1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 3), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('a', -1), 0);
 
 	if (_scene->_priorSceneId != 802) {
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 5);
diff --git a/engines/mads/nebular/rooms/room802.cpp b/engines/mads/nebular/rooms/room802.cpp
index 23dc30fa77f..cda52d55585 100644
--- a/engines/mads/nebular/rooms/room802.cpp
+++ b/engines/mads/nebular/rooms/room802.cpp
@@ -32,11 +32,11 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_802_init() {
-	g_sprite_ids[2] = _scene->_sprites.addSprites("*RXMRC_8");
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('f', 2));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('f', 0));
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('f', 1));
-	g_sprite_ids[5] = _scene->_sprites.addSprites("*RXMBD_8");
+	g_sprite_ids[2] = kernel_load_series("*RXMRC_8", 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('f', 2), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('f', 0), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_name('f', 1), 0);
+	g_sprite_ids[5] = kernel_load_series("*RXMBD_8", 0);
 	global[kBetweenRooms] = false;
 
 	if ((global[kCameFromCut]) && (global[kCutX] != 0)) {
diff --git a/engines/mads/nebular/rooms/room803.cpp b/engines/mads/nebular/rooms/room803.cpp
index d2a36d7f669..6f544072f19 100644
--- a/engines/mads/nebular/rooms/room803.cpp
+++ b/engines/mads/nebular/rooms/room803.cpp
@@ -34,14 +34,14 @@ namespace Rooms {
 static void room_803_init() {
 	global[kBetweenRooms] = false;
 	player.walker_visible = false;
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('f', 1));
-	g_sprite_ids[9] = _scene->_sprites.addSprites("*RXMBD_2");
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('d', 1));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('f', 1), 0);
+	g_sprite_ids[9] = kernel_load_series("*RXMBD_2", 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('d', 1), 0);
 
 	kernel.quotes = quote_load(0x31B, 0x31C, 0x31D, 0x31E, 0x31F, 0x320, 0x321, 0x322, 0);
 
 	if (global[kHoppyDead]) {
-		g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('e', 1));
+		g_sprite_ids[7] = kernel_load_series(kernel_name('e', 1), 0);
 		g_sequence_ids[7] = _scene->_sequences.startCycle(g_sprite_ids[7], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_guts, words_walkto, g_sequence_ids[7], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(66, 123), FACING_SOUTH);
@@ -62,9 +62,9 @@ static void room_803_init() {
 			}
 			player.walker_visible = true;
 		} else if (!global[kBeamIsUp]) {
-			g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 1));
-			g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 3));
-			g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('a', 2));
+			g_sprite_ids[3] = kernel_load_series(kernel_name('a', 1), 0);
+			g_sprite_ids[2] = kernel_load_series(kernel_name('a', 3), 0);
+			g_sprite_ids[4] = kernel_load_series(kernel_name('a', 2), 0);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
@@ -81,7 +81,7 @@ static void room_803_init() {
 			else
 				player.walker_visible = true;
 
-			g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('b', 1));
+			g_sprite_ids[5] = kernel_load_series(kernel_name('b', 1), 0);
 			g_engine->_soundManager->command(15, 0);
 			player.commands_allowed = false;
 			g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
@@ -91,7 +91,7 @@ static void room_803_init() {
 		}
 	} else if (!global[kExitShip]) {
 		if (!global[kBeamIsUp]) {
-			g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('a', 1));
+			g_sprite_ids[3] = kernel_load_series(kernel_name('a', 1), 0);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
@@ -99,7 +99,7 @@ static void room_803_init() {
 			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 130);
 			g_engine->_soundManager->command(14, 0);
 		} else {
-			g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('c', 1));
+			g_sprite_ids[8] = kernel_load_series(kernel_name('c', 1), 0);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			g_sequence_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[8], false, 1);
@@ -113,7 +113,7 @@ static void room_803_init() {
 		player.y = 96;
 		player.facing = FACING_SOUTHWEST;
 		player.walker_visible = true;
-		g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('d', 1));
+		g_sprite_ids[6] = kernel_load_series(kernel_name('d', 1), 0);
 		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 19);
 		_scene->_sequences.addTimer(1, 150);
 	}
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index 08973275ea8..6b6efd05483 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -64,12 +64,12 @@ static void room_804_init() {
 		global[kWindowFixed] = 0;
 	}
 
-	g_sprite_ids[4] = _scene->_sprites.addSprites(kernel_name('x', 0));
-	g_sprite_ids[5] = _scene->_sprites.addSprites(kernel_name('x', 1));
-	g_sprite_ids[6] = _scene->_sprites.addSprites(kernel_name('x', 2));
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('x', 3));
-	g_sprite_ids[7] = _scene->_sprites.addSprites(kernel_name('x', 4));
-	g_sprite_ids[8] = _scene->_sprites.addSprites(kernel_name('f', 1));
+	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 0), 0);
+	g_sprite_ids[5] = kernel_load_series(kernel_name('x', 1), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_name('x', 2), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 3), 0);
+	g_sprite_ids[7] = kernel_load_series(kernel_name('x', 4), 0);
+	g_sprite_ids[8] = kernel_load_series(kernel_name('f', 1), 0);
 
 	kernel.quotes = quote_load(791, 0);
 
diff --git a/engines/mads/nebular/rooms/room805.cpp b/engines/mads/nebular/rooms/room805.cpp
index 3bf088c0d42..515ecc05326 100644
--- a/engines/mads/nebular/rooms/room805.cpp
+++ b/engines/mads/nebular/rooms/room805.cpp
@@ -35,8 +35,8 @@ static void room_805_init() {
 	player.walker_visible = false;
 	_scene->_userInterface.setup(kInputLimitedSentences);
 
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('a', 1));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('a', 2));
+	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 1), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('a', 2), 0);
 
 	if (global[kShieldModInstalled]) {
 		_scene->_hotspots.activate(OBJ_SHIELD_MODULATOR, false);
diff --git a/engines/mads/nebular/rooms/room807.cpp b/engines/mads/nebular/rooms/room807.cpp
index 945f52f7477..83ad20387f7 100644
--- a/engines/mads/nebular/rooms/room807.cpp
+++ b/engines/mads/nebular/rooms/room807.cpp
@@ -34,9 +34,9 @@ namespace Rooms {
 
 static void room_807_init() {
 	if (global[kSexOfRex] == REX_FEMALE)
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*ROXHAND");
+		g_sprite_ids[4] = kernel_load_series("*ROXHAND", 0);
 	else
-		g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
+		g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 
 	teleporter_init();
 	section_8_music();
diff --git a/engines/mads/nebular/rooms/room808.cpp b/engines/mads/nebular/rooms/room808.cpp
index 89ccb4620fa..ba49d6d6c3b 100644
--- a/engines/mads/nebular/rooms/room808.cpp
+++ b/engines/mads/nebular/rooms/room808.cpp
@@ -41,10 +41,10 @@ static Scratch local;
 static void room_808_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
 
-	g_sprite_ids[4] = _scene->_sprites.addSprites("*REXHAND");
-	g_sprite_ids[1] = _scene->_sprites.addSprites(kernel_name('b', 0));
-	g_sprite_ids[2] = _scene->_sprites.addSprites(kernel_name('b', 1));
-	g_sprite_ids[3] = _scene->_sprites.addSprites(kernel_name('b', 2));
+	g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
+	g_sprite_ids[2] = kernel_load_series(kernel_name('b', 1), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_name('b', 2), 0);
 
 	if (global[kTopButtonPushed])
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
diff --git a/engines/mads/nebular/rooms/thunks.cpp b/engines/mads/nebular/rooms/thunks.cpp
index 14a61ec76c8..b30fc42444a 100644
--- a/engines/mads/nebular/rooms/thunks.cpp
+++ b/engines/mads/nebular/rooms/thunks.cpp
@@ -159,18 +159,6 @@ void Scene::Rails::resetNext() {
 	player.next_special_code = 0;
 }
 
-int16 Scene::Sprites::addSprites(const char *name, int load_flags) {
-	return kernel_load_series(name, load_flags);
-}
-
-void Scene::Sprites::remove(int sprite_id) {
-	matte_deallocate_series(sprite_id, true);
-}
-
-Scene::Sprite Scene::Sprites::operator[](int idx) {
-	return Scene::Sprite(series_list[idx]);
-}
-
 void Scene::SpriteSlots::clear() {
 	image_marker = 0;
 }
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
index 59c692f3166..eac3b041e1b 100644
--- a/engines/mads/nebular/rooms/thunks.h
+++ b/engines/mads/nebular/rooms/thunks.h
@@ -27,7 +27,6 @@
 #include "mads/core/inter.h"
 #include "mads/core/kernel.h"
 #include "mads/core/player.h"
-#include "mads/core/sprite.h"
 #include "mads/core/text.h"
 
 namespace MADS {
@@ -295,39 +294,6 @@ struct Scene {
 	};
 	Sequences _sequences;
 
-	struct Sprite {
-		struct CharInfo {
-			CharInfo *operator->() {
-				return this;
-			}
-			const CharInfo *operator->() const {
-				return this;
-			}
-
-			int16 &_velocity;
-
-			CharInfo(WalkerInfoPtr info) : _velocity(info->velocity) {
-			}
-		};
-		CharInfo _charInfo;
-
-		Sprite(SeriesPtr series) : _charInfo(series->walker) {
-		}
-		Sprite *operator->() {
-			return this;
-		}
-		const Sprite *operator->() const {
-			return this;
-		}
-	};
-
-	struct Sprites {
-		int16 addSprites(const char *name, int load_flags = 0);
-		void remove(int sprite_id);
-		Sprite operator[](int idx);
-	};
-	Sprites _sprites;
-
 	struct SpriteSlots {
 		void clear();
 		void fullRefresh();


Commit: 4e11351716187990a274e10cd39b1df905381895
    https://github.com/scummvm/scummvm/commit/4e11351716187990a274e10cd39b1df905381895
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:54+10:00

Commit Message:
MADS: NEBULAR: Removed top level Scene functions and reference fields

Changed paths:
    engines/mads/nebular/rooms/forcefield.cpp
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room212.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room216.cpp
    engines/mads/nebular/rooms/room301.cpp
    engines/mads/nebular/rooms/room302.cpp
    engines/mads/nebular/rooms/room303.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room310.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room321.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room354.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room366.cpp
    engines/mads/nebular/rooms/room387.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room390.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room502.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room515.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/room810.cpp
    engines/mads/nebular/rooms/section1.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/rooms/forcefield.cpp b/engines/mads/nebular/rooms/forcefield.cpp
index 82b856e15c5..3a30f76ad4f 100644
--- a/engines/mads/nebular/rooms/forcefield.cpp
+++ b/engines/mads/nebular/rooms/forcefield.cpp
@@ -62,7 +62,7 @@ void handle_forcefield(Forcefield *force, int16 *sprites) {
 		return;
 	}
 
-	if (!force->_flag || (_scene->_frameStartTime < force->_timer) || (force->_vertical + force->_horizontal >= 5))
+	if (!force->_flag || (kernel.clock < force->_timer) || (force->_vertical + force->_horizontal >= 5))
 		return;
 
 	if (g_engine->getRandomNumber(1, 1000) <= (200 + ((40 - (force->_vertical + force->_horizontal)) << 5))) {
@@ -126,7 +126,7 @@ void handle_forcefield(Forcefield *force, int16 *sprites) {
 		}
 	}
 
-	force->_timer = _scene->_frameStartTime + 4;
+	force->_timer = kernel.clock + 4;
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 76113f24dad..0d0c64810bc 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -105,15 +105,15 @@ static void room_101_init() {
 	_scene->_hotspots.activate(words_shield_modulator, false);
 	local._panelOpened = false;
 
-	if (_scene->_priorSceneId != RETURNING_FROM_LOADING)
+	if (previous_room != RETURNING_FROM_LOADING)
 		global[kNeedToStandUp] = false;
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 100;
 		player.y = 152;
 	}
 
-	if ((_scene->_priorSceneId == 112) || ((_scene->_priorSceneId == RETURNING_FROM_DIALOG) && local._sittingFl)) {
+	if ((previous_room == 112) || ((previous_room == RETURNING_FROM_DIALOG) && local._sittingFl)) {
 		player.walker_visible = false;
 		local._sittingFl = true;
 		player.x = 161;
@@ -123,7 +123,7 @@ static void room_101_init() {
 		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
 		_scene->_hotspots.activate(words_chair, false);
 		local._chairHotspotId = _scene->_dynamicHotspots.add(words_chair, words_sit_in, -1, Common::Rect(159, 84, 159 + 33, 84 + 36));
-		if (_scene->_priorSceneId == 112)
+		if (previous_room == 112)
 			room_101_say_dang();
 	} else {
 		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 6, 0, 0, 0);
@@ -133,7 +133,7 @@ static void room_101_init() {
 	kernel.quotes = quote_load(0x31, 0x32, 0x39, 0x36, 0x37, 0x38, 0);
 
 	if (global[kNeedToStandUp]) {
-		_scene->loadAnimation(kernel_full_name(101, 'S', -1, "", EXT_AA), 71);
+		kernel_run_animation(kernel_full_name(101, 'S', -1, "", EXT_AA), 71);
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		player.x = 68;
@@ -167,7 +167,7 @@ static void room_101_daemon() {
 		global[kNeedToStandUp] = false;
 		player.walker_visible = true;
 		player.commands_allowed = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		break;
 
 	case 72:
@@ -282,7 +282,7 @@ static void room_101_parser() {
 	}
 
 	if (player_said_2(walkto, life_support_section)) {
-		_scene->_nextSceneId = 102;
+		new_room = 102;
 		player.command_ready = false;
 		return;
 	}
@@ -418,7 +418,7 @@ static void room_101_parser() {
 				player.commands_allowed = true;
 				global[kWatchedViewScreen] = true;
 				local._sittingFl = true;
-				_scene->_nextSceneId = 112;
+				new_room = 112;
 				break;
 
 			default:
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index d2a6d962519..9bb61396e57 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -86,23 +86,23 @@ static void room_102_init() {
 		_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
 	}
 
-	if (_scene->_priorSceneId == 101) {
+	if (previous_room == 101) {
 		player.x = 229;
 		player.y = 109;
 		player.commands_allowed = false;
 		g_sequence_ids[6] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[6], false, 6, 1, 2, 0);
 		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
-	} else if (_scene->_priorSceneId == 103) {
+	} else if (previous_room == 103) {
 		player.x = 47;
 		player.y = 152;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.facing = FACING_NORTHWEST;
 		player.x = 32;
 		player.y = 129;
 	}
 
-	if (_scene->_priorSceneId != 106) {
+	if (previous_room != 106) {
 		if (global[kWaterInAPuddle]) {
 			g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 0, 0, 0);
 			_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
@@ -127,7 +127,7 @@ static void room_102_init() {
 
 	kernel.quotes = quote_load(0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0);
 
-	if (_scene->_priorSceneId == 101)
+	if (previous_room == 101)
 		g_engine->_soundManager->command(20, 0);
 }
 
@@ -144,7 +144,7 @@ static void room_102_daemon() {
 
 	if (kernel.trigger >= 90) {
 		if (kernel.trigger >= 94) {
-			_scene->loadAnimation(kernel_name('B', -1), 71);
+			kernel_run_animation(kernel_name('B', -1), 71);
 			player.commands_allowed = false;
 			player.walker_visible = false;
 
@@ -159,7 +159,7 @@ static void room_102_daemon() {
 	if (kernel.trigger == 71) {
 		player.commands_allowed = true;
 		player.walker_visible = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 	}
 
 	if (local._fridgeOpenedFl && !local._fridgeOpenedDescr) {
@@ -314,7 +314,7 @@ static void room_102_parser() {
 			break;
 
 		case 1:
-			_scene->_nextSceneId = 101;
+			new_room = 101;
 			break;
 
 		default:
@@ -325,7 +325,7 @@ static void room_102_parser() {
 	}
 
 	if (player_said_2(walkto, engineering_section)) {
-		_scene->_nextSceneId = 103;
+		new_room = 103;
 		player.command_ready = false;
 		return;
 	}
@@ -419,7 +419,7 @@ static void room_102_parser() {
 	if ((player_said_1(ladder) || player_said_1(hatchway)) && (player_said_1(climb_up) || player_said_1(climb_through))) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->loadAnimation(kernel_name('A', -1), 1);
+			kernel_run_animation(kernel_name('A', -1), 1);
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			break;
@@ -444,7 +444,7 @@ static void room_102_parser() {
 		case 6:
 			if (player_has(OBJ_REBREATHER) && !player_has_been_in_room(106))
 				text_show(10237);
-			_scene->_nextSceneId = 106;
+			new_room = 106;
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 1f6c23c3dcf..83bbf800bdb 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -21,6 +21,7 @@
 
 #include "math/utils.h"
 #include "mads/core/game.h"
+#include "mads/core/matte.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -87,12 +88,12 @@ static void room_103_init() {
 		_scene->_hotspots.activate(362, false);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 237;
 		player.y = 74;
 	}
 
-	if (_scene->_priorSceneId == 102) {
+	if (previous_room == 102) {
 		player.commands_allowed = false;
 		g_sequence_ids[6] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
@@ -107,12 +108,12 @@ static void room_103_init() {
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 	}
 
-	if (_scene->_priorSceneId == 102)
+	if (previous_room == 102)
 		g_engine->_soundManager->command(20, 0);
 
 	pal_change_color(252, 63, 63, 10);
 	pal_change_color(253, 45, 45, 10);
-	local._updateClock = _scene->_frameStartTime;
+	local._updateClock = kernel.clock;
 }
 
 static void room_103_daemon() {
@@ -141,7 +142,7 @@ static void room_103_daemon() {
 		break;
 	}
 
-	if (_scene->_frameStartTime >= local._updateClock) {
+	if (kernel.clock >= local._updateClock) {
 		Common::Point pt = Common::Point(player.x, player.y);
 		int dist = Math::hypotenuse(pt.x - 79, pt.y - 137);
 		g_engine->_soundManager->command(29, (dist * -127 / 378) + 127);
@@ -154,7 +155,7 @@ static void room_103_daemon() {
 		dist = Math::hypotenuse(pt.x - 266, pt.y - 138);
 		g_engine->_soundManager->command(32, (dist * -127 / 378) + 127);
 
-		local._updateClock = _scene->_frameStartTime + player.frame_delay;
+		local._updateClock = kernel.clock + player.frame_delay;
 	}
 }
 
@@ -176,7 +177,7 @@ static void room_103_parser() {
 
 		case 1:
 			g_engine->_soundManager->command(1, 0);
-			_scene->_nextSceneId = 102;
+			new_room = 102;
 			player.commands_allowed = true;
 			break;
 
@@ -186,7 +187,7 @@ static void room_103_parser() {
 	} else if (player_said_2(take, timer_module) && object_is_here(OBJ_TIMER_MODULE)) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->changeVariant(1);
+			kernel_load_variant(1);
 			g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 3, 2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[13]);
 			_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
@@ -202,8 +203,8 @@ static void room_103_parser() {
 		case 2:
 			g_engine->_soundManager->command(22, 0);
 			inter_give_to_player(OBJ_TIMER_MODULE);
-			_scene->changeVariant(0);
-			_scene->drawElements(kTransitionNone, false);
+			kernel_load_variant(0);
+			matte_frame(kTransitionNone, false);
 			_scene->_hotspots.activate(371, false);
 			player.walker_visible = true;
 			player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index acb6e63822a..984fb8f52ff 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -44,10 +44,10 @@ static void room_104_init() {
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 0, 0, 1);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 8);
 
-	if (_scene->_priorSceneId == 105) {
+	if (previous_room == 105) {
 		player.x = 302;
 		player.y = 107;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 160;
 		player.y = 134;
 	}
@@ -57,7 +57,7 @@ static void room_104_init() {
 	local._kargShootingFl = false;
 
 	if (g_engine->getRandomNumber(1, 3) == 1) {
-		_scene->loadAnimation(kernel_full_name(104, 'B', -1, "", EXT_AA), 0);
+		kernel_run_animation(kernel_full_name(104, 'B', -1, "", EXT_AA), 0);
 		local._kargShootingFl = true;
 	}
 
@@ -85,8 +85,8 @@ static void room_104_daemon() {
 			switch (kernel.trigger) {
 			case 0:
 				_scene->_kernelMessages.reset();
-				_scene->freeAnimation();
-				_scene->resetScene();
+				kernel_abort_animation(0);
+				kernel_dump_all();
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				g_sprite_ids[2] = kernel_load_series(kernel_name('a', 0), 0);
@@ -106,7 +106,7 @@ static void room_104_daemon() {
 
 			case 2:
 				text_show(10406);
-				_scene->_reloadSceneFlag = true;
+				kernel.force_restart = true;
 				break;
 
 			default:
@@ -118,8 +118,8 @@ static void room_104_daemon() {
 			switch (kernel.trigger) {
 			case 0:
 				_scene->_kernelMessages.reset();
-				_scene->freeAnimation();
-				_scene->resetScene();
+				kernel_abort_animation(0);
+				kernel_dump_all();
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				g_sprite_ids[3] = kernel_load_series(kernel_name('a', 1), 0);
@@ -148,7 +148,7 @@ static void room_104_daemon() {
 
 			case 3:
 				text_show(10406);
-				_scene->_reloadSceneFlag = true;
+				kernel.force_restart = true;
 				break;
 
 			default:
@@ -160,8 +160,8 @@ static void room_104_daemon() {
 			switch (kernel.trigger) {
 			case 0:
 				_scene->_kernelMessages.reset();
-				_scene->freeAnimation();
-				_scene->resetScene();
+				kernel_abort_animation(0);
+				kernel_dump_all();
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				g_sprite_ids[4] = kernel_load_series(kernel_name('a', 2), 0);
@@ -183,7 +183,7 @@ static void room_104_daemon() {
 
 			case 2:
 				text_show(10406);
-				_scene->_reloadSceneFlag = true;
+				kernel.force_restart = true;
 				break;
 
 			default:
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index bf56f6f2fe6..e792f8e7a1f 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -51,11 +51,11 @@ static void room_105_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(56, 141), FACING_NORTHWEST);
 	}
 
-	if (_scene->_priorSceneId == 104) {
+	if (previous_room == 104) {
 		player.x = 13;
 		player.y = 97;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 116;
 		player.y = 147;
 	}
@@ -72,7 +72,7 @@ static void room_105_daemon() {
 		switch (kernel.trigger) {
 		case 0:
 			_scene->_kernelMessages.reset();
-			_scene->resetScene();
+			kernel_dump_all();
 			player.commands_allowed = false;
 			player.walker_visible = false;
 
@@ -80,7 +80,7 @@ static void room_105_daemon() {
 			g_sprite_ids[2] = kernel_load_series(kernel_name('m', 2), 0);
 			g_sprite_ids[3] = kernel_load_series(kernel_name('m', 3), 0);
 			g_engine->_soundManager->command(33, 0);
-			_scene->clearSequenceList();
+			kernel_seq_init();
 			kernel_new_palette();
 
 			g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 1, 0, 0);
@@ -114,7 +114,7 @@ static void room_105_daemon() {
 
 		case 3:
 			text_show(10507);
-			_scene->_reloadSceneFlag = true;
+			kernel.force_restart = true;
 			_scene->_sequences.addTimer(90, 4);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index fb89b842f51..2a2f53073c5 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -45,7 +45,7 @@ static Scratch local;
 static void room_106_init() {
 	g_sprite_ids[0] = kernel_load_series(kernel_name('H', -1), 0);
 
-	if (player_has(OBJ_REBREATHER) || (_scene->_priorSceneId != 102) || _scene->_roomChanged) {
+	if (player_has(OBJ_REBREATHER) || (previous_room != 102) || kernel.teleported_in) {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('A', 0), 0);
 		g_sprite_ids[3] = kernel_load_series(kernel_name('A', 1), 0);
 	}
@@ -55,7 +55,7 @@ static void room_106_init() {
 	g_sprite_ids[4] = kernel_load_series(kernel_name('I', -1), 0);
 	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 32, 47);
 
-	if (_scene->_priorSceneId == 102) {
+	if (previous_room == 102) {
 		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 1, 4, 0);
 		_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 		player.walker_visible = false;
@@ -63,8 +63,8 @@ static void room_106_init() {
 		player.facing = FACING_EAST;
 		player.x = 106;
 		player.y = 69;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
-		if (_scene->_priorSceneId == 107) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
+		if (previous_room == 107) {
 			player.x = 319;
 			player.y = 84;
 			player.facing = player.prepare_walk_facing = FACING_WEST;
@@ -81,7 +81,7 @@ static void room_106_init() {
 		player.ready_to_walk = true;
 	}
 
-	if (_scene->_priorSceneId != 102) {
+	if (previous_room != 102) {
 		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[0], -2, -2);
 		_scene->_sequences.setDepth(g_sequence_ids[0], 14);
@@ -101,8 +101,8 @@ static void room_106_daemon() {
 		_scene->_sequences.setAnimRange(g_sequence_ids[0], -2, -2);
 		_scene->_sequences.setDepth(g_sequence_ids[0], 14);
 
-		if (!player_has(OBJ_REBREATHER) && !_scene->_roomChanged) {
-			_scene->loadAnimation(kernel_full_name(106, 'A', -1, "", EXT_AA), 75);
+		if (!player_has(OBJ_REBREATHER) && !kernel.teleported_in) {
+			kernel_run_animation(kernel_full_name(106, 'A', -1, "", EXT_AA), 75);
 		} else {
 			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
 			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 28, 71);
@@ -122,7 +122,7 @@ static void room_106_daemon() {
 		} else {
 			player.prepare_walk_facing = FACING_SOUTHWEST;
 			local._firstEmergingFl = true;
-			_scene->loadAnimation(kernel_full_name(106, 'B', -1, "", EXT_AA), 80);
+			kernel_run_animation(kernel_full_name(106, 'B', -1, "", EXT_AA), 80);
 		}
 	}
 
@@ -179,12 +179,12 @@ static void room_106_daemon() {
 		else if (kernel.trigger == 72)
 			_scene->_sequences.addTimer(24, 74);
 		else if (kernel.trigger == 74)
-			_scene->_nextSceneId = 102;
+			new_room = 102;
 	}
 
 	if (kernel.trigger == 75) {
 		player_undiscover_room();
-		_scene->_nextSceneId = 102;
+		new_room = 102;
 	}
 }
 
@@ -259,7 +259,7 @@ void room_106_preload() {
 	section_1_walker();
 	section_1_interface();
 
-	if ((_scene->_priorSceneId == 102) && !player_has(OBJ_REBREATHER) && !_scene->_roomChanged)
+	if ((previous_room == 102) && !player_has(OBJ_REBREATHER) && !kernel.teleported_in)
 		*player.series_name = '\0';
 
 	text_default_y = 100;
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index ebdf97cce64..760a2429067 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -59,20 +59,20 @@ static void room_107_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(78, 135), FACING_SOUTHWEST);
 	}
 
-	if (_scene->_priorSceneId == 105) {
+	if (previous_room == 105) {
 		player.x = 132;
 		player.y = 47;
 	}
-	else if (_scene->_priorSceneId == 106) {
+	else if (previous_room == 106) {
 		player.x = 20;
 		player.y = 91;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 223;
 		player.y = 151;
 	}
 
-	if (((_scene->_priorSceneId == 105) || (_scene->_priorSceneId == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
+	if (((previous_room == 105) || (previous_room == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
 		g_sprite_ids[0] = kernel_load_series(kernel_full_name(105, 'R', 1, "", EXT_SS), 0);
 		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], true, 4, 0, 0, 0);
 		_scene->_sequences.setPosition(g_sequence_ids[0], Common::Point(270, 150));
@@ -85,7 +85,7 @@ static void room_107_init() {
 	local._shootingFl = false;
 
 	if (g_engine->getRandomNumber(1, 3) == 1) {
-		_scene->loadAnimation(kernel_full_name(107, 'B', -1, "", EXT_AA), 0);
+		kernel_run_animation(kernel_full_name(107, 'B', -1, "", EXT_AA), 0);
 		local._shootingFl = true;
 	}
 
@@ -122,7 +122,7 @@ static void room_107_parser() {
 			object_examine(OBJ_DEAD_FISH, 802, 0);
 		}
 	} else if (player_said_2(swim_towards, northern_sea_cliff))
-		_scene->_nextSceneId = 105;
+		new_room = 105;
 	else if (player_said_2(look, northern_sea_cliff))
 		text_show(10701);
 	else if (player_said_2(look, dead_fish) && (player.main_object_source == CAT_HOTSPOT))
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index f8e3191e18a..19754e31a3d 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -56,11 +56,11 @@ static void room_108_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(41, 109), FACING_NORTHWEST);
 	}
 
-	if (_scene->_priorSceneId == 107) {
+	if (previous_room == 107) {
 		player.x = 138;
 		player.y = 58;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 305;
 		player.y = 98;
 	}
@@ -93,7 +93,7 @@ static void room_108_parser() {
 			object_examine(OBJ_DEAD_FISH, 10808, 0);
 		}
 	} else if (player_said_2(swim_towards, open_area_to_north))
-		_scene->_nextSceneId = 107;
+		new_room = 107;
 	else if (player_said_2(look, cliff_face))
 		text_show(10801);
 	else if (player_said_2(look, ocean_floor))
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 19adfdcd30e..3b3ff090ff2 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -64,11 +64,11 @@ static void room_109_init() {
 	local._eatingRex = false;
 	local._hungryFl = false;
 
-	if (_scene->_priorSceneId == 110) {
+	if (previous_room == 110) {
 		player.x = 248;
 		player.y = 38;
 		global[kHoovicSated] = 2;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 20;
 		player.y = 68;
 		player.facing = FACING_EAST;
@@ -88,17 +88,17 @@ static void room_109_init() {
 	}
 
 	if (!global[kHoovicAlive] || global[kHoovicSated])
-		_scene->changeVariant(1);
+		kernel_load_variant(1);
 
 	if (object_is_here(OBJ_BURGER)) {
 		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[3], -2, -2);
 		int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
-	} else if (_scene->_roomChanged)
+	} else if (kernel.teleported_in)
 		inter_give_to_player(OBJ_BURGER);
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_DEAD_FISH);
 		inter_give_to_player(OBJ_STUFFED_FISH);
 	}
@@ -107,7 +107,7 @@ static void room_109_init() {
 	pal_change_color(253, 30, 30, 50);
 
 	kernel.quotes = quote_load(0x53, 0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0);
-	local._eatingFirstFish = (!player.been_here_before) && (_scene->_priorSceneId < 110);
+	local._eatingFirstFish = (!player.been_here_before) && (previous_room < 110);
 
 	if (local._eatingFirstFish) {
 		g_sprite_ids[10] = kernel_load_series(kernel_full_name(105, 'F', 1, "", EXT_SS), 0);
@@ -143,7 +143,7 @@ static void room_109_daemon() {
 				break;
 
 			case 71:
-				_scene->_reloadSceneFlag = true;
+				kernel.force_restart = true;
 				break;
 
 			default:
@@ -194,7 +194,7 @@ static void room_109_daemon() {
 		int randVal = g_engine->getRandomNumber(85, 88);
 		int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
 		_scene->_kernelMessages.setQuoted(idx, 4, true);
-		_scene->_kernelMessages._entries[idx]._frameTimer = _scene->_frameStartTime + 4;
+		_scene->_kernelMessages._entries[idx]._frameTimer = kernel.clock + 4;
 	}
 }
 
@@ -305,7 +305,7 @@ static void room_109_parser() {
 						break;
 
 					case 3:
-						_scene->loadAnimation(kernel_full_name(109, 'H', 2, "", EXT_AA), 4);
+						kernel_run_animation(kernel_full_name(109, 'H', 2, "", EXT_AA), 4);
 						g_engine->_soundManager->command(35, 0);
 						global[kHoovicAlive] = false;
 						break;
@@ -321,7 +321,7 @@ static void room_109_parser() {
 							_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
 							idx = _scene->_dynamicHotspots.add(words_monster_sludge, words_swim_to, -1, Common::Rect(231, 88, 231 + 23, 88 + 7));
 							_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
-							_scene->changeVariant(1);
+							kernel_load_variant(1);
 						} else {
 							if (local._throwingObjectId == OBJ_DEAD_FISH) {
 								++global[kHoovicFishEaten];
@@ -343,11 +343,11 @@ static void room_109_parser() {
 									_scene->_kernelMessages.add(Common::Point(230, 24), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, randVal));
 									global[kHoovicFishEaten] = 0;
 									global[kHoovicSated] = 1;
-									_scene->changeVariant(1);
+									kernel_load_variant(1);
 								}
 							}
 						}
-						_scene->freeAnimation();
+						kernel_abort_animation(0);
 						_scene->_sequences.remove(g_sequence_ids[8]);
 						matte_deallocate_series(g_sprite_ids[8], true);
 						_scene->_spriteSlots.clear();
@@ -364,7 +364,7 @@ static void room_109_parser() {
 
 					case 5:
 					{
-						inter_move_object(OBJ_BURGER, _scene->_currentSceneId);
+						inter_move_object(OBJ_BURGER, room_id);
 						g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
 						_scene->_sequences.setAnimRange(g_sequence_ids[3], 30, 30);
 						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
@@ -466,8 +466,8 @@ void room_109_preload() {
 		himem_preload_series(kernel_full_name(109, 'H', count, nullptr, 0), 3);
 	}
 
-	_scene->addActiveVocab(words_dead_purple_monster);
-	_scene->addActiveVocab(words_monster_sludge);
+	vocab_make_active(words_dead_purple_monster);
+	vocab_make_active(words_monster_sludge);
 
 	section_1_walker();
 	section_1_interface();
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index c1c5171b102..f531077e1a6 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -46,7 +46,7 @@ static void room_110_init() {
 
 	local._crabsFl = false;
 
-	if (_scene->_priorSceneId == 109) {
+	if (previous_room == 109) {
 		player.x = 59;
 		player.y = 71;
 		player.facing = FACING_EAST;
@@ -66,19 +66,19 @@ static void room_110_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
 		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 194;
 		player.y = 23;
 		player.facing = FACING_SOUTH;
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->loadAnimation(kernel_full_name(110, 'T', 1, "", EXT_AA), 70);
+		kernel_run_animation(kernel_full_name(110, 'T', 1, "", EXT_AA), 70);
 	}
 
 	section_1_music();
 	kernel.quotes = quote_load(89, 0);
 
-	if (!player.been_here_before && (_scene->_priorSceneId == 109))
+	if (!player.been_here_before && (previous_room == 109))
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 89));
 }
 
@@ -121,7 +121,7 @@ static void room_110_parser() {
 	if (player_said_2(swim_through, tunnel)) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->loadAnimation(kernel_full_name(110, 'T', 0, "", EXT_AA), 1);
+			kernel_run_animation(kernel_full_name(110, 'T', 0, "", EXT_AA), 1);
 			_scene->_animation[0]->setNextFrameTimer(player.frame_delay + player.clock);
 			player.commands_allowed = false;
 			player.walker_visible = false;
@@ -129,7 +129,7 @@ static void room_110_parser() {
 		case 1:
 			player.walker_visible = true;
 			player.commands_allowed = true;
-			_scene->_nextSceneId = 111;
+			new_room = 111;
 			break;
 		default:
 			break;
@@ -168,7 +168,7 @@ void room_110_preload() {
 
 	section_1_walker();
 	section_1_interface();
-	_scene->addActiveVocab(words_crab);
+	vocab_make_active(words_crab);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index a612bba66c2..bc4b77337f2 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -72,10 +72,10 @@ static void room_111_init() {
 	local._launched2Fl = false;
 	local._stampedFl = false;
 
-	if ((_scene->_priorSceneId < 201) && (_scene->_priorSceneId != RETURNING_FROM_DIALOG)) {
+	if ((previous_room < 201) && (previous_room != RETURNING_FROM_DIALOG)) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->loadAnimation(kernel_full_name(111, 'A', 0, "", EXT_AA), 70);
+		kernel_run_animation(kernel_full_name(111, 'A', 0, "", EXT_AA), 70);
 		player.x = 234;
 		player.y = 116;
 		player.facing = FACING_EAST;
@@ -84,7 +84,7 @@ static void room_111_init() {
 		local._launched2Fl = true;
 
 		g_engine->_soundManager->command(36, 0);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 300;
 		player.y = 130;
 		player.facing = FACING_WEST;
@@ -148,14 +148,14 @@ static void room_111_parser() {
 	if (player_said_2(dive_into, pool) && player_has(OBJ_REBREATHER)) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->loadAnimation(kernel_full_name(111, 'A', 1, "", EXT_AA), 1);
+			kernel_run_animation(kernel_full_name(111, 'A', 1, "", EXT_AA), 1);
 			local._rexDivingFl = true;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			break;
 
 		case 1:
-			_scene->_nextSceneId = 110;
+			new_room = 110;
 			break;
 
 		default:
@@ -192,7 +192,7 @@ void room_111_preload() {
 	room_parser_code_pointer = room_111_parser;
 	room_daemon_code_pointer = room_111_daemon;
 
-	_scene->addActiveVocab(words_bats);
+	vocab_make_active(words_bats);
 	section_1_walker();
 	section_1_interface();
 }
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index 2fe02d4ee59..fbe8719fec3 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -49,13 +49,13 @@ static void room_112_init() {
 	_scene->_userInterface.emptyConversationList();
 	_scene->_userInterface.setup(kInputConversation);
 
-	_scene->loadAnimation(kernel_full_name(112, 'X', -1, "", EXT_AA), 70);
+	kernel_run_animation(kernel_full_name(112, 'X', -1, "", EXT_AA), 70);
 }
 
 static void room_112_daemon() {
 	if ((_scene->_animation[0] != nullptr) && (config_file.naughtiness == STORYMODE_NICE)) {
 		if (_scene->_animation[0]->getCurrentFrame() >= 54) {
-			_scene->freeAnimation();
+			kernel_abort_animation(0);
 			kernel.trigger = 70;
 		}
 	}
@@ -67,7 +67,7 @@ static void room_112_daemon() {
 	}
 
 	if (kernel.trigger == 71) {
-		_scene->_nextSceneId = 101;
+		new_room = 101;
 		player.commands_allowed = true;
 		player.walker_visible = true;
 	}
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index 05df1486c07..80a98d0bc1e 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -55,7 +55,7 @@ static void room_201_init() {
 	int idx = _scene->_dynamicHotspots.add(words_birds, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 81), FACING_NORTH);
 
-	if ((_scene->_priorSceneId == 202) || (_scene->_priorSceneId == RETURNING_FROM_LOADING)) {
+	if ((previous_room == 202) || (previous_room == RETURNING_FROM_LOADING)) {
 		player.x = 165;
 		player.y = 152;
 	} else {
@@ -95,10 +95,10 @@ static void room_201_init() {
 		}
 		global[kTeleporterCommand] = 0;
 		if (suffixNum >= 0)
-			_scene->loadAnimation(kernel_name(sepChar, suffixNum), endTrigger);
+			kernel_run_animation(kernel_name(sepChar, suffixNum), endTrigger);
 	}
 
-	if ((_scene->_priorSceneId == 202) && (global[kMeteorologistStatus] == METEOROLOGIST_PRESENT) && !_scene->_roomChanged) {
+	if ((previous_room == 202) && (global[kMeteorologistStatus] == METEOROLOGIST_PRESENT) && !kernel.teleported_in) {
 		g_sprite_ids[6] = kernel_load_series(kernel_name('a', 0), 0);
 		g_sprite_ids[7] = kernel_load_series(kernel_name('a', 1), 0);
 		kernel.quotes = quote_load(90, 91, 0);
@@ -173,40 +173,40 @@ static void room_201_daemon() {
 
 	if (kernel.trigger == 75) {
 		global[kMeteorologistEverSeen] = 0;
-		_scene->_nextSceneId = 202;
+		new_room = 202;
 	}
 
 	if (kernel.trigger == 76) {
 		player.commands_allowed = true;
 		player.walker_visible = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 	}
 
 	if (kernel.trigger == 77) {
 		global[kTeleporterCommand] = 1;
-		_scene->_nextSceneId = global[kTeleporterDestination];
-		_scene->_reloadSceneFlag = true;
+		new_room = global[kTeleporterDestination];
+		kernel.force_restart = true;
 	}
 
 	if (kernel.trigger == 78) {
 		g_engine->_soundManager->command(40, 0);
 		text_show(20114);
-		_scene->_reloadSceneFlag = true;
+		kernel.force_restart = true;
 	}
 }
 
 static void room_201_parser() {
 	if (player.look_around == false) {
 		if (player_said_2(walk_towards, field_to_south))
-			_scene->_nextSceneId = 202;
+			new_room = 202;
 		else if (player_said_2(climb_up, steps) || (player_said_2(walk_inside, teleporter)) || (player_said_2(walk_inside, strange_device))) {
 			if (kernel.trigger == 0) {
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				int sepChar = (global[kSexOfRex] == SEX_MALE) ? 't' : 'u';
-				_scene->loadAnimation(kernel_name(sepChar, 0), 1);
+				kernel_run_animation(kernel_name(sepChar, 0), 1);
 			} else if (kernel.trigger == 1) {
-				_scene->_nextSceneId = 213;
+				new_room = 213;
 			}
 		} else if (player_said_2(look, grassy_field)) {
 			text_show(20101);
@@ -253,9 +253,9 @@ void room_201_preload() {
 	section_2_walker();
 	section_2_interface();
 
-	_scene->addActiveVocab(words_swooping_creature);
-	_scene->addActiveVocab(words_birds);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_swooping_creature);
+	vocab_make_active(words_birds);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index 4f6511e49a5..ba822574c98 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -90,13 +90,13 @@ static void room_202_init() {
 	}
 
 	if (global[kBone202Status])
-		_scene->changeVariant(global[kBone202Status]);
+		kernel_load_variant(global[kBone202Status]);
 
-	if (_scene->_priorSceneId == 201) {
+	if (previous_room == 201) {
 		player.x = 190;
 		player.y = 91;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 178;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -113,7 +113,7 @@ static void room_202_init() {
 	kernel.quotes = quote_load(0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x61, 0);
 	local._activeMsgFl = false;
 
-	if (_scene->_priorSceneId == RETURNING_FROM_DIALOG) {
+	if (previous_room == RETURNING_FROM_DIALOG) {
 		if (local._waitingMeteoFl) {
 			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
 			player.walker_visible = false;
@@ -123,9 +123,9 @@ static void room_202_init() {
 		local._ladderTopFl = false;
 	}
 
-	local._meteoClock1 = local._meteoClock2 = _scene->_frameStartTime;
+	local._meteoClock1 = local._meteoClock2 = kernel.clock;
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_BINOCULARS);
 
 	if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
@@ -152,7 +152,7 @@ static void room_202_init() {
 			player.facing = FACING_NORTH;
 		}
 
-		_scene->loadAnimation(kernel_name('M', -1), 71);
+		kernel_run_animation(kernel_name('M', -1), 71);
 		_scene->_animation[0]->setCurrentFrame(200);
 	} else {
 		if (local._ladderTopFl) {
@@ -243,7 +243,7 @@ static void room_202_daemon() {
 		g_engine->_soundManager->command(3, 0);
 		g_engine->_soundManager->command(9, 0);
 
-		local._meteoClock1 = _scene->_frameStartTime + 15 * 60;
+		local._meteoClock1 = kernel.clock + 15 * 60;
 
 		if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL) {
 			Common::Point msgPos;
@@ -319,7 +319,7 @@ static void room_202_daemon() {
 		break;
 	}
 
-	if (!_scene->_animation[0] && (global[kMeteorologistStatus] != METEOROLOGIST_GONE) && (local._meteoClock2 <= _scene->_frameStartTime) && (local._meteoClock1 <= _scene->_frameStartTime)) {
+	if (!_scene->_animation[0] && (global[kMeteorologistStatus] != METEOROLOGIST_GONE) && (local._meteoClock2 <= kernel.clock) && (local._meteoClock1 <= kernel.clock)) {
 		int randVal = g_engine->getRandomNumber(1, 500);
 		int threshold = 1;
 		if (local._ladderTopFl)
@@ -328,13 +328,13 @@ static void room_202_daemon() {
 			threshold += 25;
 		if (threshold >= randVal) {
 			g_engine->_soundManager->command(17, 0);
-			_scene->loadAnimation(kernel_name('M', -1), 71);
+			kernel_run_animation(kernel_name('M', -1), 71);
 			local._toStationFl = true;
 			local._toTeleportFl = false;
 			global[kMeteorologistEverSeen] = true;
 			local._lastRoute = 0;
 			local._stationCounter = 0;
-			local._meteoClock2 = _scene->_frameStartTime + 2;
+			local._meteoClock2 = kernel.clock + 2;
 		}
 	}
 
@@ -344,10 +344,10 @@ static void room_202_daemon() {
 	if (local._waitingMeteoFl) {
 		if (_scene->_animation[0]->getCurrentFrame() >= 200) {
 			if ((global[kMeteorologistWatch] == METEOROLOGIST_TOWER) || global[kLadderBroken]) {
-				_scene->_nextSceneId = 213;
+				new_room = 213;
 			} else {
 				text_show(20201);
-				_scene->_reloadSceneFlag = true;
+				kernel.force_restart = true;
 			}
 		}
 
@@ -366,7 +366,7 @@ static void room_202_daemon() {
 		}
 	}
 
-	if (local._meteoClock2 + 120 * 60 <= _scene->_frameStartTime) {
+	if (local._meteoClock2 + 120 * 60 <= kernel.clock) {
 		local._toTeleportFl = true;
 	}
 
@@ -469,7 +469,7 @@ static void room_202_parser() {
 		player.command_ready = false;
 		return;
 	} else if (player_said_2(walk_towards, field_to_south)) {
-		_scene->_nextSceneId = 203;
+		new_room = 203;
 	} else if (player_said_2(walk_towards, field_to_north)) {
 		if (global[kMeteorologistStatus] != METEOROLOGIST_GONE) {
 			if (_scene->_animation[0])
@@ -477,7 +477,7 @@ static void room_202_parser() {
 			else
 				global[kMeteorologistStatus] = METEOROLOGIST_ABSENT;
 		}
-		_scene->_nextSceneId = 201;
+		new_room = 201;
 	} else if (player_said_2(take, bone) && (player.main_object_source == 4)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -510,7 +510,7 @@ static void room_202_parser() {
 				inter_give_to_player(OBJ_BONE);
 				object_examine(OBJ_BONE, 20218, 0);
 			}
-			_scene->changeVariant(global[kBone202Status]);
+			kernel_load_variant(global[kBone202Status]);
 			player.commands_allowed = true;
 			player.walker_visible = true;
 			break;
@@ -523,7 +523,7 @@ static void room_202_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			g_engine->_soundManager->command(29, 0);
-			local._meteoClock1 = _scene->_frameStartTime;
+			local._meteoClock1 = kernel.clock;
 			player.walker_visible = false;
 			player.commands_allowed = false;
 
@@ -722,12 +722,12 @@ void room_202_preload() {
 	section_2_walker();
 	section_2_interface();
 
-	_scene->addActiveVocab(words_ladder);
-	_scene->addActiveVocab(words_climb_down);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_bone);
-	_scene->addActiveVocab(words_skull);
-	_scene->addActiveVocab(words_broken_ladder);
+	vocab_make_active(words_ladder);
+	vocab_make_active(words_climb_down);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_bone);
+	vocab_make_active(words_skull);
+	vocab_make_active(words_broken_ladder);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 157bf3bea1d..44d7e681d9f 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -42,15 +42,15 @@ static Scratch local;
 
 
 static void room_203_init() {
-	if (_scene->_priorSceneId == 202) {
+	if (previous_room == 202) {
 		player.x = 187;
 		player.y = 99;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId == 209) {
+	} else if (previous_room == 209) {
 		player.x = 308;
 		player.y = 117;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 155;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -59,7 +59,7 @@ static void room_203_init() {
 	local._rhotundaEatFl = false;
 	local._rhotundaEat2Fl = false;
 
-	if ((global[kRhotundaStatus] == 0) && (!_scene->_roomChanged)) {
+	if ((global[kRhotundaStatus] == 0) && (!kernel.teleported_in)) {
 		local._rhotundaEatFl = true;
 		player_walk(158, 135, FACING_SOUTH);
 		int idx = _scene->_dynamicHotspots.add(words_field_to_south, words_walk_towards, 0, Common::Rect(0, 0, 320, 156));
@@ -103,13 +103,13 @@ static void room_203_daemon() {
 		player.commands_allowed = false;
 		pal_lock();
 		_scene->_kernelMessages.reset();
-		_scene->resetScene();
+		kernel_dump_all();
 		cursor_id = CURSOR_WAIT;
 		mouse_cursor_sprite(cursor, CURSOR_WAIT);
-		_scene->loadAnimation(kernel_full_name(203, 'a', -1, "", EXT_AA), 81);
+		kernel_run_animation(kernel_full_name(203, 'a', -1, "", EXT_AA), 81);
 	} else if (kernel.trigger == 81) {
-		_scene->_nextSceneId = 208;
-		_scene->_reloadSceneFlag = true;
+		new_room = 208;
+		kernel.force_restart = true;
 	}
 }
 
@@ -128,9 +128,9 @@ static void room_203_parser() {
 	if (player.look_around) {
 		text_show(20307);
 	} else if (player_said_2(walk_towards, field_to_south)) {
-		_scene->_nextSceneId = 208;
+		new_room = 208;
 	} else if (player_said_2(walk_towards, field_to_north)) {
-		_scene->_nextSceneId = 202;
+		new_room = 202;
 	} else if (player_said_2(look, sky)) {
 		text_show(20301);
 	} else if (player_said_2(look, cliff_face)) {
@@ -162,7 +162,7 @@ void room_203_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(477);
+	vocab_make_active(477);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index 98c9c78be94..fcabdff1bc0 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -93,20 +93,20 @@ static void room_205_init() {
 	pal_change_color(252, 63, 63, 40);
 	pal_change_color(253, 50, 50, 30);
 
-	local._chickenTime = _scene._frameStartTime;
+	local._chickenTime = kernel.clock;
 
 	if (global[kSexOfRex] == SEX_FEMALE)
 		_scene->_kernelMessages.initRandomMessages(3,
 			Common::Rect(195, 99, 264, 134), 13, 2, 0xFDFC, 60,
 			108, 108, 109, 109, 110, 110, 111, 108, 0);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 99;
 		player.y = 152;
 	}
 
 	if (global[kSexOfRex] != SEX_MALE) {
-		_scene->loadAnimation(kernel_name('a', -1));
+		kernel_run_animation(kernel_name('a', -1), 0);
 		_scene->_animation[0]->_repeatFlag = true;
 	} else {
 		local._beingKicked = true;
@@ -126,22 +126,22 @@ static void room_205_daemon() {
 	if (global[kSexOfRex] == SEX_FEMALE) {
 		_scene->_kernelMessages.randomServer();
 
-		if (_scene._frameStartTime >= local._chickenTime) {
+		if (kernel.clock >= local._chickenTime) {
 			int chanceMinor = _scene->_kernelMessages.checkRandom() + 1;
 			if (_scene->_kernelMessages.generateRandom(100, chanceMinor))
 				g_engine->_soundManager->command(28, 0);
 
-			local._chickenTime = _scene._frameStartTime + 2;
+			local._chickenTime = kernel.clock + 2;
 		}
 	}
 
-	if (_scene._frameStartTime - local._lastFishTime > 1300) {
+	if (kernel.clock - local._lastFishTime > 1300) {
 		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(
 			g_sprite_ids[6], false, 5, 1, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, g_sequence_ids[6],
 			Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
-		local._lastFishTime = _scene._frameStartTime;
+		local._lastFishTime = kernel.clock;
 	}
 
 	if (kernel.trigger == 73)
@@ -161,7 +161,7 @@ static void room_205_daemon() {
 	}
 
 	if (kernel.trigger == 72)
-		_scene->_nextSceneId = 211;
+		new_room = 211;
 }
 
 static void handleWomanSpeech(int quote) {
@@ -264,11 +264,11 @@ static void room_205_parser() {
 				_scene->_animation[0]->resetSpriteSetsCount();
 
 			text_show(20516);
-			_scene->_reloadSceneFlag = true;
+			kernel.force_restart = true;
 		}
 	} else {
 		if (player_said_2(walk_down, path_to_south))
-			_scene->_nextSceneId = 210;
+			new_room = 210;
 
 		if (player_said_2(walkto, fire_pit) || player_said_2(walkto, chicken_on_spit)) {
 			if (object_is_here(OBJ_CHICKEN)) {
@@ -325,8 +325,8 @@ void room_205_synchronize(Common::Serializer &s) {
 }
 
 void room_205_preload() {
-	local._lastFishTime = _scene->_frameStartTime;
-	local._chickenTime = _scene->_frameStartTime;
+	local._lastFishTime = kernel.clock;
+	local._chickenTime = kernel.clock;
 	local._beingKicked = false;
 	local._kernelMessage = -1;
 
@@ -336,9 +336,9 @@ void room_205_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_chicken);
-	_scene->addActiveVocab(words_piranha);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_chicken);
+	vocab_make_active(words_piranha);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index d81a989263b..f9b123f6b16 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -83,15 +83,15 @@ static void room_207_init() {
 	}
 
 	local._eyeFl = false;
-	if (_scene->_priorSceneId == 211) {
+	if (previous_room == 211) {
 		player.x = 13;
 		player.y = 105;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId == 214) {
+	} else if (previous_room == 214) {
 		player.x = 164;
 		player.y = 117;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 305;
 		player.y = 131;
 	}
@@ -175,7 +175,7 @@ static void room_207_parser() {
 	if (player.look_around)
 		text_show(20711);
 	else if (player_said_2(walk_through, doorway))
-		_scene->_nextSceneId = 214;
+		new_room = 214;
 	else {
 		if ((player.x > 150) && (player.x < 189) &&
 			(player.y > 111) && (player.y < 130)) {
@@ -247,10 +247,10 @@ void room_207_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_vulture);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_spider);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_vulture);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_spider);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index 6eb56f1f32b..d380c4b5568 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -87,21 +87,21 @@ static void room_208_init() {
 	local._rhotundaTurnFl = false;
 	local._boundingFl = false;
 	_scene->_kernelMessages._talkFont = font_inter;
-	_scene->_textSpacing = 0;
+	kernel_message_spacing = 0;
 
-	if (_scene->_priorSceneId == 207) {
+	if (previous_room == 207) {
 		player.x = 8;
 		player.y = 122;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId == 203) {
+	} else if (previous_room == 203) {
 		player.x = 142;
 		player.y = 108;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId == 209) {
+	} else if (previous_room == 209) {
 		player.x = 307;
 		player.y = 123;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 162;
 		player.y = 149;
 		player.facing = FACING_NORTH;
@@ -109,7 +109,7 @@ static void room_208_init() {
 
 	kernel.quotes = quote_load(0x81, 0x46, 0);
 
-	if ((_scene->_priorSceneId == 207) && (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
+	if ((previous_room == 207) && (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
 		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 129));
 		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 	}
@@ -142,7 +142,7 @@ static void room_208_daemon() {
 
 	switch (kernel.trigger) {
 	case 0:
-		_scene->loadAnimation(kernel_name('A', -1), 81);
+		kernel_run_animation(kernel_name('A', -1), 81);
 		local._rhotundaTime = 0;
 		break;
 	case 81:
@@ -259,15 +259,15 @@ static void subAction(int mode) {
 static void room_208_parser() {
 	if (player_said_2(walk_towards, lowlands_to_north)) {
 		if (global[kRhotundaStatus])
-			_scene->_nextSceneId = 203;
+			new_room = 203;
 		else if (kernel.trigger == 0) {
 			player.commands_allowed = false;
 			int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, quote_string(kernel.quotes, 70));
 			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
 		} else if (kernel.trigger == 1)
-			_scene->_nextSceneId = 203;
+			new_room = 203;
 	} else if (player_said_2(walk_towards, field_to_south))
-		_scene->_nextSceneId = 212;
+		new_room = 212;
 	else if (player_said_2(take, pile_of_leaves) && (!global[kLeavesStatus] || kernel.trigger)) {
 		subAction(1);
 		if (player.commands_allowed)
@@ -346,10 +346,10 @@ void room_208_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_huge_legs);
-	_scene->addActiveVocab(words_leaf_covered_pit);
-	_scene->addActiveVocab(words_pile_of_leaves);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_huge_legs);
+	vocab_make_active(words_leaf_covered_pit);
+	vocab_make_active(words_pile_of_leaves);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 81cb44ae4a9..ff18cc97050 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -811,7 +811,7 @@ static void handleMonkeyFall() {
 	break;
 
 	case 223:
-		_scene->loadAnimation(kernel_full_name(209, 'e', -1, "", EXT_AA), 224);
+		kernel_run_animation(kernel_full_name(209, 'e', -1, "", EXT_AA), 224);
 		g_engine->_soundManager->command(38, 0);
 		break;
 
@@ -863,7 +863,7 @@ static void handleMonkey1() {
 	case 215:
 	{
 		g_engine->_soundManager->command(18, 0);
-		_scene->loadAnimation(kernel_full_name(209, 'a', -1, "", EXT_AA), 251);
+		kernel_run_animation(kernel_full_name(209, 'a', -1, "", EXT_AA), 251);
 		int oldIdx = g_sequence_ids[7];
 		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 7, 1, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[7], 27, 35);
@@ -903,7 +903,7 @@ static void handleMonkey2() {
 		_scene->_sequences.setScale(g_sequence_ids[12], 79);
 		_scene->_sequences.setAnimRange(g_sequence_ids[12], 1, 6);
 		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = false;
 		break;
 
@@ -922,7 +922,7 @@ static void handleMonkey2() {
 
 	case 253:
 		_scene->_sequences.remove(g_sequence_ids[12]);
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = true;
 		player.commands_allowed = true;
 		break;
@@ -994,11 +994,11 @@ static void room_209_init() {
 		_scene->_sequences.setDepth(g_sequence_ids[1], 13);
 	}
 
-	if (_scene->_priorSceneId == 208) {
+	if (previous_room == 208) {
 		player.x = 11;
 		player.y = 121;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 28;
 		player.y = 121;
 		player.facing = FACING_SOUTH;
@@ -1012,7 +1012,7 @@ static void room_209_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
 	}
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_POISON_DARTS);
 		inter_give_to_player(OBJ_BLOWGUN);
 		global[kMonkeyStatus] = MONKEY_HAS_BINOCULARS;
@@ -1302,7 +1302,7 @@ static void room_209_daemon() {
 			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
 			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
-			player.clock = _scene->_frameStartTime - player.frame_delay;
+			player.clock = kernel.clock - player.frame_delay;
 			_scene->_sequences.updateTimeout(g_sequence_ids[2], -1);
 			player.walker_visible = false;
 		}
@@ -1372,7 +1372,7 @@ static void room_209_daemon() {
 
 		case 237:
 			player.walker_visible = true;
-			player.clock = _scene->_frameStartTime - player.frame_delay;
+			player.clock = kernel.clock - player.frame_delay;
 			_scene->_sequences.addTimer(1, 238);
 			break;
 
@@ -1445,7 +1445,7 @@ static void room_209_parser() {
 	}
 
 	if (player_said_2(walk_towards, rocky_area_to_north)) {
-		_scene->_nextSceneId = 203;
+		new_room = 203;
 		player.command_ready = false;
 		return;
 	}
@@ -1794,7 +1794,7 @@ void room_209_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_plant_stalk);
+	vocab_make_active(words_plant_stalk);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 909ea9de6b5..aca5cb21520 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -340,12 +340,12 @@ static void setDialogNode(int node) {
 			player.walker_visible = false;
 			pal_lock();
 			_scene->_kernelMessages.reset();
-			_scene->freeAnimation();
-			_scene->resetScene();
+			kernel_abort_animation(0);
+			kernel_dump_all();
 
 			g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
 			kernel.quotes = quote_load(0xE6, 0xE9, 0xEA, 0xE7, 0xE8, 0);
-			_scene->loadAnimation(kernel_name('B', -1), 4);
+			kernel_run_animation(kernel_name('B', -1), 4);
 			break;
 
 		case 4:
@@ -381,7 +381,7 @@ static void setDialogNode(int node) {
 
 		case 8:
 			global[kTwinklesStatus] = TWINKLES_GONE;
-			_scene->_nextSceneId = 216;
+			new_room = 216;
 			break;
 
 		default:
@@ -549,7 +549,7 @@ static void handleConversations() {
 		_scene->_kernelMessages.reset();
 		player.commands_allowed = false;
 		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
-		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
+		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
 			static char line1[40], line2[40];
 			quote_split_string(curQuote, line1, line2);
 			Common::strcpy_s(local._subQuote2, line2);
@@ -618,16 +618,16 @@ static void room_210_init() {
 	if (!player.been_here_before)
 		global[kCurtainOpen] = 0;
 
-	if (_scene->_priorSceneId == 205) {
+	if (previous_room == 205) {
 		player.x = 277;
 		player.y = 56;
 	}
-	else if (_scene->_priorSceneId == 215) {
+	else if (previous_room == 215) {
 		player.x = 168;
 		player.y = 128;
 		player.facing = FACING_SOUTH;
 		global[kCurtainOpen] = true;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 308;
 		player.y = 132;
 	}
@@ -666,7 +666,7 @@ static void room_210_init() {
 	local._twinkleAnimationType = 0;
 	local._twinklesCurrentFrame = 0;
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		local._shouldMoveHead = false;
 		local._shouldFaceRex = false;
 		local._shouldTalk = false;
@@ -678,7 +678,7 @@ static void room_210_init() {
 	}
 
 	if (global[kTwinklesStatus] == 0) {
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		local._twinkleAnimationType = 1;
 	} else
 		_scene->_hotspots.activate(476, false);
@@ -988,9 +988,9 @@ static void room_210_parser() {
 			break;
 		}
 	} else if (player_said_2(walk_down, path_to_north) || player_said_2(walk_towards, hut_to_north)) {
-		_scene->_nextSceneId = 205;
+		new_room = 205;
 	} else if (player_said_2(walk_through, doorway)) {
-		_scene->_nextSceneId = 215;
+		new_room = 215;
 	} else if ((player_said_2(pull, curtain) || player_said_2(open, curtain)) && !global[kCurtainOpen]) {
 		switch (kernel.trigger) {
 		case 0:
@@ -1108,8 +1108,8 @@ void room_210_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_doorway);
-	_scene->addActiveVocab(words_walk_through);
+	vocab_make_active(words_doorway);
+	vocab_make_active(words_walk_through);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index d99be01d3f4..89be57ee1de 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -47,20 +47,20 @@ static void room_211_init() {
 	g_sprite_ids[1] = kernel_load_series("*SC002Z2", 0);
 	local._wakeFl = false;
 
-	if (_scene->_priorSceneId == 210) {
+	if (previous_room == 210) {
 		player.x = 25;
 		player.y = 148;
 	}
-	else if (_scene->_priorSceneId == 205) {
+	else if (previous_room == 205) {
 		player.x = 49;
 		player.y = 133;
 		player.facing = FACING_WEST;
 		local._wakeFl = true;
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->loadAnimation(kernel_name('A', -1), 100);
+		kernel_run_animation(kernel_name('A', -1), 100);
 		_scene->_animation[0]->setCurrentFrame(169);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 310;
 		player.y = 31;
 		player.facing = FACING_SOUTHWEST;
@@ -74,7 +74,7 @@ static void room_211_init() {
 		_scene->_dynamicHotspots.add(words_slithering_snake, words_walkto, g_sequence_ids[2], Common::Rect(1, 1, 1 + 41, 1 + 10));
 	}
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_BINOCULARS);
 
 	pal_change_color(252, 63, 44, 30);
@@ -86,7 +86,7 @@ static void room_211_init() {
 			Common::Rect(0, 0, 54, 30), 13, 2, 0xFDFC, 60,
 			151, 152, 153, 154, 0);
 
-	local._monkeyTime = _scene._frameStartTime;
+	local._monkeyTime = kernel.clock;
 	local._scrollY = 30;
 
 	local._ambushFl = false;
@@ -99,12 +99,12 @@ static void room_211_daemon() {
 	if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
 		_scene->_kernelMessages.randomServer();
 
-		if (!local._ambushFl && !local._wakeFl && (_scene._frameStartTime >= local._monkeyTime)) {
+		if (!local._ambushFl && !local._wakeFl && (kernel.clock >= local._monkeyTime)) {
 			int chanceMinor = _scene->_kernelMessages.checkRandom() * 4 + 1;
 			if (_scene->_kernelMessages.generateRandom(80, chanceMinor))
 				g_engine->_soundManager->command(18, 0);
 
-			local._monkeyTime = _scene._frameStartTime + 2;
+			local._monkeyTime = kernel.clock + 2;
 		}
 
 		if ((Common::Point(player.x, player.y) == Common::Point(52, 132)) && (player.facing == FACING_WEST) && !player.walking &&
@@ -117,7 +117,7 @@ static void room_211_daemon() {
 					player.commands_allowed = false;
 					player.walker_visible = false;
 					_scene->_kernelMessages.reset();
-					_scene->loadAnimation(kernel_name('A', -1), 90);
+					kernel_run_animation(kernel_name('A', -1), 90);
 					g_engine->_soundManager->command(19, 0);
 					int count = (int)inven_num_objects;
 					for (int idx = 0; idx < count; idx++) {
@@ -343,7 +343,7 @@ void room_211_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_slithering_snake);
+	vocab_make_active(words_slithering_snake);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room212.cpp b/engines/mads/nebular/rooms/room212.cpp
index e1e8cdc085f..f64f1b78617 100644
--- a/engines/mads/nebular/rooms/room212.cpp
+++ b/engines/mads/nebular/rooms/room212.cpp
@@ -32,11 +32,11 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_212_init() {
-	if (_scene->_priorSceneId == 208) {
+	if (previous_room == 208) {
 		player.x = 195;
 		player.y = 85;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 67;
 		player.y = 117;
 		player.facing = FACING_NORTHEAST;
@@ -58,9 +58,9 @@ static void room_212_parser() {
 	if (player.look_around)
 		text_show(21209);
 	else if (player_said_1(walk_towards) && (player_said_1(field_to_north) || player_said_1(mountains)))
-		_scene->_nextSceneId = 208;
+		new_room = 208;
 	else if (player_said_2(walk_towards, cave))
-		_scene->_nextSceneId = 111;
+		new_room = 111;
 	else if (player_said_2(look, grass))
 		text_show(21201);
 	else if (player_said_2(look, rocks))
@@ -95,7 +95,7 @@ void room_212_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_bouncing_reptile);
+	vocab_make_active(words_bouncing_reptile);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index 941ac5b4bf4..82b73388aef 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -64,7 +64,7 @@ static void room_214_init() {
 		_scene->_hotspots.activate(words_blowgun, false);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 191;
 		player.y = 152;
 	}
@@ -119,7 +119,7 @@ static void room_214_parser() {
 	if (player.look_around)
 		text_show(21427);
 	else if (player_said_2(walk_outside, hut))
-		_scene->_nextSceneId = 207;
+		new_room = 207;
 	else if (player_said_2(take, poison_darts) && (kernel.trigger || object_is_here(OBJ_POISON_DARTS))) {
 		switch (kernel.trigger) {
 		case 0:
@@ -258,8 +258,8 @@ void room_214_preload() {
 
 	section_2_walker();
 	section_2_interface();
-	_scene->addActiveVocab(words_captive_creature);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_captive_creature);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index 5760aa5dac5..1efd7ea9942 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -44,7 +44,7 @@ static void room_215_init() {
 	else
 		g_sprite_ids[2] = kernel_load_series("*ROXRC_9", 0);
 
-	if (_scene->_priorSceneId == 216) {
+	if (previous_room == 216) {
 		player.x = 140;
 		player.y = 119;
 		player.facing = FACING_SOUTHWEST;
@@ -52,7 +52,7 @@ static void room_215_init() {
 		player.commands_allowed = false;
 		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 		_scene->_sequences.addTimer(120, 70);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 204;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -119,7 +119,7 @@ static void room_215_parser() {
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, idx));
 		}
 	} else if (player_said_2(walk_outside, hut))
-		_scene->_nextSceneId = 210;
+		new_room = 210;
 	else if (player_said_2(look, bear_rug))
 		text_show(21501);
 	else if (player_said_2(look, bed))
diff --git a/engines/mads/nebular/rooms/room216.cpp b/engines/mads/nebular/rooms/room216.cpp
index 259d21498a2..0973233ba4d 100644
--- a/engines/mads/nebular/rooms/room216.cpp
+++ b/engines/mads/nebular/rooms/room216.cpp
@@ -37,14 +37,14 @@ void room_216_init() {
 
 	_scene->_userInterface.emptyConversationList();
 	_scene->_userInterface.setup(kInputConversation);
-	_scene->loadAnimation(kernel_name('A', -1), 60);
+	kernel_run_animation(kernel_name('A', -1), 60);
 
 	section_2_music();
 }
 
 void room_216_daemon() {
 	if (kernel.trigger == 60)
-		_scene->_nextSceneId = 215;
+		new_room = 215;
 }
 
 void room_216_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room301.cpp b/engines/mads/nebular/rooms/room301.cpp
index b7f755a67e3..297d736dcf9 100644
--- a/engines/mads/nebular/rooms/room301.cpp
+++ b/engines/mads/nebular/rooms/room301.cpp
@@ -40,14 +40,14 @@ static void room_301_init() {
 
 	player.commands_allowed = false;
 	player.walker_visible = false;
-	_scene->loadAnimation(kernel_name('a', -1), 60);
+	kernel_run_animation(kernel_name('a', -1), 60);
 
 	section_3_music();
 }
 
 static void room_301_daemon() {
 	if (kernel.trigger == 60)
-		_scene->_nextSceneId = 302;
+		new_room = 302;
 }
 
 void room_301_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room302.cpp b/engines/mads/nebular/rooms/room302.cpp
index 0e82041d513..a763e1757a4 100644
--- a/engines/mads/nebular/rooms/room302.cpp
+++ b/engines/mads/nebular/rooms/room302.cpp
@@ -42,13 +42,13 @@ static void room_302_init() {
 	player.commands_allowed = false;
 	player.walker_visible = false;
 
-	_scene->loadAnimation(kernel_name('a', -1), 71);
+	kernel_run_animation(kernel_name('a', -1), 71);
 	section_3_music();
 }
 
 static void room_302_daemon() {
 	if (kernel.trigger == 71)
-		_scene->_nextSceneId = 303;
+		new_room = 303;
 
 	if ((_scene->_animation[0] != nullptr) && (_scene->_animation[0]->getCurrentFrame() != local._oldFrame)) {
 		local._oldFrame = _scene->_animation[0]->getCurrentFrame();
diff --git a/engines/mads/nebular/rooms/room303.cpp b/engines/mads/nebular/rooms/room303.cpp
index 1796bed68e2..db5d4ae6286 100644
--- a/engines/mads/nebular/rooms/room303.cpp
+++ b/engines/mads/nebular/rooms/room303.cpp
@@ -41,14 +41,14 @@ static void room_303_init() {
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
-	_scene->loadAnimation(kernel_name('a', -1), 60);
+	kernel_run_animation(kernel_name('a', -1), 60);
 
 	section_3_music();
 }
 
 static void room_303_daemon() {
 	if (kernel.trigger == 60)
-		_scene->_nextSceneId = 304;
+		new_room = 304;
 }
 
 void room_303_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index 7fdbd29cab1..e42185d9d6a 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -39,10 +39,10 @@ struct Scratch {
 static Scratch local;
 
 static void room_304_init() {
-	if (_scene->_priorSceneId == 303) {
+	if (previous_room == 303) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->loadAnimation(kernel_name('a', -1), 60);
+		kernel_run_animation(kernel_name('a', -1), 60);
 	} else {
 		if (global[kSexOfRex] == REX_MALE)
 			g_sprite_ids[1] = kernel_load_series(kernel_name('a', 0), 0);
@@ -77,7 +77,7 @@ static void room_304_init() {
 
 static void room_304_daemon() {
 	if (kernel.trigger == 60)
-		_scene->_nextSceneId = 311;
+		new_room = 311;
 
 	if (kernel.trigger >= 70) {
 		switch (kernel.trigger) {
@@ -155,7 +155,7 @@ static void room_304_daemon() {
 			break;
 
 		case 78:
-			_scene->_nextSceneId = 316;
+			new_room = 316;
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 902fb7468a0..5b14ba9c458 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -58,7 +58,7 @@ static Scratch local;
 
 static void handleRexDialog(int quote) {
 	const char *curQuote = quote_string(kernel.quotes, quote);
-	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
+	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		quote_split_string(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
@@ -290,7 +290,7 @@ static void room_307_init() {
 	local._animationMode = 0;
 	local._fieldCollisionCounter = 0;
 
-	_scene->changeVariant(1);
+	kernel_load_variant(1);
 
 	kernel.quotes = quote_load(0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0x10C, 0x104, 0x106, 0x107, 0x108, 0x105,
 		0x109, 0x10A, 0x10B, 0x10D, 0x10E, 0x10F, 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117,
@@ -305,11 +305,11 @@ static void room_307_init() {
 
 	if (!player.been_here_before)
 		local._dialog2.set(0x11A, 0x122, 0);
-	else if (_scene->_priorSceneId == 318)
+	else if (previous_room == 318)
 		local._dialog2.write(0x11E, true);
 
 
-	if (_scene->_priorSceneId == RETURNING_FROM_DIALOG) {
+	if (previous_room == RETURNING_FROM_DIALOG) {
 		if (local._grateOpenedFl)
 			g_engine->_soundManager->command(10, 0);
 		else
@@ -323,7 +323,7 @@ static void room_307_init() {
 		local._prisonerTimer = 0;
 		local._prisonerMessageId = 0x104;
 
-		if (_scene->_priorSceneId == 308) {
+		if (previous_room == 308) {
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			player.x = 156;
@@ -331,8 +331,8 @@ static void room_307_init() {
 			player.facing = FACING_NORTH;
 			local._animationMode = 1;
 			g_engine->_soundManager->command(11, 0);
-			_scene->loadAnimation(kernel_name('a', -1), 60);
-		} else if (_scene->_priorSceneId == 387) {
+			kernel_run_animation(kernel_name('a', -1), 60);
+		} else if (previous_room == 387) {
 			player.x = 129;
 			player.y = 108;
 			player.facing = FACING_NORTH;
@@ -364,7 +364,7 @@ static void room_307_init() {
 
 	section_3_music();
 
-	if ((_scene->_priorSceneId == 318) || (_scene->_priorSceneId == 387))
+	if ((previous_room == 318) || (previous_room == 387))
 		_scene->_kernelMessages.addQuote(0xF3, 0, 120);
 }
 
@@ -389,20 +389,20 @@ static void room_307_daemon() {
 
 		if (_scene->_animation[0]->getCurrentFrame() == 150) {
 			player.walker_visible = false;
-			player.clock = _scene->_frameStartTime - player.frame_delay;
+			player.clock = kernel.clock - player.frame_delay;
 		}
 	}
 
 	if (kernel.trigger == 60) {
 		player.walker_visible = true;
 		player.commands_allowed = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		local._animationMode = 0;
 		g_engine->_soundManager->command(9, 0);
 	}
 
-	if ((local._lastFrameTime != _scene->_frameStartTime) && !local._duringPeeingFl) {
-		int32 elapsedTime = local._lastFrameTime - _scene->_frameStartTime;
+	if ((local._lastFrameTime != kernel.clock) && !local._duringPeeingFl) {
+		int32 elapsedTime = local._lastFrameTime - kernel.clock;
 		if ((elapsedTime > 0) && (elapsedTime <= 4)) {
 			local._guardTime += elapsedTime;
 			local._prisonerTimer += elapsedTime;
@@ -410,7 +410,7 @@ static void room_307_daemon() {
 			local._guardTime++;
 			local._prisonerTimer++;
 		}
-		local._lastFrameTime = _scene->_frameStartTime;
+		local._lastFrameTime = kernel.clock;
 
 		if ((local._guardTime > 3000) && !local._duringPeeingFl && (_scene->_animation[0] == nullptr)
 			&& (inter_input_mode != kInputConversation) && global[kMetBuddyBeast] && !local._activePrisonerFl) {
@@ -419,7 +419,7 @@ static void room_307_daemon() {
 				player_walk(151, 119, FACING_SOUTHEAST);
 				local._animationMode = 2;
 				g_engine->_soundManager->command(11, 0);
-				_scene->loadAnimation(kernel_name('b', -1), 70);
+				kernel_run_animation(kernel_name('b', -1), 70);
 			}
 			local._guardTime = 0;
 		} else if ((local._prisonerTimer > 300) && (inter_input_mode != kInputConversation) && (_scene->_animation[0] == nullptr) && !local._activePrisonerFl) {
@@ -441,7 +441,7 @@ static void room_307_daemon() {
 	}
 
 	if (kernel.trigger == 70)
-		_scene->_nextSceneId = 318;
+		new_room = 318;
 
 	if (kernel.trigger == 81) {
 		local._prisonerTimer = 0;
@@ -540,7 +540,7 @@ static void room_307_parser() {
 		case 6:
 		{
 			player.walker_visible = true;
-			player.clock = _scene->_frameStartTime - player.frame_delay;
+			player.clock = kernel.clock - player.frame_delay;
 			_scene->_sequences.remove(g_sequence_ids[5]);
 			local._grateOpenedFl = true;
 			_scene->_hotspots.activate(17, false);
@@ -637,7 +637,7 @@ static void room_307_parser() {
 				break;
 
 			case 7:
-				_scene->_nextSceneId = 313;
+				new_room = 313;
 				break;
 
 			default:
@@ -775,8 +775,8 @@ void room_307_preload() {
 
 	section_3_walker();
 	section_3_interface();
-	_scene->addActiveVocab(words_air_vent);
-	_scene->addActiveVocab(words_climb_into);
+	vocab_make_active(words_air_vent);
+	vocab_make_active(words_climb_into);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index e0d4d60b67e..6ab42b96be4 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -62,7 +62,7 @@ static void room_308_init() {
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
-	_scene->loadAnimation(kernel_name('a', -1), 60);
+	kernel_run_animation(kernel_name('a', -1), 60);
 
 	section_3_music();
 	kernel.quotes = quote_load(0xF4, 0xF5, 0xF6, 0);
@@ -72,7 +72,7 @@ static void room_308_daemon() {
 	handle_forcefield(&local._forcefield, &g_sprite_ids[0]);
 
 	if (kernel.trigger == 60)
-		_scene->_nextSceneId = 307;
+		new_room = 307;
 
 	if (kernel.trigger < 70)
 		return;
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index 820698071f7..23c4603738d 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -71,7 +71,7 @@ static void room_309_init() {
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
-	_scene->loadAnimation(kernel_name('a', -1), 60);
+	kernel_run_animation(kernel_name('a', -1), 60);
 
 	local._characterSpriteIndexes[0] = _scene->_animation[0]->_spriteListIndexes[2];
 	local._characterSpriteIndexes[1] = _scene->_animation[0]->_spriteListIndexes[2];
@@ -230,7 +230,7 @@ static void room_309_daemon() {
 	}
 
 	if (kernel.trigger == 60)
-		_scene->_nextSceneId = 308;
+		new_room = 308;
 }
 
 void room_309_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room310.cpp b/engines/mads/nebular/rooms/room310.cpp
index 68c2de042d4..1893f5dbfe0 100644
--- a/engines/mads/nebular/rooms/room310.cpp
+++ b/engines/mads/nebular/rooms/room310.cpp
@@ -53,7 +53,7 @@ static void room_310_init() {
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
-	_scene->loadAnimation(kernel_name('a', -1), 70);
+	kernel_run_animation(kernel_name('a', -1), 70);
 
 	section_3_music();
 }
@@ -62,7 +62,7 @@ static void room_310_daemon() {
 	handle_forcefield(&local._forcefield, &g_sprite_ids[0]);
 
 	if (kernel.trigger == 70)
-		_scene->_nextSceneId = 309;
+		new_room = 309;
 }
 
 void room_310_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index 67f39910fb1..b79a43ab96e 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -50,7 +50,7 @@ static void room_311_init() {
 	local._checkGuardFl = false;
 	kernel.quotes = quote_load(0xFA, 0);
 
-	if (_scene->_priorSceneId == 391) {
+	if (previous_room == 391) {
 		global[kSexOfRex] = REX_MALE;
 		player.commands_allowed = false;
 		player.walker_visible = false;
@@ -58,18 +58,18 @@ static void room_311_init() {
 		player.x = 166;
 		player.y = 101;
 		_scene->_sequences.addTimer(120, 71);
-	} else if (_scene->_priorSceneId == 310) {
+	} else if (previous_room == 310) {
 		player.x = 302;
 		player.y = 145;
 	}
-	else if (_scene->_priorSceneId == 320) {
+	else if (previous_room == 320) {
 		player.x = 129;
 		player.y = 113;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->loadAnimation(kernel_name('a', -1), 70);
+		kernel_run_animation(kernel_name('a', -1), 70);
 	}
 
 	section_3_music();
@@ -80,7 +80,7 @@ static void room_311_daemon() {
 
 	switch (kernel.trigger) {
 	case 70:
-		_scene->_nextSceneId = 310;
+		new_room = 310;
 		break;
 
 	case 71:
@@ -199,7 +199,7 @@ static void room_311_parser() {
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.addQuote(250, 0, 240);
 	} else if (player_said_2(sit_at, desk))
-		_scene->_nextSceneId = 320;
+		new_room = 320;
 	else if (player_said_2(climb_into, air_vent)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -290,7 +290,7 @@ static void room_311_parser() {
 			break;
 
 		case 7:
-			_scene->_nextSceneId = 313;
+			new_room = 313;
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index d333b8f8eb8..0a33f35a20d 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -36,27 +36,27 @@ namespace Rooms {
 static void room_313_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
 
-	if ((_scene->_priorSceneId == 366) || (_scene->_priorSceneId == 316)) {
+	if ((previous_room == 366) || (previous_room == 316)) {
 		player.x = 30;
 		player.y = 80;
 		player.facing = FACING_NORTH;
-	} else if ((_scene->_priorSceneId == 311) || (_scene->_priorSceneId == 361) || (_scene->_priorSceneId == 391)) {
+	} else if ((previous_room == 311) || (previous_room == 361) || (previous_room == 391)) {
 		player.x = 90;
 		player.y = 70;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId == 390) {
+	} else if (previous_room == 390) {
 		player.x = 126;
 		player.y = 70;
 		player.facing = FACING_EAST;
-	} else if ((_scene->_priorSceneId == 389) || (_scene->_priorSceneId == 399)) {
+	} else if ((previous_room == 389) || (previous_room == 399)) {
 		player.x = 163;
 		player.y = 70;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId == 388) {
+	} else if (previous_room == 388) {
 		player.x = 199;
 		player.y = 70;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 234;
 		player.y = 70;
 		player.facing = FACING_WEST;
@@ -76,28 +76,28 @@ static void room_313_init() {
 
 static void room_313_parser() {
 	if (player_said_2(crawl_to, fourth_cell))
-		_scene->_nextSceneId = 387;
+		new_room = 387;
 	else if (player_said_2(crawl_to, third_cell))
-		_scene->_nextSceneId = 388;
+		new_room = 388;
 	else if (player_said_2(crawl_to, second_cell)) {
 		if (global[kAfterHavoc])
-			_scene->_nextSceneId = 399;
+			new_room = 399;
 		else
-			_scene->_nextSceneId = 389;
+			new_room = 389;
 	} else if (player_said_2(crawl_to, first_cell))
-		_scene->_nextSceneId = 390;
+		new_room = 390;
 	else if (player_said_2(crawl_to, security_station)) {
 		if (global[kSexOfRex] == REX_FEMALE) {
 			global[kSexOfRex] = REX_MALE;
 			text_show(31301);
 		}
-		_scene->_nextSceneId = 391;
+		new_room = 391;
 	} else if (player_said_2(crawl_to, equipment_room)) {
 		if (global[kSexOfRex] == REX_FEMALE) {
 			global[kSexOfRex] = REX_MALE;
 			text_show(31301);
 		}
-		_scene->_nextSceneId = 366;
+		new_room = 366;
 	} else if (!player_said_2(crawl_down, air_shaft))
 		return;
 
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 5a072eb6e73..5c7906994fe 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -145,7 +145,7 @@ static void handleRexInGrate() {
 		break;
 
 	case 10:
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 		break;
 
 	default:
@@ -260,7 +260,7 @@ static void handleRoxInGrate() {
 		break;
 
 	case 10:
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 		break;
 
 	default:
@@ -282,14 +282,14 @@ static void room_316_init() {
 	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 	_scene->_sequences.setDepth(g_sequence_ids[3], 12);
 
-	if (_scene->_priorSceneId == 366) {
+	if (previous_room == 366) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		player.x = 78;
 		player.y = 87;
 		player.facing = FACING_SOUTH;
 		_scene->_sequences.addTimer(48, 70);
-	} else if (_scene->_priorSceneId == 321) {
+	} else if (previous_room == 321) {
 		player.x = 153;
 		player.y = 102;
 		player.facing = FACING_SOUTH;
@@ -300,7 +300,7 @@ static void room_316_init() {
 		g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[spriteIdx], false, 6, 1, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 2);
 		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 291;
 		player.y = 126;
 	}
@@ -449,7 +449,7 @@ static void room_316_parser() {
 			break;
 
 		case 4:
-			_scene->_nextSceneId = 321;
+			new_room = 321;
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index a9c1f29a8a4..569f017aafb 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -57,7 +57,7 @@ static void handleRexDialogs(int quote) {
 	_scene->_kernelMessages.reset();
 
 	const char *curQuote = quote_string(kernel.quotes, quote);
-	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
+	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		quote_split_string(curQuote, subQuote1, subQuote2);
 
@@ -212,7 +212,7 @@ static void room_318_init() {
 	g_sprite_ids[3] = kernel_load_series(kernel_name('k', -1), 0);
 
 	if (global[kAfterHavoc]) {
-		_scene->loadAnimation(kernel_name('f', -1));
+		kernel_run_animation(kernel_name('f', -1), 0);
 		_scene->_animation[0]->_repeatFlag = true;
 	} else if (!global[kHasSeenProfPyro]) {
 		_scene->_hotspots.activate(words_professors_gurney, false);
@@ -226,11 +226,11 @@ static void room_318_init() {
 		_scene->_dynamicHotspots.add(words_scalpel, words_take, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 	}
 
-	if (_scene->_priorSceneId == 357) {
+	if (previous_room == 357) {
 		player.x = 15;
 		player.y = 110;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 214;
 		player.y = 152;
 	}
@@ -243,17 +243,17 @@ static void room_318_init() {
 			local._dialog1.write(0x19D, true);
 	}
 
-	if (_scene->_priorSceneId == 307) {
+	if (previous_room == 307) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->loadAnimation(kernel_name('a', -1), 60);
+		kernel_run_animation(kernel_name('a', -1), 60);
 		local._animMode = 1;
 	}
 
 	local._lastFrame = 0;
 	_scene->_hotspots.activate(words_intern, false);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		local._dialogFl = false;
 		local._internWalkingFl = false;
 		local._counter = 0;
@@ -270,8 +270,8 @@ static void room_318_init() {
 		0x1C8, 0x1C9, 0x1CA, 0x1CB, 0x1CC, 0x1CD, 0x1CE, 0x1CF, 0x1D0, 0x1D1, 0x1D2, 0x1D3,
 		0x190, 0x19D, 0);
 
-	if ((_scene->_priorSceneId == RETURNING_FROM_DIALOG) || (((_scene->_priorSceneId == 318) ||
-		(_scene->_priorSceneId == RETURNING_FROM_LOADING)) && (!global[kAfterHavoc]))) {
+	if ((previous_room == RETURNING_FROM_DIALOG) || (((previous_room == 318) ||
+		(previous_room == RETURNING_FROM_LOADING)) && (!global[kAfterHavoc]))) {
 		if (!global[kAfterHavoc]) {
 			player.walker_visible = false;
 			g_sprite_ids[2] = kernel_load_series(kernel_name('g', -1), 0);
@@ -281,7 +281,7 @@ static void room_318_init() {
 				local._internVisibleFl = false;
 				local._dialogFl = false;
 			} else {
-				_scene->loadAnimation(kernel_name('b', -1), 61);
+				kernel_run_animation(kernel_name('b', -1), 61);
 				_scene->_hotspots.activate(words_intern, true);
 			}
 
@@ -296,15 +296,15 @@ static void room_318_init() {
 		}
 	}
 
-	if (_scene->_priorSceneId == 319) {
+	if (previous_room == 319) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		local._animMode = 4;
 		if (!global[kHasSeenProfPyro]) {
-			_scene->loadAnimation(kernel_name('d', -1), 64);
+			kernel_run_animation(kernel_name('d', -1), 64);
 			global[kHasSeenProfPyro] = true;
 		} else {
-			_scene->loadAnimation(kernel_name('e', -1), 64);
+			kernel_run_animation(kernel_name('e', -1), 64);
 		}
 	}
 
@@ -312,7 +312,7 @@ static void room_318_init() {
 	pal_change_color(252, 63, 63, 10);
 	pal_change_color(253, 45, 45, 05);
 
-	local._dropTimer = _scene._frameStartTime;
+	local._dropTimer = kernel.clock;
 	section_3_music();
 
 	if (local._dialogFl)
@@ -388,7 +388,7 @@ static void room_318_daemon() {
 	case 60:
 		g_engine->_soundManager->command(3, 0);
 		local._animMode = 2;
-		_scene->_reloadSceneFlag = true;
+		kernel.force_restart = true;
 		break;
 
 	case 61:
@@ -396,7 +396,7 @@ static void room_318_daemon() {
 		break;
 
 	case 62:
-		_scene->_nextSceneId = 319;
+		new_room = 319;
 		break;
 
 	case 63:
@@ -405,7 +405,7 @@ static void room_318_daemon() {
 
 	case 64:
 		g_engine->_soundManager->command(3, 0);
-		_scene->_nextSceneId = 307;
+		new_room = 307;
 		break;
 
 	default:
@@ -425,9 +425,9 @@ static void room_318_daemon() {
 		int extraCounter = player_has(OBJ_SCALPEL) ? 900 : 0;
 
 		if (local._counter + extraCounter >= 1800) {
-			_scene->freeAnimation();
+			kernel_abort_animation(0);
 			player.commands_allowed = false;
-			_scene->loadAnimation(kernel_name('c', -1), 62);
+			kernel_run_animation(kernel_name('c', -1), 62);
 			local._animMode = 3;
 		}
 	} else if ((local._animMode == 2) && local._explosionFl && local._internVisibleFl && !local._dialogFl
@@ -444,11 +444,11 @@ static void room_318_daemon() {
 		}
 	}
 
-	if ((_scene._frameStartTime - local._dropTimer) > 600) {
+	if ((kernel.clock - local._dropTimer) > 600) {
 		g_engine->_soundManager->command(51, 0);
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 1, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 10);
-		local._dropTimer = _scene._frameStartTime;
+		local._dropTimer = kernel.clock;
 	}
 }
 
@@ -555,7 +555,7 @@ static void room_318_parser() {
 
 	if (player.walker_visible) {
 		if (player_said_2(walk_down, corridor_to_south)) {
-			_scene->_nextSceneId = 407;
+			new_room = 407;
 			player.command_ready = false;
 			return;
 		}
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index e0fdb1a7076..774613ef7b8 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -59,7 +59,7 @@ static void handleRexDialogues(int quote) {
 	_scene->_kernelMessages.reset();
 
 	const char *curQuote = quote_string(kernel.quotes, quote);
-	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
+	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		quote_split_string(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
@@ -106,7 +106,7 @@ static void room_319_init() {
 	local._dialog2.setup(0x44, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0);
 	local._dialog3.setup(0x45, 0x17D, 0x17E, 0x17F, 0x180, 0x181, 0x182, 0x183, 0);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		local._dialog1.set(0x165, 0x166, 0x167, 0x168, 0);
 		local._dialog2.set(0x171, 0x172, 0x173, 0x174, 0);
 		local._dialog3.set(0x17D, 0x17E, 0x17F, 0x180, 0);
@@ -127,9 +127,9 @@ static void room_319_init() {
 	local._slacheReady = false;
 	local._animFrame = 0;
 
-	_scene->loadAnimation(kernel_name('b', 0));
+	kernel_run_animation(kernel_name('b', 0), 0);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		local._animMode = 1;
 		local._nextAction1 = 2;
 		local._nextAction2 = 2;
@@ -236,23 +236,23 @@ static void room_319_daemon() {
 				switch (local._nextAction1) {
 				case 4:
 					local._animFrame = 0;
-					_scene->freeAnimation();
+					kernel_abort_animation(0);
 					local._animMode = 2;
-					_scene->loadAnimation(kernel_name('b', 3), 70);
+					kernel_run_animation(kernel_name('b', 3), 70);
 					break;
 
 				case 5:
 					local._animFrame = 0;
-					_scene->freeAnimation();
+					kernel_abort_animation(0);
 					local._animMode = 3;
-					_scene->loadAnimation(kernel_name('b', 4), 71);
+					kernel_run_animation(kernel_name('b', 4), 71);
 					break;
 
 				case 6:
 					local._animFrame = 0;
-					_scene->freeAnimation();
+					kernel_abort_animation(0);
 					local._animMode = 4;
-					_scene->loadAnimation(kernel_name('b', 5), 72);
+					kernel_run_animation(kernel_name('b', 5), 72);
 					break;
 
 				default:
@@ -304,8 +304,8 @@ static void room_319_daemon() {
 		local._animMode = 1;
 		local._nextAction1 = local._nextAction2;
 		local._animFrame = 0;
-		_scene->freeAnimation();
-		_scene->loadAnimation(kernel_name('b', 0));
+		kernel_abort_animation(0);
+		kernel_run_animation(kernel_name('b', 0), 0);
 		if (local._nextAction1 == 3)
 			_scene->_animation[0]->setCurrentFrame(85);
 		else if (local._nextAction1 == 1)
@@ -338,7 +338,7 @@ static void room_319_daemon() {
 		magic_fade_to_grey(master_palette, nullptr, 18, 228,
 			248, 0, 1, 16);
 		mcga_shakes = 1;
-		_scene->_reloadSceneFlag = true;
+		kernel.force_restart = true;
 		break;
 
 	case 73:
@@ -423,7 +423,7 @@ static void room_319_parser() {
 					_scene->_sequences.addTimer(120, 3);
 				} else {
 					global[kRexHasMetSlache] = true;
-					_scene->_nextSceneId = 318;
+					new_room = 318;
 				}
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index 57d7f643e97..c229ebf2a0b 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -232,7 +232,7 @@ static void room_320_daemon() {
 	if (kernel.trigger == 70) {
 		global[kAfterHavoc] = true;
 		global[kTeleporterRoom + 1] = 351;
-		_scene->_nextSceneId = 361;
+		new_room = 361;
 	}
 }
 
@@ -290,7 +290,7 @@ static void room_320_parser() {
 					setRightView(8);
 					setLeftView(10);
 					_scene->_kernelMessages.reset();
-					_scene->resetScene();
+					kernel_dump_all();
 					g_sprite_ids[2] = kernel_load_series(kernel_name('m', 2), 0);
 					g_sprite_ids[4] = kernel_load_series(kernel_name('m', 4), 0);
 					g_sprite_ids[9] = kernel_load_series(kernel_name('m', 9), 0);
@@ -298,7 +298,7 @@ static void room_320_parser() {
 					setLeftView(2);
 					kernel.quotes = quote_load(0xFE, 0);
 					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-					_scene->loadAnimation(kernel_name('a', -1), 70);
+					kernel_run_animation(kernel_name('a', -1), 70);
 					g_engine->_soundManager->command(17, 0);
 				}
 			}
@@ -308,7 +308,7 @@ static void room_320_parser() {
 			break;
 		}
 	} else if (player_said_2(leave, security_station))
-		_scene->_nextSceneId = 311;
+		new_room = 311;
 	else if (player_said_2(look, right_monitor))
 		text_show(32001);
 	else if (player_said_2(look, left_monitor))
diff --git a/engines/mads/nebular/rooms/room321.cpp b/engines/mads/nebular/rooms/room321.cpp
index 48c81d26f92..7dc9e5335f1 100644
--- a/engines/mads/nebular/rooms/room321.cpp
+++ b/engines/mads/nebular/rooms/room321.cpp
@@ -47,18 +47,18 @@ static void room_321_init() {
 		suffixNum = player.been_here_before ? 2 : 0;
 	}
 
-	_scene->loadAnimation(kernel_name('g', suffixNum), 60);
+	kernel_run_animation(kernel_name('g', suffixNum), 60);
 	section_3_music();
 }
 
 static void room_321_daemon() {
 	if (_scene->_animation[0] != nullptr) {
 		if ((_scene->_animation[0]->getCurrentFrame() >= 260) && (global[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= STORYMODE_NICE))
-			_scene->_nextSceneId = 316;
+			new_room = 316;
 	}
 
 	if (kernel.trigger == 60)
-		_scene->_nextSceneId = 316;
+		new_room = 316;
 }
 
 void room_321_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index 73b7f9d83ae..2d60a1c9953 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -45,11 +45,11 @@ static void room_351_init() {
 	} else
 		_scene->_hotspots.activate(words_credit_chip, false);
 
-	if (_scene->_priorSceneId == 352) {
+	if (previous_room == 352) {
 		player.x = 148;
 		player.y = 152;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 207;
 		player.y = 81;
 		player.facing = FACING_NORTH;
@@ -93,7 +93,7 @@ static void room_351_init() {
 		global[kTeleporterCommand] = 0;
 
 		if (suffixNum >= 0)
-			_scene->loadAnimation(kernel_name(sepChar, suffixNum), trigger);
+			kernel_run_animation(kernel_name(sepChar, suffixNum), trigger);
 	}
 
 	section_3_music();
@@ -103,14 +103,14 @@ static void room_351_daemon() {
 	if (kernel.trigger == 60) {
 		player.commands_allowed = true;
 		player.walker_visible = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.turn_to_facing = FACING_SOUTH;
 	}
 
 	if (kernel.trigger == 61) {
 		global[kTeleporterCommand] = 1;
-		_scene->_nextSceneId = global[kTeleporterDestination];
-		_scene->_reloadSceneFlag = true;
+		new_room = global[kTeleporterDestination];
+		kernel.force_restart = true;
 	}
 }
 
@@ -118,9 +118,9 @@ static void room_351_parser() {
 	if (player.look_around)
 		text_show(35121);
 	else if (player_said_2(step_into, teleporter))
-		_scene->_nextSceneId = 322;
+		new_room = 322;
 	else if (player_said_2(walk_down, corridor_to_south))
-		_scene->_nextSceneId = 352;
+		new_room = 352;
 	else if (player_said_2(take, credit_chip)) {
 		if (kernel.trigger || !player_has(OBJ_CREDIT_CHIP)) {
 			switch (kernel.trigger) {
@@ -196,12 +196,12 @@ void room_351_preload() {
 	room_parser_code_pointer = room_351_parser;
 	room_daemon_code_pointer = room_351_daemon;
 
-	if (_scene->_currentSceneId == 391)
+	if (room_id == 391)
 		global[kSexOfRex] = REX_MALE;
 
 	section_3_walker();
 	section_3_interface();
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index c495ffb3c89..adf31584e3e 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -74,14 +74,14 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
-		_scene->changeVariant(0);
+		kernel_load_variant(0);
 	}
 	break;
 
 	case 3:
 		_scene->_kernelMessages.reset();
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x100));
-		inter_move_object(OBJ_GUARDS_ARM, _scene->_currentSceneId);
+		inter_move_object(OBJ_GUARDS_ARM, room_id);
 		player.walker_visible = true;
 		if (corridorExit)
 			_scene->_sequences.addTimer(48, 6);
@@ -102,7 +102,7 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 
 	case 5:
 		if (local._leaveRoomFl)
-			_scene->_nextSceneId = 351;
+			new_room = 351;
 
 		break;
 
@@ -116,7 +116,7 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 
 	case 7:
 		if (local._leaveRoomFl)
-			_scene->_nextSceneId = 353;
+			new_room = 353;
 
 		break;
 
@@ -158,7 +158,7 @@ static void room_352_init() {
 
 	local._vaultOpenFl = false;
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		local._mustPutArmDownFl = false;
 		if (!player.been_here_before)
 			global[kHaveYourStuff] = false;
@@ -171,11 +171,11 @@ static void room_352_init() {
 	} else
 		local._mustPutArmDownFl = true;
 
-	if (_scene->_priorSceneId == 353) {
+	if (previous_room == 353) {
 		player.x = 171;
 		player.y = 155;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 116;
 		player.y = 107;
 	}
@@ -321,9 +321,9 @@ static void room_352_parser() {
 		if (local._mustPutArmDownFl)
 			putArmDown(exit_corridor, exit_doorway);
 		else if (exit_corridor)
-			_scene->_nextSceneId = 353;
+			new_room = 353;
 		else
-			_scene->_nextSceneId = 351;
+			new_room = 351;
 
 		player.command_ready = false;
 		return;
@@ -351,7 +351,7 @@ static void room_352_parser() {
 			case 1:
 				_scene->_sequences.remove(g_sequence_ids[2]);
 				inter_give_to_player(OBJ_GUARDS_ARM);
-				_scene->changeVariant(1);
+				kernel_load_variant(1);
 				break;
 
 			case 2:
@@ -611,10 +611,10 @@ void room_352_preload() {
 
 	section_3_walker();
 	section_3_interface();
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_your_stuff);
-	_scene->addActiveVocab(words_other_stuff);
-	_scene->addActiveVocab(words_lamp);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_your_stuff);
+	vocab_make_active(words_other_stuff);
+	vocab_make_active(words_lamp);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index a4ab3cba959..2276932afe1 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -43,7 +43,7 @@ static void room_353_init() {
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 5, 0);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 
-	if (_scene->_priorSceneId == 352) {
+	if (previous_room == 352) {
 		player.x = 144;
 		player.y = 95;
 	}
@@ -59,9 +59,9 @@ static void room_353_parser() {
 	if (player.look_around)
 		text_show(35315);
 	else if (player_said_2(walk_through, doorway))
-		_scene->_nextSceneId = 352;
+		new_room = 352;
 	else if (player_said_2(walk_down, corridor_to_south))
-		_scene->_nextSceneId = 354;
+		new_room = 354;
 	else if (player_said_2(look, rock_chunk))
 		text_show(35310);
 	else if (player_said_2(look, pipes) || player_said_2(look, pipe))
diff --git a/engines/mads/nebular/rooms/room354.cpp b/engines/mads/nebular/rooms/room354.cpp
index e5542839e2b..30ecc4d295e 100644
--- a/engines/mads/nebular/rooms/room354.cpp
+++ b/engines/mads/nebular/rooms/room354.cpp
@@ -41,19 +41,19 @@ static void room_354_init() {
 	global[kAfterHavoc] = true;
 	global[kTeleporterRoom + 1] = 351;
 
-	if (_scene->_priorSceneId == 361) {
+	if (previous_room == 361) {
 		player.x = 231;
 		player.y = 110;
 	}
-	else if (_scene->_priorSceneId == 401) {
+	else if (previous_room == 401) {
 		player.x = 106;
 		player.y = 152;
 		player.facing = FACING_NORTH;
-	} else if (_scene->_priorSceneId == 316) {
+	} else if (previous_room == 316) {
 		player.x = 71;
 		player.y = 107;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 167;
 		player.y = 57;
 	}
@@ -73,11 +73,11 @@ static void room_354_parser() {
 		player_start_walking(208, 0, FACING_NORTHEAST);
 		player.walk_off_edge_to_room = 353;
 	} else if (player_said_2(walk_down, corridor_to_east))
-		_scene->_nextSceneId = 361;
+		new_room = 361;
 	else if (player_said_2(walk_down, corridor_to_west))
-		_scene->_nextSceneId = 316;
+		new_room = 316;
 	else if (player_said_2(walk_down, corridor_to_south))
-		_scene->_nextSceneId = 401;
+		new_room = 401;
 	else if (player_said_2(look, controls))
 		text_show(35410);
 	else if (player_said_2(look, signal))
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index 4d62762da6a..24018328c06 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -38,15 +38,15 @@ static void room_357_init() {
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
-	if (_scene->_priorSceneId == 318) {
+	if (previous_room == 318) {
 		player.x = 298;
 		player.y = 142;
 	}
-	else if (_scene->_priorSceneId == 313) {
+	else if (previous_room == 313) {
 		player.x = 127;
 		player.y = 101;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 15;
 		player.y = 148;
 	}
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index 5be07b40972..c5b72426a0c 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -37,11 +37,11 @@ static void room_358_init() {
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
-	if (_scene->_priorSceneId == 357) {
+	if (previous_room == 357) {
 		player.x = 305;
 		player.y = 142;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 12;
 		player.y = 141;
 	}
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index 208c2892b57..887c432468b 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -57,11 +57,11 @@ static void room_359_init() {
 		_scene->_dynamicHotspots.setPosition(local._cardHotspotId, Common::Point(107, 107), FACING_SOUTH);
 	}
 
-	if (_scene->_priorSceneId == 358) {
+	if (previous_room == 358) {
 		player.x = 301;
 		player.y = 141;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 15;
 		player.y = 148;
 	}
@@ -110,7 +110,7 @@ static void room_359_parser() {
 				g_engine->_soundManager->command(57, 0);
 				inter_give_to_player(OBJ_SECURITY_CARD);
 				object_examine(OBJ_SECURITY_CARD, 0x330, 0);
-				_scene->changeVariant(1);
+				kernel_load_variant(1);
 				break;
 
 			case 2:
@@ -182,7 +182,7 @@ void room_359_preload() {
 
 	section_3_walker();
 	section_3_interface();
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index 7716fec704c..f8891a11191 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -37,11 +37,11 @@ static void room_360_init() {
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
-	if (_scene->_priorSceneId == 359) {
+	if (previous_room == 359) {
 		player.x = 304;
 		player.y = 143;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 13;
 		player.y = 141;
 	}
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 246f3286f6f..24613f1804f 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -121,7 +121,7 @@ static void handleRexAction() {
 		break;
 
 	case 7:
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 		break;
 
 	default:
@@ -224,7 +224,7 @@ static void handleRoxAction() {
 		break;
 
 	case 7:
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 		break;
 
 	default:
@@ -245,7 +245,7 @@ static void room_361_init() {
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
 
-	if (_scene->_priorSceneId == 391) {
+	if (previous_room == 391) {
 		global[kSexOfRex] = REX_MALE;
 		player.commands_allowed = false;
 		player.walker_visible = false;
@@ -253,22 +253,22 @@ static void room_361_init() {
 		player.x = 166;
 		player.y = 101;
 		_scene->_sequences.addTimer(120, 70);
-	} else if (_scene->_priorSceneId == 360) {
+	} else if (previous_room == 360) {
 		player.x = 302;
 		player.y = 145;
 	}
-	else if (_scene->_priorSceneId == 320) {
+	else if (previous_room == 320) {
 		player.x = 129;
 		player.y = 113;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 13;
 		player.y = 145;
 	}
 
 	kernel.quotes = quote_load(0xFB, 0xFC, 0);
 
-	if (_scene->_priorSceneId == 320)
+	if (previous_room == 320)
 		_scene->_kernelMessages.setQuoted(_scene->_kernelMessages.addQuote(0xFB, 0, 0x78), 4, true);
 
 	section_3_music();
@@ -431,7 +431,7 @@ void room_361_preload() {
 	room_parser_code_pointer = room_361_parser;
 	room_daemon_code_pointer = room_361_daemon;
 
-	if (_scene->_currentSceneId == 391)
+	if (room_id == 391)
 		global[kSexOfRex] = REX_MALE;
 
 	section_3_walker();
diff --git a/engines/mads/nebular/rooms/room366.cpp b/engines/mads/nebular/rooms/room366.cpp
index 4408980accf..33793d2f19a 100644
--- a/engines/mads/nebular/rooms/room366.cpp
+++ b/engines/mads/nebular/rooms/room366.cpp
@@ -39,13 +39,13 @@ static void room_366_init() {
 
 static void room_366_parser() {
 	if (player_said_2(return_to, air_shaft))
-		_scene->_nextSceneId = 302;
+		new_room = 302;
 	else if (player_said_2(open, grate)) {
 		if (player_has_been_in_room(316))
 			text_show(36612);
 		else
 			text_show(36613);
-		_scene->_nextSceneId = 316;
+		new_room = 316;
 	} else if (player_said_2(look_through, grate)) {
 		if (player_has_been_in_room(321))
 			text_show(36611);
diff --git a/engines/mads/nebular/rooms/room387.cpp b/engines/mads/nebular/rooms/room387.cpp
index d2e208a2fbb..44c3fe0d449 100644
--- a/engines/mads/nebular/rooms/room387.cpp
+++ b/engines/mads/nebular/rooms/room387.cpp
@@ -40,7 +40,7 @@ static void room_387_init() {
 
 static void room_387_parser() {
 	if (player_said_2(return_to, air_shaft))
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 	else if (player_said_2(look_through, grate))
 		text_show(38710);
 	else if (player_said_2(open, grate))
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 375881c218a..e1fd078f307 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -52,7 +52,7 @@ static void room_388_init() {
 
 static void room_388_parser() {
 	if (player_said_2(return_to, air_shaft))
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 	else if (player_said_2(talkto, sauropod)) {
 		switch (kernel.trigger) {
 		case 0:
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index 8e5fe3d7165..7779adeccac 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -66,16 +66,16 @@ static void room_389_init() {
 
 static void room_389_daemon() {
 	_scene->_kernelMessages.randomServer();
-	if (_scene->_frameStartTime >= local._monsterTime) {
+	if (kernel.clock >= local._monsterTime) {
 		int chanceMinor = _scene->_kernelMessages.checkRandom() * 4 + 1;
 		_scene->_kernelMessages.generateRandom(20, chanceMinor);
-		local._monsterTime = _scene->_frameStartTime + 2;
+		local._monsterTime = kernel.clock + 2;
 	}
 }
 
 static void room_389_parser() {
 	if (player_said_2(return_to, air_shaft))
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 	else if (player_said_2(talkto, monster)) {
 		switch (kernel.trigger) {
 		case 0:
diff --git a/engines/mads/nebular/rooms/room390.cpp b/engines/mads/nebular/rooms/room390.cpp
index 81e78a40a59..11e5af3b1f2 100644
--- a/engines/mads/nebular/rooms/room390.cpp
+++ b/engines/mads/nebular/rooms/room390.cpp
@@ -40,7 +40,7 @@ static void room_390_init() {
 
 static void room_390_parser() {
 	if (player_said_2(return_to, air_shaft))
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 	else if (player_said_2(look_through, grate))
 		text_show(39010);
 	else if (player_said_2(open, grate))
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index d2658f096ef..43420ad6bc4 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -39,7 +39,7 @@ static void room_391_init() {
 
 static void room_391_parser() {
 	if (player_said_2(return_to, air_shaft))
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 	else if (player_said_2(open, grate)) {
 		if (global[kKickedIn391Grate])
 			text_show(39113);
@@ -49,9 +49,9 @@ static void room_391_parser() {
 		}
 
 		if (global[kAfterHavoc])
-			_scene->_nextSceneId = 361;
+			new_room = 361;
 		else
-			_scene->_nextSceneId = 311;
+			new_room = 311;
 	} else if (player_said_2(look_through, grate)) {
 		if (global[kAfterHavoc])
 			text_show(39111);
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index 0d8e140d9d5..921c70f99d7 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -39,7 +39,7 @@ static void room_399_init() {
 
 static void room_399_parser() {
 	if (player_said_2(return_to, air_shaft))
-		_scene->_nextSceneId = 313;
+		new_room = 313;
 	else if (player_said_2(look_through, grate)) {
 		if (global[kAfterHavoc]) {
 			if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index 59ccf0da92c..9b9fc537480 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -43,21 +43,21 @@ static Scratch local;
 
 
 static void room_401_init() {
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
+	if (previous_room != RETURNING_FROM_DIALOG)
 		local._northFl = false;
 
 	local._timer = 0;
 
-	if (_scene->_priorSceneId == 402) {
+	if (previous_room == 402) {
 		player.x = 203;
 		player.y = 115;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId == 354) {
+	} else if (previous_room == 354) {
 		player.x = 149;
 		player.y = 90;
 		player.facing = FACING_SOUTH;
 		local._northFl = true;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 142;
 		player.y = 131;
 		player.facing = FACING_NORTH;
@@ -69,19 +69,19 @@ static void room_401_init() {
 
 static void room_401_daemon() {
 	if (kernel.trigger == 70) {
-		_scene->_nextSceneId = 354;
-		_scene->_reloadSceneFlag = true;
+		new_room = 354;
+		kernel.force_restart = true;
 	}
 
 	if (kernel.trigger == 80) {
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		local._northFl = false;
 		player_walk(149, 110, FACING_SOUTH);
 	}
 
-	if (_scene->_frameStartTime >= local._timer) {
+	if (kernel.clock >= local._timer) {
 		int dist = 64 - ((Math::hypotenuse(player.x - 219, player.y - 115) * 64) / 120);
 
 		if (dist > 64)
@@ -90,7 +90,7 @@ static void room_401_daemon() {
 			dist = 1;
 
 		g_engine->_soundManager->command(12, dist);
-		local._timer = _scene->_frameStartTime + player.frame_delay;
+		local._timer = kernel.clock + player.frame_delay;
 	}
 
 }
@@ -127,7 +127,7 @@ static void room_401_parser() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
-			_scene->loadAnimation(kernel_name('s', 1), 70);
+			kernel_run_animation(kernel_name('s', 1), 70);
 			global[kHasBeenScanned] = true;
 			g_engine->_soundManager->command(22, 0);
 			int idx = _scene->_kernelMessages.add(Common::Point(153, 46), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 0x1D4));
@@ -139,7 +139,7 @@ static void room_401_parser() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
-			_scene->loadAnimation(kernel_name('s', 2), 80);
+			kernel_run_animation(kernel_name('s', 2), 80);
 			g_engine->_soundManager->command(23, 0);
 			global[kHasBeenScanned] = true;
 		}
@@ -147,9 +147,9 @@ static void room_401_parser() {
 
 	if (player_said_2(walk_into, bar)) {
 		if (!local._northFl)
-			_scene->_nextSceneId = 402;
+			new_room = 402;
 	} else if (player_said_2(walk_down, corridor_to_north))
-		_scene->_nextSceneId = 354;
+		new_room = 354;
 	else if (player_said_2(look, scanner)) {
 		if (global[kHasBeenScanned])
 			text_show(40111);
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 2d803157e30..57dd378e9e8 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -402,7 +402,7 @@ static void handleDialogs() {
 		_scene->_kernelMessages.reset();
 		player.commands_allowed = false;
 		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
-		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing) > 200) {
+		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
 			static char subQuote1[34], subQuote2[34];
 			quote_split_string(curQuote, subQuote1, subQuote2);
 			_scene->_kernelMessages.add(Common::Point(230, 42), 0x1110, 32, 0, 140, subQuote1);
@@ -462,14 +462,14 @@ static void room_402_init() {
 	g_sprite_ids[21] = kernel_load_series("*ROXRC_9", 0);
 	g_sprite_ids[22] = kernel_load_series("*ROXCL_8", 0);
 
-	if (_scene->_priorSceneId == 401) {
+	if (previous_room == 401) {
 		player.x = 160;
 		player.y = 150;
 		player.facing = FACING_NORTH;
 		local._roxOnStool = false;
 		local._bartenderDialogNode = 1;
 		local._conversationFl = false;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 160;
 		player.y = 150;
 		player.facing = FACING_NORTH;
@@ -627,7 +627,7 @@ static void room_402_init() {
 	local._rexMode = 0;
 	local._refuseAlienLiquor = false;
 
-	_scene->loadAnimation(kernel_full_name(402, 'd', 1, "", EXT_AA));
+	kernel_run_animation(kernel_full_name(402, 'd', 1, "", EXT_AA), 0);
 	_scene->_animation[0]->_repeatFlag = true;
 
 	g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
@@ -679,7 +679,7 @@ static void room_402_init() {
 
 static void room_402_daemon() {
 	if (kernel.trigger == 104) {
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		_scene->_sequences.remove(g_sequence_ids[15]);
 		inter_give_to_player(OBJ_CREDIT_CHIP);
@@ -1742,13 +1742,13 @@ static void room_402_daemon() {
 
 	if (kernel.trigger == 102) {
 		_scene->_sequences.remove(g_sequence_ids[6]);
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[7], 14, 18);
 		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
 		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 103);
 	} else if (kernel.trigger == 103) {
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		local._roxOnStool = false;
 		player.facing = FACING_SOUTH;
 		player_select_series();
@@ -1869,7 +1869,7 @@ static void room_402_parser() {
 			inter_give_to_player(OBJ_REPAIR_LIST);
 		}
 	} else if (kernel.trigger == 166) {
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		_scene->_sequences.addTimer(20, 167);
 	} else if (kernel.trigger == 167) {
@@ -1878,7 +1878,7 @@ static void room_402_parser() {
 	} else if (inter_input_mode == kInputConversation)
 		handleDialogs();
 	else if (player_said_2(walk_into, corridor_to_south))
-		_scene->_nextSceneId = 401;
+		new_room = 401;
 	else if (player_said_2(walk_onto, dance_floor))
 		; // just... nothing
 	else if (player_said_2(talkto, repair_woman)) {
@@ -2229,15 +2229,15 @@ void room_402_preload() {
 	section_4_walker();
 	section_4_interface();
 
-	_scene->addActiveVocab(words_bartender);
-	_scene->addActiveVocab(words_alien_liquor);
-	_scene->addActiveVocab(words_drink);
-	_scene->addActiveVocab(words_binoculars);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_credit_chip);
-	_scene->addActiveVocab(words_take);
-	_scene->addActiveVocab(words_repair_list);
-	_scene->addActiveVocab(words_look_at);
+	vocab_make_active(words_bartender);
+	vocab_make_active(words_alien_liquor);
+	vocab_make_active(words_drink);
+	vocab_make_active(words_binoculars);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_credit_chip);
+	vocab_make_active(words_take);
+	vocab_make_active(words_repair_list);
+	vocab_make_active(words_look_at);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index a5ef5d5b61b..c627c76d4cb 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -36,23 +36,23 @@ static void room_405_init() {
 	g_sprite_ids[2] = kernel_load_series(kernel_name('x', 1), 0);
 	g_sprite_ids[3] = kernel_load_series("*ROXCL_8", 0);
 
-	if (_scene->_priorSceneId == 401) {
+	if (previous_room == 401) {
 		player.x = 23;
 		player.y = 123;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId == 406) {
+	} else if (previous_room == 406) {
 		player.x = 300;
 		player.y = 128;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId == 408) {
+	} else if (previous_room == 408) {
 		player.x = 154;
 		player.y = 109;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId == 413) {
+	} else if (previous_room == 413) {
 		player.x = 284;
 		player.y = 109;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 23;
 		player.y = 123;
 		player.facing = FACING_EAST;
@@ -63,7 +63,7 @@ static void room_405_init() {
 	else
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		global[kArmoryDoorOpen] = false;
 		inter_give_to_player(OBJ_SECURITY_CARD);
 	}
@@ -75,7 +75,7 @@ static void room_405_init() {
 static void room_405_daemon() {
 	if (kernel.trigger == 80) {
 		_scene->_sequences.addTimer(20, 81);
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 	}
 
@@ -85,7 +85,7 @@ static void room_405_daemon() {
 	}
 
 	if (kernel.trigger == 70) {
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[1], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
@@ -100,7 +100,7 @@ static void room_405_daemon() {
 	}
 
 	if (kernel.trigger == 75) {
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		_scene->_sequences.remove(g_sequence_ids[1]);
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 1, 0, 0);
@@ -128,9 +128,9 @@ static void room_405_pre_parser() {
 
 static void room_405_parser() {
 	if (player_said_2(walk_through, door))
-		_scene->_nextSceneId = 413;
+		new_room = 413;
 	else if (player_said_2(walk_through, wide_door) && global[kArmoryDoorOpen])
-		_scene->_nextSceneId = 408;
+		new_room = 408;
 	else if (player_said_2(walk_through, wide_door) && !global[kArmoryDoorOpen])
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 0x24F));
 	else if (player_said_3(put, security_card, card_slot) && !global[kArmoryDoorOpen]) {
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index df237d734bf..e0035624858 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -40,23 +40,23 @@ static Scratch local;
 
 static void room_406_init() {
 	player.walker_visible = true;
-	if (_scene->_priorSceneId == 405) {
+	if (previous_room == 405) {
 		player.x = 15;
 		player.y = 129;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId == 407) {
+	} else if (previous_room == 407) {
 		player.x = 270;
 		player.y = 127;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId == 410) {
+	} else if (previous_room == 410) {
 		player.x = 30;
 		player.y = 108;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId == 411) {
+	} else if (previous_room == 411) {
 		player.x = 153;
 		player.y = 108;
 		player.facing = FACING_SOUTH;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 15;
 		player.y = 129;
 		player.facing = FACING_EAST;
@@ -66,7 +66,7 @@ static void room_406_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
 	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 1), 0);
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		global[kStorageDoorOpen] = false;
 		inter_give_to_player(OBJ_SECURITY_CARD);
 	}
@@ -74,7 +74,7 @@ static void room_406_init() {
 	if (!global[kStorageDoorOpen])
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 
-	if (_scene->_priorSceneId != 411)
+	if (previous_room != 411)
 		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 	else {
 		player.commands_allowed = false;
@@ -96,7 +96,7 @@ static void room_406_daemon() {
 	}
 
 	if (kernel.trigger == 80)
-		_scene->_nextSceneId = 411;
+		new_room = 411;
 
 	if (kernel.trigger == 100) {
 		text_show(40622);
@@ -105,7 +105,7 @@ static void room_406_daemon() {
 
 	if (kernel.trigger == 110) {
 		_scene->_sequences.addTimer(20, 111);
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 	}
 
@@ -115,7 +115,7 @@ static void room_406_daemon() {
 	}
 
 	if (kernel.trigger == 70) {
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
 		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
@@ -133,7 +133,7 @@ static void room_406_daemon() {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
 		global[kStorageDoorOpen] = true;
 		player.commands_allowed = true;
-		player.clock = _scene->_frameStartTime + player.frame_delay;
+		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		g_engine->_soundManager->command(19, 0);
 	}
@@ -162,7 +162,7 @@ static void room_406_parser() {
 		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
 		g_engine->_soundManager->command(19, 0);
 	} else if (player_said_2(walk_through, door) && global[kStorageDoorOpen] && (player.target_x < 100))
-		_scene->_nextSceneId = 410;
+		new_room = 410;
 	else if (player_said_2(walk_through, door) && !global[kStorageDoorOpen] && (player.target_x < 100)) {
 		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 0x24F));
 		if (!local._hitStorageDoor) {
diff --git a/engines/mads/nebular/rooms/room407.cpp b/engines/mads/nebular/rooms/room407.cpp
index 697676267be..d107580b69f 100644
--- a/engines/mads/nebular/rooms/room407.cpp
+++ b/engines/mads/nebular/rooms/room407.cpp
@@ -41,15 +41,15 @@ static Scratch local;
 
 
 static void room_407_init() {
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
+	if (previous_room != RETURNING_FROM_DIALOG)
 		local._fromNorth = false;
 
-	if (_scene->_priorSceneId == 318) {
+	if (previous_room == 318) {
 		player.x = 172;
 		player.y = 92;
 		player.facing = FACING_SOUTH;
 		local._fromNorth = true;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 172;
 		player.y = 132;
 		player.facing = FACING_NORTH;
@@ -61,12 +61,12 @@ static void room_407_init() {
 
 static void room_407_daemon() {
 	if (kernel.trigger == 70) {
-		_scene->_nextSceneId = 318;
-		_scene->_reloadSceneFlag = true;
+		new_room = 318;
+		kernel.force_restart = true;
 	}
 
 	if (kernel.trigger == 80) {
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		local._fromNorth = false;
@@ -105,7 +105,7 @@ static void room_407_parser() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
-			_scene->loadAnimation(kernel_name('s', 1), 70);
+			kernel_run_animation(kernel_name('s', 1), 70);
 			global[kHasBeenScanned] = true;
 			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 592));
 			g_engine->_soundManager->command(22, 0);
@@ -116,16 +116,16 @@ static void room_407_parser() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
-			_scene->loadAnimation(kernel_name('s', 2), 80);
+			kernel_run_animation(kernel_name('s', 2), 80);
 			g_engine->_soundManager->command(23, 0);
 			global[kHasBeenScanned] = true;
 		}
 	}
 
 	if (player_said_2(walk_down, corridor_to_south) && !local._fromNorth)
-		_scene->_nextSceneId = 406;
+		new_room = 406;
 	else if (player_said_2(walk_down, corridor_to_north))
-		_scene->_nextSceneId = 318;
+		new_room = 318;
 	else if (player_said_2(look, scanner)) {
 		if (global[kHasBeenScanned])
 			text_show(40711);
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index a7430382203..a5afb40fd87 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -58,7 +58,7 @@ static void room_408_pre_parser() {
 
 static void room_408_parser() {
 	if (player_said_2(walk_into, corridor_to_south)) {
-		_scene->_nextSceneId = 405;
+		new_room = 405;
 		g_engine->_soundManager->command(58, 0);
 	} else if (player_said_2(take, target_module) && (object_is_here(OBJ_TARGET_MODULE) || kernel.trigger)) {
 		switch (kernel.trigger) {
@@ -80,7 +80,7 @@ static void room_408_parser() {
 			break;
 
 		case 2:
-			player.clock = player.frame_delay + _scene->_frameStartTime;
+			player.clock = player.frame_delay + kernel.clock;
 			player.walker_visible = true;
 			_scene->_sequences.addTimer(20, 3);
 			break;
@@ -188,8 +188,8 @@ void room_408_preload() {
 
 	section_4_walker();
 	section_4_interface();
-	_scene->addActiveVocab(words_target_module);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_target_module);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index cc4221bf1d6..4026b9145e9 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -40,7 +40,7 @@ static void room_410_init() {
 	else
 		_scene->_hotspots.activate(words_charge_cases, false);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 155;
 		player.y = 150;
 		player.facing = FACING_NORTH;
@@ -48,7 +48,7 @@ static void room_410_init() {
 
 	section_4_music();
 
-	_scene->loadAnimation(kernel_full_name(410, 'r', -1, "", EXT_AA));
+	kernel_run_animation(kernel_full_name(410, 'r', -1, "", EXT_AA), 0);
 	_scene->_animation[0]->_repeatFlag = true;
 }
 
@@ -98,7 +98,7 @@ static void room_410_pre_parser() {
 
 static void room_410_parser() {
 	if (player_said_2(walk_into, corridor_to_south))
-		_scene->_nextSceneId = 406;
+		new_room = 406;
 	else if (player_said_2(take, charge_cases) && (object_is_here(OBJ_CHARGE_CASES) || kernel.trigger)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -120,7 +120,7 @@ static void room_410_parser() {
 			break;
 
 		case 2:
-			player.clock = player.frame_delay + _scene->_frameStartTime;
+			player.clock = player.frame_delay + kernel.clock;
 			player.walker_visible = true;
 			_scene->_sequences.addTimer(20, 3);
 			break;
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index b837b89a99e..44243dd1475 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -249,7 +249,7 @@ static void handleDialog() {
 				break;
 			}
 
-			player.clock = _scene->_frameStartTime + player.frame_delay;
+			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			_scene->_animation[0]->setCurrentFrame(local._resetFrame);
@@ -294,7 +294,7 @@ static void giveToRex(int object_id) {
 }
 
 static void room_411_init() {
-	if (_scene->_priorSceneId == 411) {
+	if (previous_room == 411) {
 		if ((global[kNextIngredient] == 1) && (global[kBadFirstIngredient] > -1))
 			giveToRex(global[kBadFirstIngredient]);
 		else if (global[kNextIngredient] > 0) {
@@ -397,7 +397,7 @@ static void room_411_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(220, 121), FACING_NORTHEAST);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 60;
 		player.y = 146;
 		player.facing = FACING_NORTHEAST;
@@ -405,14 +405,14 @@ static void room_411_init() {
 
 	section_4_music();
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_ALIEN_LIQUOR);
 		inter_give_to_player(OBJ_CHARGE_CASES);
 		inter_give_to_player(OBJ_TAPE_PLAYER);
 		inter_give_to_player(OBJ_AUDIO_TAPE);
 	}
 
-	_scene->loadAnimation(kernel_name('a', -1));
+	kernel_run_animation(kernel_name('a', -1), 0);
 	_scene->_animation[0]->setCurrentFrame(128);
 
 	local._makeMushroomCloud = false;
@@ -428,7 +428,7 @@ static void room_411_daemon() {
 			switch (local._curAnimationFrame) {
 			case 16:
 				player.commands_allowed = true;
-				player.clock = _scene->_frameStartTime + player.frame_delay;
+				player.clock = kernel.clock + player.frame_delay;
 				player.walker_visible = true;
 				local._resetFrame = 128;
 				break;
@@ -479,7 +479,7 @@ static void room_411_daemon() {
 
 			case 111:
 				local._resetFrame = 111;
-				_scene->_reloadSceneFlag = true;
+				kernel.force_restart = true;
 				break;
 
 			case 129:
@@ -528,7 +528,7 @@ static void room_411_parser() {
 	}
 
 	if (player_said_2(walk_into, corridor_to_south)) {
-		_scene->_nextSceneId = 406;
+		new_room = 406;
 		g_engine->_soundManager->command(10, 0);
 		player.command_ready = false;
 		return;
@@ -574,7 +574,7 @@ static void room_411_parser() {
 			_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 112);
 			// fall through
 		case 112:
-			player.clock = _scene->_frameStartTime - player.frame_delay;
+			player.clock = kernel.clock - player.frame_delay;
 			player.walker_visible = true;
 			player.commands_allowed = true;
 			object_set_quality(OBJ_CHARGE_CASES, 3, 1);
@@ -612,8 +612,8 @@ static void room_411_parser() {
 			break;
 
 		case 2:
-			player.clock = _scene->_frameStartTime + player.frame_delay;
-			player.clock = _scene->_frameStartTime + player.frame_delay;
+			player.clock = kernel.clock + player.frame_delay;
+			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = true;
 			_scene->_sequences.addTimer(20, 3);
 			break;
@@ -649,7 +649,7 @@ static void room_411_parser() {
 			break;
 
 		case 2:
-			player.clock = _scene->_frameStartTime + player.frame_delay;
+			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = true;
 			_scene->_sequences.addTimer(20, 3);
 			break;
@@ -680,7 +680,7 @@ static void room_411_parser() {
 
 	if (kernel.trigger == 100) {
 		_scene->_sequences.remove(g_sequence_ids[11]);
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = true;
 		player.commands_allowed = true;
 		_scene->_sequences.addTimer(20, 10);
@@ -806,11 +806,11 @@ void room_411_preload() {
 
 	section_4_walker();
 	section_4_interface();
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_alien_liquor);
-	_scene->addActiveVocab(words_formaldehyde);
-	_scene->addActiveVocab(words_petrox);
-	_scene->addActiveVocab(words_lecithin);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_alien_liquor);
+	vocab_make_active(words_formaldehyde);
+	vocab_make_active(words_petrox);
+	vocab_make_active(words_lecithin);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index 2ab217ab2f1..0b47b31be94 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -43,14 +43,14 @@ static void room_413_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 2), 0);
 	local._rexDeath = false;
 
-	if (_scene->_priorSceneId == 405) {
+	if (previous_room == 405) {
 		player.x = 142;
 		player.y = 146;
 		player.facing = FACING_NORTH;
 		player.walker_visible = true;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		if (global[kSexOfRex] == REX_MALE) {
-			_scene->loadAnimation(kernel_full_name(413, 'd', 1, "", EXT_AA), 78);
+			kernel_run_animation(kernel_full_name(413, 'd', 1, "", EXT_AA), 78);
 			g_engine->_soundManager->command(30, 0);
 			player.walker_visible = false;
 			player.commands_allowed = false;
@@ -125,13 +125,13 @@ static void room_413_daemon() {
 
 	if (kernel.trigger == 77) {
 		global[kTeleporterCommand] = TELEPORTER_BEAM_IN;
-		_scene->_nextSceneId = global[kTeleporterDestination];
-		_scene->_reloadSceneFlag = true;
+		new_room = global[kTeleporterDestination];
+		kernel.force_restart = true;
 	}
 
 	if (kernel.trigger == 78) {
-		_scene->_reloadSceneFlag = true;
-		_scene->_nextSceneId = _scene->_priorSceneId;
+		kernel.force_restart = true;
+		new_room = previous_room;
 		global[kTeleporterCommand] = TELEPORTER_NONE;
 	}
 }
@@ -150,9 +150,9 @@ static void room_413_parser() {
 	if (player_said_2(walk_inside, teleporter)) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_nextSceneId = 409;
+		new_room = 409;
 	} else if (player_said_2(walk_into, corridor_to_south))
-		_scene->_nextSceneId = 405;
+		new_room = 405;
 	else if (player_said_2(look, wooden_statue))
 		text_show(41310);
 	else if (player_said_2(take, wooden_statue))
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 3cb7fbcca22..8efb0bfd4de 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -107,7 +107,7 @@ static void room_501_init() {
 	_scene->_sequences.setDepth(g_sequence_ids[2], 4);
 	local._rexPunched = true;
 
-	if (_scene->_priorSceneId == 504) {
+	if (previous_room == 504) {
 		player.commands_allowed = false;
 		player.x = 74;
 		player.y = 121;
@@ -118,20 +118,20 @@ static void room_501_init() {
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 4);
 		if (global[kSexOfRex] == REX_MALE)
-			_scene->loadAnimation(kernel_name('G', 2), 70);
+			kernel_run_animation(kernel_name('G', 2), 70);
 		else
-			_scene->loadAnimation(kernel_name('R', 2), 70);
-	} else if (_scene->_priorSceneId == 503) {
+			kernel_run_animation(kernel_name('R', 2), 70);
+	} else if (previous_room == 503) {
 		player.x = 317;
 		player.y = 102;
 		player.facing = FACING_SOUTHWEST;
 		_scene->_sequences.addTimer(15, 80);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 299;
 		player.y = 131;
 	}
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_FAKE_ID);
 		inter_give_to_player(OBJ_SECURITY_CARD);
 		inter_give_to_player(OBJ_ID_CARD);
@@ -191,7 +191,7 @@ static void room_501_daemon() {
 		switch (kernel.trigger) {
 		case 70:
 			player.walker_visible = true;
-			player.clock = _scene->_frameStartTime - player.frame_delay;
+			player.clock = kernel.clock - player.frame_delay;
 			_scene->_sequences.addTimer(15, 71);
 			break;
 
@@ -268,7 +268,7 @@ static void room_501_parser() {
 		break;
 
 		case 4:
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 			break;
 
 		default:
@@ -289,7 +289,7 @@ static void room_501_parser() {
 			if (global[kSexOfRex] == REX_MALE) {
 				player.walker_visible = false;
 				g_engine->_soundManager->command(13, 0);
-				_scene->loadAnimation(kernel_name('G', 1), 5);
+				kernel_run_animation(kernel_name('G', 1), 5);
 			} else {
 				local._rexPunched = false;
 				_scene->_kernelMessages.reset();
@@ -299,7 +299,7 @@ static void room_501_parser() {
 
 		case 5:
 			player.walker_visible = true;
-			player.clock = _scene->_frameStartTime - player.frame_delay;
+			player.clock = kernel.clock - player.frame_delay;
 			_scene->_sequences.addTimer(30, 6);
 			break;
 
@@ -361,7 +361,7 @@ static void room_501_parser() {
 			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 			_scene->_sequences.setDepth(g_sequence_ids[3], 7);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
-			_scene->_nextSceneId = 503;
+			new_room = 503;
 		}
 		break;
 
@@ -421,8 +421,8 @@ void room_501_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_door);
-	_scene->addActiveVocab(words_walk_through);
+	vocab_make_active(words_door);
+	vocab_make_active(words_walk_through);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room502.cpp b/engines/mads/nebular/rooms/room502.cpp
index fa3f9b616d9..e3f38b1fb25 100644
--- a/engines/mads/nebular/rooms/room502.cpp
+++ b/engines/mads/nebular/rooms/room502.cpp
@@ -44,7 +44,7 @@ static void room_502_init() {
 	// The original uses scene5xx_section_5_music
 	if (!config_file.music_flag)
 		g_engine->_soundManager->command(2, 0);
-	else if (_scene->_priorSceneId == 503)
+	else if (previous_room == 503)
 		g_engine->_soundManager->command(38, 0);
 	else
 		g_engine->_soundManager->command(29, 0);
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index 221367bb450..30de37adef1 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -47,13 +47,13 @@ static void room_503_init() {
 	else
 		g_sprite_ids[3] = kernel_load_series("*ROXBD_2", 0);
 
-	if (object[OBJ_DETONATORS].location == _scene->_currentSceneId) {
+	if (object[OBJ_DETONATORS].location == room_id) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
 		local._detonatorHotspotId = _scene->_dynamicHotspots.add(words_detonators, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._detonatorHotspotId, Common::Point(254, 135), FACING_SOUTH);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 191;
 		player.y = 152;
 		player.facing = FACING_NORTHWEST;
@@ -64,7 +64,7 @@ static void room_503_init() {
 
 static void room_503_parser() {
 	if (player_said_2(walk, outside))
-		_scene->_nextSceneId = 501;
+		new_room = 501;
 	else if (player_said_2(take, detonators)) {
 		if (kernel.trigger || !player_has(OBJ_DETONATORS)) {
 			switch (kernel.trigger) {
@@ -163,8 +163,8 @@ void room_503_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_detonators);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_detonators);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index 499c119e0a6..a5ac5d73bff 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -50,7 +50,7 @@ static void room_504_init() {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('a', 0), 0);
 	else {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('a', 1), 0);
-		_scene->changeVariant(1);
+		kernel_load_variant(1);
 	}
 
 	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 1, 0, 0);
@@ -58,18 +58,18 @@ static void room_504_init() {
 	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
 	local._carFrame = -1;
 
-	if ((_scene->_priorSceneId == 505) && (global[kHoverCarDestination] != global[kHoverCarLocation])) {
+	if ((previous_room == 505) && (global[kHoverCarDestination] != global[kHoverCarLocation])) {
 		local._carAnimationMode = 1;
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		g_engine->_soundManager->command(14, 0);
 		_scene->_sequences.addTimer(1, 70);
 		player.commands_allowed = false;
 	} else {
 		g_sprite_ids[3] = kernel_load_series(kernel_name('a', 3), 0);
 		local._carAnimationMode = 1;
-		_scene->loadAnimation(kernel_name('A', -1));
-		if ((_scene->_priorSceneId != RETURNING_FROM_DIALOG) && (_scene->_priorSceneId != 505))
-			global[kHoverCarLocation] = _scene->_priorSceneId;
+		kernel_run_animation(kernel_name('A', -1), 0);
+		if ((previous_room != RETURNING_FROM_DIALOG) && (previous_room != 505))
+			global[kHoverCarLocation] = previous_room;
 
 		g_sequence_ids[7] = _scene->_sequences.startCycle(g_sprite_ids[7], false, 1);
 	}
@@ -104,23 +104,23 @@ static void room_504_daemon() {
 		case 70:
 			if (global[kHoverCarDestination] != -1) {
 				player.commands_allowed = false;
-				_scene->freeAnimation();
+				kernel_abort_animation(0);
 				local._carAnimationMode = 2;
 				if (((global[kHoverCarLocation] >= 500 && global[kHoverCarLocation] <= 599) &&
 					(global[kHoverCarDestination] >= 500 && global[kHoverCarDestination] <= 599)) ||
 					((global[kHoverCarLocation] >= 600 && global[kHoverCarLocation] <= 699) &&
 						(global[kHoverCarDestination] >= 600 && global[kHoverCarDestination] <= 699))) {
-					_scene->loadAnimation(kernel_name('A', -1), 71);
+					kernel_run_animation(kernel_name('A', -1), 71);
 				} else if (global[kHoverCarLocation] > global[kHoverCarDestination])
-					_scene->loadAnimation(kernel_name('C', -1), 71);
+					kernel_run_animation(kernel_name('C', -1), 71);
 				else
-					_scene->loadAnimation(kernel_name('B', -1), 71);
+					kernel_run_animation(kernel_name('B', -1), 71);
 			}
 			break;
 
 		case 71:
 			g_engine->_soundManager->command(15, 0);
-			_scene->_nextSceneId = global[kHoverCarDestination];
+			new_room = global[kHoverCarDestination];
 			break;
 
 		default:
@@ -132,7 +132,7 @@ static void room_504_daemon() {
 		global[kTimebombStatus] = TIMEBOMB_DEAD;
 		global[kTimebombTimer] = 0;
 		global[kCheckDaemonTimebomb] = false;
-		_scene->_nextSceneId = 620;
+		new_room = 620;
 	}
 }
 
@@ -143,7 +143,7 @@ static void room_504_pre_parser() {
 static void room_504_parser() {
 	if (player_said_2(exit_from, car)) {
 		g_engine->_soundManager->command(15, 0);
-		_scene->_nextSceneId = global[kHoverCarLocation];
+		new_room = global[kHoverCarLocation];
 	} else if (player_said_2(activate, car_controls)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -190,7 +190,7 @@ static void room_504_parser() {
 		case 4:
 			player.commands_allowed = true;
 			global[kHoverCarDestination] = global[kHoverCarLocation];
-			_scene->_nextSceneId = 505;
+			new_room = 505;
 			break;
 
 		case 5:
diff --git a/engines/mads/nebular/rooms/room505.cpp b/engines/mads/nebular/rooms/room505.cpp
index 39f43ad3b14..f79ebc57376 100644
--- a/engines/mads/nebular/rooms/room505.cpp
+++ b/engines/mads/nebular/rooms/room505.cpp
@@ -54,7 +54,7 @@ static void room_505_init() {
 	g_sprite_ids[11] = kernel_load_series(kernel_name('t', -1), 0);
 	g_sprite_ids[12] = kernel_load_series(kernel_name('e', -1), 0);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
+	if (previous_room != RETURNING_FROM_DIALOG)
 		g_sequence_ids[12] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[12], false, 6, 1, 0, 0);
 
 	g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 1, 120, 0);
@@ -76,7 +76,7 @@ static void room_505_init() {
 	for (int i = 0; i < 9; i++) {
 		if (global[kHoverCarLocation] == local._carLocations[i]) {
 			local._homeSelectedId = i;
-			if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
+			if (previous_room != RETURNING_FROM_DIALOG)
 				local._selectedId = i;
 		}
 	}
@@ -84,7 +84,7 @@ static void room_505_init() {
 	player.walker_visible = false;
 	player.commands_allowed = false;
 	local._frame = -1;
-	_scene->loadAnimation(kernel_name('a', -1));
+	kernel_run_animation(kernel_name('a', -1), 0);
 	_scene->_animation[0]->setCurrentFrame(86);
 
 	section_5_music();
@@ -270,7 +270,7 @@ static void room_505_daemon() {
 
 	case 63:
 		global[kHoverCarDestination] = local._carLocations[local._selectedId];
-		_scene->_nextSceneId = 504;
+		new_room = 504;
 		break;
 
 	default:
@@ -282,7 +282,7 @@ static void room_505_parser() {
 	if (player_said_1(press))
 		local._nextButtonId = player2.words[1];
 	else if (player_said_2(return_to, inside_of_car))
-		_scene->_nextSceneId = 504;
+		new_room = 504;
 	else if (player_said_2(look, view_screen))
 		text_show(50510);
 	else if (player_said_2(look, control_panel))
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index b456fc995c5..c85866f10f9 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -52,7 +52,7 @@ static void handleDoorSequences() {
 	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 
 	if (local._firstDoorFl) {
-		if (player_said_2(walk_into, software_store) || ((_scene->_priorSceneId == 507) && !local._actionFl)) {
+		if (player_said_2(walk_into, software_store) || ((previous_room == 507) && !local._actionFl)) {
 			local._doorDepth = 13;
 			local._doorSpriteIdx = g_sprite_ids[2];
 			local._doorSequenceIdx = g_sequence_ids[2];
@@ -73,7 +73,7 @@ static void handleDoorSequences() {
 		_scene->_sequences.remove(local._doorSequenceIdx);
 		local._doorSequenceIdx = _scene->_sequences.addSpriteCycle(local._doorSpriteIdx, false, 7, 1, 0, 0);
 		_scene->_sequences.setDepth(local._doorSequenceIdx, local._doorDepth);
-		_scene->changeVariant(1);
+		kernel_load_variant(1);
 		_scene->_sequences.addSubEntry(local._doorSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 81);
 		break;
 
@@ -121,9 +121,9 @@ static void handleDoorSequences() {
 		local._actionFl = false;
 		player.commands_allowed = true;
 		if (local._labDoorFl)
-			_scene->_nextSceneId = 508;
+			new_room = 508;
 		else
-			_scene->_nextSceneId = 507;
+			new_room = 507;
 
 		break;
 
@@ -144,7 +144,7 @@ static void room_506_init() {
 		_scene->_sequences.remove(g_sequence_ids[3]);
 		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 5);
-		_scene->loadAnimation(kernel_name('R', 1), 70);
+		kernel_run_animation(kernel_name('R', 1), 70);
 	}
 
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
@@ -163,19 +163,19 @@ static void room_506_init() {
 	local._firstDoorFl = true;
 	local._actionFl = false;
 
-	if (_scene->_priorSceneId == 508) {
+	if (previous_room == 508) {
 		player.x = 16;
 		player.y = 111;
 		player.facing = FACING_SOUTHEAST;
 		_scene->_sequences.addTimer(15, 80);
 		player.commands_allowed = false;
-	} else if (_scene->_priorSceneId == 507) {
+	} else if (previous_room == 507) {
 		player.x = 80;
 		player.y = 102;
 		player.facing = FACING_SOUTHEAST;
 		_scene->_sequences.addTimer(60, 80);
 		player.commands_allowed = false;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 138;
 		player.y = 116;
 		player.facing = FACING_NORTHEAST;
@@ -190,7 +190,7 @@ static void room_506_daemon() {
 	if (kernel.trigger >= 80) {
 		if (local._firstDoorFl) {
 			local._heroFacing = FACING_SOUTHEAST;
-			if (_scene->_priorSceneId == 507) {
+			if (previous_room == 507) {
 				local._doorPos_x = 112;
 				local._doorPos_y = 102;
 				local._doorWord = 0x336;
@@ -280,7 +280,7 @@ static void room_506_parser() {
 			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[4], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
@@ -340,9 +340,9 @@ void room_506_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_walk_into);
-	_scene->addActiveVocab(words_software_store);
-	_scene->addActiveVocab(words_laboratory);
+	vocab_make_active(words_walk_into);
+	vocab_make_active(words_software_store);
+	vocab_make_active(words_laboratory);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room507.cpp b/engines/mads/nebular/rooms/room507.cpp
index 6ecfdd8a456..a5e6c588d3e 100644
--- a/engines/mads/nebular/rooms/room507.cpp
+++ b/engines/mads/nebular/rooms/room507.cpp
@@ -43,13 +43,13 @@ static void room_507_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('p', -1), 0);
 	g_sprite_ids[2] = kernel_load_series("*RXMRD_3", 0);
 
-	if ((game.difficulty != DIFFICULTY_EASY) && (object[OBJ_PENLIGHT].location == _scene->_currentSceneId)) {
+	if ((game.difficulty != DIFFICULTY_EASY) && (object[OBJ_PENLIGHT].location == room_id)) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
 		local._penlightHotspotId = _scene->_dynamicHotspots.add(words_penlight, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._penlightHotspotId, Common::Point(233, 152), FACING_SOUTHEAST);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 121;
 		player.y = 147;
 		player.facing = FACING_NORTH;
@@ -60,7 +60,7 @@ static void room_507_init() {
 
 static void room_507_parser() {
 	if (player_said_2(walk_through, entrance))
-		_scene->_nextSceneId = 506;
+		new_room = 506;
 	else if (player_said_2(take, penlight)) {
 		if (kernel.trigger || !player_has(OBJ_PENLIGHT)) {
 			switch (kernel.trigger) {
@@ -155,8 +155,8 @@ void room_507_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_penlight);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_penlight);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index 329655b3b93..ff8a2575339 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -62,7 +62,7 @@ static void room_508_init() {
 		_scene->_hotspots.activate(words_hole, false);
 		_scene->_hotspots.activate(words_laser_beam, false);
 	} else {
-		_scene->changeVariant(1);
+		kernel_load_variant(1);
 		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 8);
 		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
@@ -81,11 +81,11 @@ static void room_508_init() {
 	}
 	g_engine->_soundManager->command(20, 0);
 
-	if (_scene->_priorSceneId == 515) {
+	if (previous_room == 515) {
 		player.x = 57;
 		player.y = 116;
 		player.facing = FACING_NORTHEAST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 289;
 		player.y = 139;
 		player.facing = FACING_WEST;
@@ -94,7 +94,7 @@ static void room_508_init() {
 	section_5_music();
 	kernel.quotes = quote_load(0x273, 0);
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_COMPACT_CASE);
 		inter_give_to_player(OBJ_REARVIEW_MIRROR);
 	}
@@ -149,7 +149,7 @@ static void handlePedestral() {
 		case 4:
 			text_show(50834);
 			global[kLaserHoleIsThere] = true;
-			_scene->_nextSceneId = 515;
+			new_room = 515;
 			break;
 
 		default:
@@ -197,7 +197,7 @@ static void room_508_parser() {
 
 			case 5:
 				_scene->_sequences.remove(g_sequence_ids[5]);
-				_scene->loadAnimation(kernel_name('B', 1), 6);
+				kernel_run_animation(kernel_name('B', 1), 6);
 				break;
 
 			case 6:
@@ -208,7 +208,7 @@ static void room_508_parser() {
 				int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
 				_scene->_kernelMessages.reset();
-				_scene->changeVariant(1);
+				kernel_load_variant(1);
 				_scene->_sequences.addTimer(30, 7);
 			}
 			break;
@@ -302,9 +302,9 @@ void room_508_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_spinach_patch_doll);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_laser_beam);
+	vocab_make_active(words_spinach_patch_doll);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_laser_beam);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index f056c8f4752..3cae8386fe2 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -61,10 +61,10 @@ static void room_511_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(26, 153), FACING_NORTHEAST);
 		_scene->_sequences.setDepth(g_sequence_ids[7], 3);
 		if (global[kBoatRaised])
-			_scene->changeVariant(2);
+			kernel_load_variant(2);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG)
+	if (previous_room != RETURNING_FROM_DIALOG)
 		local._handingLine = false;
 
 	if (global[kBoatRaised]) {
@@ -91,7 +91,7 @@ static void room_511_init() {
 
 		_scene->_hotspots.activate(words_rope, true);
 		_scene->_hotspots.activate(words_boat, true);
-		_scene->changeVariant(1);
+		kernel_load_variant(1);
 	}
 
 	local._lineFrame = -1;
@@ -100,11 +100,11 @@ static void room_511_init() {
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -2);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 
-	if (_scene->_priorSceneId == 512) {
+	if (previous_room == 512) {
 		player.x = 60;
 		player.y = 112;
 		player.facing = FACING_SOUTHEAST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 55;
 		player.y = 152;
 		player.facing = FACING_NORTHWEST;
@@ -113,12 +113,12 @@ static void room_511_init() {
 		_scene->_sequences.remove(g_sequence_ids[1]);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-		_scene->loadAnimation(kernel_name('R', 1), 70);
+		kernel_run_animation(kernel_name('R', 1), 70);
 	} else if (local._handingLine) {
 		player.walker_visible = false;
 		local._lineAnimationMode = 1;
 		local._lineAnimationPosition = 1;
-		_scene->loadAnimation(kernel_name('R', -1));
+		kernel_run_animation(kernel_name('R', -1), 0);
 		local._lineFrame = 2;
 	}
 	section_5_music();
@@ -186,9 +186,9 @@ static void room_511_pre_parser() {
 		if (kernel.trigger == 0) {
 			player.ready_to_walk = false;
 			player.commands_allowed = false;
-			_scene->freeAnimation();
+			kernel_abort_animation(0);
 			local._lineAnimationMode = 2;
-			_scene->loadAnimation(kernel_name('R', 2), 1);
+			kernel_run_animation(kernel_name('R', 2), 1);
 		} else if (kernel.trigger == 1) {
 			player.walker_visible = true;
 			player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
@@ -202,7 +202,7 @@ static void room_511_pre_parser() {
 
 static void room_511_parser() {
 	if (player_said_2(walk_into, restaurant))
-		_scene->_nextSceneId = 512;
+		new_room = 512;
 	else if (player_said_2(get_into, car)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -236,7 +236,7 @@ static void room_511_parser() {
 			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[4], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
@@ -254,7 +254,7 @@ static void room_511_parser() {
 						local._lineAnimationMode = 1;
 						local._lineAnimationPosition = 1;
 						local._lineMoving = true;
-						_scene->loadAnimation(kernel_name('R', -1));
+						kernel_run_animation(kernel_name('R', -1), 0);
 						_scene->_sequences.addTimer(1, 1);
 					} else if (kernel.trigger == 1) {
 						if (local._lineMoving) {
@@ -377,9 +377,9 @@ void room_511_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_boat);
-	_scene->addActiveVocab(words_fishing_line);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_boat);
+	vocab_make_active(words_fishing_line);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index e09153fd000..f9596447e25 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -49,7 +49,7 @@ static void room_512_init() {
 	g_sprite_ids[5] = kernel_load_series(kernel_name('x', 2), 0);
 	g_sprite_ids[6] = kernel_load_series(kernel_name('x', 3), 0);
 
-	if (object[OBJ_FISHING_ROD].location == _scene->_currentSceneId) {
+	if (object[OBJ_FISHING_ROD].location == room_id) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
 		local._fishingRodHotspotId = _scene->_dynamicHotspots.add(words_fishing_rod, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._fishingRodHotspotId, Common::Point(199, 101), FACING_NORTHEAST);
@@ -60,7 +60,7 @@ static void room_512_init() {
 
 	_scene->_hotspots.activate(words_padlock_key, false);
 	if (game.difficulty == DIFFICULTY_EASY) {
-		if (object[OBJ_PADLOCK_KEY].location == _scene->_currentSceneId) {
+		if (object[OBJ_PADLOCK_KEY].location == room_id) {
 			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 10, 0, 0, 0);
 			_scene->_sequences.setDepth(g_sequence_ids[6], 3);
 			local._keyHotspotId = _scene->_dynamicHotspots.add(words_padlock_key, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
@@ -72,7 +72,7 @@ static void room_512_init() {
 			_scene->_hotspots.activate(words_padlock_key, false);
 		}
 	} else if (global[kRegisterOpen]) {
-		if (object[OBJ_PADLOCK_KEY].location == _scene->_currentSceneId) {
+		if (object[OBJ_PADLOCK_KEY].location == room_id) {
 			_scene->_hotspots.activate(words_padlock_key, true);
 			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, -2);
 			_scene->_sequences.setDepth(g_sequence_ids[5], 3);
@@ -84,7 +84,7 @@ static void room_512_init() {
 	} else
 		_scene->_hotspots.activate(words_padlock_key, false);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 144;
 		player.y = 152;
 		player.facing = FACING_NORTHEAST;
@@ -95,7 +95,7 @@ static void room_512_init() {
 
 static void room_512_parser() {
 	if (player_said_2(walk, outside))
-		_scene->_nextSceneId = 511;
+		new_room = 511;
 	else if (player_said_2(take, fishing_rod)) {
 		if (kernel.trigger || !player_has(OBJ_FISHING_ROD)) {
 			switch (kernel.trigger) {
@@ -338,10 +338,10 @@ void room_512_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_fishing_rod);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_padlock_key);
-	_scene->addActiveVocab(words_register_drawer);
+	vocab_make_active(words_fishing_rod);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_padlock_key);
+	vocab_make_active(words_register_drawer);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index 828ce6f44ce..33e4601ef39 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -44,13 +44,13 @@ static void room_513_init() {
 	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -2);
 	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 
-	if ((_scene->_priorSceneId == 751) || (_scene->_priorSceneId == 701)) {
+	if ((previous_room == 751) || (previous_room == 701)) {
 		player.x = 296;
 		player.y = 147;
 		player.facing = FACING_WEST;
 		player.commands_allowed = false;
 		_scene->_sequences.addTimer(15, 80);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 63;
 		player.y = 149;
 		player.facing = FACING_NORTHEAST;
@@ -59,12 +59,12 @@ static void room_513_init() {
 		_scene->_sequences.remove(g_sequence_ids[1]);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-		_scene->loadAnimation(kernel_name('R', 1), 70);
+		kernel_run_animation(kernel_name('R', 1), 70);
 	}
 
 	section_5_music();
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_SECURITY_CARD);
 
 	kernel.quotes = quote_load(0x278, 0);
@@ -162,7 +162,7 @@ static void room_513_parser() {
 			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
@@ -209,9 +209,9 @@ static void room_513_parser() {
 			_scene->_sequences.setDepth(g_sequence_ids[2], 2);
 			player.commands_allowed = true;
 			if (global[kCityFlooded])
-				_scene->_nextSceneId = 701;
+				new_room = 701;
 			else
-				_scene->_nextSceneId = 751;
+				new_room = 751;
 
 			break;
 
@@ -261,8 +261,8 @@ void room_513_preload() {
 
 	section_5_walker();
 	section_5_interface();
-	_scene->addActiveVocab(words_elevator_door);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_elevator_door);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room515.cpp b/engines/mads/nebular/rooms/room515.cpp
index 72d0ee4a3c1..4c275109a23 100644
--- a/engines/mads/nebular/rooms/room515.cpp
+++ b/engines/mads/nebular/rooms/room515.cpp
@@ -42,9 +42,9 @@ static void room_515_init() {
 
 static void room_515_daemon() {
 	if (kernel.trigger == 70)
-		_scene->loadAnimation(kernel_name('A', -1), 71);
+		kernel_run_animation(kernel_name('A', -1), 71);
 	else if (kernel.trigger == 71)
-		_scene->_nextSceneId = 508;
+		new_room = 508;
 }
 
 void room_515_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/room551.cpp b/engines/mads/nebular/rooms/room551.cpp
index 4b2ae61ba33..79161cfbadd 100644
--- a/engines/mads/nebular/rooms/room551.cpp
+++ b/engines/mads/nebular/rooms/room551.cpp
@@ -38,11 +38,11 @@ static void room_551_init() {
 	else
 		g_sprite_ids[3] = kernel_load_series(kernel_name('a', 1), 0);
 
-	if (_scene->_priorSceneId == 501) {
+	if (previous_room == 501) {
 		player.x = 18;
 		player.y = 130;
 	}
-	else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 124;
 		player.y = 119;
 		player.facing = FACING_NORTH;
@@ -86,7 +86,7 @@ static void room_551_init() {
 		global[kTeleporterCommand] = 0;
 
 		if (suffixNum > 0)
-			_scene->loadAnimation(kernel_name(sepChar, suffixNum), trigger);
+			kernel_run_animation(kernel_name(sepChar, suffixNum), trigger);
 		else {
 			player.walker_visible = true;
 			player.commands_allowed = true;
@@ -101,13 +101,13 @@ static void room_551_daemon() {
 	case 75:
 		player.commands_allowed = true;
 		player.walker_visible = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		break;
 
 	case 80:
 		global[kTeleporterCommand] = 1;
-		_scene->_nextSceneId = global[kTeleporterDestination];
-		_scene->_reloadSceneFlag = true;
+		new_room = global[kTeleporterDestination];
+		kernel.force_restart = true;
 		break;
 
 	case 90:
@@ -123,7 +123,7 @@ static void room_551_daemon() {
 		break;
 
 	case 91:
-		_scene->_reloadSceneFlag = true;
+		kernel.force_restart = true;
 		break;
 
 	default:
@@ -138,7 +138,7 @@ static void room_551_pre_parser() {
 
 static void room_551_parser() {
 	if (player_said_2(step_into, teleporter))
-		_scene->_nextSceneId = 502;
+		new_room = 502;
 	else if ((player.look_around))
 		text_show(55117);
 	else if (player_said_2(look, skeleton))
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index 3f811c52801..0f7c333cdcb 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -44,7 +44,7 @@ static void room_601_init() {
 	g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
 	_scene->_sequences.setDepth(g_sequence_ids[2], 3);
 
-	if (_scene->_priorSceneId == 504) {
+	if (previous_room == 504) {
 		player.x = 73;
 		player.y = 148;
 		player.facing = FACING_WEST;
@@ -53,8 +53,8 @@ static void room_601_init() {
 		_scene->_sequences.remove(g_sequence_ids[2]);
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 3);
-		_scene->loadAnimation(kernel_name('R', 1), 70);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+		kernel_run_animation(kernel_name('R', 1), 70);
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 229;
 		player.y = 129;
 		player.facing = FACING_SOUTHWEST;
@@ -91,7 +91,7 @@ static void room_601_daemon() {
 
 static void room_601_parser() {
 	if (player_said_2(walk_through, entrance))
-		_scene->_nextSceneId = 602;
+		new_room = 602;
 	else if (player_said_2(get_inside, car)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -124,7 +124,7 @@ static void room_601_parser() {
 			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
@@ -171,8 +171,8 @@ void room_601_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_laser_beam);
-	_scene->addActiveVocab(words_look_at);
+	vocab_make_active(words_laser_beam);
+	vocab_make_active(words_look_at);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index 3073620c459..aa5a1f0bd8f 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -58,7 +58,7 @@ static void room_602_init() {
 		_scene->_sequences.setDepth(g_sequence_ids[4], 9);
 		int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(80, 134), FACING_NORTHEAST);
-		_scene->changeVariant(1);
+		kernel_load_variant(1);
 	} else
 		_scene->_hotspots.activate(words_hole, false);
 
@@ -90,11 +90,11 @@ static void room_602_init() {
 	} else
 		_scene->_hotspots.activate(words_door_key, false);
 
-	if (_scene->_priorSceneId == 603) {
+	if (previous_room == 603) {
 		player.x = 228;
 		player.y = 126;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 50;
 		player.y = 127;
 		player.facing = FACING_EAST;
@@ -103,7 +103,7 @@ static void room_602_init() {
 	section_6_music();
 	kernel.quotes = quote_load(0x2F1, 0x2F2, 0x2F3, 0);
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_NOTE);
 		inter_give_to_player(OBJ_REARVIEW_MIRROR);
 		inter_give_to_player(OBJ_COMPACT_CASE);
@@ -137,7 +137,7 @@ static void handleSafeActions() {
 
 				local._lastSequenceIdx = _scene->_sequences.addSpriteCycle(local._lastSpriteIdx, false, 12, 1, 0, 0);
 				_scene->_sequences.setDepth(local._lastSequenceIdx, 14);
-				if (object[OBJ_DOOR_KEY].location == _scene->_currentSceneId)
+				if (object[OBJ_DOOR_KEY].location == room_id)
 					_scene->_hotspots.activate(words_door_key, true);
 
 				_scene->_sequences.addSubEntry(local._lastSequenceIdx,
@@ -152,7 +152,7 @@ static void handleSafeActions() {
 
 			local._lastSequenceIdx = _scene->_sequences.startPingPongCycle(local._lastSpriteIdx, false, 12, 1, 0, 0);
 			_scene->_sequences.setDepth(local._lastSequenceIdx, 14);
-			if (object[OBJ_DOOR_KEY].location == _scene->_currentSceneId)
+			if (object[OBJ_DOOR_KEY].location == room_id)
 				_scene->_hotspots.activate(words_door_key, false);
 
 			_scene->_sequences.addSubEntry(local._lastSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
@@ -203,9 +203,9 @@ static void handleSafeActions() {
 
 static void room_602_parser() {
 	if (player_said_2(walk_through, hallway))
-		_scene->_nextSceneId = 601;
+		new_room = 601;
 	else if (player_said_2(walk_through, doorway))
-		_scene->_nextSceneId = 603;
+		new_room = 603;
 	else if (player_said_2(open, safe) && ((global[kSafeStatus] == 0) || (global[kSafeStatus] == 2))) {
 		local._safeMode = 1;
 		local._cycleIndex = -2;
@@ -229,7 +229,7 @@ static void room_602_parser() {
 			player.walker_visible = false;
 			_scene->_sequences.remove(g_sequence_ids[4]);
 			_scene->_sequences.remove(local._lastSequenceIdx);
-			_scene->loadAnimation(kernel_name('L', 1), 1);
+			kernel_run_animation(kernel_name('L', 1), 1);
 			break;
 
 		case 1:
@@ -361,9 +361,9 @@ void room_602_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_safe);
-	_scene->addActiveVocab(words_laser_beam);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_safe);
+	vocab_make_active(words_laser_beam);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room603.cpp b/engines/mads/nebular/rooms/room603.cpp
index 6ae9086f2c7..8be6abb021c 100644
--- a/engines/mads/nebular/rooms/room603.cpp
+++ b/engines/mads/nebular/rooms/room603.cpp
@@ -40,7 +40,7 @@ static Scratch local;
 
 
 static void room_603_init() {
-	if (object[OBJ_COMPACT_CASE].location == _scene->_currentSceneId) {
+	if (object[OBJ_COMPACT_CASE].location == room_id) {
 		g_sprite_ids[4] = kernel_load_series("*RXMRD_3", 0);
 		g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
@@ -49,7 +49,7 @@ static void room_603_init() {
 		_scene->_dynamicHotspots.setPosition(local._compactCaseHotspotId, Common::Point(250, 152), FACING_SOUTHEAST);
 	}
 
-	if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_NOTE].location == _scene->_currentSceneId)) {
+	if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_NOTE].location == room_id)) {
 		g_sprite_ids[3] = kernel_load_series("*RXMRC_9", 0);
 		g_sprite_ids[2] = kernel_load_series(kernel_name('p', -1), 0);
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
@@ -58,7 +58,7 @@ static void room_603_init() {
 		_scene->_dynamicHotspots.setPosition(local._noteHotspotId, Common::Point(242, 118), FACING_NORTHEAST);
 	}
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 113;
 		player.y = 134;
 	}
@@ -68,7 +68,7 @@ static void room_603_init() {
 
 static void room_603_parser() {
 	if (player_said_2(walk_towards, livingroom))
-		_scene->_nextSceneId = 602;
+		new_room = 602;
 	else if (player_said_2(take, compact_case)) {
 		if (kernel.trigger || !player_has(OBJ_COMPACT_CASE)) {
 			switch (kernel.trigger) {
@@ -114,7 +114,7 @@ static void room_603_parser() {
 				_scene->_dynamicHotspots.remove(local._noteHotspotId);
 				inter_give_to_player(OBJ_NOTE);
 				_scene->_sequences.remove(g_sequence_ids[3]);
-				player.clock = _scene->_frameStartTime - player.frame_delay;
+				player.clock = kernel.clock - player.frame_delay;
 				player.walker_visible = true;
 				player.commands_allowed = true;
 			}
@@ -147,15 +147,15 @@ static void room_603_parser() {
 	else if (player_said_2(take, perfume))
 		text_show(60322);
 	else if (player_said_2(look, note)) {
-		if (object[OBJ_NOTE].location == _scene->_currentSceneId)
+		if (object[OBJ_NOTE].location == room_id)
 			text_show(60324);
 	} else if (player_said_2(look, corner_table)) {
-		if (object[OBJ_NOTE].location == _scene->_currentSceneId)
+		if (object[OBJ_NOTE].location == room_id)
 			text_show(60326);
 		else
 			text_show(60325);
 	} else if (player_said_2(look, vanity)) {
-		if (object[OBJ_COMPACT_CASE].location == _scene->_currentSceneId)
+		if (object[OBJ_COMPACT_CASE].location == room_id)
 			text_show(60327);
 		else
 			text_show(60328);
@@ -183,9 +183,9 @@ void room_603_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_compact_case);
-	_scene->addActiveVocab(words_note);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_compact_case);
+	vocab_make_active(words_note);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index 6702dff2ac8..9e5aa803408 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -56,14 +56,14 @@ static void room_604_init() {
 		_scene->_dynamicHotspots.setPosition(local._timebombHotspotId, Common::Point(166, 118), FACING_NORTHEAST);
 	}
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_TIMEBOMB);
 
 	pal_change_color(252, 63, 37, 26);
 	pal_change_color(253, 45, 24, 17);
 	local._animationActiveFl = false;
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 72;
 		player.y = 149;
 		player.facing = FACING_NORTHEAST;
@@ -71,14 +71,14 @@ static void room_604_init() {
 		player.commands_allowed = false;
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-		_scene->loadAnimation(kernel_name('R', 1), 70);
+		kernel_run_animation(kernel_name('R', 1), 70);
 		local._animationActiveFl = true;
 	} else {
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 1);
 	}
 
-	local._monsterTimer = _scene->_frameStartTime;
+	local._monsterTimer = kernel.clock;
 	local._monsterActive = false;
 
 	section_6_music();
@@ -158,12 +158,12 @@ static void room_604_daemon() {
 		}
 	}
 
-	if ((!local._monsterActive && !local._animationActiveFl) && (_scene->_frameStartTime > (local._monsterTimer + 4))) {
-		local._monsterTimer = _scene->_frameStartTime;
+	if ((!local._monsterActive && !local._animationActiveFl) && (kernel.clock > (local._monsterTimer + 4))) {
+		local._monsterTimer = kernel.clock;
 		if ((g_engine->getRandomNumber(1, 1000) < 25) || !player.been_here_before) {
 			local._monsterActive = true;
-			_scene->freeAnimation();
-			_scene->loadAnimation(kernel_name('m', -1));
+			kernel_abort_animation(0);
+			kernel_run_animation(kernel_name('m', -1), 0);
 		}
 	}
 }
@@ -188,7 +188,7 @@ static void handleBombActions() {
 		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, -1);
 		local._timebombHotspotId = _scene->_dynamicHotspots.add(words_timebomb, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._timebombHotspotId, Common::Point(166, 118), FACING_NORTHEAST);
-		inter_move_object(OBJ_TIMEBOMB, _scene->_currentSceneId);
+		inter_move_object(OBJ_TIMEBOMB, room_id);
 		break;
 
 	case 2:
@@ -251,7 +251,7 @@ static void room_604_parser() {
 			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[4], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
@@ -328,9 +328,9 @@ void room_604_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_sea_monster);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_timebomb);
+	vocab_make_active(words_sea_monster);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_timebomb);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room605.cpp b/engines/mads/nebular/rooms/room605.cpp
index 9791a553d1e..d82a744f91c 100644
--- a/engines/mads/nebular/rooms/room605.cpp
+++ b/engines/mads/nebular/rooms/room605.cpp
@@ -62,7 +62,7 @@ static void room_605_daemon() {
 		else
 			text_show(60599);
 
-		_scene->_nextSceneId = global[kResurrectRoom];
+		new_room = global[kResurrectRoom];
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index 38626efe9c0..4fe1449784d 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -51,10 +51,10 @@ static void room_607_init() {
 	g_sprite_ids[2] = kernel_load_series(kernel_name('c', 0), 0);
 	g_sprite_ids[3] = kernel_load_series("*RXCD_3", 0);
 
-	if (!player.been_here_before && (_scene->_priorSceneId != 608))
+	if (!player.been_here_before && (previous_room != 608))
 		global[kDogStatus] = DOG_PRESENT;
 
-	if ((_scene->_priorSceneId == 608) && (global[kDogStatus] < DOG_GONE))
+	if ((previous_room == 608) && (global[kDogStatus] < DOG_GONE))
 		global[kDogStatus] = DOG_GONE;
 
 	local._animationActive = 0;
@@ -77,11 +77,11 @@ static void room_607_init() {
 	g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
 	_scene->_sequences.setDepth(g_sequence_ids[2], 4);
 
-	if (_scene->_priorSceneId == 608) {
+	if (previous_room == 608) {
 		player.x = 297;
 		player.y = 50;
 		player.facing = FACING_SOUTHEAST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 40;
 		player.y = 104;
 		player.facing = FACING_SOUTHEAST;
@@ -90,7 +90,7 @@ static void room_607_init() {
 		_scene->_sequences.remove(g_sequence_ids[2]);
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-		_scene->loadAnimation(kernel_name('R', 1), 80);
+		kernel_run_animation(kernel_name('R', 1), 80);
 	} else if (global[kDogStatus] == DOG_LEFT) {
 		g_sprite_ids[4] = kernel_load_series(kernel_name('g', 3), 0);
 		g_sprite_ids[5] = kernel_load_series(kernel_name('g', 7), 0);
@@ -99,7 +99,7 @@ static void room_607_init() {
 
 	section_6_music();
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_BONES);
 
 	pal_change_color(252, 63, 44, 30);
@@ -109,13 +109,13 @@ static void room_607_init() {
 
 static void room_607_daemon() {
 	if (global[kDogStatus] == DOG_LEFT) {
-		int32 diff = _scene->_frameStartTime - local._lastFrameTime;
+		int32 diff = kernel.clock - local._lastFrameTime;
 		if ((diff >= 0) && (diff <= 4))
 			local._dogTimer += diff;
 		else
 			local._dogTimer++;
 
-		local._lastFrameTime = _scene->_frameStartTime;
+		local._lastFrameTime = kernel.clock;
 	}
 
 	if ((local._dogTimer >= 480) && !local._dogLoop && !local._shopAvailable && (global[kDogStatus] == DOG_LEFT) && !player.special_code) {
@@ -251,7 +251,7 @@ static void room_607_daemon() {
 			text_show(60729);
 			local._animationActive = 0;
 			local._dogEatsRex = false;
-			_scene->_reloadSceneFlag = true;
+			kernel.force_restart = true;
 			player.commands_allowed = true;
 			break;
 
@@ -299,7 +299,7 @@ static void handleThrowingBone() {
 		player.commands_allowed = false;
 		_scene->_sequences.remove(g_sequence_ids[1]);
 		player.walker_visible = false;
-		_scene->loadAnimation(kernel_name('D', local._animationMode), 1);
+		kernel_run_animation(kernel_name('D', local._animationMode), 1);
 		break;
 
 	case 1:
@@ -371,7 +371,7 @@ static void room_607_pre_parser() {
 
 static void room_607_parser() {
 	if (player_said_2(walk_through, side_entrance))
-		_scene->_nextSceneId = 608;
+		new_room = 608;
 	else if (player_said_2(get_inside, car)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -404,7 +404,7 @@ static void room_607_parser() {
 			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
@@ -501,8 +501,8 @@ void room_607_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_obnoxious_dog);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_obnoxious_dog);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index ae4413f75a2..ea06fa151a1 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -76,7 +76,7 @@ static void resetDogVariables() {
 }
 
 static void restoreAnimations() {
-	_scene->freeAnimation();
+	kernel_abort_animation(0);
 	local._carMode = 0;
 	player.commands_allowed = true;
 	if (local._throwMode == 6)
@@ -85,18 +85,18 @@ static void restoreAnimations() {
 	if (global[kCarStatus] == CAR_UP) {
 		_scene->_sequences.remove(g_sequence_ids[6]);
 		_scene->_sequences.remove(g_sequence_ids[7]);
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 	} else {
 		_scene->_sequences.remove(g_sequence_ids[8]);
 		_scene->_sequences.remove(g_sequence_ids[6]);
 		_scene->_sequences.remove(g_sequence_ids[7]);
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(6);
 	}
 }
 
 static void setCarAnimations() {
-	_scene->freeAnimation();
+	kernel_abort_animation(0);
 	if (global[kCarStatus] == CAR_UP) {
 		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 1);
 		_scene->_sequences.setPosition(g_sequence_ids[6], Common::Point(143, 98));
@@ -127,11 +127,11 @@ static void handleThrowingBone() {
 		player.walker_visible = false;
 		local._carMode = local._throwMode;
 		if (local._throwMode == 4)
-			_scene->loadAnimation(kernel_name('X', 2), 1);
+			kernel_run_animation(kernel_name('X', 2), 1);
 		else if (local._throwMode == 5)
-			_scene->loadAnimation(kernel_name('X', 1), 1);
+			kernel_run_animation(kernel_name('X', 1), 1);
 		else
-			_scene->loadAnimation(kernel_name('X', 3), 1);
+			kernel_run_animation(kernel_name('X', 3), 1);
 		break;
 
 	case 1:
@@ -235,14 +235,14 @@ static void room_608_init() {
 		local._resetPositionsFl = false;
 		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
 		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 	} else if (global[kCarStatus] == CAR_DOWN) {
 		local._carMode = 0;
 		local._dogDeathMode = 0;
 		local._resetPositionsFl = false;
 		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
 		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(6);
 	} else if (global[kCarStatus] == CAR_SQUASHES_DOG) {
 		local._carMode = 2;
@@ -250,27 +250,27 @@ static void room_608_init() {
 		local._resetPositionsFl = false;
 		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
 		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
-		_scene->loadAnimation(kernel_name('C', -1));
+		kernel_run_animation(kernel_name('C', -1), 0);
 	} else if (global[kCarStatus] == CAR_SQUASHES_DOG_AGAIN) {
 		local._carMode = 1;
 		local._dogDeathMode = 2;
 		local._resetPositionsFl = true;
 		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
 		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
-		_scene->loadAnimation(kernel_name('B', -1));
+		kernel_run_animation(kernel_name('B', -1), 0);
 	} else {
 		local._carMode = 3;
 		local._dogDeathMode = 2;
 		local._resetPositionsFl = true;
 		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
 		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
-		_scene->loadAnimation(kernel_name('D', -1));
+		kernel_run_animation(kernel_name('D', -1), 0);
 	}
 
 	pal_change_color(252, 63, 44, 30);
 	pal_change_color(253, 63, 20, 22);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 46;
 		player.y = 132;
 		player.facing = FACING_EAST;
@@ -292,7 +292,7 @@ static void room_608_init() {
 
 	section_6_music();
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_BONES);
 
 	kernel.quotes = quote_load(0x2FB, 0x2FC, 0x2FE, 0x2FD, 0x2FF, 0x300, 0x301, 0x302, 0x303, 0x304, 0);
@@ -300,13 +300,13 @@ static void room_608_init() {
 
 static void room_608_daemon() {
 	if (local._dogFirstEncounter) {
-		long diff = _scene->_frameStartTime - local._dogTimer1;
+		long diff = kernel.clock - local._dogTimer1;
 		if ((diff >= 0) && (diff <= 1))
 			local._dogWindowTimer += diff;
 		else
 			local._dogWindowTimer++;
 
-		local._dogTimer1 = _scene->_frameStartTime;
+		local._dogTimer1 = kernel.clock;
 	}
 
 	if (local._dogActiveFl && (local._dogWindowTimer >= 2) && !local._dogHitWindow) {
@@ -375,13 +375,13 @@ static void room_608_daemon() {
 	}
 
 	if (local._dogSquashFl && !local._dogFirstEncounter && local._dogUnderCar && local._dogActiveFl) {
-		long diff = _scene->_frameStartTime - local._dogTimer2;
+		long diff = kernel.clock - local._dogTimer2;
 		if ((diff >= 0) && (diff <= 4))
 			local._dogRunTimer += diff;
 		else
 			local._dogRunTimer++;
 
-		local._dogTimer2 = _scene->_frameStartTime;
+		local._dogTimer2 = kernel.clock;
 	}
 
 	if (local._dogRunTimer >= 480 && !local._checkFl && !local._buttonPressedonTimeFl && !local._dogFirstEncounter && local._dogUnderCar && local._dogActiveFl) {
@@ -665,7 +665,7 @@ static void room_608_daemon() {
 		case 84:
 			local._rexBeingEaten = false;
 			local._animationMode = 0;
-			_scene->_reloadSceneFlag = true;
+			kernel.force_restart = true;
 			player.commands_allowed = true;
 			break;
 
@@ -707,7 +707,7 @@ static void room_608_pre_parser() {
 
 static void room_608_parser() {
 	if (player_said_2(walk_through, doorway))
-		_scene->_nextSceneId = 607;
+		new_room = 607;
 	else if (player_said_2(push, down_button)) {
 		player.commands_allowed = true;
 		switch (kernel.trigger) {
@@ -737,13 +737,13 @@ static void room_608_parser() {
 				local._dogActiveFl = false;
 				local._dogUnderCar = false;
 				_scene->_sequences.remove(g_sequence_ids[10]);
-				_scene->freeAnimation();
-				_scene->loadAnimation(kernel_name('C', -1));
+				kernel_abort_animation(0);
+				kernel_run_animation(kernel_name('C', -1), 0);
 			} else {
 				local._resetPositionsFl = false;
 				local._carMode = 1;
-				_scene->freeAnimation();
-				_scene->loadAnimation(kernel_name('B', -1));
+				kernel_abort_animation(0);
+				kernel_run_animation(kernel_name('B', -1), 0);
 			}
 
 			local._carMoveMode = 2;
@@ -805,8 +805,8 @@ static void room_608_parser() {
 			else {
 				local._carMode = 3;
 				local._resetPositionsFl = false;
-				_scene->freeAnimation();
-				_scene->loadAnimation(kernel_name('D', -1));
+				kernel_abort_animation(0);
+				kernel_run_animation(kernel_name('D', -1), 0);
 			}
 			local._carMoveMode = 1;
 			_scene->_sequences.addTimer(1, 2);
@@ -961,7 +961,7 @@ static void room_608_parser() {
 	else if (player_said_2(look, calendar))
 		text_show(60823);
 	else if (player_said_2(look, storage_box)) {
-		if (object[OBJ_REARVIEW_MIRROR].location == _scene->_currentSceneId)
+		if (object[OBJ_REARVIEW_MIRROR].location == room_id)
 			text_show(60825);
 		else
 			text_show(60824);
@@ -970,7 +970,7 @@ static void room_608_parser() {
 	else if (player_said_2(look, rearview_mirror) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(60828);
 	else if (player_said_2(look, tool_box)) {
-		if (object[OBJ_POLYCEMENT].location == _scene->_currentSceneId)
+		if (object[OBJ_POLYCEMENT].location == room_id)
 			text_show(60829);
 		else
 			text_show(60830);
@@ -1032,10 +1032,10 @@ void room_608_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_polycement);
-	_scene->addActiveVocab(words_car);
-	_scene->addActiveVocab(words_obnoxious_dog);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_polycement);
+	vocab_make_active(words_car);
+	vocab_make_active(words_obnoxious_dog);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index c4812ae897d..790d4ab7d02 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -53,17 +53,17 @@ static void room_609_init() {
 	if (!player.been_here_before)
 		global[kBeenInVideoStore] = false;
 
-	if (_scene->_priorSceneId == 611) {
+	if (previous_room == 611) {
 		player.x = 264;
 		player.y = 69;
 		player.facing = FACING_SOUTHWEST;
-	} else if (_scene->_priorSceneId == 610) {
+	} else if (previous_room == 610) {
 		player.x = 23;
 		player.y = 90;
 		player.facing = FACING_EAST;
 		_scene->_sequences.addTimer(60, 60);
 		player.commands_allowed = false;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 86;
 		player.y = 136;
 		player.facing = FACING_NORTHEAST;
@@ -72,10 +72,10 @@ static void room_609_init() {
 		_scene->_sequences.remove(g_sequence_ids[1]);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 5);
-		_scene->loadAnimation(kernel_name('R', 1), 70);
+		kernel_run_animation(kernel_name('R', 1), 70);
 	}
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_DOOR_KEY);
 		if (game.difficulty != DIFFICULTY_EASY)
 			inter_give_to_player(OBJ_PENLIGHT);
@@ -199,7 +199,7 @@ static void enterStore() {
 
 	case 5:
 		_scene->_sequences.remove(g_sequence_ids[5]);
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = true;
 		_scene->_sequences.remove(g_sequence_ids[2]);
 		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 7, 1, 0, 0);
@@ -230,7 +230,7 @@ static void enterStore() {
 		_scene->_sequences.setDepth(g_sequence_ids[2], 9);
 		global[kBeenInVideoStore] = true;
 		player.commands_allowed = true;
-		_scene->_nextSceneId = 610;
+		new_room = 610;
 		break;
 
 	default:
@@ -245,7 +245,7 @@ static void room_609_pre_parser() {
 
 static void room_609_parser() {
 	if (player_said_2(walk_towards, alley))
-		_scene->_nextSceneId = 611;
+		new_room = 611;
 	else if (player_said_2(walk_through, video_store_door)) {
 		if (!global[kBeenInVideoStore]) {
 			switch (kernel.trigger) {
@@ -265,7 +265,7 @@ static void room_609_parser() {
 
 			case 2:
 				_scene->_sequences.remove(g_sequence_ids[5]);
-				player.clock = _scene->_frameStartTime - player.frame_delay;
+				player.clock = kernel.clock - player.frame_delay;
 				player.walker_visible = true;
 				_scene->_sequences.addTimer(60, 3);
 				break;
@@ -323,7 +323,7 @@ static void room_609_parser() {
 			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[4], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
diff --git a/engines/mads/nebular/rooms/room610.cpp b/engines/mads/nebular/rooms/room610.cpp
index f4180aa767f..5510624b807 100644
--- a/engines/mads/nebular/rooms/room610.cpp
+++ b/engines/mads/nebular/rooms/room610.cpp
@@ -56,7 +56,7 @@ static void room_610_init() {
 	if (!player.been_here_before)
 		local._cellCharging = false;
 
-	if (object[OBJ_PHONE_HANDSET].location == _scene->_currentSceneId) {
+	if (object[OBJ_PHONE_HANDSET].location == room_id) {
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
 		local._handsetHotspotId = _scene->_dynamicHotspots.add(words_phone_handset, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._handsetHotspotId, Common::Point(132, 121), FACING_NORTHWEST);
@@ -64,10 +64,10 @@ static void room_610_init() {
 			global[kHandsetCellStatus] = 1;
 	}
 
-	if (_scene->_roomChanged && game.difficulty != DIFFICULTY_EASY)
+	if (kernel.teleported_in && game.difficulty != DIFFICULTY_EASY)
 		inter_give_to_player(OBJ_PENLIGHT);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 175;
 		player.y = 152;
 		player.facing = FACING_NORTHWEST;
@@ -78,13 +78,13 @@ static void room_610_init() {
 
 static void room_610_daemon() {
 	if (local._cellCharging) {
-		long diff = _scene->_frameStartTime - local._lastFrameTimer;
+		long diff = kernel.clock - local._lastFrameTimer;
 		if ((diff >= 0) && (diff <= 60))
 			local._cellChargingTimer += diff;
 		else
 			local._cellChargingTimer++;
 
-		local._lastFrameTimer = _scene->_frameStartTime;
+		local._lastFrameTimer = kernel.clock;
 	}
 
 	// CHECKME: local._checkVal is always false, could be removed
@@ -99,7 +99,7 @@ static void room_610_daemon() {
 
 static void room_610_parser() {
 	if (player_said_2(exit_from, video_store))
-		_scene->_nextSceneId = 609;
+		new_room = 609;
 	else if (player_said_2(take, phone_handset)) {
 		if (kernel.trigger || !player_has(OBJ_PHONE_HANDSET)) {
 			switch (kernel.trigger) {
@@ -147,7 +147,7 @@ static void room_610_parser() {
 			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
 			local._handsetHotspotId = _scene->_dynamicHotspots.add(words_phone_handset, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(local._handsetHotspotId, Common::Point(132, 121), FACING_NORTHWEST);
-			inter_move_object(OBJ_PHONE_HANDSET, _scene->_currentSceneId);
+			inter_move_object(OBJ_PHONE_HANDSET, room_id);
 			break;
 
 		case 2:
@@ -234,8 +234,8 @@ void room_610_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_phone_handset);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_phone_handset);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index 5d3a8193368..b2ab39cf79e 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -145,12 +145,12 @@ static void displayHermitQuestions(int question) {
 	case 1:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x281);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x282);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -159,12 +159,12 @@ static void displayHermitQuestions(int question) {
 	case 2:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x283);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x284);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -173,7 +173,7 @@ static void displayHermitQuestions(int question) {
 	case 3:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x285);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -182,7 +182,7 @@ static void displayHermitQuestions(int question) {
 	case 4:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x286);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -191,17 +191,17 @@ static void displayHermitQuestions(int question) {
 	case 5:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x297);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y - 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x298);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x299);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -210,12 +210,12 @@ static void displayHermitQuestions(int question) {
 	case 6:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x29A);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x29B);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -224,12 +224,12 @@ static void displayHermitQuestions(int question) {
 	case 7:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2A0);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2A1);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -238,17 +238,17 @@ static void displayHermitQuestions(int question) {
 	case 8:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2A2);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2A3);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2A4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -257,12 +257,12 @@ static void displayHermitQuestions(int question) {
 	case 9:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2A5);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2A6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -271,17 +271,17 @@ static void displayHermitQuestions(int question) {
 	case 10:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2A8);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2A9);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2AA);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -290,22 +290,22 @@ static void displayHermitQuestions(int question) {
 	case 11:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2AB);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2AC);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2AD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2AE);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -314,22 +314,22 @@ static void displayHermitQuestions(int question) {
 	case 12:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2AF);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2B0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2B1);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2B2);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -338,22 +338,22 @@ static void displayHermitQuestions(int question) {
 	case 13:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2B3);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2B4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2B5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2B6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
@@ -366,22 +366,22 @@ static void displayHermitQuestions(int question) {
 	case 14:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2BA);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2BB);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2BC);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2BD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -390,22 +390,22 @@ static void displayHermitQuestions(int question) {
 	case 15:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2BE);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2BF);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C1);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -414,27 +414,27 @@ static void displayHermitQuestions(int question) {
 	case 16:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2C2);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C3);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -443,22 +443,22 @@ static void displayHermitQuestions(int question) {
 	case 17:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2C7);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C8);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2C9);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2CA);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -467,17 +467,17 @@ static void displayHermitQuestions(int question) {
 	case 18:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2CB);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2CC);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2CD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -486,17 +486,17 @@ static void displayHermitQuestions(int question) {
 	case 19:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2CE);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2CF);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2D0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -505,27 +505,27 @@ static void displayHermitQuestions(int question) {
 	case 20:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2E1);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2E2);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2E3);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2E4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2E5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
 	}
@@ -534,27 +534,27 @@ static void displayHermitQuestions(int question) {
 	case 21:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2D3);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2D4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2D5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2D6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 800, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2D7);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 800, curQuote);
 	}
@@ -563,22 +563,22 @@ static void displayHermitQuestions(int question) {
 	case 22:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2D8);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2D9);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2DA);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2DB);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 700, curQuote);
 	}
@@ -587,27 +587,27 @@ static void displayHermitQuestions(int question) {
 	case 23:
 	{
 		const char *curQuote = quote_string(kernel.quotes, 0x2DC);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2DD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2DE);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2DF);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 700, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2E0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 700, curQuote);
 	}
@@ -758,12 +758,12 @@ static void handleSubDialog1() {
 		_scene->_kernelMessages.reset();
 
 		const char *curQuote = quote_string(kernel.quotes, 0x2D1);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, 120, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x2D2);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 
@@ -818,7 +818,7 @@ static void handleSubDialog1() {
 		_scene->_kernelMessages.reset();
 
 		const char *curQuote = quote_string(kernel.quotes, 0x2E6);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 
@@ -856,7 +856,7 @@ static void handleSubDialog2() {
 	{
 		_scene->_kernelMessages.reset();
 		const char *curQuote = quote_string(kernel.quotes, 0x2A7);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 		setDialogNode(0);
@@ -875,7 +875,7 @@ static void handleDialog() {
 		player.commands_allowed = false;
 
 		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 
 		if (width > 200) {
 			static char subQuote1[34], subQuote2[34];
@@ -942,7 +942,7 @@ static void room_611_init() {
 	local._alreadyTalkingFl = false;
 	local._startTradingFl = false;
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 22;
 		player.y = 132;
 		player.facing = FACING_EAST;
@@ -950,7 +950,7 @@ static void room_611_init() {
 	}
 
 	if (!global[kHasTalkedToHermit]) {
-		_scene->loadAnimation(kernel_full_name(611, 'h', -1, "", EXT_AA), 0);
+		kernel_run_animation(kernel_full_name(611, 'h', -1, "", EXT_AA), 0);
 		local._nextFrame = 47;
 		local._hermitMode = 1;
 		local._hermitTalkingFl = false;
@@ -1251,7 +1251,7 @@ static void room_611_daemon() {
 	}
 
 	if (kernel.trigger == 112) {
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = true;
 	}
 
@@ -1311,7 +1311,7 @@ static void room_611_daemon() {
 	}
 
 	if (kernel.trigger == 115) {
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = true;
 		if (local._hermitDisplayedQuestion == 21) {
 			player.commands_allowed = false;
@@ -1351,12 +1351,12 @@ static void room_611_parser() {
 		_scene->_kernelMessages.reset();
 
 		const char *curQuote = quote_string(kernel.quotes, 0x323);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, 120, curQuote);
 
 		curQuote = quote_string(kernel.quotes, 0x324);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, _scene->_textSpacing);
+		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
 		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
 	} else if (kernel.trigger == 90) {
@@ -1498,8 +1498,8 @@ void room_611_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_rat);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_rat);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index d7e20688174..c505026c817 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -115,7 +115,7 @@ static void room_612_init() {
 	g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, local._cycleIndex);
 	_scene->_sequences.setDepth(g_sequence_ids[2], 1);
 
-	if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 280;
 		player.y = 75;
 		player.facing = FACING_SOUTHWEST;
@@ -123,12 +123,12 @@ static void room_612_init() {
 		player.commands_allowed = false;
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 3);
-		_scene->loadAnimation(kernel_name('R', 1), 70);
+		kernel_run_animation(kernel_name('R', 1), 70);
 	}
 
 	section_6_music();
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_PADLOCK_KEY);
 
 	kernel.quotes = quote_load(0x2F5, 0x2F4, 0);
@@ -194,7 +194,7 @@ static void room_612_parser() {
 			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], true, -2);
 			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
-			_scene->_nextSceneId = 504;
+			new_room = 504;
 		}
 		break;
 
@@ -255,8 +255,8 @@ void room_612_preload() {
 
 	section_6_walker();
 	section_6_interface();
-	_scene->addActiveVocab(words_fishing_line);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_fishing_line);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room620.cpp b/engines/mads/nebular/rooms/room620.cpp
index 432c7303bb4..49353d0a304 100644
--- a/engines/mads/nebular/rooms/room620.cpp
+++ b/engines/mads/nebular/rooms/room620.cpp
@@ -45,28 +45,28 @@ static void room_620_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 		_scene->_sequences.remove(g_sequence_ids[1]);
-		_scene->loadAnimation(kernel_name('E', -1), 71);
+		kernel_run_animation(kernel_name('E', -1), 71);
 		break;
 
 	case 71:
-		if (_scene->_priorSceneId == 751) {
+		if (previous_room == 751) {
 			global[kCityFlooded] = true;
 			global[kTeleporterRoom + 5] = 0;
-			_scene->_nextSceneId = 701;
-		} else if (_scene->_priorSceneId == 752) {
+			new_room = 701;
+		} else if (previous_room == 752) {
 			global[kCityFlooded] = true;
 			global[kTeleporterRoom + 5] = 0;
-			_scene->_nextSceneId = 702;
-		} else if (_scene->_priorSceneId < 501 || _scene->_priorSceneId > 752) {
+			new_room = 702;
+		} else if (previous_room < 501 || previous_room > 752) {
 			global[kCityFlooded] = true;
 			global[kTeleporterRoom + 5] = 0;
-			_scene->_nextSceneId = _scene->_priorSceneId;
-		} else if (_scene->_priorSceneId >= 501 && _scene->_priorSceneId <= 612) {
+			new_room = previous_room;
+		} else if (previous_room >= 501 && previous_room <= 612) {
 			global[kResurrectRoom] = global[kHoverCarLocation];
 			inter_give_to_player(OBJ_TIMEBOMB);
 			global[kTimebombStatus] = 0;
 			global[kTimebombTimer] = 0;
-			_scene->_nextSceneId = 605;
+			new_room = 605;
 		}
 		player.commands_allowed = true;
 		break;
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index 883995f0eef..8b947d769ea 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -46,7 +46,7 @@ static void room_701_init() {
 	g_sprite_ids[5] = kernel_load_series("*RM202A1", 0);
 	g_sprite_ids[6] = kernel_load_series(kernel_name('b', 8), 0);
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_BINOCULARS);
 		inter_give_to_player(OBJ_TWINKIFRUIT);
 		inter_give_to_player(OBJ_BOMB);
@@ -73,7 +73,7 @@ static void room_701_init() {
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(48, 136));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 10);
 
-	int boatStatus = (_scene->_priorSceneId == 703) ? BOAT_GONE : global[kBoatStatus];
+	int boatStatus = (previous_room == 703) ? BOAT_GONE : global[kBoatStatus];
 
 	switch (boatStatus) {
 	case BOAT_TIED_FLOATING:
@@ -106,11 +106,11 @@ static void room_701_init() {
 		local._fishingLineId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(234, 129), FACING_NORTHEAST);
 	}
 
-	if (_scene->_priorSceneId == 702) {
+	if (previous_room == 702) {
 		player.x = 309;
 		player.y = 138;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId == 710) {
+	} else if (previous_room == 710) {
 		player.x = 154;
 		player.y = 129;
 		player.facing = FACING_NORTH;
@@ -119,15 +119,15 @@ static void room_701_init() {
 		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
 		_scene->_sequences.setPosition(g_sequence_ids[5], Common::Point(155, 129));
 		_scene->_sequences.addTimer(15, 60);
-	} else if (_scene->_priorSceneId == 703) {
+	} else if (previous_room == 703) {
 		player.x = 231;
 		player.y = 127;
 		player.facing = FACING_SOUTH;
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->loadAnimation(kernel_name('B', 1), 80);
+		kernel_run_animation(kernel_name('B', 1), 80);
 		g_engine->_soundManager->command(28, 0);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG && _scene->_priorSceneId != 620) {
+	} else if (previous_room != RETURNING_FROM_DIALOG && previous_room != 620) {
 		player.x = 22;
 		player.y = 131;
 		player.facing = FACING_EAST;
@@ -187,7 +187,7 @@ static void room_701_daemon() {
 	case 80:
 	{
 		player.walker_visible = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 9);
 		int idx = _scene->_dynamicHotspots.add(words_boat, words_climb_into, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
@@ -236,7 +236,7 @@ static void room_701_parser() {
 		break;
 
 		case 2:
-			_scene->_nextSceneId = 710;
+			new_room = 710;
 			break;
 
 		default:
@@ -274,7 +274,7 @@ static void room_701_parser() {
 			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(48, 136));
 			_scene->_sequences.setDepth(g_sequence_ids[1], 10);
 			global[kResurrectRoom] = 701;
-			_scene->_nextSceneId = 605;
+			new_room = 605;
 			break;
 
 		default:
@@ -292,7 +292,7 @@ static void room_701_parser() {
 				_scene->_dynamicHotspots.remove(local._fishingLineId);
 				_scene->_hotspots.activate(words_boat, false);
 				player.walker_visible = false;
-				_scene->loadAnimation(kernel_name('E', -1), 1);
+				kernel_run_animation(kernel_name('E', -1), 1);
 				break;
 
 			case 1:
@@ -333,11 +333,11 @@ static void room_701_parser() {
 			player.commands_allowed = false;
 			_scene->_sequences.remove(g_sequence_ids[2]);
 			player.walker_visible = false;
-			_scene->loadAnimation(kernel_name('B', 0), 1);
+			kernel_run_animation(kernel_name('B', 0), 1);
 			break;
 
 		case 1:
-			_scene->_nextSceneId = 703;
+			new_room = 703;
 			break;
 
 		default:
@@ -397,10 +397,10 @@ void room_701_preload() {
 
 	section_7_walker();
 	section_7_interface();
-	_scene->addActiveVocab(words_boat);
-	_scene->addActiveVocab(words_climb_into);
-	_scene->addActiveVocab(words_fishing_line);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_boat);
+	vocab_make_active(words_climb_into);
+	vocab_make_active(words_fishing_line);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room702.cpp b/engines/mads/nebular/rooms/room702.cpp
index 8df2cf7f8c0..01b63fb89d2 100644
--- a/engines/mads/nebular/rooms/room702.cpp
+++ b/engines/mads/nebular/rooms/room702.cpp
@@ -34,11 +34,11 @@ namespace Rooms {
 static void room_702_init() {
 	g_sprite_ids[12] = kernel_load_series("*RXMBD_8", 0);
 
-	if (_scene->_priorSceneId == 701) {
+	if (previous_room == 701) {
 		player.x = 13;
 		player.y = 145;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG && _scene->_priorSceneId != 620) {
+	} else if (previous_room != RETURNING_FROM_DIALOG && previous_room != 620) {
 		player.x = 289;
 		player.y = 138;
 		player_walk(262, 148, FACING_WEST);
@@ -75,7 +75,7 @@ static void room_702_parser() {
 	else if (player_said_2(step_into, teleporter)) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_nextSceneId = 711;
+		new_room = 711;
 	} else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT) && (!player_has(OBJ_BONES) || kernel.trigger)) {
 		switch (kernel.trigger) {
 		case 0:
diff --git a/engines/mads/nebular/rooms/room703.cpp b/engines/mads/nebular/rooms/room703.cpp
index ac8ff46aa28..689a9893d78 100644
--- a/engines/mads/nebular/rooms/room703.cpp
+++ b/engines/mads/nebular/rooms/room703.cpp
@@ -135,7 +135,7 @@ static void room_703_init() {
 	player.walker_visible = false;
 
 	if (!player.been_here_before) {
-		if (_scene->_priorSceneId == 704)
+		if (previous_room == 704)
 			global[kMonsterAlive] = false;
 		else
 			global[kMonsterAlive] = true;
@@ -151,44 +151,44 @@ static void room_703_init() {
 	if (!global[kMonsterAlive])
 		_scene->_hotspots.activate(words_sea_monster, false);
 
-	if (_scene->_priorSceneId == 704) {
+	if (previous_room == 704) {
 		player.commands_allowed = false;
 		local._curSequence = 2;
 		local._boatDir = 2;
 		local._monsterMode = 0;
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(34);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.commands_allowed = false;
 		local._boatDir = 1;
 		if (global[kMonsterAlive]) {
 			local._monsterMode = 1;
 			local._curSequence = 0;
-			_scene->loadAnimation(kernel_name('B', -1));
+			kernel_run_animation(kernel_name('B', -1), 0);
 		} else {
 			local._curSequence = 0;
 			local._monsterMode = 0;
-			_scene->loadAnimation(kernel_name('A', -1));
+			kernel_run_animation(kernel_name('A', -1), 0);
 		}
 	} else if (global[kMonsterAlive]) {
 		local._curSequence = 0;
 		local._boatDir = 1;
 		local._monsterMode = 1;
-		_scene->loadAnimation(kernel_name('B', -1));
+		kernel_run_animation(kernel_name('B', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(39);
 	} else if (local._boatDir == 1) {
 		local._curSequence = 0;
 		local._monsterMode = 0;
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(9);
 	} else if (local._boatDir == 2) {
 		local._curSequence = 0;
 		local._monsterMode = 0;
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(56);
 	}
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_TWINKIFRUIT);
 		inter_give_to_player(OBJ_BOMB);
 		inter_give_to_player(OBJ_CHICKEN);
@@ -203,29 +203,29 @@ static void room_703_init() {
 
 static void room_703_daemon() {
 	if (local._startMonsterTimer) {
-		long diff = _scene->_frameStartTime - local._lastFrameTime;
+		long diff = kernel.clock - local._lastFrameTime;
 		if ((diff >= 0) && (diff <= 12))
 			local._monsterTime += diff;
 		else
 			local._monsterTime++;
 
-		local._lastFrameTime = _scene->_frameStartTime;
+		local._lastFrameTime = kernel.clock;
 	}
 
 	if ((local._monsterTime >= 2400) && !local._rexDeathFl && !local._useBomb) {
 		local._startMonsterTimer = false;
 		local._rexDeathFl = true;
 		player.commands_allowed = false;
-		_scene->freeAnimation();
+		kernel_abort_animation(0);
 		local._monsterMode = 3;
-		_scene->loadAnimation(kernel_name('D', -1));
+		kernel_run_animation(kernel_name('D', -1), 0);
 		local._rexDeathFl = false;
 		local._monsterTime = 0;
 	}
 
 
 	if (kernel.trigger == 70)
-		_scene->_reloadSceneFlag = true;
+		kernel.force_restart = true;
 
 	if ((local._monsterMode == 3) && (_scene->_animation[0] != nullptr)) {
 		if (_scene->_animation[0]->getCurrentFrame() != local._boatFrame) {
@@ -248,7 +248,7 @@ static void room_703_daemon() {
 	}
 
 	if (kernel.trigger == 70)
-		_scene->_reloadSceneFlag = true;
+		kernel.force_restart = true;
 
 	if ((local._monsterMode == 0) && (_scene->_animation[0] != nullptr)) {
 		if (_scene->_animation[0]->getCurrentFrame() != local._boatFrame) {
@@ -273,7 +273,7 @@ static void room_703_daemon() {
 
 			case 34:
 				if (local._curSequence != 2)
-					_scene->_nextSceneId = 704;
+					new_room = 704;
 				break;
 
 			case 57:
@@ -292,7 +292,7 @@ static void room_703_daemon() {
 				break;
 
 			case 73:
-				_scene->_nextSceneId = 701;
+				new_room = 701;
 				break;
 
 			case 82:
@@ -390,7 +390,7 @@ static void room_703_daemon() {
 				break;
 
 			case 151:
-				_scene->_nextSceneId = 701;
+				new_room = 701;
 				break;
 
 			default:
@@ -443,18 +443,18 @@ static void room_703_daemon() {
 				} else
 					text_show(70317);
 
-				_scene->freeAnimation();
+				kernel_abort_animation(0);
 				local._monsterMode = 1;
-				_scene->loadAnimation(kernel_name('B', -1));
+				kernel_run_animation(kernel_name('B', -1), 0);
 				_scene->_animation[0]->setCurrentFrame(39);
 				player.commands_allowed = true;
 				break;
 
 			case 91:
 				if (!local._useBomb) {
-					_scene->freeAnimation();
+					kernel_abort_animation(0);
 					local._monsterMode = 1;
-					_scene->loadAnimation(kernel_name('B', -1));
+					kernel_run_animation(kernel_name('B', -1), 0);
 					_scene->_animation[0]->setCurrentFrame(39);
 					player.commands_allowed = true;
 				} else
@@ -465,9 +465,9 @@ static void room_703_daemon() {
 			case 126:
 				_scene->_hotspots.activate(words_sea_monster, false);
 				global[kMonsterAlive] = false;
-				_scene->freeAnimation();
+				kernel_abort_animation(0);
 				local._monsterMode = 0;
-				_scene->loadAnimation(kernel_name('A', -1));
+				kernel_run_animation(kernel_name('A', -1), 0);
 				_scene->_animation[0]->setCurrentFrame(9);
 				player.commands_allowed = true;
 				if (config_file.naughtiness == STORYMODE_NAUGHTY)
@@ -506,42 +506,42 @@ static void room_703_parser() {
 			local._startMonsterTimer = false;
 			local._rexDeathFl = true;
 			local._monsterTime = 0;
-			_scene->freeAnimation();
+			kernel_abort_animation(0);
 			local._monsterMode = 3;
-			_scene->loadAnimation(kernel_name('D', -1));
+			kernel_run_animation(kernel_name('D', -1), 0);
 		} else if (local._boatDir == 2)
 			local._curSequence = 4;
 		else
 			local._curSequence = 1;
 	} else if (player_said_3(throw, bone, sea_monster) || player_said_3(throw, bones, sea_monster)) {
 		player.commands_allowed = false;
-		_scene->freeAnimation();
+		kernel_abort_animation(0);
 		local._monsterMode = 2;
-		_scene->loadAnimation(kernel_name('C', -1));
+		kernel_run_animation(kernel_name('C', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(19);
 	} else if (player_said_3(throw, chicken, sea_monster)) {
 		player.commands_allowed = false;
-		_scene->freeAnimation();
+		kernel_abort_animation(0);
 		local._monsterMode = 2;
-		_scene->loadAnimation(kernel_name('C', -1));
+		kernel_run_animation(kernel_name('C', -1), 0);
 	} else if (player_said_3(throw, twinkifruit, sea_monster)) {
 		player.commands_allowed = false;
-		_scene->freeAnimation();
+		kernel_abort_animation(0);
 		local._monsterMode = 2;
-		_scene->loadAnimation(kernel_name('C', -1));
+		kernel_run_animation(kernel_name('C', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(39);
 	} else if (player_said_3(throw, bomb, sea_monster)) {
 		player.commands_allowed = false;
-		_scene->freeAnimation();
+		kernel_abort_animation(0);
 		local._monsterMode = 2;
-		_scene->loadAnimation(kernel_name('C', -1));
+		kernel_run_animation(kernel_name('C', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(59);
 	} else if (player_said_3(throw, chicken_bomb, sea_monster)) {
 		local._useBomb = true;
 		player.commands_allowed = false;
-		_scene->freeAnimation();
+		kernel_abort_animation(0);
 		local._monsterMode = 2;
-		_scene->loadAnimation(kernel_name('C', -1));
+		kernel_run_animation(kernel_name('C', -1), 0);
 	} else if (player_said_3(put, bottle, water) || player_said_3(fill, bottle, water)) {
 		if (global[kBottleStatus] != 4) {
 			handleBottleInterface();
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index b78a9c63bd0..b18f16fc2a8 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -124,11 +124,11 @@ static void handleFillBottle(int quote) {
 }
 
 static void room_704_init() {
-	if (object[OBJ_BOTTLE].location == _scene->_currentSceneId) {
+	if (object[OBJ_BOTTLE].location == room_id) {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
 		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-		if (_scene->_priorSceneId == 705) {
+		if (previous_room == 705) {
 			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(123, 125));
 			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 		} else {
@@ -143,29 +143,29 @@ static void room_704_init() {
 	local._takeBottleFl = false;
 	local._boatCurrentFrame = -1;
 
-	if (_scene->_priorSceneId == 705) {
+	if (previous_room == 705) {
 		player.commands_allowed = false;
 		local._animationMode = 2;
 		local._boatDirection = 2;
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(36);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.commands_allowed = false;
 		local._boatDirection = 1;
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 	} else if (local._boatDirection == 1) {
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(8);
 	} else if (local._boatDirection == 2) {
-		if (object[OBJ_BOTTLE].location == _scene->_currentSceneId) {
+		if (object[OBJ_BOTTLE].location == room_id) {
 			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(123, 125));
 			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 		}
-		_scene->loadAnimation(kernel_name('A', -1));
+		kernel_run_animation(kernel_name('A', -1), 0);
 		_scene->_animation[0]->setCurrentFrame(57);
 	}
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		global[kMonsterAlive] = false;
 
 	kernel.quotes = quote_load(0x311, 0x312, 0x313, 0x314, 0x315, 0);
@@ -205,7 +205,7 @@ static void room_704_daemon() {
 
 			case 36:
 				if (local._animationMode != 2)
-					_scene->_nextSceneId = 705;
+					new_room = 705;
 				break;
 
 			case 59:
@@ -233,7 +233,7 @@ static void room_704_daemon() {
 				break;
 
 			case 65:
-				_scene->_nextSceneId = 703;
+				new_room = 703;
 				break;
 
 			case 74:
@@ -390,8 +390,8 @@ void room_704_preload() {
 
 	*player.series_name = '\0';
 	section_7_interface();
-	_scene->addActiveVocab(words_bottle);
-	_scene->addActiveVocab(words_look_at);
+	vocab_make_active(words_bottle);
+	vocab_make_active(words_look_at);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room705.cpp b/engines/mads/nebular/rooms/room705.cpp
index afbbccac57c..7618bc01c93 100644
--- a/engines/mads/nebular/rooms/room705.cpp
+++ b/engines/mads/nebular/rooms/room705.cpp
@@ -83,7 +83,7 @@ static void setBottleSequence() {
 	player.commands_allowed = false;
 	_scene->_sequences.remove(g_sequence_ids[3]);
 	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-	_scene->loadAnimation(kernel_name('F', -1), 90);
+	kernel_run_animation(kernel_name('F', -1), 90);
 }
 
 static void handleFillBottle(int quote) {
@@ -124,19 +124,19 @@ static void room_705_init() {
 
 	player.walker_visible = false;
 
-	if (_scene->_priorSceneId == 706) {
+	if (previous_room == 706) {
 		player.commands_allowed = false;
 		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
 		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.commands_allowed = false;
 		_scene->_sequences.addTimer(1, 80);
 		g_engine->_soundManager->command(28, 0);
 	} else
 		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
 
-	if (_scene->_roomChanged)
+	if (kernel.teleported_in)
 		inter_give_to_player(OBJ_BOTTLE);
 
 	kernel.quotes = quote_load(0x311, 0x312, 0x313, 0x314, 0x315, 0);
@@ -245,7 +245,7 @@ static void room_705_parser() {
 			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
 			_scene->_sequences.setDepth(g_sequence_ids[2], 2);
 			_scene->_sequences.updateTimeout(g_sequence_ids[2], syncIdx);
-			_scene->_nextSceneId = 704;
+			new_room = 704;
 			player.commands_allowed = true;
 		}
 		break;
@@ -268,7 +268,7 @@ static void room_705_parser() {
 			int syncIdx = g_sequence_ids[3];
 			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 16);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
-			_scene->_nextSceneId = 706;
+			new_room = 706;
 			player.commands_allowed = true;
 		}
 		break;
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index 13fcc7906cc..53b1dc66008 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -46,7 +46,7 @@ static void handleRexDeath() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->loadAnimation(kernel_name('a', -1), 2);
+		kernel_run_animation(kernel_name('a', -1), 2);
 		break;
 
 	case 2:
@@ -57,12 +57,12 @@ static void handleRexDeath() {
 		else
 			text_show(70629);
 
-		inter_move_object(OBJ_VASE, _scene->_currentSceneId);
+		inter_move_object(OBJ_VASE, room_id);
 		if (local._animationMode == 2)
 			inter_move_object(OBJ_BOTTLE, 2);
 
 		local._animationMode = 0;
-		_scene->_reloadSceneFlag = true;
+		kernel.force_restart = true;
 		break;
 
 	default:
@@ -92,7 +92,7 @@ static void handleTakeVase() {
 			_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(195, 99));
 			int idx = _scene->_dynamicHotspots.add(words_bottle, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(175, 124), FACING_SOUTHEAST);
-			inter_move_object(OBJ_BOTTLE, _scene->_currentSceneId);
+			inter_move_object(OBJ_BOTTLE, room_id);
 		}
 		break;
 
@@ -115,7 +115,7 @@ static void room_706_init() {
 	if (!player.been_here_before)
 		local._emptyPedestral = false;
 
-	if (object[OBJ_VASE].location == _scene->_currentSceneId) {
+	if (object[OBJ_VASE].location == room_id) {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('v', -1), 0);
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 4);
@@ -131,11 +131,11 @@ static void room_706_init() {
 
 	player.walker_visible = true;
 
-	if (_scene->_priorSceneId == 707) {
+	if (previous_room == 707) {
 		player.x = 277;
 		player.y = 103;
 		player.facing = FACING_SOUTHWEST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 167;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -147,11 +147,11 @@ static void room_706_init() {
 
 		switch (global[kTeleporterCommand]) {
 		case 1:
-			_scene->loadAnimation(kernel_name('E', 1), 75);
+			kernel_run_animation(kernel_name('E', 1), 75);
 			break;
 
 		case 2:
-			_scene->loadAnimation(kernel_name('E', -1), 80);
+			kernel_run_animation(kernel_name('E', -1), 80);
 			break;
 
 		default:
@@ -165,7 +165,7 @@ static void room_706_init() {
 
 	local._animationMode = 0;
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_BOTTLE);
 		global[kBottleStatus] = 2;
 	}
@@ -177,14 +177,14 @@ static void room_706_daemon() {
 	if (kernel.trigger == 75) {
 		player.commands_allowed = true;
 		player.walker_visible = true;
-		player.clock = _scene->_frameStartTime - player.frame_delay;
+		player.clock = kernel.clock - player.frame_delay;
 		player_walk(264, 116, FACING_SOUTHWEST);
 	}
 
 	if (kernel.trigger == 80) {
 		global[kTeleporterCommand] = 1;
-		_scene->_nextSceneId = global[kTeleporterDestination];
-		_scene->_reloadSceneFlag = true;
+		new_room = global[kTeleporterDestination];
+		kernel.force_restart = true;
 	}
 
 	if (_scene->_animation[0] != nullptr) {
@@ -218,13 +218,13 @@ static void room_706_parser() {
 	if (player_said_2(walk_inside, teleporter)) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_nextSceneId = 707;
+		new_room = 707;
 		player.command_ready = false;
 		return;
 	}
 
 	if (player_said_2(exit, room)) {
-		_scene->_nextSceneId = 705;
+		new_room = 705;
 		player.command_ready = false;
 		return;
 	}
@@ -267,7 +267,7 @@ static void room_706_parser() {
 	} else if (player_said_2(take, bottle) && player_has(OBJ_VASE))
 		text_show(70631);
 	else if (player.look_around) {
-		if (object[OBJ_VASE].location == _scene->_currentSceneId)
+		if (object[OBJ_VASE].location == room_id)
 			text_show(70610);
 		else
 			text_show(70611);
@@ -288,15 +288,15 @@ static void room_706_parser() {
 	else if (player_said_2(look, wall))
 		text_show(70619);
 	else if (player_said_2(look, pedestal)) {
-		if (object[OBJ_VASE].location == _scene->_currentSceneId)
+		if (object[OBJ_VASE].location == room_id)
 			text_show(70620);
-		else if (object[OBJ_BOTTLE].location == _scene->_currentSceneId)
+		else if (object[OBJ_BOTTLE].location == room_id)
 			text_show(70622);
 		else
 			text_show(70621);
 	} else if (player_said_2(look, teleporter))
 		text_show(70623);
-	else if (player_said_2(look, vase) && (object[OBJ_VASE].location == _scene->_currentSceneId))
+	else if (player_said_2(look, vase) && (object[OBJ_VASE].location == room_id))
 		text_show(70624);
 	else if (player_said_2(look, bottle) && (player.main_object_source == CAT_HOTSPOT))
 		text_show(70632);
@@ -323,9 +323,9 @@ void room_706_preload() {
 
 	section_7_walker();
 	section_7_interface();
-	_scene->addActiveVocab(words_bottle);
-	_scene->addActiveVocab(words_vase);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_bottle);
+	vocab_make_active(words_vase);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room710.cpp b/engines/mads/nebular/rooms/room710.cpp
index 5c65baccc07..56fe2f92fcd 100644
--- a/engines/mads/nebular/rooms/room710.cpp
+++ b/engines/mads/nebular/rooms/room710.cpp
@@ -48,9 +48,9 @@ static void room_710_init() {
 static void room_710_daemon() {
 	if (kernel.trigger == 70) {
 		if (global[kCityFlooded])
-			_scene->_nextSceneId = 701;
+			new_room = 701;
 		else
-			_scene->_nextSceneId = 751;
+			new_room = 751;
 	}
 }
 
@@ -59,9 +59,9 @@ static void room_710_parser() {
 		player.commands_allowed = false;
 
 		if (global[kCityFlooded])
-			_scene->_nextSceneId = 701;
+			new_room = 701;
 		else
-			_scene->_nextSceneId = 751;
+			new_room = 751;
 
 		player.command_ready = false;
 	}
diff --git a/engines/mads/nebular/rooms/room751.cpp b/engines/mads/nebular/rooms/room751.cpp
index 3f7d967a963..e18052f3d35 100644
--- a/engines/mads/nebular/rooms/room751.cpp
+++ b/engines/mads/nebular/rooms/room751.cpp
@@ -58,11 +58,11 @@ static void room_751_init() {
 	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(48, 136));
 	_scene->_sequences.setDepth(g_sequence_ids[1], 10);
 
-	if (_scene->_priorSceneId == 752) {
+	if (previous_room == 752) {
 		player.x = 309;
 		player.y = 138;
 		player.facing = FACING_WEST;
-	} else if (_scene->_priorSceneId == 710) {
+	} else if (previous_room == 710) {
 		player.x = 154;
 		player.y = 129;
 		player.facing = FACING_NORTH;
@@ -71,7 +71,7 @@ static void room_751_init() {
 		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
 		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(155, 129));
 		_scene->_sequences.addTimer(15, 70);
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 22;
 		player.y = 131;
 		player.facing = FACING_EAST;
@@ -92,7 +92,7 @@ static void room_751_init() {
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(268, 140), FACING_NORTHWEST);
 	}
 
-	if (_scene->_roomChanged) {
+	if (kernel.teleported_in) {
 		inter_give_to_player(OBJ_FISHING_LINE);
 		inter_give_to_player(OBJ_BINOCULARS);
 	}
@@ -127,7 +127,7 @@ static void room_751_daemon() {
 		global[kTimebombStatus] = 3;
 		global[kTimebombTimer] = 0;
 		global[kCheckDaemonTimebomb] = false;
-		_scene->_nextSceneId = 620;
+		new_room = 620;
 	}
 
 	switch (kernel.trigger) {
@@ -232,7 +232,7 @@ static void room_751_parser() {
 		break;
 
 		case 2:
-			_scene->_nextSceneId = 710;
+			new_room = 710;
 			break;
 
 		default:
@@ -274,7 +274,7 @@ static void room_751_parser() {
 
 		case 5:
 			player.commands_allowed = true;
-			_scene->_nextSceneId = 513;
+			new_room = 513;
 			break;
 
 		default:
@@ -318,7 +318,7 @@ static void room_751_parser() {
 				int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(268, 140), FACING_NORTHWEST);
 				_scene->_kernelMessages.reset();
-				inter_move_object(OBJ_FISHING_LINE, _scene->_currentSceneId);
+				inter_move_object(OBJ_FISHING_LINE, room_id);
 				local._rexHandingLine = false;
 				global[kLineStatus] = 2;
 				player.commands_allowed = true;
@@ -373,8 +373,8 @@ void room_751_preload() {
 
 	section_7_walker();
 	section_7_interface();
-	_scene->addActiveVocab(words_fishing_line);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_fishing_line);
+	vocab_make_active(words_walkto);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room752.cpp b/engines/mads/nebular/rooms/room752.cpp
index a8a5a9883d3..77b04267c7e 100644
--- a/engines/mads/nebular/rooms/room752.cpp
+++ b/engines/mads/nebular/rooms/room752.cpp
@@ -42,11 +42,11 @@ static void room_752_init() {
 	g_sprite_ids[14] = kernel_load_series(kernel_name('l', -1), 0);
 	g_sprite_ids[12] = kernel_load_series("*RXMBD_8", 0);
 
-	if (_scene->_priorSceneId == 751) {
+	if (previous_room == 751) {
 		player.x = 13;
 		player.y = 145;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 289;
 		player.y = 138;
 		player_walk(262, 148, FACING_WEST);
@@ -100,7 +100,7 @@ static void room_752_daemon() {
 		global[kTimebombStatus] = TIMEBOMB_DEAD;
 		global[kTimebombTimer] = global[kTimebombTimer + 1] = 0;
 		global[kCheckDaemonTimebomb] = false;
-		_scene->_nextSceneId = 620;
+		new_room = 620;
 	}
 }
 
@@ -116,7 +116,7 @@ static void room_752_parser() {
 	else if (player_said_2(step_into, teleporter)) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_nextSceneId = 711;
+		new_room = 711;
 	} else if (player_said_2(take, id_card) && (!player_has(OBJ_ID_CARD) || kernel.trigger)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -210,10 +210,10 @@ void room_752_preload() {
 
 	section_7_walker();
 	section_7_interface();
-	_scene->addActiveVocab(words_id_card);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_look_at);
-	_scene->addActiveVocab(words_laser_beam);
+	vocab_make_active(words_id_card);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_look_at);
+	vocab_make_active(words_laser_beam);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room801.cpp b/engines/mads/nebular/rooms/room801.cpp
index 3eaa8127375..216dab16734 100644
--- a/engines/mads/nebular/rooms/room801.cpp
+++ b/engines/mads/nebular/rooms/room801.cpp
@@ -45,7 +45,7 @@ static void room_801_init() {
 	g_sprite_ids[4] = kernel_load_series(kernel_name('x', 3), 0);
 	g_sprite_ids[5] = kernel_load_series(kernel_name('a', -1), 0);
 
-	if (_scene->_priorSceneId != 802) {
+	if (previous_room != 802) {
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 5);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 13);
 	}
@@ -60,16 +60,16 @@ static void room_801_init() {
 		global[kBeamIsUp] = false;
 		global[kForceBeamDown] = false;
 		global[kDontRepeat] = false;
-	} else if (_scene->_priorSceneId == 808) {
+	} else if (previous_room == 808) {
 		player.x = 148;
 		player.y = 110;
 		player.facing = FACING_NORTH;
-	} else if (_scene->_priorSceneId == 802) {
+	} else if (previous_room == 802) {
 		player.x = 307;
 		player.y = 111;
 		player_walk(270, 118, FACING_WEST);
 		player.walker_visible = true;
-	} else if ((_scene->_priorSceneId != RETURNING_FROM_DIALOG) && !global[kTeleporterCommand]) {
+	} else if ((previous_room != RETURNING_FROM_DIALOG) && !global[kTeleporterCommand]) {
 		player.x = 8;
 		player.y = 117;
 		player_walk(41, 115, FACING_EAST);
@@ -119,7 +119,7 @@ static void room_801_init() {
 	}
 
 	local._walkThroughDoor = false;
-	if (_scene->_priorSceneId == 802) {
+	if (previous_room == 802) {
 		player.commands_allowed = false;
 		local._walkThroughDoor = true;
 	}
@@ -157,15 +157,15 @@ static void room_801_daemon() {
 	}
 
 	if (kernel.trigger == 141) {
-		_scene->_reloadSceneFlag = true;
-		_scene->_nextSceneId = _scene->_priorSceneId;
+		kernel.force_restart = true;
+		new_room = previous_room;
 		global[kTeleporterCommand] = 0;
 	}
 
 	if (kernel.trigger == 80) {
 		global[kTeleporterCommand] = 1;
-		_scene->_nextSceneId = global[kTeleporterDestination];
-		_scene->_reloadSceneFlag = true;
+		new_room = global[kTeleporterDestination];
+		kernel.force_restart = true;
 	}
 
 	if (local._walkThroughDoor && (Common::Point(player.x, player.y) == Common::Point(270, 118))) {
@@ -201,7 +201,7 @@ static void room_801_daemon() {
 	if (kernel.trigger == 110) {
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 5);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 10);
-		_scene->_nextSceneId = 802;
+		new_room = 802;
 	}
 }
 
@@ -218,17 +218,17 @@ static void room_801_pre_parser() {
 		global[kCutFacing] = player.facing;
 		global[kForceBeamDown] = true;
 		global[kDontRepeat] = true;
-		_scene->_nextSceneId = 803;
+		new_room = 803;
 	}
 }
 
 static void room_801_parser() {
 	if (player_said_2(look, control_panel))
-		_scene->_nextSceneId = 808;
+		new_room = 808;
 	else if (player_said_2(walk_inside, teleporter)) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_nextSceneId = 807;
+		new_room = 807;
 	} else if (player_said_2(walk_through, door) && (Common::Point(player.x, player.y) == Common::Point(270, 118))) {
 		player.commands_allowed = false;
 		player.facing = FACING_EAST;
diff --git a/engines/mads/nebular/rooms/room802.cpp b/engines/mads/nebular/rooms/room802.cpp
index cda52d55585..92b4fd1b21c 100644
--- a/engines/mads/nebular/rooms/room802.cpp
+++ b/engines/mads/nebular/rooms/room802.cpp
@@ -49,17 +49,17 @@ static void room_802_init() {
 		global[kBeamIsUp] = false;
 		global[kForceBeamDown] = false;
 		global[kDontRepeat] = false;
-		global[kAntigravClock] = _scene->_frameStartTime;
-	} else if (_scene->_priorSceneId == 801) {
+		global[kAntigravClock] = kernel.clock;
+	} else if (previous_room == 801) {
 		player.x = 15;
 		player.y = 129;
 		player.facing = FACING_EAST;
-	} else if (_scene->_priorSceneId == 803) {
+	} else if (previous_room == 803) {
 		player.x = 303;
 		player.y = 119;
 		player.facing = FACING_WEST;
 
-	} else if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 15;
 		player.y = 129;
 		player.facing = FACING_EAST;
@@ -146,7 +146,7 @@ static void room_802_parser() {
 			break;
 
 		case 2:
-			player.clock = _scene->_frameStartTime + player.frame_delay;
+			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = true;
 			_scene->_sequences.addTimer(20, 3);
 			break;
@@ -179,7 +179,7 @@ static void room_802_parser() {
 			break;
 
 		case 2:
-			player.clock = _scene->_frameStartTime + player.frame_delay;
+			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = true;
 			_scene->_sequences.addTimer(20, 3);
 			break;
@@ -244,9 +244,9 @@ void room_802_preload() {
 
 	section_8_walker();
 	section_8_interface();
-	_scene->addActiveVocab(words_shield_modulator);
-	_scene->addActiveVocab(words_walkto);
-	_scene->addActiveVocab(words_remote);
+	vocab_make_active(words_shield_modulator);
+	vocab_make_active(words_walkto);
+	vocab_make_active(words_remote);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room803.cpp b/engines/mads/nebular/rooms/room803.cpp
index 6f544072f19..0e8ae56f2e9 100644
--- a/engines/mads/nebular/rooms/room803.cpp
+++ b/engines/mads/nebular/rooms/room803.cpp
@@ -55,7 +55,7 @@ static void room_803_init() {
 
 	if (!global[kFromCockpit]) {
 		if (!global[kReturnFromCut]) {
-			if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) {
+			if (previous_room != RETURNING_FROM_DIALOG) {
 				player.x = 15;
 				player.y = 130;
 				player.facing = FACING_EAST;
@@ -124,7 +124,7 @@ static void room_803_init() {
 static void room_803_daemon() {
 	if (kernel.trigger == 120) {
 		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 19);
-		_scene->_nextSceneId = 804;
+		new_room = 804;
 	}
 
 	if (kernel.trigger == 100) {
@@ -148,7 +148,7 @@ static void room_803_daemon() {
 			global[kHasWatchedAntigrav] = true;
 
 			if (global[kForceBeamDown])
-				_scene->_nextSceneId = _scene->_priorSceneId;
+				new_room = previous_room;
 			else
 				player.commands_allowed = true;
 		}
@@ -167,7 +167,7 @@ static void room_803_daemon() {
 		global[kHasWatchedAntigrav] = true;
 
 		if (global[kForceBeamDown])
-			_scene->_nextSceneId = _scene->_priorSceneId;
+			new_room = previous_room;
 		else
 			player.commands_allowed = true;
 	}
@@ -200,16 +200,16 @@ static void room_803_daemon() {
 	}
 
 	if (kernel.trigger == 110)
-		_scene->_nextSceneId = 808;
+		new_room = 808;
 
 	if (kernel.trigger == 130) {
 		global[kBeamIsUp] = true;
-		_scene->_nextSceneId = 804;
+		new_room = 804;
 	}
 
 	if (kernel.trigger == 140) {
 		if (!global[kWindowFixed]) {
-			_scene->_nextSceneId = 810;
+			new_room = 810;
 			global[kInSpace] = true;
 		} else {
 			if (!global[kShieldModInstalled])
@@ -288,7 +288,7 @@ static void room_803_parser() {
 			break;
 
 		case 163:
-			player.clock = _scene->_frameStartTime + player.frame_delay;
+			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = true;
 			player.commands_allowed = true;
 			break;
@@ -347,8 +347,8 @@ void room_803_preload() {
 	section_8_walker();
 	section_8_interface();
 
-	_scene->addActiveVocab(words_guts);
-	_scene->addActiveVocab(words_walkto);
+	vocab_make_active(words_guts);
+	vocab_make_active(words_walkto);
 
 	if ((!global[kFromCockpit] && global[kReturnFromCut] && !global[kBeamIsUp])
 		|| (global[kFromCockpit] && !global[kExitShip])) {
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index 6b6efd05483..215647bb935 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -97,7 +97,7 @@ static void room_804_init() {
 		_scene->_sequences.setDepth(g_sequence_ids[1], 8);
 	}
 
-	_scene->loadAnimation(kernel_full_name(804, 'r', 1, "", EXT_AA));
+	kernel_run_animation(kernel_full_name(804, 'r', 1, "", EXT_AA), 0);
 
 	section_8_music();
 
@@ -170,7 +170,7 @@ static void room_804_daemon() {
 		}
 
 		if (kernel.trigger == 80) {
-			_scene->_nextSceneId = 803;
+			new_room = 803;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() == 7) && (!global[kWindowFixed])) {
@@ -266,7 +266,7 @@ static void room_804_daemon() {
 	}
 
 	if (kernel.trigger == 90) {
-		_scene->_nextSceneId = 803;
+		new_room = 803;
 	}
 
 	if ((_scene->_animation[0]->getCurrentFrame() == 72) && !local._alreadyPop) {
@@ -283,14 +283,14 @@ static void room_804_daemon() {
 static void room_804_parser() {
 	if (player_said_2(look, service_panel) ||
 		player_said_2(open, service_panel)) {
-		_scene->_nextSceneId = 805;
+		new_room = 805;
 	} else if ((player_said_2(activate, remote)) && global[kTopButtonPushed]) {
 		if (!global[kInSpace]) {
 			// Top button pressed on panel in hanger control
 			if (!global[kBeamIsUp]) {
 				global[kFromCockpit] = true;
 				global[kUpBecauseOfRemote] = true;
-				_scene->_nextSceneId = 803;
+				new_room = 803;
 			} else {
 				// Player turning off remote
 				global[kBeamIsUp] = false;
diff --git a/engines/mads/nebular/rooms/room805.cpp b/engines/mads/nebular/rooms/room805.cpp
index 515ecc05326..f0304843f10 100644
--- a/engines/mads/nebular/rooms/room805.cpp
+++ b/engines/mads/nebular/rooms/room805.cpp
@@ -103,7 +103,7 @@ static void room_805_pre_parser() {
 
 static void room_805_parser() {
 	if (player_said_2(exit, service_panel))
-		_scene->_nextSceneId = 804;
+		new_room = 804;
 	else if (player_said_2(install, shield_modulator) && player_has(OBJ_SHIELD_MODULATOR)) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
@@ -154,9 +154,9 @@ void room_805_preload() {
 
 	section_8_walker();
 	section_8_interface();
-	_scene->addActiveVocab(words_remove);
-	_scene->addActiveVocab(words_target_module);
-	_scene->addActiveVocab(words_shield_modulator);
+	vocab_make_active(words_remove);
+	vocab_make_active(words_target_module);
+	vocab_make_active(words_shield_modulator);
 }
 
 } // namespace Rooms
diff --git a/engines/mads/nebular/rooms/room808.cpp b/engines/mads/nebular/rooms/room808.cpp
index ba49d6d6c3b..8ee78820848 100644
--- a/engines/mads/nebular/rooms/room808.cpp
+++ b/engines/mads/nebular/rooms/room808.cpp
@@ -60,11 +60,11 @@ static void room_808_init() {
 		global[kBeamIsUp] = false;
 		global[kForceBeamDown] = false;
 		global[kDontRepeat] = false;
-	} else if ((_scene->_priorSceneId == 803) && global[kReturnFromCut]) {
+	} else if ((previous_room == 803) && global[kReturnFromCut]) {
 		global[kDontRepeat] = false;
 		global[kBeamIsUp] = true;
-		global[kAntigravClock] = _scene->_frameStartTime;
-		global[kAntigravTiming] = _scene->_frameStartTime;
+		global[kAntigravClock] = kernel.clock;
+		global[kAntigravTiming] = kernel.clock;
 		global[kForceBeamDown] = false;
 		global[kReturnFromCut] = false;
 	}
@@ -109,7 +109,7 @@ static void room_808_parser() {
 			if (local._goingTo803 && !global[kTopButtonPushed]) {
 				local._goingTo803 = false;
 				global[kReturnFromCut] = true;
-				_scene->_nextSceneId = 803;
+				new_room = 803;
 			}
 			break;
 
@@ -229,7 +229,7 @@ static void room_808_parser() {
 			break;
 		}
 	} else if (player_said_2(exit, panel)) {
-		_scene->_nextSceneId = 801;
+		new_room = 801;
 		global[kBetweenRooms] = true;
 	} else
 		return;
diff --git a/engines/mads/nebular/rooms/room810.cpp b/engines/mads/nebular/rooms/room810.cpp
index f08b1983f27..a6d040999df 100644
--- a/engines/mads/nebular/rooms/room810.cpp
+++ b/engines/mads/nebular/rooms/room810.cpp
@@ -42,7 +42,7 @@ static void room_810_init() {
 	_scene->_userInterface.setup(kInputLimitedSentences);
 	player.walker_visible = false;
 	player.commands_allowed = false;
-	_scene->loadAnimation(kernel_full_name(810, 'a', -1, "", EXT_AA));
+	kernel_run_animation(kernel_full_name(810, 'a', -1, "", EXT_AA), 0);
 	local._moveAllowed = true;
 
 	section_8_music();
@@ -56,7 +56,7 @@ static void room_810_daemon() {
 	}
 
 	if (kernel.trigger == 70)
-		_scene->_nextSceneId = 804;
+		new_room = 804;
 }
 
 void room_810_synchronize(Common::Serializer &s) {
diff --git a/engines/mads/nebular/rooms/section1.cpp b/engines/mads/nebular/rooms/section1.cpp
index 67d2c32eb07..2f783049101 100644
--- a/engines/mads/nebular/rooms/section1.cpp
+++ b/engines/mads/nebular/rooms/section1.cpp
@@ -47,23 +47,23 @@ extern void room_112_preload();
 void section_1_walker() {
 	g_engine->_soundManager->command(5, 0);
 	Common::String oldName = (&player.series_name[0]);
-	if (_scene->_nextSceneId <= 103 || _scene->_nextSceneId == 111) {
+	if (new_room <= 103 || new_room == 111) {
 		if (global[kSexOfRex] == SEX_FEMALE)
 			Common::strcpy_s(player.series_name, "ROX");
 		else {
 			Common::strcpy_s(player.series_name, "RXM");
 			global[kSexOfRex] = SEX_MALE;
 		}
-	} else if (_scene->_nextSceneId <= 110) {
+	} else if (new_room <= 110) {
 		Common::strcpy_s(player.series_name, "RXSW");
 		global[kSexOfRex] = SEX_UNKNOWN;
-	} else if (_scene->_nextSceneId == 112)
+	} else if (new_room == 112)
 		Common::strcpy_s(player.series_name, "");
 
 	if (oldName != (&player.series_name[0]))
 		player.walker_must_reload = true;
 
-	if (_scene->_nextSceneId == 105 || (_scene->_nextSceneId == 109 && global[kHoovicAlive])) {
+	if (new_room == 105 || (new_room == 109 && global[kHoovicAlive])) {
 		player.walker_must_reload = true;
 		player.walker_loads_first = false;
 	}
@@ -74,7 +74,7 @@ void section_1_walker() {
 }
 
 void section_1_interface() {
-	int idx = (_scene->_nextSceneId > 103 && _scene->_nextSceneId < 112) ? 1 : 0;
+	int idx = (new_room > 103 && new_room < 112) ? 1 : 0;
 	Common::strcpy_s(kernel.interface, kernel_interface_name(idx));
 }
 
@@ -135,7 +135,7 @@ void section_1_constructor() {
 
 void section_1_music() {
 	if (config_file.music_flag) {
-		switch (_scene->_nextSceneId) {
+		switch (new_room) {
 		case 101:
 			g_engine->_soundManager->command(11, 0);
 			break;
@@ -159,7 +159,7 @@ void section_1_music() {
 			g_engine->_soundManager->command(15, 0);
 			break;
 		default:
-			if (_scene->_priorSceneId < 104 || _scene->_priorSceneId > 108)
+			if (previous_room < 104 || previous_room > 108)
 				g_engine->_soundManager->command(10, 0);
 			break;
 		}
diff --git a/engines/mads/nebular/rooms/teleporter.cpp b/engines/mads/nebular/rooms/teleporter.cpp
index 820d3ccc906..a1ad3092ca1 100644
--- a/engines/mads/nebular/rooms/teleporter.cpp
+++ b/engines/mads/nebular/rooms/teleporter.cpp
@@ -57,23 +57,23 @@ void teleporter_init() {
 	player.walker_visible = false;
 	player.commands_allowed = (global[kMeteorologistWatch] == METEOROLOGIST_NORMAL);
 	_scene->_kernelMessages._talkFont = font_tele;
-	_scene->_textSpacing = 0;
+	kernel_message_spacing = 0;
 	_curCode = 0;
 	_digitCount = 0;
 	_finishedCodeCounter = 0;
 	_curMessageId = -1;
 	Common::strcpy_s(_msgText2, "_");
 
-	if (_scene->_priorSceneId == RETURNING_FROM_DIALOG)
-		_scene->_priorSceneId = global[kTeleporterDestination];
+	if (previous_room == RETURNING_FROM_DIALOG)
+		previous_room = global[kTeleporterDestination];
 
-	if (_scene->_priorSceneId < 101)
-		_scene->_priorSceneId = 201;
+	if (previous_room < 101)
+		previous_room = 201;
 
-	global[kTeleporterDestination] = _scene->_priorSceneId;
+	global[kTeleporterDestination] = previous_room;
 	pal_change_color(252, 63, 63, 0);
 	pal_change_color(253, 0, 0, 0);
-	_teleporterSceneId = _scene->_priorSceneId;
+	_teleporterSceneId = previous_room;
 	if (_teleporterSceneId == 202)
 		_teleporterSceneId = 201;
 
@@ -88,7 +88,7 @@ void teleporter_init() {
 
 	Common::sprintf_s(_msgText1, "#%.4d", codeVal);
 
-	if (_scene->_currentSceneId != 711) {
+	if (room_id != 711) {
 		_scene->_kernelMessages.add(Common::Point(133, 34), 0, 32, 0, INDEFINITE_TIMEOUT, _msgText1);
 		_scene->_kernelMessages.add(Common::Point(143, 61), 0xFDFC, 16, 0, INDEFINITE_TIMEOUT, _msgText2);
 	}
@@ -201,31 +201,31 @@ void teleporter_handle_key() {
 				if (_digitCount < 4)
 					Common::strcat_s(_msgText2, "_");
 
-				if (_scene->_currentSceneId != 711)
+				if (room_id != 711)
 					g_engine->_soundManager->command(32, 0);
 			}
 		} else if (_buttonTyped == 11) {
 			_digitCount = 0;
 			_curCode = 0;
 			Common::strcpy_s(_msgText2, "_");
-			if (_scene->_currentSceneId != 711)
+			if (room_id != 711)
 				g_engine->_soundManager->command(33, 0);
 		} else if (_digitCount == 4) {
-			if (_scene->_currentSceneId != 711)
+			if (room_id != 711)
 				_finishedCodeCounter = 1;
 
 			if (teleporter_address(_curCode, true) > 0) {
 				pal_change_color(252, 0, 63, 0);
-				if (_scene->_currentSceneId != 711)
+				if (room_id != 711)
 					g_engine->_soundManager->command(34, 0);
 			} else {
 				pal_change_color(252, 63, 0, 0);
-				if (_scene->_currentSceneId != 711)
+				if (room_id != 711)
 					g_engine->_soundManager->command(35, 0);
 			}
 		}
 
-		if (_scene->_currentSceneId != 711) {
+		if (room_id != 711) {
 			if (_curMessageId >= 0)
 				_scene->_kernelMessages.remove(_curMessageId);
 			_curMessageId = _scene->_kernelMessages.add(Common::Point(143, 61), 0xFDFC, 16, 0, INDEFINITE_TIMEOUT, _msgText2);
@@ -237,18 +237,18 @@ void teleporter_handle_key() {
 			_finishedCodeCounter++;
 
 			if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL)
-				_scene->_nextSceneId = 202;
+				new_room = 202;
 			else {
 				mouse_show();
 				int destination = teleporter_address(_curCode, true);
 
 				if (destination > 0) {
 					global[kTeleporterCommand] = 2;
-					_scene->_nextSceneId = _teleporterSceneId;
+					new_room = _teleporterSceneId;
 					global[kTeleporterDestination] = destination;
 				} else {
 					global[kTeleporterCommand] = 4;
-					_scene->_nextSceneId = _teleporterSceneId;
+					new_room = _teleporterSceneId;
 				}
 			}
 		} else if (global[kMeteorologistWatch] != METEOROLOGIST_NORMAL)
@@ -285,7 +285,7 @@ bool teleporter_parser() {
 
 	if (player_said_2(exit_from, device)) {
 		global[kTeleporterCommand] = 3;
-		_scene->_nextSceneId = _teleporterSceneId;
+		new_room = _teleporterSceneId;
 		retVal = true;
 	}
 
diff --git a/engines/mads/nebular/rooms/thunks.cpp b/engines/mads/nebular/rooms/thunks.cpp
index b30fc42444a..1e145be3c0c 100644
--- a/engines/mads/nebular/rooms/thunks.cpp
+++ b/engines/mads/nebular/rooms/thunks.cpp
@@ -259,34 +259,6 @@ int Scene::Sequences::findByTrigger(int trigger) {
 	return kernel_seq_find_by_trigger(trigger);
 }
 
-int Scene::loadAnimation(const char *name, int trigger_code) {
-	return kernel_run_animation(name, trigger_code);
-}
-
-void Scene::freeAnimation() {
-	kernel_abort_animation(0);
-}
-
-void Scene::changeVariant(int num) {
-	kernel_load_variant(num);
-}
-
-void Scene::drawElements(int transitionType, bool surfaceFlag) {
-	matte_frame(transitionType, surfaceFlag);
-}
-
-void Scene::resetScene() {
-	kernel_dump_all();
-}
-
-void Scene::clearSequenceList() {
-	kernel_seq_init();
-}
-
-void Scene::addActiveVocab(int vocab_id) {
-	vocab_make_active(vocab_id);
-}
-
 } // namespace Rooms
 } // namespace RexNebular
 } // namespace MADS
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
index eac3b041e1b..9fa16fc6a91 100644
--- a/engines/mads/nebular/rooms/thunks.h
+++ b/engines/mads/nebular/rooms/thunks.h
@@ -307,22 +307,6 @@ struct Scene {
 		void selectObject(int item_id);
 	};
 	UserInterface _userInterface;
-
-	int16 &_priorSceneId = previous_room;
-	int16 &_nextSceneId = new_room;
-	long &_frameStartTime = kernel.clock;
-	byte &_reloadSceneFlag = kernel.force_restart;
-	byte &_roomChanged = kernel.teleported_in;
-	int &_currentSceneId = room_id;
-	int &_textSpacing = kernel_message_spacing;
-
-	int loadAnimation(const char *name, int trigger_code = 0);
-	void freeAnimation();
-	void changeVariant(int num);
-	void drawElements(int transitionType, bool surfaceFlag);
-	void resetScene();
-	void clearSequenceList();
-	void addActiveVocab(int vocab_id);
 };
 extern Scene _scene;
 


Commit: f6e6e1978f8d005e5fc43c755ad1ffd7d66ec6fb
    https://github.com/scummvm/scummvm/commit/f6e6e1978f8d005e5fc43c755ad1ffd7d66ec6fb
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:54+10:00

Commit Message:
MADS: NEBULAR: Refactor KernelMessages thunk

Changed paths:
    engines/mads/core/game.h
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/core/game.h b/engines/mads/core/game.h
index ee10b06afc8..53d1a230c6b 100644
--- a/engines/mads/core/game.h
+++ b/engines/mads/core/game.h
@@ -31,6 +31,7 @@
 #include "mads/core/mads.h"
 #include "mads/core/heap.h"
 #include "mads/core/popup.h"
+#include "mads/core/text.h"
 
 namespace MADS {
 
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 0d0c64810bc..583667c481c 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -61,7 +61,7 @@ static void room_101_say_dang() {
 	case 72:
 		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6, 0, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
-		_scene->_kernelMessages.add(Common::Point(143, 61), 0x1110, 0, 0, 60, quote_string(kernel.quotes, 57));
+		kernel_message_add(quote_string(kernel.quotes, 57), 143, 61, 0x1110, 60, 0, 0);
 		_scene->_sequences.addTimer(120, 73);
 		break;
 
@@ -182,31 +182,31 @@ static void room_101_daemon() {
 	if (_scene->_animation[0] != nullptr) {
 		if ((_scene->_animation[0]->getCurrentFrame() >= 6) && (local._messageNum == 0)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 49));
+			kernel_message_add(quote_string(kernel.quotes, 49), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 7) && (local._messageNum == 1)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 54));
+			kernel_message_add(quote_string(kernel.quotes, 54), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 10) && (local._messageNum == 2)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 55));
+			kernel_message_add(quote_string(kernel.quotes, 55), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 17) && (local._messageNum == 3)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 56));
+			kernel_message_add(quote_string(kernel.quotes, 56), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
 		if ((_scene->_animation[0]->getCurrentFrame() >= 20) && (local._messageNum == 4)) {
 			local._messageNum++;
-			_scene->_kernelMessages.add(Common::Point(63, local._posY), 0x1110, 0, 0, 240, quote_string(kernel.quotes, 50));
+			kernel_message_add(quote_string(kernel.quotes, 50), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 	}
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index 9bb61396e57..5d05b7b1484 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -45,10 +45,10 @@ struct Scratch {
 static Scratch local;
 
 static void addRandomMessage() {
-	_scene->_kernelMessages.reset();
+	kernel_message_purge();
 	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 	int quoteId = g_engine->getRandomNumber(65, 69);
-	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 73, 120, quote_string(kernel.quotes, quoteId));
+	kernel_message_add(quote_string(kernel.quotes, quoteId), 0, 0, 0x1110, 120, 73, 34);
 	local._activeMsgFl = true;
 }
 
@@ -172,7 +172,7 @@ static void room_102_daemon() {
 
 	if (!local._activeMsgFl && (Common::Point(player.x, player.y) == Common::Point(177, 114)) && (player.facing == FACING_NORTH)
 		&& (g_engine->getRandomNumber(1, 5000) == 1)) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		local._activeMsgFl = false;
 		addRandomMessage();
 	}
@@ -213,7 +213,7 @@ static void room_102_pre_parser() {
 	}
 
 	if (player.need_to_walk)
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 }
 
 static void room_102_parser() {
@@ -281,12 +281,12 @@ static void room_102_parser() {
 	if (player_said_2(walkto, refrigerator) && justOpenedFl) {
 		local._fridgeFirstOpenFl = false;
 		int quoteId = g_engine->getRandomNumber(59, 63);
-		const char *curQuote = quote_string(kernel.quotes, quoteId);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, -1);
-		_scene->_kernelMessages.reset();
+		char *curQuote = quote_string(kernel.quotes, quoteId);
+		int width = font_string_width(kernel_message_font, curQuote, -1);
+		kernel_message_purge();
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_kernelMessages.add(Common::Point(210, 60), 0x1110, 0, 73, 120, curQuote);
-		_scene->_kernelMessages.add(Common::Point(214 + width, 60), 0x1110, 0, 73, 120, quote_string(kernel.quotes, 64));
+		kernel_message_add(curQuote, 210, 60, 0x1110, 120, 73, 0);
+		kernel_message_add(quote_string(kernel.quotes, 64), 214 + width, 60, 0x1110, 120, 73, 0);
 		local._activeMsgFl = true;
 		player.command_ready = false;
 		return;
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 83bbf800bdb..1f245c52536 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -104,8 +104,8 @@ static void room_103_init() {
 	kernel.quotes = quote_load(70, 51, 71, 7, 73, 0);
 
 	if (!player.been_here_before) {
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 70));
-		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 70), 0, 0, 0x1110, 120, 0, 34);
+		kernel_message_teletype(msgIndex, 4, true);
 	}
 
 	if (previous_room == 102)
@@ -255,8 +255,8 @@ static void room_103_parser() {
 				_scene->_sequences.setAnimRange(g_sequence_ids[9], -2, -2);
 
 				// Rex says "Gads.."
-				const char *msg = quote_string(kernel.quotes, 51);
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 0, 60, msg);
+				char *msg = quote_string(kernel.quotes, 51);
+				kernel_message_add(msg, 0, 0, 0x1110, 60, 0, 18);
 				_scene->_sequences.addTimer(120, kernel.trigger + 1);
 			} else {
 				// Initial turky explosion
@@ -280,20 +280,20 @@ static void room_103_parser() {
 		case 0:
 		{
 			player.commands_allowed = false;
-			const char *msg = quote_string(kernel.quotes, 71);
-			_scene->_kernelMessages.add(Common::Point(), 0x1110, 18, 1, 120, msg);
+			char *msg = quote_string(kernel.quotes, 71);
+			kernel_message_add(msg, Common::Point().x, Common::Point().y, 0x1110, 120, 1, 18);
 			break;
 		}
 
 		case 1:
 		{
-			const char *msg = quote_string(kernel.quotes, 72);
-			_scene->_kernelMessages.add(Common::Point(310, 132), 0xFDFC, 16, 2, 120, msg);
+			char *msg = quote_string(kernel.quotes, 72);
+			kernel_message_add(msg, 310, 132, 0xFDFC, 120, 2, 16);
 			break;
 		}
 
 		case 2:
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			_scene->_sequences.addTimer(1, 3);
 			break;
 
@@ -348,8 +348,8 @@ void room_103_error() {
 		text_show(10305);
 		player.command_ready = false;
 	} else if (player_said_3(put, coal, furnace)) {
-		const char *msg = quote_string(kernel.quotes, 73);
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, msg);
+		char *msg = quote_string(kernel.quotes, 73);
+		kernel_message_add(msg, 0, 0, 0x1110, 120, 0, 34);
 		player.command_ready = false;
 	}
 }
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 984fb8f52ff..2285da9ec6c 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -84,7 +84,7 @@ static void room_104_daemon() {
 		case FACING_EAST:
 			switch (kernel.trigger) {
 			case 0:
-				_scene->_kernelMessages.reset();
+				kernel_message_purge();
 				kernel_abort_animation(0);
 				kernel_dump_all();
 				player.commands_allowed = false;
@@ -117,7 +117,7 @@ static void room_104_daemon() {
 		case FACING_SOUTH:
 			switch (kernel.trigger) {
 			case 0:
-				_scene->_kernelMessages.reset();
+				kernel_message_purge();
 				kernel_abort_animation(0);
 				kernel_dump_all();
 				player.commands_allowed = false;
@@ -159,7 +159,7 @@ static void room_104_daemon() {
 		case FACING_NORTH:
 			switch (kernel.trigger) {
 			case 0:
-				_scene->_kernelMessages.reset();
+				kernel_message_purge();
 				kernel_abort_animation(0);
 				kernel_dump_all();
 				player.commands_allowed = false;
@@ -208,7 +208,7 @@ static void room_104_daemon() {
 		player.commands_allowed = false;
 
 	if (local._kargShootingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 52));
+		kernel_message_add(quote_string(kernel.quotes, 52), 0, 0, 0x1110, 120, 0, 34);
 		local._kargShootingFl = false;
 	}
 }
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index e792f8e7a1f..adc5e2c875f 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -71,7 +71,7 @@ static void room_105_daemon() {
 		local._explosionFl = true;
 		switch (kernel.trigger) {
 		case 0:
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			kernel_dump_all();
 			player.commands_allowed = false;
 			player.walker_visible = false;
@@ -150,8 +150,8 @@ static void room_105_parser() {
 	else if (player_said_2(take, dead_fish) && global[kFishIn105]) {
 		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
 		} else {
 			_scene->_sequences.remove(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index 2a2f53073c5..8a3af7c2839 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -128,7 +128,7 @@ static void room_106_daemon() {
 
 	if (local._firstEmergingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
 		local._firstEmergingFl = false;
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 52));
+		kernel_message_add(quote_string(kernel.quotes, 52), 0, 0, 0x1110, 120, 0, 34);
 	}
 
 	if ((kernel.trigger >= 80) && (kernel.trigger <= 87)) {
@@ -160,7 +160,7 @@ static void room_106_daemon() {
 
 		if (msgId >= 0) {
 			int nextTrigger = kernel.trigger + 1;
-			_scene->_kernelMessages.add(Common::Point(15, local._positionY), 0x1110, 0, 0, 360, quote_string(kernel.quotes, msgId));
+			kernel_message_add(quote_string(kernel.quotes, msgId), 15, local._positionY, 0x1110, 360, 0, 0);
 			_scene->_sequences.addTimer(150, nextTrigger);
 			local._positionY += 14;
 		}
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index 760a2429067..f605a508bee 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -94,7 +94,7 @@ static void room_107_init() {
 
 static void room_107_daemon() {
 	if (local._shootingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 52));
+		kernel_message_add(quote_string(kernel.quotes, 52), 0, 0, 0x1110, 120, 0, 34);
 		local._shootingFl = false;
 	}
 }
@@ -113,8 +113,8 @@ static void room_107_parser() {
 	else if (player_said_2(take, dead_fish) && global[kFishIn107]) {
 		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
 		} else {
 			_scene->_sequences.remove(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index 19754e31a3d..5841eb671ba 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -84,8 +84,8 @@ static void room_108_parser() {
 	else if (player_said_2(take, dead_fish) && global[kFishIn108]) {
 		if (player_has(OBJ_DEAD_FISH)) {
 			int randVal = g_engine->getRandomNumber(74, 76);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
 		} else {
 			_scene->_sequences.remove(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 3b3ff090ff2..de4e359e2a5 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -192,9 +192,9 @@ static void room_109_daemon() {
 		_scene->_spriteSlots.fullRefresh();
 
 		int randVal = g_engine->getRandomNumber(85, 88);
-		int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, randVal));
-		_scene->_kernelMessages.setQuoted(idx, 4, true);
-		_scene->_kernelMessages._entries[idx]._frameTimer = kernel.clock + 4;
+		int idx = kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
+		kernel_message_teletype(idx, 4, true);
+		kernel_message[idx].update_time = kernel.clock + 4;
 	}
 }
 
@@ -340,7 +340,7 @@ static void room_109_parser() {
 
 								if (global[kHoovicFishEaten] >= threshold) {
 									int randVal = g_engine->getRandomNumber(83, 84);
-									_scene->_kernelMessages.add(Common::Point(230, 24), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, randVal));
+									kernel_message_add(quote_string(kernel.quotes, randVal), 230, 24, 0xFDFC, 120, 0, 0);
 									global[kHoovicFishEaten] = 0;
 									global[kHoovicSated] = 1;
 									kernel_load_variant(1);
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index f531077e1a6..7b12f244d0e 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -79,7 +79,7 @@ static void room_110_init() {
 	kernel.quotes = quote_load(89, 0);
 
 	if (!player.been_here_before && (previous_room == 109))
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 89));
+		kernel_message_add(quote_string(kernel.quotes, 89), 0, 0, 0x1110, 120, 0, 34);
 }
 
 static void room_110_daemon() {
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index 80a98d0bc1e..010ebcf60f3 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -111,7 +111,7 @@ static void room_201_init() {
 		player_walk(157, 143, FACING_NORTH);
 		pal_change_color(252, 45, 63, 45);
 		pal_change_color(253, 20, 45, 20);
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 2, 0, 120, quote_string(kernel.quotes, 90));
+		kernel_message_add(quote_string(kernel.quotes, 90), 0, 0, 0x1110, 120, 0, 2);
 	} else
 		local._pterodactylFlag = true;
 
@@ -145,7 +145,7 @@ static void room_201_daemon() {
 	}
 
 	if (kernel.trigger == 81) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 	}
 
 	if (kernel.trigger == 71) {
@@ -164,7 +164,7 @@ static void room_201_daemon() {
 	if (kernel.trigger == 74) {
 		g_engine->_soundManager->command(40, 0);
 
-		_scene->_kernelMessages.add(Common::Point(125, 56), 0xFDFC, 32, 82, 180, quote_string(kernel.quotes, 91));
+		kernel_message_add(quote_string(kernel.quotes, 91), 125, 56, 0xFDFC, 180, 82, 32);
 		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 9, 0, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
 		_scene->_sequences.setAnimRange(g_sequence_ids[6], -2, -2);
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index ba822574c98..bf335ea367f 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -173,9 +173,9 @@ static void room_202_init() {
 
 static void setRandomKernelMessage() {
 	int vocabId = g_engine->getRandomNumber(92, 96);
-	_scene->_kernelMessages.reset();
+	kernel_message_purge();
 	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-	_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 70, 120, quote_string(kernel.quotes, vocabId));
+	kernel_message_add(quote_string(kernel.quotes, vocabId), 0, 0, 0x1110, 120, 70, 34);
 	local._activeMsgFl = true;
 }
 
@@ -230,7 +230,7 @@ static int subStep4(int randVal) {
 
 static void room_202_daemon() {
 	if (!local._activeMsgFl && (Common::Point(player.x, player.y) == Common::Point(77, 105)) && (player.facing == FACING_NORTH) && (g_engine->getRandomNumber(999) == 0)) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		local._activeMsgFl = false;
 		if (g_engine->getRandomNumber(4) == 0)
 			setRandomKernelMessage();
@@ -255,8 +255,8 @@ static void room_202_daemon() {
 				msgPos = Common::Point(248, 15);
 				msgFlag = 0;
 			}
-			int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, quote_string(kernel.quotes, 102));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 102), msgPos.x, msgPos.y, 0x1110, 120, 0, msgFlag | 32);
+			kernel_message_teletype(msgIndex, 4, true);
 
 			if (global[kMeteorologistWatch] == METEOROLOGIST_GROUND) {
 				player2.words[0] = words_look;
@@ -294,9 +294,9 @@ static void room_202_daemon() {
 		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6, 1, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[11], 1);
 		_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
-		_scene->_kernelMessages.reset();
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, -65), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 98));
-		_scene->_kernelMessages.setSeqIndex(msgIndex, g_sequence_ids[11]);
+		kernel_message_purge();
+		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 98), 0, -65, 0x1110, 60, 0, 32);
+		kernel_message_attach(msgIndex, g_sequence_ids[11]);
 	}
 	break;
 	case 93:
@@ -311,8 +311,8 @@ static void room_202_daemon() {
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		local._ladderTopFl = false;
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 99));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 99), 0, 0, 0x1110, 120, 0, 34);
 	}
 	break;
 	default:
@@ -361,8 +361,8 @@ static void room_202_daemon() {
 				msgPos = Common::Point(248, 15);
 				msgFlag = 0;
 			}
-			int msgIndex = _scene->_kernelMessages.add(msgPos, 0x1110, msgFlag | 32, 0, 120, quote_string(kernel.quotes, 101));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 101), msgPos.x, msgPos.y, 0x1110, 120, 0, msgFlag | 32);
+			kernel_message_teletype(msgIndex, 4, true);
 		}
 	}
 
@@ -427,7 +427,7 @@ static void room_202_daemon() {
 static void room_202_pre_parser() {
 
 	if (player.need_to_walk)
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 
 	if (local._ladderTopFl && (player_said_2(climb_down, ladder) || player.need_to_walk)) {
 		if (kernel.trigger == 0) {
@@ -541,8 +541,8 @@ static void room_202_parser() {
 			_scene->_sequences.updateTimeout(g_sequence_ids[8], g_sequence_ids[9]);
 			local._ladderTopFl = true;
 			player.commands_allowed = true;
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 97));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 97), 248, 15, 0x1110, 60, 0, 32);
+			kernel_message_teletype(msgIndex, 4, true);
 		}
 		break;
 		default:
@@ -616,9 +616,9 @@ static void room_202_parser() {
 						local._waitingMeteoFl = true;
 						global[kMeteorologistWatch] = METEOROLOGIST_GONE;
 						if ((_scene->_animation[0]->getCurrentFrame() >= 44) && (_scene->_animation[0]->getCurrentFrame() <= 75)) {
-							_scene->_kernelMessages.reset();
-							int msgIndex = _scene->_kernelMessages.add(Common::Point(248, 15), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 100));
-							_scene->_kernelMessages.setQuoted(msgIndex, 4, false);
+							kernel_message_purge();
+							int msgIndex = kernel_message_add(quote_string(kernel.quotes, 100), 248, 15, 0x1110, 60, 0, 32);
+							kernel_message_teletype(msgIndex, 4, false);
 						} else {
 							player.command_ready = false;
 							return;
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 44d7e681d9f..f0fda388fb0 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -80,7 +80,7 @@ static void room_203_init() {
 	kernel.quotes = quote_load(0x67, 0x68, 0x69, 0x6A, 0x5A, 0);
 
 	if (local._rhotundaEatFl) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, g_engine->getRandomNumber(103, 106)));
+		kernel_message_add(quote_string(kernel.quotes, g_engine->getRandomNumber(103, 106)), 0, 0, 0x1110, 120, 0, 34);
 	}
 
 	section_2_music();
@@ -102,7 +102,7 @@ static void room_203_daemon() {
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		pal_lock();
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		kernel_dump_all();
 		cursor_id = CURSOR_WAIT;
 		mouse_cursor_sprite(cursor, CURSOR_WAIT);
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index fcabdff1bc0..6f7ff114809 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -96,9 +96,7 @@ static void room_205_init() {
 	local._chickenTime = kernel.clock;
 
 	if (global[kSexOfRex] == SEX_FEMALE)
-		_scene->_kernelMessages.initRandomMessages(3,
-			Common::Rect(195, 99, 264, 134), 13, 2, 0xFDFC, 60,
-			108, 108, 109, 109, 110, 110, 111, 108, 0);
+		kernel_random_messages_init(3, 195, 264, 99, 134, 13, 2, 0xFDFC, 60, 108, 108, 109, 109, 110, 110, 111, 108, 0);
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 99;
@@ -124,11 +122,11 @@ static void room_205_init() {
 
 static void room_205_daemon() {
 	if (global[kSexOfRex] == SEX_FEMALE) {
-		_scene->_kernelMessages.randomServer();
+		kernel_random_message_server();
 
 		if (kernel.clock >= local._chickenTime) {
-			int chanceMinor = _scene->_kernelMessages.checkRandom() + 1;
-			if (_scene->_kernelMessages.generateRandom(100, chanceMinor))
+			int chanceMinor = kernel_check_random() + 1;
+			if (kernel_generate_random_message(100, chanceMinor))
 				g_engine->_soundManager->command(28, 0);
 
 			local._chickenTime = kernel.clock + 2;
@@ -145,19 +143,19 @@ static void room_205_daemon() {
 	}
 
 	if (kernel.trigger == 73)
-		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 0, 60, quote_string(kernel.quotes, 112));
+		kernel_message_add(quote_string(kernel.quotes, 112), 160, 68, 0xFBFA, 60, 0, 32);
 
 	if (kernel.trigger == 74) {
 		g_engine->_soundManager->command(26, 0);
-		_scene->_kernelMessages.add(Common::Point(106, 90), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 113));
+		kernel_message_add(quote_string(kernel.quotes, 113), 106, 90, 0x1110, 60, 0, 32);
 	}
 
 	if (kernel.trigger == 71) {
 		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 0, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[8], 2);
 		_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(160, 68), 0xFBFA, 32, 72, 180, quote_string(kernel.quotes, 114));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 114), 160, 68, 0xFBFA, 180, 72, 32);
 	}
 
 	if (kernel.trigger == 72)
@@ -165,18 +163,18 @@ static void room_205_daemon() {
 }
 
 static void handleWomanSpeech(int quote) {
-	local._kernelMessage = _scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, quote));
+	local._kernelMessage = kernel_message_add(quote_string(kernel.quotes, quote), 186, 27, 0xFBFA, INDEFINITE_TIMEOUT, 0, 0);
 }
 
 static void room_205_parser() {
 	if (inter_input_mode == kInputConversation) {
 		if (local._kernelMessage >= 0)
-			_scene->_kernelMessages.remove(local._kernelMessage);
+			kernel_message_delete(local._kernelMessage);
 		local._kernelMessage = -1;
 
 		if (kernel.trigger == 0) {
 			player.commands_allowed = false;
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, quote_string(kernel.quotes, player2.words[0]));
+			kernel_message_add(quote_string(kernel.quotes, player2.words[0]), 0, 0, 0x1110, 120, 1, 18);
 		} else {
 			if ((kernel.trigger > 1) || (player2.words[0] != 0x76))
 				player.commands_allowed = true;
@@ -213,7 +211,7 @@ static void room_205_parser() {
 				break;
 
 			case 0x77:
-				_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 0, 0, 120, quote_string(kernel.quotes, 0x7F));
+				kernel_message_add(quote_string(kernel.quotes, 0x7F), 186, 27, 0xFBFA, 120, 0, 0);
 				_scene->_userInterface.setup(kInputBuildingSentences);
 				break;
 
@@ -231,7 +229,7 @@ static void room_205_parser() {
 	else if (player_said_2(talkto, native_woman)) {
 		if (kernel.trigger == 0) {
 			player.commands_allowed = false;
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 18, 1, 120, quote_string(kernel.quotes, 0x73));
+			kernel_message_add(quote_string(kernel.quotes, 0x73), 0, 0, 0x1110, 120, 1, 18);
 		} else if (kernel.trigger == 1) {
 			player.commands_allowed = true;
 			handleWomanSpeech(0x79);
@@ -243,7 +241,7 @@ static void room_205_parser() {
 		if (kernel.trigger == 0) {
 			player.commands_allowed = false;
 			int rndVal = g_engine->getRandomNumber(0xAC, 0xAE);
-			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 1, 120, quote_string(kernel.quotes, rndVal));
+			kernel_message_add(quote_string(kernel.quotes, rndVal), 186, 27, 0xFBFA, 120, 1, 32);
 		} else if (kernel.trigger == 1)
 			player.commands_allowed = true;
 	} else if (player_said_2(walkto, opposite_bank)) {
@@ -251,7 +249,7 @@ static void room_205_parser() {
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			pal_lock();
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			kernel_dump_walker_only();
 			g_sprite_ids[9] = kernel_load_series(kernel_name('a', 0), 0);
 			kernel_new_palette();
@@ -272,8 +270,8 @@ static void room_205_parser() {
 
 		if (player_said_2(walkto, fire_pit) || player_said_2(walkto, chicken_on_spit)) {
 			if (object_is_here(OBJ_CHICKEN)) {
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x6B));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x6B), 0, 0, 0x1110, 120, 0, 34);
 			}
 		} else if (player_said_2(take, chicken_on_spit) && global[kChickenPermitted] && object_is_here(OBJ_CHICKEN)) {
 			inter_give_to_player(OBJ_CHICKEN);
@@ -281,7 +279,7 @@ static void room_205_parser() {
 			_scene->_hotspots.activate(words_chicken_on_spit, false);
 			object_examine(OBJ_CHICKEN, 812, 0);
 		} else if (player_said_2(take, chicken_on_spit) && (!global[kChickenPermitted]))
-			_scene->_kernelMessages.add(Common::Point(186, 27), 0xFBFA, 32, 0, 120, quote_string(kernel.quotes, 0x80));
+			kernel_message_add(quote_string(kernel.quotes, 0x80), 186, 27, 0xFBFA, 120, 0, 32);
 		else if (player_said_2(look, native_woman))
 			text_show(20503);
 		else if (player_said_2(look, hut))
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index d380c4b5568..4131be6b8fc 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -86,7 +86,7 @@ static void room_208_init() {
 
 	local._rhotundaTurnFl = false;
 	local._boundingFl = false;
-	_scene->_kernelMessages._talkFont = font_inter;
+	kernel_message_font = font_inter;
 	kernel_message_spacing = 0;
 
 	if (previous_room == 207) {
@@ -110,8 +110,8 @@ static void room_208_init() {
 	kernel.quotes = quote_load(0x81, 0x46, 0);
 
 	if ((previous_room == 207) && (global[kMonkeyStatus] == MONKEY_HAS_BINOCULARS)) {
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 129));
-		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 129), 0, 0, 0x1110, 120, 0, 34);
+		kernel_message_teletype(msgIndex, 4, true);
 	}
 
 	pal_change_color(16, 0, 0, 63);
@@ -262,8 +262,8 @@ static void room_208_parser() {
 			new_room = 203;
 		else if (kernel.trigger == 0) {
 			player.commands_allowed = false;
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, quote_string(kernel.quotes, 70));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 70), 0, 0, 0x1110, 120, 1, 34);
+			kernel_message_teletype(msgIndex, 4, true);
 		} else if (kernel.trigger == 1)
 			new_room = 203;
 	} else if (player_said_2(walk_towards, field_to_south))
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index ff18cc97050..21e416f99ec 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -700,8 +700,8 @@ static void handleMonkeyEating() {
 	case 207:
 	{
 		g_engine->_soundManager->command(18, 0);
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(180, 25), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 130));
-		_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 130), 180, 25, 0xFDFC, 90, 0, 0);
+		kernel_message_teletype(msgIndex, 4, true);
 
 		int oldIdx = g_sequence_ids[4];
 		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 15, 4, 0, 0);
@@ -713,7 +713,7 @@ static void handleMonkeyEating() {
 
 	case 208:
 	{
-		_scene->_kernelMessages.add(Common::Point(180, 39), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 131));
+		kernel_message_add(quote_string(kernel.quotes, 131), 180, 39, 0xFDFC, 90, 0, 0);
 		int oldIdx = g_sequence_ids[4];
 		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 4, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[4], 28, 29);
@@ -751,7 +751,7 @@ static void handleMonkeyFall() {
 		matte_deallocate_series(g_sprite_ids[4], true);
 
 		g_sprite_ids[8] = kernel_load_series(kernel_name('m', 4), 0);
-		_scene->_kernelMessages.add(Common::Point(180, 26), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 151));
+		kernel_message_add(quote_string(kernel.quotes, 151), 180, 26, 0xFDFC, 90, 0, 0);
 		_scene->_sequences.addTimer(40, 100);
 		_scene->_hotspots.activate(227, false);
 		int oldIdx = g_sequence_ids[3];
@@ -768,7 +768,7 @@ static void handleMonkeyFall() {
 	case 220:
 	{
 		g_engine->_soundManager->command(18, 0);
-		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 159));
+		kernel_message_add(quote_string(kernel.quotes, 159), 182, 109, 0xFDFC, 90, 0, 0);
 		_scene->_hotspots.activate(227, false);
 		int oldIdx = g_sequence_ids[3];
 		local._monkeyPosition = 1;
@@ -801,7 +801,7 @@ static void handleMonkeyFall() {
 
 	case 222:
 	{
-		_scene->_kernelMessages.add(Common::Point(182, 109), 0xFDFC, 0, 0, 70, quote_string(kernel.quotes, 160));
+		kernel_message_add(quote_string(kernel.quotes, 160), 182, 109, 0xFDFC, 70, 0, 0);
 		int oldIdx = g_sequence_ids[8];
 		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[8], 73, 78);
@@ -855,8 +855,8 @@ static void handleMonkey1() {
 		_scene->_sequences.setAnimRange(g_sequence_ids[7], 23, 26);
 		_scene->_sequences.updateTimeout(g_sequence_ids[7], oldIdx);
 		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
-		int msgIndex = _scene->_kernelMessages.add(Common::Point(170, 21), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 156));
-		_scene->_kernelMessages.setQuoted(msgIndex, 3, true);
+		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 156), 170, 21, 0xFDFC, 90, 0, 0);
+		kernel_message_teletype(msgIndex, 3, true);
 	}
 	break;
 
@@ -896,7 +896,7 @@ static void handleMonkey1() {
 static void handleMonkey2() {
 	switch (kernel.trigger) {
 	case 251:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 137));
+		kernel_message_add(quote_string(kernel.quotes, 137), 0, 0, 0x1110, 60, 0, 34);
 		g_engine->_soundManager->command(22, 0);
 		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 11, 1, 0, 0);
 		_scene->_sequences.setPosition(g_sequence_ids[12], Common::Point(111, 133));
@@ -909,8 +909,8 @@ static void handleMonkey2() {
 
 	case 252:
 	{
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 132));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 132), 0, 0, 0x1110, 120, 0, 34);
 		int oldIdx = g_sequence_ids[12];
 		g_sequence_ids[12] = _scene->_sequences.startCycle(g_sprite_ids[12], false, 7);
 		_scene->_sequences.setPosition(g_sequence_ids[12], Common::Point(111, 133));
@@ -954,13 +954,13 @@ static void handleDodge() {
 		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
 		local._playingAnimFl = false;
 		local._pauseMode = 0;
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 155));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 155), 180, 21, 0xFDFC, 90, 0, 0);
 		if (!local._shootMissedLastFl) {
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 135));
+			kernel_message_add(quote_string(kernel.quotes, 135), 0, 0, 0x1110, 120, 0, 34);
 			local._shootMissedLastFl = true;
 		} else {
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 136));
+			kernel_message_add(quote_string(kernel.quotes, 136), 0, 0, 0x1110, 120, 0, 34);
 		}
 		break;
 
@@ -1316,11 +1316,11 @@ static void room_209_daemon() {
 			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
 			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
 			_scene->_sequences.addTimer(2, 233);
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			if (local._dodgeFl && (local._monkeyPosition != 1) && (local._monkeyPosition != 2))
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, quote_string(kernel.quotes, 138));
+				kernel_message_add(quote_string(kernel.quotes, 138), 0, 0, 0x1110, 34463, 0, 34);
 			if (local._fallFl && (local._monkeyPosition != 3))
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 34463, quote_string(kernel.quotes, 138));
+				kernel_message_add(quote_string(kernel.quotes, 138), 0, 0, 0x1110, 34463, 0, 34);
 		}
 		break;
 
@@ -1330,7 +1330,7 @@ static void room_209_daemon() {
 
 		case 234:
 			_scene->_sequences.remove(g_sequence_ids[2]);
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			if (player_said_3(hose_down, blowgun, monkey)) {
 				g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 7, 16, 0, 0);
 				_scene->_sequences.setAnimRange(g_sequence_ids[2], 11, 12);
@@ -1405,7 +1405,7 @@ static void room_209_daemon() {
 	}
 
 	if (kernel.trigger == 100)
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 134));
+		kernel_message_add(quote_string(kernel.quotes, 134), 0, 0, 0x1110, 120, 0, 34);
 
 	if (local._shootReadyFl && (local._shouldFallFl || local._shouldDodgeFl)) {
 		_scene->_sequences.addTimer(4, 234);
@@ -1466,89 +1466,89 @@ static void room_209_parser() {
 		return;
 
 	case 5:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 6, 180, quote_string(kernel.quotes, 139));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 139), 0, 0, 0x1110, 180, 6, 34);
 		player.command_ready = false;
 		return;
 
 	case 6:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 151));
+		kernel_message_add(quote_string(kernel.quotes, 151), 180, 21, 0xFDFC, 60, 0, 0);
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 7;
 		player.command_ready = false;
 		return;
 
 	case 7:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 8, 180, quote_string(kernel.quotes, 140));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 140), 0, 0, 0x1110, 180, 8, 34);
 		player.command_ready = false;
 		return;
 
 	case 8:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 149));
+		kernel_message_add(quote_string(kernel.quotes, 149), 180, 21, 0xFDFC, 60, 0, 0);
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 9;
 		player.command_ready = false;
 		return;
 
 	case 9:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, quote_string(kernel.quotes, 141));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 141), 0, 0, 0x1110, 180, 0, 34);
 		_scene->_sequences.addTimer(200, 10);
 		player.command_ready = false;
 		return;
 
 	case 10:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 11, 180, quote_string(kernel.quotes, 142));
+		kernel_message_add(quote_string(kernel.quotes, 142), 0, 0, 0x1110, 180, 11, 34);
 		player.command_ready = false;
 		return;
 
 	case 11:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 152));
+		kernel_message_add(quote_string(kernel.quotes, 152), 180, 21, 0xFDFC, 60, 0, 0);
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 12;
 		player.command_ready = false;
 		return;
 
 	case 12:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 130, quote_string(kernel.quotes, 143));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 143), 0, 0, 0x1110, 130, 0, 34);
 		_scene->_sequences.addTimer(150, 13);
 		player.command_ready = false;
 		return;
 
 	case 13:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 14, 180, quote_string(kernel.quotes, 145));
+		kernel_message_add(quote_string(kernel.quotes, 145), 0, 0, 0x1110, 180, 14, 34);
 		player.command_ready = false;
 		return;
 
 	case 14:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 151));
+		kernel_message_add(quote_string(kernel.quotes, 151), 180, 21, 0xFDFC, 60, 0, 0);
 		_scene->_sequences.addTimer(60, 130);
 		local._dialogAbortVal = 15;
 		player.command_ready = false;
 		return;
 
 	case 15:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 16, 180, quote_string(kernel.quotes, 146));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 146), 0, 0, 0x1110, 180, 16, 34);
 		player.command_ready = false;
 		return;
 
 	case 16:
-		_scene->_kernelMessages.add(Common::Point(180, 21), 0xFDFC, 0, 17, 60, quote_string(kernel.quotes, 154));
+		kernel_message_add(quote_string(kernel.quotes, 154), 180, 21, 0xFDFC, 60, 17, 0);
 		player.command_ready = false;
 		return;
 
 	case 17:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 130, 60, quote_string(kernel.quotes, 147));
+		kernel_message_add(quote_string(kernel.quotes, 147), 0, 0, 0x1110, 60, 130, 34);
 		local._dialogAbortVal = 18;
 		player.command_ready = false;
 		return;
 
 	case 18:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, quote_string(kernel.quotes, 148));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 148), 0, 0, 0x1110, 180, 0, 34);
 		local._pitchFl = true;
 		local._playingDialogFl = false;
 		local._dialogAbortVal = 5;
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index aca5cb21520..66588bec76e 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -59,7 +59,7 @@ static Scratch local;
 
 
 static void handleTwinklesSpeech(int quoteId, int shiftX, uint32 delay) {
-	_scene->_kernelMessages.add(Common::Point(10, 70 + (shiftX * 14)), 0xFDFC, 0, 0, (delay == 0) ? INDEFINITE_TIMEOUT : delay, quote_string(kernel.quotes, quoteId));
+	kernel_message_add(quote_string(kernel.quotes, quoteId), 10, 70 + (shiftX * 14), 0xFDFC, (delay == 0) ? INDEFINITE_TIMEOUT : delay, 0, 0);
 }
 
 static void newNode(int node) {
@@ -339,7 +339,7 @@ static void setDialogNode(int node) {
 			global[kCurtainOpen] = true;
 			player.walker_visible = false;
 			pal_lock();
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			kernel_abort_animation(0);
 			kernel_dump_all();
 
@@ -353,29 +353,29 @@ static void setDialogNode(int node) {
 			g_sprite_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 5);
 			_scene->_sequences.setDepth(g_sprite_ids[8], 1);
 
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 20), 0x1110, 32, 5, 180, quote_string(kernel.quotes, 231));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 231), 160, 20, 0x1110, 180, 5, 32);
+			kernel_message_teletype(msgIndex, 4, true);
 		}
 		break;
 
 		case 5:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 40), 0xFDFC, 32, 6, 180, quote_string(kernel.quotes, 233));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 233), 160, 40, 0xFDFC, 180, 6, 32);
+			kernel_message_teletype(msgIndex, 4, true);
 		}
 		break;
 
 		case 6:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 60), 0x1110, 32, 7, 180, quote_string(kernel.quotes, 232));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 232), 160, 60, 0x1110, 180, 7, 32);
+			kernel_message_teletype(msgIndex, 4, true);
 		}
 		break;
 
 		case 7:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(160, 80), 0xFDFC, 32, 8, 180, quote_string(kernel.quotes, 234));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 234), 160, 80, 0xFDFC, 180, 8, 32);
+			kernel_message_teletype(msgIndex, 4, true);
 		}
 		break;
 
@@ -546,24 +546,24 @@ static void handleConversation8() {
 
 static void handleConversations() {
 	if (kernel.trigger == 0) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		player.commands_allowed = false;
-		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
-		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
+		char *curQuote = quote_string(kernel.quotes, player2.words[0]);
+		if (font_string_width(kernel_message_font, curQuote, kernel_message_spacing) > 200) {
 			static char line1[40], line2[40];
 			quote_split_string(curQuote, line1, line2);
 			Common::strcpy_s(local._subQuote2, line2);
-			_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 240, line1);
+			kernel_message_add(line1, 0, -14, 0x1110, 240, 0, 34);
 			_scene->_sequences.addTimer(60, 50);
 		} else {
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, curQuote);
+			kernel_message_add(curQuote, 0, 0, 0x1110, 120, 1, 34);
 		}
 	} else if (kernel.trigger == 50) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 240, local._subQuote2);
+		kernel_message_add(local._subQuote2, 0, 0, 0x1110, 240, 0, 34);
 		_scene->_sequences.addTimer(180, 1);
 	} else {
 		if (kernel.trigger == 1)
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 
 		switch (local._curDialogNode) {
 		case 1:
@@ -878,7 +878,7 @@ static void room_210_daemon() {
 			int reset_frame = -1;
 
 			if (local._twinklesCurrentFrame == 53) {
-				_scene->_kernelMessages.add(Common::Point(151, 61), 0xFDFC, 32, 70, 180, quote_string(kernel.quotes, 230));
+				kernel_message_add(quote_string(kernel.quotes, 230), 151, 61, 0xFDFC, 180, 70, 32);
 				local._shouldTalk = true;
 			} else if ((local._twinklesCurrentFrame == 75) && local._shouldTalk)
 				reset_frame = 60;
@@ -928,8 +928,8 @@ static void room_210_parser() {
 
 			local._shouldFaceRex = true;
 			local._nextHandsPlace = 0;
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.addQuote(quote, 1, 120);
+			kernel_message_purge();
+			kernel_message_player(quote, 120, 1);
 		}
 		break;
 
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index 89be57ee1de..85ff1680941 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -82,9 +82,7 @@ static void room_211_init() {
 	kernel.quotes = quote_load(0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 1, 0);
 
 	if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY)
-		_scene->_kernelMessages.initRandomMessages(2,
-			Common::Rect(0, 0, 54, 30), 13, 2, 0xFDFC, 60,
-			151, 152, 153, 154, 0);
+		kernel_random_messages_init(2, 0, 54, 0, 30, 13, 2, 0xFDFC, 60, 151, 152, 153, 154, 0);
 
 	local._monkeyTime = kernel.clock;
 	local._scrollY = 30;
@@ -97,11 +95,11 @@ static void room_211_init() {
 
 static void room_211_daemon() {
 	if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
-		_scene->_kernelMessages.randomServer();
+		kernel_random_message_server();
 
 		if (!local._ambushFl && !local._wakeFl && (kernel.clock >= local._monkeyTime)) {
-			int chanceMinor = _scene->_kernelMessages.checkRandom() * 4 + 1;
-			if (_scene->_kernelMessages.generateRandom(80, chanceMinor))
+			int chanceMinor = kernel_check_random() * 4 + 1;
+			if (kernel_generate_random_message(80, chanceMinor))
 				g_engine->_soundManager->command(18, 0);
 
 			local._monkeyTime = kernel.clock + 2;
@@ -116,7 +114,7 @@ static void room_211_daemon() {
 					local._monkeyFrame = 0;
 					player.commands_allowed = false;
 					player.walker_visible = false;
-					_scene->_kernelMessages.reset();
+					kernel_message_purge();
 					kernel_run_animation(kernel_name('A', -1), 90);
 					g_engine->_soundManager->command(19, 0);
 					int count = (int)inven_num_objects;
@@ -148,33 +146,33 @@ static void room_211_daemon() {
 		switch (local._monkeyFrame) {
 		case 2:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(12, 4), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 157));
-			_scene->_kernelMessages.setQuoted(msgIndex, 2, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 157), 12, 4, 0xFDFC, 60, 0, 0);
+			kernel_message_teletype(msgIndex, 2, true);
 		}
 		break;
 
 		case 12:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(35, 20), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 155));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 155), 35, 20, 0xFDFC, 60, 0, 0);
+			kernel_message_teletype(msgIndex, 4, true);
 		}
 		break;
 
 		case 42:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(60, 45), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 156));
-			_scene->_kernelMessages.setQuoted(msgIndex, 6, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 156), 60, 45, 0xFDFC, 60, 0, 0);
+			kernel_message_teletype(msgIndex, 6, true);
 		}
 		break;
 
 		case 73:
-			_scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 75, quote_string(kernel.quotes, 157));
+			kernel_message_add(quote_string(kernel.quotes, 157), 102, 95, 0xFDFC, 75, 0, 32);
 			break;
 
 		case 90:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(102, 95), 0xFDFC, 32, 0, 60, quote_string(kernel.quotes, 158));
-			_scene->_kernelMessages.setQuoted(msgIndex, 6, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 158), 102, 95, 0xFDFC, 60, 0, 32);
+			kernel_message_teletype(msgIndex, 6, true);
 		}
 		break;
 
@@ -185,32 +183,32 @@ static void room_211_daemon() {
 
 		case 177:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 161));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 161), 63, local._scrollY, 0x1110, 180, 0, 0);
+			kernel_message_teletype(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
 		break;
 
 		case 181:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 162));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 162), 63, local._scrollY, 0x1110, 180, 0, 0);
+			kernel_message_teletype(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
 		break;
 
 		case 188:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 163));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 163), 63, local._scrollY, 0x1110, 180, 0, 0);
+			kernel_message_teletype(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
 		break;
 
 		case 200:
 		{
-			int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 164));
-			_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 164), 63, local._scrollY, 0x1110, 180, 0, 0);
+			kernel_message_teletype(msgIndex, 4, true);
 			local._scrollY += 14;
 		}
 		break;
@@ -232,32 +230,32 @@ static void room_211_daemon() {
 			switch (_scene->_animation[0]->getCurrentFrame()) {
 			case 177:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 165));
-				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+				int msgIndex = kernel_message_add(quote_string(kernel.quotes, 165), 63, local._scrollY, 0x1110, 180, 0, 0);
+				kernel_message_teletype(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
 			break;
 
 			case 181:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 166));
-				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+				int msgIndex = kernel_message_add(quote_string(kernel.quotes, 166), 63, local._scrollY, 0x1110, 180, 0, 0);
+				kernel_message_teletype(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
 			break;
 
 			case 188:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 167));
-				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+				int msgIndex = kernel_message_add(quote_string(kernel.quotes, 167), 63, local._scrollY, 0x1110, 180, 0, 0);
+				kernel_message_teletype(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
 			break;
 
 			case 200:
 			{
-				int msgIndex = _scene->_kernelMessages.add(Common::Point(63, local._scrollY), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 168));
-				_scene->_kernelMessages.setQuoted(msgIndex, 4, true);
+				int msgIndex = kernel_message_add(quote_string(kernel.quotes, 168), 63, local._scrollY, 0x1110, 180, 0, 0);
+				kernel_message_teletype(msgIndex, 4, true);
 				local._scrollY += 14;
 			}
 			break;
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index 1efd7ea9942..ac18e948de8 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -115,8 +115,8 @@ static void room_215_parser() {
 			}
 		} else {
 			int idx = g_engine->getRandomNumber(169, 170);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, idx));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, idx), 0, 0, 0x1110, 120, 0, 34);
 		}
 	} else if (player_said_2(walk_outside, hut))
 		new_room = 210;
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index e42185d9d6a..8f39a425855 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -102,8 +102,8 @@ static void room_304_daemon() {
 		break;
 
 		case 71:
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 0xEB));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0xEB), 0, 0, 0x1110, 60, 0, 34);
 			_scene->_sequences.addTimer(1, 72);
 			break;
 
@@ -149,8 +149,8 @@ static void room_304_daemon() {
 			break;
 
 		case 77:
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(211, 45), 0xFDFC, 32, 0, 180, quote_string(kernel.quotes, 0xEC));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0xEC), 211, 45, 0xFDFC, 180, 0, 32);
 			_scene->_sequences.addTimer(120, 78);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 5b14ba9c458..692a8b6cbc0 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -57,16 +57,16 @@ static Scratch local;
 
 
 static void handleRexDialog(int quote) {
-	const char *curQuote = quote_string(kernel.quotes, quote);
-	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
+	char *curQuote = quote_string(kernel.quotes, quote);
+	if (font_string_width(kernel_message_font, curQuote, kernel_message_spacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		quote_split_string(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
 
-		_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 240, subQuote1);
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 180, local._subQuote2);
+		kernel_message_add(subQuote1, 0, -14, 0x1110, 240, 0, 34);
+		kernel_message_add(local._subQuote2, 0, 0, 0x1110, 180, 1, 34);
 	} else
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, curQuote);
+		kernel_message_add(curQuote, 0, 0, 0x1110, 120, 1, 34);
 }
 
 static void handlePrisonerSpeech(int firstQuoteId, int number, uint32 timeout) {
@@ -78,13 +78,13 @@ static void handlePrisonerSpeech(int firstQuoteId, int number, uint32 timeout) {
 	else
 		posY = 78 - (height / 2);
 
-	_scene->_kernelMessages.reset();
+	kernel_message_purge();
 	local._activePrisonerFl = true;
 
 	int quoteId = firstQuoteId;
 	for (int count = 0; count < number; count++) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_kernelMessages.add(Common::Point(5, posY), 0xFDFC, 0, 81, timeout, quote_string(kernel.quotes, quoteId));
+		kernel_message_add(quote_string(kernel.quotes, quoteId), 5, posY, 0xFDFC, timeout, 81, 0);
 		posY += 14;
 		quoteId++;
 	}
@@ -261,7 +261,7 @@ static void handlePrisonerDialog() {
 
 static void handleDialog() {
 	if (kernel.trigger == 0) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		player.commands_allowed = false;
 		handleRexDialog(player2.words[0]);
 	} else {
@@ -365,7 +365,7 @@ static void room_307_init() {
 	section_3_music();
 
 	if ((previous_room == 318) || (previous_room == 387))
-		_scene->_kernelMessages.addQuote(0xF3, 0, 120);
+		kernel_message_player(0xF3, 120, 0);
 }
 
 static void room_307_daemon() {
@@ -427,14 +427,14 @@ static void room_307_daemon() {
 				if (local._prisonerMessageId == -1)
 					local._prisonerMessageId = 0x104;
 
-				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, quote_string(kernel.quotes, local._prisonerMessageId));
-				_scene->_kernelMessages.setQuoted(idx, 4, true);
+				int idx = kernel_message_add(quote_string(kernel.quotes, local._prisonerMessageId), 5, 51, 0xFDFC, 120, 81, 0);
+				kernel_message_teletype(idx, 4, true);
 				local._prisonerMessageId++;
 				if (local._prisonerMessageId > 0x10A)
 					local._prisonerMessageId = 0x104;
 			} else if (global[kKnowsBuddyBeast] && (local._dialog2.read(0) > 1) && (g_engine->getRandomNumber(1, 3) == 1)) {
-				int idx = _scene->_kernelMessages.add(Common::Point(5, 51), 0xFDFC, 0, 81, 120, quote_string(kernel.quotes, 267));
-				_scene->_kernelMessages.setQuoted(idx, 4, true);
+				int idx = kernel_message_add(quote_string(kernel.quotes, 267), 5, 51, 0xFDFC, 120, 81, 0);
+				kernel_message_teletype(idx, 4, true);
 			}
 			local._prisonerTimer = 0;
 		}
@@ -486,8 +486,8 @@ static void room_307_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 239));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 239), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(120, 1);
 			break;
 
@@ -532,8 +532,8 @@ static void room_307_parser() {
 
 		case 5:
 			g_engine->_soundManager->command(10, 0);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 241));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 241), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(120, 6);
 			break;
 
@@ -548,7 +548,7 @@ static void room_307_parser() {
 			int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(129, 104), FACING_NORTH);
 			_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_UP);
 			inter_take_from_player(OBJ_SCALPEL, NOWHERE);
-			_scene->_kernelMessages.addQuote(0xF2, 7, 120);
+			kernel_message_player(0xF2, 120, 7);
 		}
 		break;
 
@@ -677,9 +677,9 @@ static void room_307_parser() {
 			case 3:
 			{
 				matte_deallocate_series(g_sprite_ids[3], true);
-				_scene->_kernelMessages.reset();
-				int idx = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 4, 120, quote_string(kernel.quotes, 237));
-				_scene->_kernelMessages.setQuoted(idx, 4, true);
+				kernel_message_purge();
+				int idx = kernel_message_add(quote_string(kernel.quotes, 237), 0, 0, 0x1110, 120, 4, 34);
+				kernel_message_teletype(idx, 4, true);
 			}
 			break;
 
@@ -693,9 +693,9 @@ static void room_307_parser() {
 				break;
 			}
 		} else {
-			_scene->_kernelMessages.reset();
-			int idx = _scene->_kernelMessages.add(Common::Point(85, 39), 0x1110, 0, 0, 180, quote_string(kernel.quotes, 238));
-			_scene->_kernelMessages.setQuoted(idx, 4, true);
+			kernel_message_purge();
+			int idx = kernel_message_add(quote_string(kernel.quotes, 238), 85, 39, 0x1110, 180, 0, 0);
+			kernel_message_teletype(idx, 4, true);
 		}
 	} else if (player_said_2(look, air_vent)) {
 		if (!local._grateOpenedFl)
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index 6ab42b96be4..7f9e4c3eccc 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -84,9 +84,9 @@ static void room_308_daemon() {
 		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 18, 9, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-		_scene->_kernelMessages.reset();
-		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 244));
-		_scene->_kernelMessages.setQuoted(idx, 2, true);
+		kernel_message_purge();
+		int idx = kernel_message_add(quote_string(kernel.quotes, 244), 171, 21, 0xFDFC, 120, 0, 0);
+		kernel_message_teletype(idx, 2, true);
 		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 	break;
@@ -106,7 +106,7 @@ static void room_308_daemon() {
 		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 20, 5, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[3], 3, 4);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 		break;
 
@@ -126,9 +126,9 @@ static void room_308_daemon() {
 		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 20, 8, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[3], 6, 7);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-		_scene->_kernelMessages.reset();
-		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 245));
-		_scene->_kernelMessages.setQuoted(idx, 2, true);
+		kernel_message_purge();
+		int idx = kernel_message_add(quote_string(kernel.quotes, 245), 171, 21, 0xFDFC, 120, 0, 0);
+		kernel_message_teletype(idx, 2, true);
 		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 	}
 	break;
@@ -150,9 +150,9 @@ static void room_308_daemon() {
 		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 26, 0, 0, 0);
 		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
 		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-		_scene->_kernelMessages.reset();
-		int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 246));
-		_scene->_kernelMessages.setQuoted(idx, 2, true);
+		kernel_message_purge();
+		int idx = kernel_message_add(quote_string(kernel.quotes, 246), 171, 21, 0xFDFC, 120, 0, 0);
+		kernel_message_teletype(idx, 2, true);
 		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
 	}
 	break;
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index 23c4603738d..7614c3d66cb 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -101,12 +101,12 @@ static void room_309_daemon() {
 		if (local._lastFrame != _scene->_animation[0]->getCurrentFrame()) {
 			local._lastFrame = _scene->_animation[0]->getCurrentFrame();
 			if (local._lastFrame == 39) {
-				local._messagesIndexes[0] = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 32, 61, 210, quote_string(kernel.quotes, 348));
-				local._messagesIndexes[1] = _scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 32, 0, 210, quote_string(kernel.quotes, 349));
+				local._messagesIndexes[0] = kernel_message_add(quote_string(kernel.quotes, 348), 0, 0, 0x1110, 210, 61, 32);
+				local._messagesIndexes[1] = kernel_message_add(quote_string(kernel.quotes, 349), 0, 0, 0x1110, 210, 0, 32);
 			}
 
 			if (local._lastFrame == 97)
-				local._messagesIndexes[2] = _scene->_kernelMessages.add(Common::Point(0, 0), 0xFBFA, 32, 62, 180, quote_string(kernel.quotes, 350));
+				local._messagesIndexes[2] = kernel_message_add(quote_string(kernel.quotes, 350), 0, 0, 0xFBFA, 180, 62, 32);
 
 			for (int charIdx = 0; charIdx < 3; charIdx++) {
 				if (local._messagesIndexes[charIdx] >= 0) {
@@ -150,8 +150,8 @@ static void room_309_daemon() {
 			_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 7);
 			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
-			int idx = _scene->_kernelMessages.add(Common::Point(85, 37), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 248));
-			_scene->_kernelMessages.setQuoted(idx, 2, true);
+			int idx = kernel_message_add(quote_string(kernel.quotes, 248), 85, 37, 0xFDFC, 120, 0, 0);
+			kernel_message_teletype(idx, 2, true);
 			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		}
 		break;
@@ -174,8 +174,8 @@ static void room_309_daemon() {
 			_scene->_sequences.setAnimRange(g_sequence_ids[3], 12, 20);
 			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
 			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
-			int idx = _scene->_kernelMessages.add(Common::Point(170, 49), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 249));
-			_scene->_kernelMessages.setQuoted(idx, 2, true);
+			int idx = kernel_message_add(quote_string(kernel.quotes, 249), 170, 49, 0xFDFC, 120, 0, 0);
+			kernel_message_teletype(idx, 2, true);
 			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 		}
 		break;
@@ -218,8 +218,8 @@ static void room_309_daemon() {
 			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 90, 0, 0, 0);
 			_scene->_sequences.setAnimRange(g_sequence_ids[3], 29, 30);
 			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			int idx = _scene->_kernelMessages.add(Common::Point(15, 46), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 247));
-			_scene->_kernelMessages.setQuoted(idx, 2, true);
+			int idx = kernel_message_add(quote_string(kernel.quotes, 247), 15, 46, 0xFDFC, 120, 0, 0);
+			kernel_message_teletype(idx, 2, true);
 			_scene->_sequences.addTimer(120, 78);
 		}
 		break;
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index b79a43ab96e..2e54dd0b3f7 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -196,8 +196,8 @@ static void room_311_parser() {
 		text_show(31119);
 	else if (local._checkGuardFl) {
 		local._checkGuardFl = false;
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.addQuote(250, 0, 240);
+		kernel_message_purge();
+		kernel_message_player(250, 240, 0);
 	} else if (player_said_2(sit_at, desk))
 		new_room = 320;
 	else if (player_said_2(climb_into, air_vent)) {
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 5c7906994fe..5c19cd49fc6 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -427,9 +427,9 @@ static void room_316_parser() {
 			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
 			_scene->_sequences.setAnimRange(g_sequence_ids[1], 8, -2);
 			_scene->_sequences.setDepth(g_sequence_ids[1], 2);
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			if (!player_has_been_in_room(321))
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 253));
+				kernel_message_add(quote_string(kernel.quotes, 253), 0, 0, 0x1110, 120, 0, 34);
 
 			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index 569f017aafb..14e858c3336 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -54,17 +54,17 @@ static Scratch local;
 
 
 static void handleRexDialogs(int quote) {
-	_scene->_kernelMessages.reset();
+	kernel_message_purge();
 
-	const char *curQuote = quote_string(kernel.quotes, quote);
-	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
+	char *curQuote = quote_string(kernel.quotes, quote);
+	if (font_string_width(kernel_message_font, curQuote, kernel_message_spacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		quote_split_string(curQuote, subQuote1, subQuote2);
 
-		_scene->_kernelMessages.add(Common::Point(138, 59), 0x1110, 32, 0, 240, subQuote1);
-		_scene->_kernelMessages.add(Common::Point(138, 73), 0x1110, 32, 1, 180, subQuote2);
+		kernel_message_add(subQuote1, 138, 59, 0x1110, 240, 0, 32);
+		kernel_message_add(subQuote2, 138, 73, 0x1110, 180, 1, 32);
 	} else
-		_scene->_kernelMessages.add(Common::Point(138, 73), 0x1110, 32, 1, 120, curQuote);
+		kernel_message_add(curQuote, 138, 73, 0x1110, 120, 1, 32);
 }
 
 static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
@@ -79,14 +79,14 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 
 	int maxWidth = 0;
 	for (int i = 0; i < quoteNum; i++) {
-		maxWidth = MAX(maxWidth, _scene->_kernelMessages._talkFont->getWidth(quote_string(kernel.quotes, curQuoteId), -1));
+		maxWidth = MAX(maxWidth, font_string_width(kernel_message_font, quote_string(kernel.quotes, curQuoteId), -1));
 		curQuoteId++;
 	}
 
 	int posX = MIN(319 - maxWidth, 178 - (maxWidth >> 1));
 	curQuoteId = quoteId;
 
-	_scene->_kernelMessages.reset();
+	kernel_message_purge();
 	local._internTalkingFl = true;
 
 	// WORKAROUND: In case the player launches multiple talk selections with the
@@ -98,7 +98,7 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 	for (int i = 0; i < quoteNum; i++) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(180, 63);
-		_scene->_kernelMessages.add(Common::Point(posX, posY), 0xFDFC, 0, 0, timeout, quote_string(kernel.quotes, curQuoteId));
+		kernel_message_add(quote_string(kernel.quotes, curQuoteId), posX, posY, 0xFDFC, timeout, 0, 0);
 		posY += 14;
 		curQuoteId++;
 	}
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index 774613ef7b8..7a05ca5f7cd 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -56,18 +56,18 @@ static Scratch local;
 
 
 static void handleRexDialogues(int quote) {
-	_scene->_kernelMessages.reset();
+	kernel_message_purge();
 
-	const char *curQuote = quote_string(kernel.quotes, quote);
-	if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
+	char *curQuote = quote_string(kernel.quotes, quote);
+	if (font_string_width(kernel_message_font, curQuote, kernel_message_spacing) > 200) {
 		static char subQuote1[34], subQuote2[34];
 		quote_split_string(curQuote, subQuote1, subQuote2);
 		Common::strcpy_s(local._subQuote2, subQuote2);
 
-		_scene->_kernelMessages.add(Common::Point(160, 106), 0x1110, 32, 0, 120, subQuote1);
-		_scene->_kernelMessages.add(Common::Point(160, 120), 0x1110, 32, 1, 120, local._subQuote2);
+		kernel_message_add(subQuote1, 160, 106, 0x1110, 120, 0, 32);
+		kernel_message_add(local._subQuote2, 160, 120, 0x1110, 120, 1, 32);
 	} else
-		_scene->_kernelMessages.add(Common::Point(160, 120), 0x1110, 32, 1, 120, curQuote);
+		kernel_message_add(curQuote, 160, 120, 0x1110, 120, 1, 32);
 }
 
 static void handleSlacheDialogs(int quoteId, int counter, uint32 timer) {
@@ -75,7 +75,7 @@ static void handleSlacheDialogs(int quoteId, int counter, uint32 timer) {
 	int posY = 5 + (local._slachePosY * 14);
 
 	for (int count = 0; count < counter; count++, curQuote++) {
-		_scene->_kernelMessages.add(Common::Point(8, posY), 0xFDFC, 0, 0, timer, quote_string(kernel.quotes, curQuote));
+		kernel_message_add(quote_string(kernel.quotes, curQuote), 8, posY, 0xFDFC, timer, 0, 0);
 		posY += 14;
 	}
 }
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index c229ebf2a0b..ab822aa88b1 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -209,7 +209,7 @@ static void room_320_daemon() {
 				break;
 
 			case 191:
-				_scene->_kernelMessages.add(Common::Point(1, 1), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 0xFE));
+				kernel_message_add(quote_string(kernel.quotes, 0xFE), 1, 1, 0xFDFC, 60, 0, 0);
 				break;
 
 			case 417:
@@ -289,7 +289,7 @@ static void room_320_parser() {
 					player.commands_allowed = false;
 					setRightView(8);
 					setLeftView(10);
-					_scene->_kernelMessages.reset();
+					kernel_message_purge();
 					kernel_dump_all();
 					g_sprite_ids[2] = kernel_load_series(kernel_name('m', 2), 0);
 					g_sprite_ids[4] = kernel_load_series(kernel_name('m', 4), 0);
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index adf31584e3e..f9b2e940699 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -49,7 +49,7 @@ static Scratch local;
 static void putArmDown(bool corridorExit, bool doorwayExit) {
 	switch (kernel.trigger) {
 	case 0:
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0xFF));
+		kernel_message_add(quote_string(kernel.quotes, 0xFF), 0, 0, 0x1110, 120, 0, 34);
 		_scene->_sequences.addTimer(48, 1);
 		break;
 
@@ -79,8 +79,8 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 	break;
 
 	case 3:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x100));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x100), 0, 0, 0x1110, 120, 0, 34);
 		inter_move_object(OBJ_GUARDS_ARM, room_id);
 		player.walker_visible = true;
 		if (corridorExit)
@@ -290,7 +290,7 @@ static void room_352_parser() {
 				break;
 
 			case 4:
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x101));
+				kernel_message_add(quote_string(kernel.quotes, 0x101), 0, 0, 0x1110, 120, 0, 34);
 				player.commands_allowed = true;
 				break;
 
@@ -434,10 +434,10 @@ static void room_352_parser() {
 					idx = _scene->_dynamicHotspots.add(words_your_stuff, words_walkto, -1, Common::Rect(282, 87, 282 + 13, 87 + 7));
 					local._hotspot2Idx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(280, 111), FACING_NORTHEAST);
 					g_sequence_ids[1] = local._commonSequenceIdx;
-					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x102));
+					kernel_message_add(quote_string(kernel.quotes, 0x102), 0, 0, 0x1110, 120, 0, 34);
 				} else {
 					g_sequence_ids[13] = local._commonSequenceIdx;
-					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x103));
+					kernel_message_add(quote_string(kernel.quotes, 0x103), 0, 0, 0x1110, 120, 0, 34);
 				}
 
 				idx = _scene->_dynamicHotspots.add(words_other_stuff, words_walkto, -1, Common::Rect(282, 48, 282 + 36, 48 + 27));
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 24613f1804f..1a45709cb52 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -269,7 +269,7 @@ static void room_361_init() {
 	kernel.quotes = quote_load(0xFB, 0xFC, 0);
 
 	if (previous_room == 320)
-		_scene->_kernelMessages.setQuoted(_scene->_kernelMessages.addQuote(0xFB, 0, 0x78), 4, true);
+		kernel_message_teletype(kernel_message_player(0xFB, 0x78, 0), 4, true);
 
 	section_3_music();
 }
@@ -388,8 +388,8 @@ static void room_361_parser() {
 	if (player.look_around)
 		text_show(36119);
 	else if (player_said_2(sit_at, desk)) {
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.addQuote(252, 0, 120);
+		kernel_message_purge();
+		kernel_message_player(252, 120, 0);
 	} else if (player_said_2(climb_into, air_vent)) {
 		if (global[kSexOfRex] == REX_FEMALE)
 			handleRoxAction();
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index e1fd078f307..089f45f5ab8 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -57,19 +57,19 @@ static void room_388_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 1, 120, quote_string(kernel.quotes, 0x154));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x154), 160, 136, 0x1110, 120, 1, 32);
 			break;
 
 		case 1:
-			_scene->_kernelMessages.add(Common::Point(82, 38), 0xFDFC, 0, 0, 300, quote_string(kernel.quotes, 0x156));
-			_scene->_kernelMessages.add(Common::Point(82, 52), 0xFDFC, 0, 0, 300, quote_string(kernel.quotes, 0x157));
-			_scene->_kernelMessages.add(Common::Point(82, 66), 0xFDFC, 0, 2, 300, quote_string(kernel.quotes, 0x158));
+			kernel_message_add(quote_string(kernel.quotes, 0x156), 82, 38, 0xFDFC, 300, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x157), 82, 52, 0xFDFC, 300, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x158), 82, 66, 0xFDFC, 300, 2, 0);
 			break;
 
 		case 2:
 			player.commands_allowed = true;
-			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 0, 120, quote_string(kernel.quotes, 0x155));
+			kernel_message_add(quote_string(kernel.quotes, 0x155), 160, 136, 0x1110, 120, 0, 32);
 			break;
 
 		default:
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index 7779adeccac..c29de5a8cfa 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -51,9 +51,7 @@ static void room_389_init() {
 	else {
 		g_sprite_ids[0] = kernel_load_series(kernel_name('m', -1), 0);
 		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
-		_scene->_kernelMessages.initRandomMessages(1,
-			Common::Rect(88, 19, 177, 77), 13, 2, 0xFDFC, 60,
-			247, 248, 249, 0);
+		kernel_random_messages_init(1, 88, 177, 19, 77, 13, 2, 0xFDFC, 60, 247, 248, 249, 0);
 	}
 
 	pal_change_color(252, 63, 37, 26);
@@ -65,10 +63,10 @@ static void room_389_init() {
 }
 
 static void room_389_daemon() {
-	_scene->_kernelMessages.randomServer();
+	kernel_random_message_server();
 	if (kernel.clock >= local._monsterTime) {
-		int chanceMinor = _scene->_kernelMessages.checkRandom() * 4 + 1;
-		_scene->_kernelMessages.generateRandom(20, chanceMinor);
+		int chanceMinor = kernel_check_random() * 4 + 1;
+		kernel_generate_random_message(20, chanceMinor);
 		local._monsterTime = kernel.clock + 2;
 	}
 }
@@ -80,7 +78,7 @@ static void room_389_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_kernelMessages.add(Common::Point(160, 136), 0x1110, 32, 1, 120, quote_string(kernel.quotes, local._circularQuoteId));
+			kernel_message_add(quote_string(kernel.quotes, local._circularQuoteId), 160, 136, 0x1110, 120, 1, 32);
 			local._circularQuoteId++;
 			if (local._circularQuoteId > 0x15B)
 				local._circularQuoteId = 0x159;
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index 9b9fc537480..03939b85257 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -130,8 +130,8 @@ static void room_401_parser() {
 			kernel_run_animation(kernel_name('s', 1), 70);
 			global[kHasBeenScanned] = true;
 			g_engine->_soundManager->command(22, 0);
-			int idx = _scene->_kernelMessages.add(Common::Point(153, 46), 0x1110, 32, 0, 60, quote_string(kernel.quotes, 0x1D4));
-			_scene->_kernelMessages.setQuoted(idx, 4, true);
+			int idx = kernel_message_add(quote_string(kernel.quotes, 0x1D4), 153, 46, 0x1110, 60, 0, 32);
+			kernel_message_teletype(idx, 4, true);
 		}
 
 		if (global[kSexOfRex] == REX_FEMALE) {
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 57dd378e9e8..42145164d37 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -145,8 +145,8 @@ static void handleConversation1() {
 		default:
 			break;
 		}
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(quotePosX, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, quoteId));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, quoteId), quotePosX, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 120;
@@ -155,8 +155,8 @@ static void handleConversation1() {
 	break;
 
 	case 0x215:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EC));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1EC), 260, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 120;
@@ -165,8 +165,8 @@ static void handleConversation1() {
 		break;
 
 	case 0x237:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1FD));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
 		setDialogNode(0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
@@ -251,9 +251,9 @@ static void handleConversation2() {
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 100);
 			local._talkTimer = 180;
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E7));
-			_scene->_kernelMessages.add(Common::Point(201, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E8));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x1E7), 198, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x1E8), 201, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			local._bartenderCurrentQuestion = 7;
 			break;
 
@@ -261,9 +261,9 @@ static void handleConversation2() {
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 100);
 			local._talkTimer = 180;
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(220, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E9));
-			_scene->_kernelMessages.add(Common::Point(190, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EA));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x1E9), 220, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x1EA), 190, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			local._bartenderCurrentQuestion = 8;
 			break;
 
@@ -271,8 +271,8 @@ static void handleConversation2() {
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(1, 100);
 			local._talkTimer = 150;
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(196, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EB));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x1EB), 196, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			local._bartenderCurrentQuestion = 9;
 			break;
 
@@ -281,8 +281,8 @@ static void handleConversation2() {
 		}
 		local._dialog2.start();
 	} else {
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1FD));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1120;
@@ -297,16 +297,16 @@ static void handleConversation3() {
 	case 0x236:
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 86);
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(188, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1ED));
-		_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EE));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1ED), 188, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x1EE), 199, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 		setDialogNode(4);
 		local._bartenderCurrentQuestion = 2;
 		break;
 
 	case 0x237:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(208, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1FD));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1120;
@@ -321,12 +321,12 @@ static void handleConversation3() {
 static void handleConversation4() {
 	switch (player2.words[0]) {
 	case 0x238:
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		setDialogNode(0);
 		player.commands_allowed = false;
-		_scene->_kernelMessages.add(Common::Point(196, 13), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F0));
-		_scene->_kernelMessages.add(Common::Point(184, 27), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F1));
-		_scene->_kernelMessages.add(Common::Point(200, 41), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F2));
+		kernel_message_add(quote_string(kernel.quotes, 0x1F0), 196, 13, 0xFDFC, 180, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x1F1), 184, 27, 0xFDFC, 180, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x1F2), 200, 41, 0xFDFC, 180, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1100;
@@ -349,8 +349,8 @@ static void handleConversation4() {
 	case 0x23A:
 		setDialogNode(0);
 		player.commands_allowed = false;
-		_scene->_kernelMessages.add(Common::Point(193, 27), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F4));
-		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F5));
+		kernel_message_add(quote_string(kernel.quotes, 0x1F4), 193, 27, 0xFDFC, 150, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x1F5), 230, 41, 0xFDFC, 150, 0, 0);
 		local._dialog4.write(0x23A, false);
 		global[kHasSaidTimer] = true;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
@@ -365,8 +365,8 @@ static void handleConversation4() {
 	case 0x23D:
 		setDialogNode(0);
 		player.commands_allowed = false;
-		_scene->_kernelMessages.add(Common::Point(153, 27), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F6));
-		_scene->_kernelMessages.add(Common::Point(230, 41), 0xFDFC, 0, 0, 150, quote_string(kernel.quotes, 0x1F7));
+		kernel_message_add(quote_string(kernel.quotes, 0x1F6), 153, 27, 0xFDFC, 150, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x1F7), 230, 41, 0xFDFC, 150, 0, 0);
 		local._dialog4.write(0x23D, false);
 		global[kHasSaidBinocs] = true;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
@@ -379,10 +379,10 @@ static void handleConversation4() {
 		break;
 
 	case 0x23E:
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		setDialogNode(0);
 		player.commands_allowed = false;
-		_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1F8));
+		kernel_message_add(quote_string(kernel.quotes, 0x1F8), 205, 41, 0xFDFC, 100, 0, 0);
 		local._bartenderMode = 22;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(1, 100);
@@ -399,17 +399,17 @@ static void handleConversation4() {
 
 static void handleDialogs() {
 	if (kernel.trigger == 0) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		player.commands_allowed = false;
-		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
-		if (_scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing) > 200) {
+		char *curQuote = quote_string(kernel.quotes, player2.words[0]);
+		if (font_string_width(kernel_message_font, curQuote, kernel_message_spacing) > 200) {
 			static char subQuote1[34], subQuote2[34];
 			quote_split_string(curQuote, subQuote1, subQuote2);
-			_scene->_kernelMessages.add(Common::Point(230, 42), 0x1110, 32, 0, 140, subQuote1);
-			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 0, 140, subQuote2);
+			kernel_message_add(subQuote1, 230, 42, 0x1110, 140, 0, 32);
+			kernel_message_add(subQuote2, 230, 56, 0x1110, 140, 0, 32);
 			_scene->_sequences.addTimer(160, 120);
 		} else {
-			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 1, 140, curQuote);
+			kernel_message_add(curQuote, 230, 56, 0x1110, 140, 1, 32);
 			_scene->_sequences.addTimer(160, 120);
 		}
 	} else if (kernel.trigger == 120) {
@@ -551,47 +551,47 @@ static void room_402_init() {
 
 		switch (local._bartenderCurrentQuestion) {
 		case 1:
-			_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EC));
+			kernel_message_add(quote_string(kernel.quotes, 0x1EC), 260, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 2:
-			_scene->_kernelMessages.add(Common::Point(188, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1ED));
-			_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EE));
+			kernel_message_add(quote_string(kernel.quotes, 0x1ED), 188, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x1EE), 199, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 3:
-			_scene->_kernelMessages.add(Common::Point(177, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EF));
+			kernel_message_add(quote_string(kernel.quotes, 0x1EF), 177, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 4:
-			_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E4));
+			kernel_message_add(quote_string(kernel.quotes, 0x1E4), 205, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 5:
-			_scene->_kernelMessages.add(Common::Point(203, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E5));
+			kernel_message_add(quote_string(kernel.quotes, 0x1E5), 203, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 6:
-			_scene->_kernelMessages.add(Common::Point(260, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E6));
+			kernel_message_add(quote_string(kernel.quotes, 0x1E6), 260, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 7:
-			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E7));
-			_scene->_kernelMessages.add(Common::Point(201, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E8));
+			kernel_message_add(quote_string(kernel.quotes, 0x1E7), 198, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x1E8), 201, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 8:
-			_scene->_kernelMessages.add(Common::Point(220, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E9));
-			_scene->_kernelMessages.add(Common::Point(190, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EA));
+			kernel_message_add(quote_string(kernel.quotes, 0x1E9), 220, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x1EA), 190, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 9:
-			_scene->_kernelMessages.add(Common::Point(196, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EB));
+			kernel_message_add(quote_string(kernel.quotes, 0x1EB), 196, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		case 10:
-			_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E2));
-			_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E3));
+			kernel_message_add(quote_string(kernel.quotes, 0x1E2), 198, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+			kernel_message_add(quote_string(kernel.quotes, 0x1E3), 199, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 			break;
 
 		default:
@@ -803,8 +803,8 @@ static void room_402_daemon() {
 		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
 		_scene->_sequences.updateTimeout(g_sequence_ids[6], seqIdx);
 		if (local._roxMode == 22) {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(230, 56), 0x1110, 32, 0, 120, quote_string(kernel.quotes, 0x23F));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x23F), 230, 56, 0x1110, 120, 0, 32);
 			local._bartenderMode = 21;
 			global[kHasPurchased] = true;
 			_scene->_sequences.addTimer(140, 95);
@@ -906,8 +906,8 @@ static void room_402_daemon() {
 		_scene->_sequences.updateTimeout(g_sequence_ids[9], seqIdx);
 		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		if (local._bartenderMode == 20) {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(210, 41), 0xFDFC, 0, 0, 100, quote_string(kernel.quotes, 0x1F3));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x1F3), 210, 41, 0xFDFC, 100, 0, 0);
 			_scene->_sequences.addTimer(5, 100);
 			local._talkTimer = 180;
 			local._roxMode = 22;
@@ -1362,29 +1362,29 @@ static void room_402_daemon() {
 
 	switch (kernel.trigger) {
 	case 39:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1D8));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1D8), 89, 67, 0xFDFC, 120, 0, 32);
 		_scene->_sequences.addTimer(150, 40);
 		break;
 
 	case 40:
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1D9));
+		kernel_message_add(quote_string(kernel.quotes, 0x1D9), 89, 67, 0xFDFC, 120, 0, 32);
 		_scene->_sequences.addTimer(150, 41);
 		break;
 
 	case 41:
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1DA));
+		kernel_message_add(quote_string(kernel.quotes, 0x1DA), 89, 67, 0xFDFC, 120, 0, 32);
 		player.commands_allowed = true;
 		break;
 
 	case 42:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1DC));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1DC), 89, 67, 0xFDFC, 120, 0, 32);
 		_scene->_sequences.addTimer(150, 43);
 		break;
 
 	case 43:
-		_scene->_kernelMessages.add(Common::Point(89, 67), 0xFDFC, 32, 0, 120, quote_string(kernel.quotes, 0x1DD));
+		kernel_message_add(quote_string(kernel.quotes, 0x1DD), 89, 67, 0xFDFC, 120, 0, 32);
 		player.commands_allowed = true;
 		break;
 
@@ -1416,8 +1416,8 @@ static void room_402_daemon() {
 			_scene->_sequences.setDepth(g_sequence_ids[9], 8);
 		}
 		player.commands_allowed = false;
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(180, 47), 0xFBFA, 0, 0, 100, quote_string(kernel.quotes, 0x1FE));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1FE), 180, 47, 0xFBFA, 100, 0, 0);
 		_scene->_sequences.addTimer(120, 56);
 		break;
 
@@ -1477,9 +1477,9 @@ static void room_402_daemon() {
 	break;
 
 	case 61:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(181, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x1FF));
-		_scene->_kernelMessages.add(Common::Point(171, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x200));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1FF), 181, 33, 0xFBFA, 130, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x200), 171, 47, 0xFBFA, 130, 0, 0);
 		_scene->_sequences.addTimer(150, 63);
 		_scene->_sequences.remove(g_sequence_ids[13]);
 		g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 30, 4, 0, 0);
@@ -1498,16 +1498,16 @@ static void room_402_daemon() {
 	break;
 
 	case 63:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(160, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x201));
-		_scene->_kernelMessages.add(Common::Point(165, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x202));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x201), 160, 33, 0xFBFA, 130, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x202), 165, 47, 0xFBFA, 130, 0, 0);
 		_scene->_sequences.addTimer(150, 64);
 		break;
 
 	case 64:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(210, 27), 0xFDFC, 0, 0, 130, quote_string(kernel.quotes, 0x1E0));
-		_scene->_kernelMessages.add(Common::Point(198, 41), 0xFDFC, 0, 0, 130, quote_string(kernel.quotes, 0x1E1));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x1E0), 210, 27, 0xFDFC, 130, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x1E1), 198, 41, 0xFDFC, 130, 0, 0);
 		_scene->_sequences.addTimer(150, 65);
 		_scene->_sequences.addTimer(1, 100);
 		local._talkTimer = 1130;
@@ -1563,9 +1563,9 @@ static void room_402_daemon() {
 		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
 		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
 
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(179, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x203));
-		_scene->_kernelMessages.add(Common::Point(167, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x204));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x203), 179, 33, 0xFBFA, 130, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x204), 167, 47, 0xFBFA, 130, 0, 0);
 		_scene->_sequences.addTimer(150, 71);
 		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	}
@@ -1580,9 +1580,9 @@ static void room_402_daemon() {
 
 	case 71:
 		_scene->_sequences.addTimer(210, 73);
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(168, 33), 0xFBFA, 0, 0, 180, quote_string(kernel.quotes, 0x205));
-		_scene->_kernelMessages.add(Common::Point(151, 47), 0xFBFA, 0, 0, 180, quote_string(kernel.quotes, 0x206));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x205), 168, 33, 0xFBFA, 180, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x206), 151, 47, 0xFBFA, 180, 0, 0);
 		if (!player_has(OBJ_REPAIR_LIST))
 			local._activeArrows = true;
 		break;
@@ -1597,9 +1597,9 @@ static void room_402_daemon() {
 	break;
 
 	case 73:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(177, 33), 0xFBFA, 0, 0, 150, quote_string(kernel.quotes, 0x207));
-		_scene->_kernelMessages.add(Common::Point(172, 47), 0xFBFA, 0, 0, 150, quote_string(kernel.quotes, 0x208));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x207), 177, 33, 0xFBFA, 150, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x208), 172, 47, 0xFBFA, 150, 0, 0);
 		local._bartenderSteady = true;
 		player.commands_allowed = true;
 		local._helgaReady = true;
@@ -1902,17 +1902,17 @@ static void room_402_parser() {
 
 			switch (random) {
 			case 1:
-				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, 0x211));
+				kernel_message_add(quote_string(kernel.quotes, 0x211), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
 				_scene->_sequences.addTimer(110, 25);
 				break;
 
 			case 2:
-				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, 0x212));
+				kernel_message_add(quote_string(kernel.quotes, 0x212), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
 				_scene->_sequences.addTimer(110, 25);
 				break;
 
 			case 3:
-				_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, 0x213));
+				kernel_message_add(quote_string(kernel.quotes, 0x213), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
 				_scene->_sequences.addTimer(110, 25);
 				break;
 
@@ -1927,8 +1927,8 @@ static void room_402_parser() {
 			case 0:
 				player.commands_allowed = false;
 				local._helgaTalkMode = 1;
-				_scene->_kernelMessages.add(Common::Point(177, 33), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x209));
-				_scene->_kernelMessages.add(Common::Point(182, 47), 0xFBFA, 0, 0, 130, quote_string(kernel.quotes, 0x20A));
+				kernel_message_add(quote_string(kernel.quotes, 0x209), 177, 33, 0xFBFA, 130, 0, 0);
+				kernel_message_add(quote_string(kernel.quotes, 0x20A), 182, 47, 0xFBFA, 130, 0, 0);
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(130, 28);
 				break;
@@ -1936,7 +1936,7 @@ static void room_402_parser() {
 			case 1:
 				player.commands_allowed = false;
 				local._helgaTalkMode = 2;
-				_scene->_kernelMessages.add(Common::Point(157, 47), 0xFBFA, 0, 0, 100, quote_string(kernel.quotes, 0x20B));
+				kernel_message_add(quote_string(kernel.quotes, 0x20B), 157, 47, 0xFBFA, 100, 0, 0);
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(100, 28);
 				break;
@@ -1944,7 +1944,7 @@ static void room_402_parser() {
 			case 2:
 				player.commands_allowed = false;
 				local._helgaTalkMode = 3;
-				_scene->_kernelMessages.add(Common::Point(172, 47), 0xFBFA, 0, 0, 100, quote_string(kernel.quotes, 0x20C));
+				kernel_message_add(quote_string(kernel.quotes, 0x20C), 172, 47, 0xFBFA, 100, 0, 0);
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 				_scene->_sequences.addTimer(100, 28);
 				break;
@@ -1962,24 +1962,24 @@ static void room_402_parser() {
 			break;
 		}
 	} else if (player_said_2(talkto, woman_in_chair) && !local._firstTalkToGirlInChair) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x1D7));
+		kernel_message_add(quote_string(kernel.quotes, 0x1D7), 0, 0, 0x1110, 120, 0, 34);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(150, 39);
 		player.commands_allowed = false;
 		local._firstTalkToGirlInChair = true;
 	} else if (player_said_2(talkto, woman_in_chair) && local._firstTalkToGirlInChair) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x1DB));
+		kernel_message_add(quote_string(kernel.quotes, 0x1DB), 0, 0, 0x1110, 120, 0, 34);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(150, 42);
 		player.commands_allowed = false;
 	} else if (player_said_2(talkto, woman_in_alcove) || player_said_2(walkto, woman_in_alcove)) {
-		_scene->_kernelMessages.add(Common::Point(102, 48), 0xFBFA, 0, 0, 120, quote_string(kernel.quotes, 0x1DE));
+		kernel_message_add(quote_string(kernel.quotes, 0x1DE), 102, 48, 0xFBFA, 120, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		_scene->_sequences.addTimer(120, 44);
 		player.commands_allowed = false;
 	} else if (player_said_2(sit_on, bar_stool) && (player.target_x == 248)) {
-		_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x20D));
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x20E));
+		kernel_message_add(quote_string(kernel.quotes, 0x20D), 0, -14, 0x1110, 120, 0, 34);
+		kernel_message_add(quote_string(kernel.quotes, 0x20E), 0, 0, 0x1110, 120, 0, 34);
 	} else if (player_said_2(sit_on, bar_stool) && !local._roxOnStool && (player.target_x != 248)) {
 		player.walker_visible = false;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
@@ -2025,8 +2025,8 @@ static void room_402_parser() {
 				quoteId = 0x20F;
 				local._bartenderCalled = true;
 			}
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(centerPos, 0x1110, 32 | centerFlag, 0, 90, quote_string(kernel.quotes, quoteId));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, quoteId), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
 			_scene->_sequences.addTimer(110, 29);
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(90, 28);
@@ -2034,23 +2034,23 @@ static void room_402_parser() {
 		break;
 
 		case 29:
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			if (!local._roxOnStool) {
 				if (object_is_here(OBJ_ALIEN_LIQUOR)) {
-					_scene->_kernelMessages.add(Common::Point(177, 41), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 0x1DF));
+					kernel_message_add(quote_string(kernel.quotes, 0x1DF), 177, 41, 0xFDFC, 120, 0, 0);
 					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 					_scene->_sequences.addTimer(1, 100);
 					local._talkTimer = 120;
 				} else if (local._rexMode == 0) {
-					_scene->_kernelMessages.add(Common::Point(175, 13), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F9));
-					_scene->_kernelMessages.add(Common::Point(184, 27), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1FA));
-					_scene->_kernelMessages.add(Common::Point(200, 41), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1FB));
+					kernel_message_add(quote_string(kernel.quotes, 0x1F9), 175, 13, 0xFDFC, 180, 0, 0);
+					kernel_message_add(quote_string(kernel.quotes, 0x1FA), 184, 27, 0xFDFC, 180, 0, 0);
+					kernel_message_add(quote_string(kernel.quotes, 0x1FB), 200, 41, 0xFDFC, 180, 0, 0);
 					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 					_scene->_sequences.addTimer(1, 100);
 					local._talkTimer = 180;
 					local._rexMode = 1;
 				} else if (local._rexMode == 1) {
-					_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 0x1FC));
+					kernel_message_add(quote_string(kernel.quotes, 0x1FC), 205, 41, 0xFDFC, 120, 0, 0);
 					player.commands_allowed = true;
 					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 					_scene->_sequences.addTimer(1, 100);
@@ -2062,9 +2062,9 @@ static void room_402_parser() {
 			} else {
 				if (object_is_here(OBJ_ALIEN_LIQUOR)) {
 					if (!local._refuseAlienLiquor) {
-						_scene->_kernelMessages.reset();
-						_scene->_kernelMessages.add(Common::Point(198, 27), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E2));
-						_scene->_kernelMessages.add(Common::Point(199, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1E3));
+						kernel_message_purge();
+						kernel_message_add(quote_string(kernel.quotes, 0x1E2), 198, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+						kernel_message_add(quote_string(kernel.quotes, 0x1E3), 199, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 						local._bartenderCurrentQuestion = 10;
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 						_scene->_sequences.addTimer(1, 100);
@@ -2076,7 +2076,7 @@ static void room_402_parser() {
 
 						local._dialog1.start();
 					} else {
-						_scene->_kernelMessages.add(Common::Point(177, 41), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x1EF));
+						kernel_message_add(quote_string(kernel.quotes, 0x1EF), 177, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 						_scene->_sequences.addTimer(1, 100);
 						local._talkTimer = 120;
@@ -2091,15 +2091,15 @@ static void room_402_parser() {
 					}
 				} else {
 					if (local._rexMode == 0) {
-						_scene->_kernelMessages.add(Common::Point(175, 13), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1F9));
-						_scene->_kernelMessages.add(Common::Point(184, 27), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1FA));
-						_scene->_kernelMessages.add(Common::Point(200, 41), 0xFDFC, 0, 0, 180, quote_string(kernel.quotes, 0x1FB));
+						kernel_message_add(quote_string(kernel.quotes, 0x1F9), 175, 13, 0xFDFC, 180, 0, 0);
+						kernel_message_add(quote_string(kernel.quotes, 0x1FA), 184, 27, 0xFDFC, 180, 0, 0);
+						kernel_message_add(quote_string(kernel.quotes, 0x1FB), 200, 41, 0xFDFC, 180, 0, 0);
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 						_scene->_sequences.addTimer(1, 100);
 						local._talkTimer = 180;
 						local._rexMode = 1;
 					} else if (local._rexMode == 1) {
-						_scene->_kernelMessages.add(Common::Point(205, 41), 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 0x1FC));
+						kernel_message_add(quote_string(kernel.quotes, 0x1FC), 205, 41, 0xFDFC, 120, 0, 0);
 						player.commands_allowed = true;
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 						_scene->_sequences.addTimer(1, 100);
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index c627c76d4cb..39a2b06321d 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -132,7 +132,7 @@ static void room_405_parser() {
 	else if (player_said_2(walk_through, wide_door) && global[kArmoryDoorOpen])
 		new_room = 408;
 	else if (player_said_2(walk_through, wide_door) && !global[kArmoryDoorOpen])
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 0x24F));
+		kernel_message_add(quote_string(kernel.quotes, 0x24F), 0, 0, 0x1110, 60, 0, 34);
 	else if (player_said_3(put, security_card, card_slot) && !global[kArmoryDoorOpen]) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index e0035624858..d3fd3d1ffc8 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -164,7 +164,7 @@ static void room_406_parser() {
 	} else if (player_said_2(walk_through, door) && global[kStorageDoorOpen] && (player.target_x < 100))
 		new_room = 410;
 	else if (player_said_2(walk_through, door) && !global[kStorageDoorOpen] && (player.target_x < 100)) {
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 0x24F));
+		kernel_message_add(quote_string(kernel.quotes, 0x24F), 0, 0, 0x1110, 60, 0, 34);
 		if (!local._hitStorageDoor) {
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 			_scene->_sequences.addTimer(80, 100);
diff --git a/engines/mads/nebular/rooms/room407.cpp b/engines/mads/nebular/rooms/room407.cpp
index d107580b69f..65c64f04cb3 100644
--- a/engines/mads/nebular/rooms/room407.cpp
+++ b/engines/mads/nebular/rooms/room407.cpp
@@ -107,7 +107,7 @@ static void room_407_parser() {
 			g_engine->_soundManager->command(21, 0);
 			kernel_run_animation(kernel_name('s', 1), 70);
 			global[kHasBeenScanned] = true;
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 60, quote_string(kernel.quotes, 592));
+			kernel_message_add(quote_string(kernel.quotes, 592), 0, 0, 0x1110, 60, 0, 34);
 			g_engine->_soundManager->command(22, 0);
 		}
 
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index 44243dd1475..10622890c63 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -202,7 +202,7 @@ static int computeQuoteAndQuantity() {
 		break;
 	}
 
-	_scene->_kernelMessages.add(Common::Point(202, 82), 0x1110, 32, 0, 120, quote_string(kernel.quotes, quoteId));
+	kernel_message_add(quote_string(kernel.quotes, quoteId), 202, 82, 0x1110, 120, 0, 32);
 	return quantity;
 }
 
@@ -254,7 +254,7 @@ static void handleDialog() {
 			player.commands_allowed = false;
 			_scene->_animation[0]->setCurrentFrame(local._resetFrame);
 		}
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		local._newQuantity = computeQuoteAndQuantity();
 
 		if ((global[kNextIngredient] == 1) && (global[kBadFirstIngredient] > -1))
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 8efb0bfd4de..8067638a93a 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -292,8 +292,8 @@ static void room_501_parser() {
 				kernel_run_animation(kernel_name('G', 1), 5);
 			} else {
 				local._rexPunched = false;
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 6, 120, quote_string(kernel.quotes, 0x277));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x277), 0, 0, 0x1110, 120, 6, 34);
 			}
 			break;
 
@@ -306,12 +306,12 @@ static void room_501_parser() {
 		case 6:
 			if (global[kSexOfRex] == REX_MALE) {
 				if (local._rexPunched) {
-					_scene->_kernelMessages.reset();
-					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x275));
+					kernel_message_purge();
+					kernel_message_add(quote_string(kernel.quotes, 0x275), 0, 0, 0x1110, 120, 0, 34);
 					local._rexPunched = false;
 				} else {
-					_scene->_kernelMessages.reset();
-					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x276));
+					kernel_message_purge();
+					kernel_message_add(quote_string(kernel.quotes, 0x276), 0, 0, 0x1110, 120, 0, 34);
 				}
 			}
 			player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index ff8a2575339..9d133f74ec0 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -164,8 +164,8 @@ static void room_508_parser() {
 			switch (kernel.trigger) {
 			case 0:
 				player.commands_allowed = false;
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 2, 120, quote_string(kernel.quotes, 0x273));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x273), 0, 0, 0x1110, 120, 2, 34);
 				break;
 
 			case 2:
@@ -207,7 +207,7 @@ static void room_508_parser() {
 				_scene->_sequences.setDepth(g_sequence_ids[4], 11);
 				int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
-				_scene->_kernelMessages.reset();
+				kernel_message_purge();
 				kernel_load_variant(1);
 				_scene->_sequences.addTimer(30, 7);
 			}
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index 33e4601ef39..ecca5b25a1b 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -187,8 +187,8 @@ static void room_513_parser() {
 			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 7, 1, 0, 0);
 			_scene->_sequences.setDepth(g_sequence_ids[2], 2);
 			g_engine->_soundManager->command(24, 0);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x278));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x278), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index aa5a1f0bd8f..c86563b9599 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -125,8 +125,8 @@ static void handleSafeActions() {
 	case 1:
 		if (local._safeMode == 1 || local._safeMode == 3) {
 			if (global[kSafeStatus] == 0 && local._safeMode == 1) {
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2F1));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x2F1), 0, 0, 0x1110, 120, 0, 34);
 				_scene->_sequences.addTimer(120, 4);
 			} else {
 				_scene->_sequences.remove(local._lastSequenceIdx);
@@ -168,8 +168,8 @@ static void handleSafeActions() {
 		int idx = _scene->_dynamicHotspots.add(words_safe, words_walkto, local._lastSequenceIdx, Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(185, 113), FACING_NORTHWEST);
 		if (local._safeMode == 3) {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2F3));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x2F3), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(120, 4);
 		} else
 			_scene->_sequences.addTimer(60, 4);
@@ -250,8 +250,8 @@ static void room_602_parser() {
 		break;
 
 		case 2:
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2F2));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x2F2), 0, 0, 0x1110, 120, 0, 34);
 			global[kSafeStatus] = 2;
 			player.commands_allowed = true;
 			break;
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index 4fe1449784d..6dff76897f4 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -142,7 +142,7 @@ static void room_607_daemon() {
 		_scene->_sequences.remove(g_sequence_ids[1]);
 		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 5, 8, 0, 0);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 6);
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 100);
 		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 		local._counter = 0;
@@ -153,7 +153,7 @@ static void room_607_daemon() {
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
 		_scene->_sequences.setDepth(g_sequence_ids[1], 6);
 		_scene->_sequences.updateTimeout(g_sequence_ids[1], syncIdx);
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		local._dogBarking = false;
 	}
 
@@ -183,7 +183,7 @@ static void room_607_daemon() {
 			default:
 				break;
 			}
-			_scene->_kernelMessages.add(pos, 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 0x2F9));
+			kernel_message_add(quote_string(kernel.quotes, 0x2F9), pos.x, pos.y, 0xFDFC, 120, 0, 0);
 		}
 	}
 
@@ -208,8 +208,8 @@ static void room_607_daemon() {
 			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 10, 1, 0, 0);
 			_scene->_sequences.setAnimRange(g_sequence_ids[4], -1, 7);
 			_scene->_sequences.setDepth(g_sequence_ids[4], 1);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2FA));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x2FA), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
 			_scene->_sequences.addTimer(10, 64);
 			break;
@@ -337,8 +337,8 @@ static void handleThrowingBone() {
 			local._dogTimer = 0;
 		}
 
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, quoteId));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, quoteId), 0, 0, 0x1110, 120, 0, 34);
 		_scene->_sequences.addTimer(60, 3);
 	}
 	break;
@@ -414,9 +414,9 @@ static void room_607_parser() {
 	} else if (player_said_3(throw, bones, obnoxious_dog) || player_said_3(throw, bone, obnoxious_dog)) {
 		if (game.difficulty != DIFFICULTY_EASY) {
 			local._animationMode = 1;
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			if (kernel.trigger == 0)
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2F6));
+				kernel_message_add(quote_string(kernel.quotes, 0x2F6), 0, 0, 0x1110, 120, 0, 34);
 
 			handleThrowingBone();
 		}
@@ -424,8 +424,8 @@ static void room_607_parser() {
 		&& ((global[kDogStatus] == DOG_PRESENT) || kernel.trigger)) {
 		local._animationMode = 2;
 		if (kernel.trigger == 0) {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2F6));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x2F6), 0, 0, 0x1110, 120, 0, 34);
 		}
 		handleThrowingBone();
 	} else if (player.look_around || player_said_2(look, street)) {
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index ea06fa151a1..5ff6f8d534a 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -155,8 +155,8 @@ static void handleThrowingBone() {
 
 	case 3:
 		if (local._throwMode != 6) {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x304));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x304), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(120, 4);
 		} else
 			restoreAnimations();
@@ -339,7 +339,7 @@ static void room_608_daemon() {
 			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
 			_scene->_sequences.setDepth(g_sequence_ids[5], 6);
 			_scene->_sequences.updateTimeout(g_sequence_ids[5], syncIdx);
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 			local._dogBarkingFl = false;
 		}
 	}
@@ -370,7 +370,7 @@ static void room_608_daemon() {
 			default:
 				break;
 			}
-			_scene->_kernelMessages.add(_barkPos, 0xFDFC, 0, 0, 120, quote_string(kernel.quotes, 0x2FB));
+			kernel_message_add(quote_string(kernel.quotes, 0x2FB), _barkPos.x, _barkPos.y, 0xFDFC, 120, 0, 0);
 		}
 	}
 
@@ -403,10 +403,10 @@ static void room_608_daemon() {
 		_scene->_sequences.remove(g_sequence_ids[10]);
 		local._dogUnderCar = false;
 		local._dogYelping = false;
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6, 1, 0, 0);
 		_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 92);
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2FF));
+		kernel_message_add(quote_string(kernel.quotes, 0x2FF), 0, 0, 0x1110, 120, 0, 34);
 	}
 
 	if (kernel.trigger == 92) {
@@ -469,19 +469,19 @@ static void room_608_daemon() {
 				_scene->_sequences.addTimer(22, 111);
 				_scene->_sequences.addTimer(120, 112);
 			}
-			_scene->_kernelMessages.reset();
+			kernel_message_purge();
 		}
 	} else
 		local._dogYelping = false;
 
 	if (kernel.trigger == 110) {
 		g_engine->_soundManager->command(12, 0);
-		_scene->_kernelMessages.add(Common::Point(150, 97), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 0x303));
+		kernel_message_add(quote_string(kernel.quotes, 0x303), 150, 97, 0xFDFC, 60, 0, 0);
 	}
 
 	if (kernel.trigger == 111) {
 		g_engine->_soundManager->command(12, 0);
-		_scene->_kernelMessages.add(Common::Point(183, 93), 0xFDFC, 0, 0, 60, quote_string(kernel.quotes, 0x303));
+		kernel_message_add(quote_string(kernel.quotes, 0x303), 183, 93, 0xFDFC, 60, 0, 0);
 	}
 
 	if (kernel.trigger == 112)
@@ -624,8 +624,8 @@ static void room_608_daemon() {
 			_scene->_sequences.setAnimRange(g_sequence_ids[9], 3, 5);
 			_scene->_sequences.setDepth(g_sequence_ids[9], 5);
 			_scene->_sequences.updateTimeout(g_sequence_ids[9], -1);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2FC));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x2FC), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
 			break;
 
@@ -729,8 +729,8 @@ static void room_608_parser() {
 			if (local._dogDeathMode == 0)
 				local._carMode = 0;
 			else if (local._dogDeathMode == 1) {
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x300));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x300), 0, 0, 0x1110, 120, 0, 34);
 				global[kCarStatus] = CAR_SQUASHES_DOG;
 				local._carMode = 2;
 				global[kDogStatus] = DOG_DEAD;
@@ -773,7 +773,7 @@ static void room_608_parser() {
 			break;
 
 		case 3:
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x302));
+			kernel_message_add(quote_string(kernel.quotes, 0x302), 0, 0, 0x1110, 120, 0, 34);
 			global[kCarStatus] = CAR_DOWN_ON_SQUASHED_DOG;
 			local._carMode = 3;
 			local._dogDeathMode = 2;
@@ -838,8 +838,8 @@ static void room_608_parser() {
 		player.commands_allowed = true;
 		if (local._dogActiveFl) {
 			if (kernel.trigger == 0) {
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2FE));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x2FE), 0, 0, 0x1110, 120, 0, 34);
 			}
 			local._throwMode = 4;
 			handleThrowingBone();
@@ -849,8 +849,8 @@ static void room_608_parser() {
 		player.commands_allowed = true;
 		if (local._dogActiveFl) {
 			if (kernel.trigger == 0) {
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2FD));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x2FD), 0, 0, 0x1110, 120, 0, 34);
 			}
 			local._throwMode = 5;
 			handleThrowingBone();
@@ -862,8 +862,8 @@ static void room_608_parser() {
 		if ((global[kCarStatus] == CAR_UP) && local._dogActiveFl) {
 			if (local._dogActiveFl) {
 				if (kernel.trigger == 0) {
-					_scene->_kernelMessages.reset();
-					_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x301));
+					kernel_message_purge();
+					kernel_message_add(quote_string(kernel.quotes, 0x301), 0, 0, 0x1110, 120, 0, 34);
 				}
 				local._throwMode = 6;
 				handleThrowingBone();
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index 790d4ab7d02..3bcae36b505 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -163,15 +163,15 @@ static void enterStore() {
 		if (local._videoDoorMode == 2)
 			_scene->_sequences.addTimer(1, 4);
 		else {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x305));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x305), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(120, 1);
 		}
 		break;
 
 	case 1:
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x306));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x306), 0, 0, 0x1110, 120, 0, 34);
 		_scene->_sequences.addTimer(60, 2);
 		break;
 
@@ -210,8 +210,8 @@ static void enterStore() {
 	case 6:
 		_scene->_hotspots.activate(words_video_store_door, false);
 		if (local._videoDoorMode == 1) {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 180, quote_string(kernel.quotes, 0x307));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x307), 0, 0, 0x1110, 180, 0, 34);
 		}
 		player_walk(23, 90, FACING_WEST);
 		_scene->_sequences.addTimer(180, 7);
@@ -251,8 +251,8 @@ static void room_609_parser() {
 			switch (kernel.trigger) {
 			case 0:
 				player.commands_allowed = false;
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x308));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x308), 0, 0, 0x1110, 120, 0, 34);
 				_scene->_sequences.addTimer(120, 1);
 				break;
 
@@ -271,8 +271,8 @@ static void room_609_parser() {
 				break;
 
 			case 3:
-				_scene->_kernelMessages.reset();
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x309));
+				kernel_message_purge();
+				kernel_message_add(quote_string(kernel.quotes, 0x309), 0, 0, 0x1110, 120, 0, 34);
 				_scene->_sequences.addTimer(120, 4);
 				break;
 
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index b2ab39cf79e..40e4a07fc55 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -138,478 +138,478 @@ static void handleTalking(int delay) {
 }
 
 static void displayHermitQuestions(int question) {
-	_scene->_kernelMessages.reset();
+	kernel_message_purge();
 	local._hermitDisplayedQuestion = question;
 
 	switch (question) {
 	case 1:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x281);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x281);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x282);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 2:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x283);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x283);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x284);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 3:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x285);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x285);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 4:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x286);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x286);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 5:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x297);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x297);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y - 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y - 14, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x298);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x299);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 6:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x29A);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x29A);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x29B);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 7:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2A0);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2A0);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2A1);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 8:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2A2);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2A2);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2A3);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2A4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 9:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2A5);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2A5);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2A6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 10:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2A8);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2A8);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2A9);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2AA);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 11:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2AB);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2AB);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2AC);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2AD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2AE);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 12:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2AF);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2AF);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2B0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2B1);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2B2);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 13:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2B3);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2B3);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 3, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2B4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2B5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2B6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
-		_scene->_kernelMessages.add(Common::Point(11, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x2B7));
-		_scene->_kernelMessages.add(Common::Point(11, local._defaultDialogPos_y + 73), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x2B8));
-		_scene->_kernelMessages.add(Common::Point(11, local._defaultDialogPos_y + 87), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, quote_string(kernel.quotes, 0x2B9));
+		kernel_message_add(quote_string(kernel.quotes, 0x2B7), 11, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x2B8), 11, local._defaultDialogPos_y + 73, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
+		kernel_message_add(quote_string(kernel.quotes, 0x2B9), 11, local._defaultDialogPos_y + 87, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 14:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2BA);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2BA);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2BB);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2BC);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2BD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 15:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2BE);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2BE);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2BF);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C1);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 16:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2C2);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2C2);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 3, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C3);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 17:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2C7);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2C7);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C8);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2C9);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2CA);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 18:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2CB);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2CB);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2CC);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2CD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 19:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2CE);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2CE);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2CF);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2D0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 20:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2E1);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2E1);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 3, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2E2);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2E3);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2E4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2E5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, INDEFINITE_TIMEOUT, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 	}
 	break;
 
 	case 21:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2D3);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2D3);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, 800, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 3, 0xFDFC, 800, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2D4);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 800, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, 800, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2D5);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 800, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, 800, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2D6);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 800, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, 800, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2D7);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 800, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, 800, 0, 0);
 	}
 	break;
 
 	case 22:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2D8);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2D8);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, 700, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2D9);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, 700, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2DA);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, 700, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2DB);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, 700, 0, 0);
 	}
 	break;
 
 	case 23:
 	{
-		const char *curQuote = quote_string(kernel.quotes, 0x2DC);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2DC);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 3), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 3, 0xFDFC, 700, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2DD);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 17), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 17, 0xFDFC, 700, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2DE);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 31), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 31, 0xFDFC, 700, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2DF);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 45), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 45, 0xFDFC, 700, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2E0);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 59), 0xFDFC, 0, 0, 700, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 59, 0xFDFC, 700, 0, 0);
 	}
 	break;
 
@@ -755,17 +755,17 @@ static void handleSubDialog1() {
 	case 0x293:
 	{
 		handleTalking(200);
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 
-		const char *curQuote = quote_string(kernel.quotes, 0x2D1);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2D1);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, 120, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y, 0xFDFC, 120, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x2D2);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, 120, 0, 0);
 
 		local._dialog1.write(0x293, false);
 		setDialogNode(0);
@@ -815,12 +815,12 @@ static void handleSubDialog1() {
 
 	case 0x296:
 	{
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 
-		const char *curQuote = quote_string(kernel.quotes, 0x2E6);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x2E6);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, 120, 0, 0);
 
 		setDialogNode(0);
 		handleTalking(200);
@@ -854,11 +854,11 @@ static void handleSubDialog2() {
 
 	case 0x29F:
 	{
-		_scene->_kernelMessages.reset();
-		const char *curQuote = quote_string(kernel.quotes, 0x2A7);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		kernel_message_purge();
+		char *curQuote = quote_string(kernel.quotes, 0x2A7);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, 120, 0, 0);
 		setDialogNode(0);
 		local._dialog2.write(0x29F, false);
 	}
@@ -871,27 +871,27 @@ static void handleSubDialog2() {
 
 static void handleDialog() {
 	if (kernel.trigger == 0) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		player.commands_allowed = false;
 
-		const char *curQuote = quote_string(kernel.quotes, player2.words[0]);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, player2.words[0]);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 
 		if (width > 200) {
 			static char subQuote1[34], subQuote2[34];
 			quote_split_string(curQuote, subQuote1, subQuote2);
-			_scene->_kernelMessages.add(Common::Point(0, -14), 0x1110, 34, 0, 150, subQuote1);
+			kernel_message_add(subQuote1, 0, -14, 0x1110, 150, 0, 34);
 
 			if (player2.words[0] == 0x29D)
-				_scene->_kernelMessages.add(Common::Point(-18, 0), 0x1110, 34, 1, 150, subQuote2);
+				kernel_message_add(subQuote2, -18, 0, 0x1110, 150, 1, 34);
 			else if (player2.words[0] == 0x28A)
-				_scene->_kernelMessages.add(Common::Point(-10, 0), 0x1110, 34, 1, 150, subQuote2);
+				kernel_message_add(subQuote2, -10, 0, 0x1110, 150, 1, 34);
 			else
-				_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 150, subQuote2);
+				kernel_message_add(subQuote2, 0, 0, 0x1110, 150, 1, 34);
 
 			_scene->_sequences.addTimer(170, 50);
 		} else {
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 1, 120, curQuote);
+			kernel_message_add(curQuote, 0, 0, 0x1110, 120, 1, 34);
 			_scene->_sequences.addTimer(140, 50);
 		}
 	} else if (kernel.trigger == 50) {
@@ -1143,19 +1143,19 @@ static void room_611_daemon() {
 
 	if (_scene->_animation[0] != nullptr && (_scene->_animation[0]->getCurrentFrame() == 240) && local._check1Fl) {
 		local._check1Fl = false;
-		_scene->_kernelMessages.add(Common::Point(33, 88), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 0x27E));
+		kernel_message_add(quote_string(kernel.quotes, 0x27E), 33, 88, 0xFDFC, 90, 0, 0);
 		_scene->_sequences.addTimer(120, 120);
 	}
 
 	if (kernel.trigger == 120) {
-		int msgIdx = _scene->_kernelMessages.add(Common::Point(28, 102), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 0x27F));
-		_scene->_kernelMessages.setQuoted(msgIdx, 4, true);
+		int msgIdx = kernel_message_add(quote_string(kernel.quotes, 0x27F), 28, 102, 0xFDFC, 90, 0, 0);
+		kernel_message_teletype(msgIdx, 4, true);
 		_scene->_sequences.addTimer(100, 121);
 	}
 
 	if (kernel.trigger == 121) {
-		int msgIdx = _scene->_kernelMessages.add(Common::Point(23, 116), 0xFDFC, 0, 0, 90, quote_string(kernel.quotes, 0x280));
-		_scene->_kernelMessages.setQuoted(msgIdx, 4, true);
+		int msgIdx = kernel_message_add(quote_string(kernel.quotes, 0x280), 23, 116, 0xFDFC, 90, 0, 0);
+		kernel_message_teletype(msgIdx, 4, true);
 	}
 
 	if (local._hermitMode == 1) {
@@ -1337,7 +1337,7 @@ static void room_611_pre_parser() {
 		player.walk_off_edge_to_room = 609;
 
 	if (local._resetBatterieText)
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 }
 
 static void room_611_parser() {
@@ -1348,17 +1348,17 @@ static void room_611_parser() {
 		local._giveBatteriesFl = true;
 		handleSubDialog1();
 	} else if (player_said_2(give, hermit)) {
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 
-		const char *curQuote = quote_string(kernel.quotes, 0x323);
-		int width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		char *curQuote = quote_string(kernel.quotes, 0x323);
+		int width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		int quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y), 0xFDFC, 0, 0, 120, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y, 0xFDFC, 120, 0, 0);
 
 		curQuote = quote_string(kernel.quotes, 0x324);
-		width = _scene->_kernelMessages._talkFont->getWidth(curQuote, kernel_message_spacing);
+		width = font_string_width(kernel_message_font, curQuote, kernel_message_spacing);
 		quotePosX = local._defaultDialogPos_x - (width / 2);
-		_scene->_kernelMessages.add(Common::Point(quotePosX, local._defaultDialogPos_y + 14), 0xFDFC, 0, 0, 120, curQuote);
+		kernel_message_add(curQuote, quotePosX, local._defaultDialogPos_y + 14, 0xFDFC, 120, 0, 0);
 	} else if (kernel.trigger == 90) {
 		if (local._dialog2.read(0x29C) && local._dialog2.read(0x29D) && local._dialog2.read(0x29E)) {
 			handleTalking(180);
@@ -1387,8 +1387,8 @@ static void room_611_parser() {
 		}
 	} else if (player_said_2(talkto, hermit)) {
 		if (!local._dialog1.read(0x287)) {
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x27A));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x27A), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(120, 90);
 		} else {
 			int nextQuote = 0;
@@ -1408,15 +1408,15 @@ static void room_611_parser() {
 			default:
 				break;
 			}
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, nextQuote));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, nextQuote), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(120, 90);
 		}
 	} else if ((player_said_1(walkto) || player_said_1(look)) && player_said_1(rat)) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x279));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x279), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addTimer(60, 1);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index c505026c817..4cb165d2ab8 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -80,8 +80,8 @@ static void handleWinchMovement() {
 		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, local._cycleIndex);
 		_scene->_sequences.setDepth(g_sequence_ids[2], 1);
 		_scene->_sequences.updateTimeout(g_sequence_ids[2], syncIdx);
-		_scene->_kernelMessages.reset();
-		_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x2F4));
+		kernel_message_purge();
+		kernel_message_add(quote_string(kernel.quotes, 0x2F4), 0, 0, 0x1110, 120, 0, 34);
 		player.commands_allowed = true;
 
 		text_show(61217);
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index 8b947d769ea..bc1d815b4a8 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -181,7 +181,7 @@ static void room_701_daemon() {
 		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -1);
 		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(48, 136));
 		_scene->_sequences.setDepth(g_sequence_ids[1], 10);
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		break;
 
 	case 80:
@@ -251,8 +251,8 @@ static void room_701_parser() {
 			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 1, 0, 0);
 			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(48, 136));
 			_scene->_sequences.setDepth(g_sequence_ids[1], 10);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x310, 34, 0, 120, quote_string(kernel.quotes, 0x30D));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x30D), 0, 0, 0x310, 120, 0, 34);
 			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room751.cpp b/engines/mads/nebular/rooms/room751.cpp
index e18052f3d35..5b1acff6c87 100644
--- a/engines/mads/nebular/rooms/room751.cpp
+++ b/engines/mads/nebular/rooms/room751.cpp
@@ -158,7 +158,7 @@ static void room_751_daemon() {
 		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(48, 136));
 		_scene->_sequences.setDepth(g_sequence_ids[1], 10);
 		player.commands_allowed = true;
-		_scene->_kernelMessages.reset();
+		kernel_message_purge();
 		break;
 
 	default:
@@ -247,8 +247,8 @@ static void room_751_parser() {
 			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 1, 0, 0);
 			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(48, 136));
 			_scene->_sequences.setDepth(g_sequence_ids[1], 10);
-			_scene->_kernelMessages.reset();
-			_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, quote_string(kernel.quotes, 0x30D));
+			kernel_message_purge();
+			kernel_message_add(quote_string(kernel.quotes, 0x30D), 0, 0, 0x1110, 120, 0, 34);
 			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
@@ -317,7 +317,7 @@ static void room_751_parser() {
 				_scene->_sequences.setDepth(g_sequence_ids[3], 7);
 				int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(268, 140), FACING_NORTHWEST);
-				_scene->_kernelMessages.reset();
+				kernel_message_purge();
 				inter_move_object(OBJ_FISHING_LINE, room_id);
 				local._rexHandingLine = false;
 				global[kLineStatus] = 2;
diff --git a/engines/mads/nebular/rooms/room803.cpp b/engines/mads/nebular/rooms/room803.cpp
index 0e8ae56f2e9..45db8b966d2 100644
--- a/engines/mads/nebular/rooms/room803.cpp
+++ b/engines/mads/nebular/rooms/room803.cpp
@@ -274,7 +274,7 @@ static void room_803_parser() {
 		case 161:
 		{
 			int quoteId = 0x31A + g_engine->getRandomNumber(1, 8);
-			_scene->_kernelMessages.add(Common::Point(64, 67), 0x1110, 32, 0, 80, quote_string(kernel.quotes, quoteId));
+			kernel_message_add(quote_string(kernel.quotes, quoteId), 64, 67, 0x1110, 80, 0, 32);
 			_scene->_sequences.addTimer(60, 162);
 		}
 		break;
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index 215647bb935..da78768f0ed 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -310,8 +310,7 @@ static void room_804_parser() {
 
 				text_show(80424);
 				local._pullThrottleReally = true;
-				_scene->_kernelMessages.add(Common::Point(78, 75), 0x1110, 0, 0,
-					120, quote_string(kernel.quotes, 791));
+				kernel_message_add(quote_string(kernel.quotes, 791), 78, 75, 0x1110, 120, 0, 0);
 			}
 		} else {
 			local._messWithThrottle = true;
diff --git a/engines/mads/nebular/rooms/teleporter.cpp b/engines/mads/nebular/rooms/teleporter.cpp
index a1ad3092ca1..12dd2352db7 100644
--- a/engines/mads/nebular/rooms/teleporter.cpp
+++ b/engines/mads/nebular/rooms/teleporter.cpp
@@ -56,7 +56,7 @@ void teleporter_init() {
 
 	player.walker_visible = false;
 	player.commands_allowed = (global[kMeteorologistWatch] == METEOROLOGIST_NORMAL);
-	_scene->_kernelMessages._talkFont = font_tele;
+	kernel_message_font = font_tele;
 	kernel_message_spacing = 0;
 	_curCode = 0;
 	_digitCount = 0;
@@ -89,8 +89,8 @@ void teleporter_init() {
 	Common::sprintf_s(_msgText1, "#%.4d", codeVal);
 
 	if (room_id != 711) {
-		_scene->_kernelMessages.add(Common::Point(133, 34), 0, 32, 0, INDEFINITE_TIMEOUT, _msgText1);
-		_scene->_kernelMessages.add(Common::Point(143, 61), 0xFDFC, 16, 0, INDEFINITE_TIMEOUT, _msgText2);
+		kernel_message_add(_msgText1, 133, 34, 0, INDEFINITE_TIMEOUT, 0, 32);
+		kernel_message_add(_msgText2, 143, 61, 0xFDFC, INDEFINITE_TIMEOUT, 0, 16);
 	}
 
 	_meteorologistCurPlace = 0;
@@ -227,8 +227,8 @@ void teleporter_handle_key() {
 
 		if (room_id != 711) {
 			if (_curMessageId >= 0)
-				_scene->_kernelMessages.remove(_curMessageId);
-			_curMessageId = _scene->_kernelMessages.add(Common::Point(143, 61), 0xFDFC, 16, 0, INDEFINITE_TIMEOUT, _msgText2);
+				kernel_message_delete(_curMessageId);
+			_curMessageId = kernel_message_add(_msgText2, 143, 61, 0xFDFC, INDEFINITE_TIMEOUT, 0, 16);
 		}
 		break;
 
diff --git a/engines/mads/nebular/rooms/thunks.cpp b/engines/mads/nebular/rooms/thunks.cpp
index 1e145be3c0c..3434f3beee6 100644
--- a/engines/mads/nebular/rooms/thunks.cpp
+++ b/engines/mads/nebular/rooms/thunks.cpp
@@ -91,66 +91,6 @@ void Scene::Hotspots::activate(int hotspot, int active) {
 	kernel_flip_hotspot(hotspot, active);
 }
 
-Scene::KernelMessages::TalkFont &Scene::KernelMessages::TalkFont::operator=(FontPtr font) {
-	kernel_message_font = font;
-	return *this;
-}
-
-int Scene::KernelMessages::TalkFont::getWidth(const Common::String &message, int spacing) const {
-	return font_string_width(kernel_message_font, message.c_str(), spacing);
-}
-
-int Scene::KernelMessages::add(const Common::Point &pt, uint fontColor, uint8 flags, int endTrigger,
-		uint32 timeout, const char *msg) {
-	return kernel_message_add(const_cast<char *>(msg), pt.x, pt.y, fontColor, timeout, endTrigger, flags);
-}
-
-int Scene::KernelMessages::addQuote(int quoteId, int endTrigger, uint32 timeout) {
-	return kernel_message_player(quoteId, timeout, endTrigger);
-}
-
-void Scene::KernelMessages::remove(int msgIndex) {
-	kernel_message_delete(msgIndex);
-}
-
-void Scene::KernelMessages::reset() {
-	kernel_message_purge();
-}
-
-void Scene::KernelMessages::setQuoted(int msgIndex, int numTicks, bool quoted) {
-	kernel_message_teletype(msgIndex, numTicks, quoted);
-}
-
-void Scene::KernelMessages::setSeqIndex(int msgIndex, int seqIndex) {
-	kernel_message_attach(msgIndex, seqIndex);
-}
-
-void Scene::KernelMessages::initRandomMessages(int maxSimultaneousMessages,
-		const Common::Rect &bounds, int minYSpacing, int scrollRate,
-		int color, int duration, int quoteId, ...) {
-	va_list marker;
-	va_start(marker, quoteId);
-	kernel_random_messages_vinit(maxSimultaneousMessages, bounds.left, bounds.right,
-		bounds.top, bounds.bottom, minYSpacing, scrollRate, color, duration, quoteId, marker);
-	va_end(marker);
-}
-
-void Scene::KernelMessages::randomServer() {
-	kernel_random_message_server();
-}
-
-int Scene::KernelMessages::checkRandom() {
-	return kernel_check_random();
-}
-
-bool Scene::KernelMessages::generateRandom(int major, int minor) {
-	return kernel_generate_random_message(major, minor);
-}
-
-Scene::KernelMessages::KernelMessageProxy Scene::KernelMessages::Entries::operator[](uint handle) {
-	return KernelMessageProxy(&kernel_message[handle]);
-}
-
 int Scene::Rails::getNext() const {
 	return player.next_special_code;
 }
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
index 9fa16fc6a91..c09749f9303 100644
--- a/engines/mads/nebular/rooms/thunks.h
+++ b/engines/mads/nebular/rooms/thunks.h
@@ -27,7 +27,6 @@
 #include "mads/core/inter.h"
 #include "mads/core/kernel.h"
 #include "mads/core/player.h"
-#include "mads/core/text.h"
 
 namespace MADS {
 namespace RexNebular {
@@ -201,47 +200,6 @@ struct Scene {
 	};
 	Hotspots _hotspots;
 
-	struct KernelMessages {
-		struct TalkFont {
-			TalkFont *operator->() {
-				return this;
-			}
-			const TalkFont *operator->() const {
-				return this;
-			}
-			TalkFont &operator=(FontPtr font);
-			int getWidth(const Common::String &message, int spacing) const;
-		};
-		TalkFont _talkFont;
-
-		struct KernelMessageProxy {
-			long &_frameTimer;
-
-			KernelMessageProxy(KernelMessagePtr kmsg) : _frameTimer(kmsg->update_time) {
-			}
-		};
-		struct Entries {
-			KernelMessageProxy operator[](uint handle);
-		};
-		Entries _entries;
-
-		int add(const Common::Point &pt, uint fontColor, uint8 flags, int endTrigger,
-			uint32 timeout, const char *msg);
-		int addQuote(int quoteId, int endTrigger, uint32 timeout);
-		void remove(int msgIndex);
-		void reset();
-		void setQuoted(int msgIndex, int numTicks, bool quoted);
-		void setSeqIndex(int msgIndex, int seqIndex);
-
-		void initRandomMessages(int maxSimultaneousMessages,
-			const Common::Rect &bounds, int minYSpacing, int scrollRate,
-			int color, int duration, int quoteId, ...);
-		void randomServer();
-		int checkRandom();
-		bool generateRandom(int major, int minor);
-	};
-	KernelMessages _kernelMessages;
-
 	struct PaletteCycles {
 		int size() const;
 


Commit: 344464d3f67cfe4e0f9bc08369d5ddf760a76a5e
    https://github.com/scummvm/scummvm/commit/344464d3f67cfe4e0f9bc08369d5ddf760a76a5e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:55+10:00

Commit Message:
MADS: NEBULAR: Refactor Animation thunk

Changed paths:
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room302.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room321.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room810.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 583667c481c..5fdfca9c35d 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -179,32 +179,32 @@ static void room_101_daemon() {
 		break;
 	}
 
-	if (_scene->_animation[0] != nullptr) {
-		if ((_scene->_animation[0]->getCurrentFrame() >= 6) && (local._messageNum == 0)) {
+	if (kernel_anim[0].anim != nullptr) {
+		if ((kernel_anim[0].frame >= 6) && (local._messageNum == 0)) {
 			local._messageNum++;
 			kernel_message_add(quote_string(kernel.quotes, 49), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() >= 7) && (local._messageNum == 1)) {
+		if ((kernel_anim[0].frame >= 7) && (local._messageNum == 1)) {
 			local._messageNum++;
 			kernel_message_add(quote_string(kernel.quotes, 54), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() >= 10) && (local._messageNum == 2)) {
+		if ((kernel_anim[0].frame >= 10) && (local._messageNum == 2)) {
 			local._messageNum++;
 			kernel_message_add(quote_string(kernel.quotes, 55), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() >= 17) && (local._messageNum == 3)) {
+		if ((kernel_anim[0].frame >= 17) && (local._messageNum == 3)) {
 			local._messageNum++;
 			kernel_message_add(quote_string(kernel.quotes, 56), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() >= 20) && (local._messageNum == 4)) {
+		if ((kernel_anim[0].frame >= 20) && (local._messageNum == 4)) {
 			local._messageNum++;
 			kernel_message_add(quote_string(kernel.quotes, 50), 63, local._posY, 0x1110, 240, 0, 0);
 			local._posY += 14;
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 2285da9ec6c..e82c3e4b80d 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -207,7 +207,7 @@ static void room_104_daemon() {
 	if ((player.special_code > 0) && player.commands_allowed)
 		player.commands_allowed = false;
 
-	if (local._kargShootingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
+	if (local._kargShootingFl && (kernel_anim[0].frame >= 19)) {
 		kernel_message_add(quote_string(kernel.quotes, 52), 0, 0, 0x1110, 120, 0, 34);
 		local._kargShootingFl = false;
 	}
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index 8a3af7c2839..c3bdb21c072 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -126,7 +126,7 @@ static void room_106_daemon() {
 		}
 	}
 
-	if (local._firstEmergingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
+	if (local._firstEmergingFl && (kernel_anim[0].frame >= 19)) {
 		local._firstEmergingFl = false;
 		kernel_message_add(quote_string(kernel.quotes, 52), 0, 0, 0x1110, 120, 0, 34);
 	}
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index f605a508bee..6143fbf7010 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -93,7 +93,7 @@ static void room_107_init() {
 }
 
 static void room_107_daemon() {
-	if (local._shootingFl && (_scene->_animation[0]->getCurrentFrame() >= 19)) {
+	if (local._shootingFl && (kernel_anim[0].frame >= 19)) {
 		kernel_message_add(quote_string(kernel.quotes, 52), 0, 0, 0x1110, 120, 0, 34);
 		local._shootingFl = false;
 	}
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 7b12f244d0e..33394398e12 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -122,7 +122,7 @@ static void room_110_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			kernel_run_animation(kernel_full_name(110, 'T', 0, "", EXT_AA), 1);
-			_scene->_animation[0]->setNextFrameTimer(player.frame_delay + player.clock);
+			kernel_anim[0].next_clock = player.frame_delay + player.clock;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			break;
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index bc4b77337f2..009dd89988c 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -133,7 +133,7 @@ static void room_111_daemon() {
 	if (kernel.trigger == 73)
 		g_engine->_soundManager->command(37, 0);
 
-	if (local._rexDivingFl && (_scene->_animation[0]->getCurrentFrame() >= 9)) {
+	if (local._rexDivingFl && (kernel_anim[0].frame >= 9)) {
 		g_engine->_soundManager->command(36, 0);
 		local._rexDivingFl = false;
 	}
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index fbe8719fec3..732079a4048 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -53,8 +53,8 @@ static void room_112_init() {
 }
 
 static void room_112_daemon() {
-	if ((_scene->_animation[0] != nullptr) && (config_file.naughtiness == STORYMODE_NICE)) {
-		if (_scene->_animation[0]->getCurrentFrame() >= 54) {
+	if ((kernel_anim[0].anim != nullptr) && (config_file.naughtiness == STORYMODE_NICE)) {
+		if (kernel_anim[0].frame >= 54) {
 			kernel_abort_animation(0);
 			kernel.trigger = 70;
 		}
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index bf335ea367f..f7b413ebaf9 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -153,7 +153,7 @@ static void room_202_init() {
 		}
 
 		kernel_run_animation(kernel_name('M', -1), 71);
-		_scene->_animation[0]->setCurrentFrame(200);
+		kernel_reset_animation(0, 200);
 	} else {
 		if (local._ladderTopFl) {
 			player.walker_visible = false;
@@ -319,7 +319,7 @@ static void room_202_daemon() {
 		break;
 	}
 
-	if (!_scene->_animation[0] && (global[kMeteorologistStatus] != METEOROLOGIST_GONE) && (local._meteoClock2 <= kernel.clock) && (local._meteoClock1 <= kernel.clock)) {
+	if ((kernel_anim[0].anim == nullptr) && (global[kMeteorologistStatus] != METEOROLOGIST_GONE) && (local._meteoClock2 <= kernel.clock) && (local._meteoClock1 <= kernel.clock)) {
 		int randVal = g_engine->getRandomNumber(1, 500);
 		int threshold = 1;
 		if (local._ladderTopFl)
@@ -338,11 +338,11 @@ static void room_202_daemon() {
 		}
 	}
 
-	if (!_scene->_animation[0])
+	if ((kernel_anim[0].anim == nullptr))
 		return;
 
 	if (local._waitingMeteoFl) {
-		if (_scene->_animation[0]->getCurrentFrame() >= 200) {
+		if (kernel_anim[0].frame >= 200) {
 			if ((global[kMeteorologistWatch] == METEOROLOGIST_TOWER) || global[kLadderBroken]) {
 				new_room = 213;
 			} else {
@@ -351,7 +351,7 @@ static void room_202_daemon() {
 			}
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() == 160) && (local._meteoFrame != _scene->_animation[0]->getCurrentFrame())) {
+		if ((kernel_anim[0].frame == 160) && (local._meteoFrame != kernel_anim[0].frame)) {
 			Common::Point msgPos;
 			int msgFlag;
 			if (!local._ladderTopFl) {
@@ -370,15 +370,15 @@ static void room_202_daemon() {
 		local._toTeleportFl = true;
 	}
 
-	if (_scene->_animation[0]->getCurrentFrame() == local._meteoFrame) {
+	if (kernel_anim[0].frame == local._meteoFrame) {
 		return;
 	}
 
-	local._meteoFrame = _scene->_animation[0]->getCurrentFrame();
+	local._meteoFrame = kernel_anim[0].frame;
 	int randVal = g_engine->getRandomNumber(1, 1000);
 	int frameStep = -1;
 
-	switch (_scene->_animation[0]->getCurrentFrame()) {
+	switch (kernel_anim[0].frame) {
 	case 42:
 	case 77:
 	case 96:
@@ -418,8 +418,8 @@ static void room_202_daemon() {
 		break;
 	}
 
-	if (frameStep >= 0 && frameStep != _scene->_animation[0]->getCurrentFrame() + 1) {
-		_scene->_animation[0]->setCurrentFrame(frameStep);
+	if (frameStep >= 0 && frameStep != kernel_anim[0].frame + 1) {
+		kernel_reset_animation(0, frameStep);
 		local._meteoFrame = frameStep;
 	}
 }
@@ -472,7 +472,7 @@ static void room_202_parser() {
 		new_room = 203;
 	} else if (player_said_2(walk_towards, field_to_north)) {
 		if (global[kMeteorologistStatus] != METEOROLOGIST_GONE) {
-			if (_scene->_animation[0])
+			if ((kernel_anim[0].anim != nullptr))
 				global[kMeteorologistStatus] = METEOROLOGIST_PRESENT;
 			else
 				global[kMeteorologistStatus] = METEOROLOGIST_ABSENT;
@@ -567,7 +567,7 @@ static void room_202_parser() {
 				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 6);
 				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
 				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
-				if (_scene->_animation[0]) {
+				if ((kernel_anim[0].anim != nullptr)) {
 					local._waitingMeteoFl = true;
 					global[kMeteorologistWatch] = METEOROLOGIST_GROUND;
 				} else {
@@ -575,7 +575,7 @@ static void room_202_parser() {
 				}
 				break;
 			case 2:
-				if (!_scene->_animation[0] && !local._meteorologistSpecial) {
+				if ((kernel_anim[0].anim == nullptr) && !local._meteorologistSpecial) {
 					text_show(20222);
 				}
 				_scene->_sequences.remove(g_sequence_ids[10]);
@@ -609,13 +609,13 @@ static void room_202_parser() {
 				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], true, -2);
 				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(247, 82));
 				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
-				if (_scene->_animation[0]) {
-					if (_scene->_animation[0]->getCurrentFrame() > 200) {
+				if ((kernel_anim[0].anim != nullptr)) {
+					if (kernel_anim[0].frame > 200) {
 						_scene->_sequences.addTimer(120, 2);
 					} else {
 						local._waitingMeteoFl = true;
 						global[kMeteorologistWatch] = METEOROLOGIST_GONE;
-						if ((_scene->_animation[0]->getCurrentFrame() >= 44) && (_scene->_animation[0]->getCurrentFrame() <= 75)) {
+						if ((kernel_anim[0].frame >= 44) && (kernel_anim[0].frame <= 75)) {
 							kernel_message_purge();
 							int msgIndex = kernel_message_add(quote_string(kernel.quotes, 100), 248, 15, 0x1110, 60, 0, 32);
 							kernel_message_teletype(msgIndex, 4, false);
@@ -629,7 +629,7 @@ static void room_202_parser() {
 				}
 				break;
 			case 2:
-				if (!_scene->_animation[0])
+				if ((kernel_anim[0].anim == nullptr))
 					text_show(20222);
 				local._meteorologistSpecial = false;
 				_scene->_sequences.remove(g_sequence_ids[10]);
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index 6f7ff114809..36092d96cab 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -105,7 +105,7 @@ static void room_205_init() {
 
 	if (global[kSexOfRex] != SEX_MALE) {
 		kernel_run_animation(kernel_name('a', -1), 0);
-		_scene->_animation[0]->_repeatFlag = true;
+		kernel_anim[0].repeat = true;
 	} else {
 		local._beingKicked = true;
 		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
@@ -258,8 +258,8 @@ static void room_205_parser() {
 			_scene->_sequences.updateTimeout(g_sequence_ids[9], -1);
 			g_engine->_soundManager->command(27, 0);
 		} else if (kernel.trigger == 1) {
-			if (_scene->_animation[0] != nullptr)
-				_scene->_animation[0]->resetSpriteSetsCount();
+			if (kernel_anim[0].anim != nullptr)
+				kernel_anim[0].anim->num_series = 0;
 
 			text_show(20516);
 			kernel.force_restart = true;
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index 4131be6b8fc..fd6afb54265 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -121,9 +121,9 @@ static void room_208_init() {
 }
 
 static void room_208_daemon() {
-	if (local._boundingFl && _scene->_animation[0] &&
-		(local._rhotundaTime <= _scene->_animation[0]->getCurrentFrame())) {
-		local._rhotundaTime = _scene->_animation[0]->getCurrentFrame();
+	if (local._boundingFl && (kernel_anim[0].anim != nullptr) &&
+		(local._rhotundaTime <= kernel_anim[0].frame)) {
+		local._rhotundaTime = kernel_anim[0].frame;
 
 		if (local._rhotundaTime == 125)
 			_scene->_sequences.remove(g_sequence_ids[4]);
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 66588bec76e..9bc57773221 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -721,8 +721,8 @@ static void room_210_init() {
 		}
 
 		restoreDialogNode(local._curDialogNode, quote, number);
-		if (_scene->_animation[0])
-			_scene->_animation[0]->setCurrentFrame(131);
+		if ((kernel_anim[0].anim != nullptr))
+			kernel_reset_animation(0, 131);
 	}
 
 	pal_change_color(252, 63, 63, 10);
@@ -732,9 +732,9 @@ static void room_210_init() {
 }
 
 static void room_210_daemon() {
-	if ((local._twinkleAnimationType == 1) && _scene->_animation[0]) {
-		if (local._twinklesCurrentFrame != _scene->_animation[0]->getCurrentFrame()) {
-			local._twinklesCurrentFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._twinkleAnimationType == 1) && (kernel_anim[0].anim != nullptr)) {
+		if (local._twinklesCurrentFrame != kernel_anim[0].frame) {
+			local._twinklesCurrentFrame = kernel_anim[0].frame;
 			int reset_frame = -1;
 			int random = g_engine->getRandomNumber(1, 1000);
 
@@ -857,8 +857,8 @@ static void room_210_daemon() {
 			}
 
 			if (reset_frame >= 0) {
-				if (reset_frame != _scene->_animation[0]->getCurrentFrame()) {
-					_scene->_animation[0]->setCurrentFrame(reset_frame);
+				if (reset_frame != kernel_anim[0].frame) {
+					kernel_reset_animation(0, reset_frame);
 					local._twinklesCurrentFrame = reset_frame;
 				}
 
@@ -872,9 +872,9 @@ static void room_210_daemon() {
 		}
 	}
 
-	if ((local._twinkleAnimationType == 2) && _scene->_animation[0]) {
-		if (local._twinklesCurrentFrame != _scene->_animation[0]->getCurrentFrame()) {
-			local._twinklesCurrentFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._twinkleAnimationType == 2) && (kernel_anim[0].anim != nullptr)) {
+		if (local._twinklesCurrentFrame != kernel_anim[0].frame) {
+			local._twinklesCurrentFrame = kernel_anim[0].frame;
 			int reset_frame = -1;
 
 			if (local._twinklesCurrentFrame == 53) {
@@ -883,8 +883,8 @@ static void room_210_daemon() {
 			} else if ((local._twinklesCurrentFrame == 75) && local._shouldTalk)
 				reset_frame = 60;
 
-			if ((reset_frame >= 0) && (reset_frame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(reset_frame);
+			if ((reset_frame >= 0) && (reset_frame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, reset_frame);
 				local._twinklesCurrentFrame = reset_frame;
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index 85ff1680941..c1b2248e6d4 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -59,7 +59,7 @@ static void room_211_init() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		kernel_run_animation(kernel_name('A', -1), 100);
-		_scene->_animation[0]->setCurrentFrame(169);
+		kernel_reset_animation(0, 169);
 	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 310;
 		player.y = 31;
@@ -141,8 +141,8 @@ static void room_211_daemon() {
 		}
 	}
 
-	if (local._ambushFl && (_scene->_animation[0]->getCurrentFrame() > local._monkeyFrame)) {
-		local._monkeyFrame = _scene->_animation[0]->getCurrentFrame();
+	if (local._ambushFl && (kernel_anim[0].frame > local._monkeyFrame)) {
+		local._monkeyFrame = kernel_anim[0].frame;
 		switch (local._monkeyFrame) {
 		case 2:
 		{
@@ -225,9 +225,9 @@ static void room_211_daemon() {
 			local._wakeFl = false;
 		}
 
-		if (_scene->_animation[0]->getCurrentFrame() > local._monkeyFrame) {
-			local._monkeyFrame = _scene->_animation[0]->getCurrentFrame();
-			switch (_scene->_animation[0]->getCurrentFrame()) {
+		if (kernel_anim[0].frame > local._monkeyFrame) {
+			local._monkeyFrame = kernel_anim[0].frame;
+			switch (kernel_anim[0].frame) {
 			case 177:
 			{
 				int msgIndex = kernel_message_add(quote_string(kernel.quotes, 165), 63, local._scrollY, 0x1110, 180, 0, 0);
diff --git a/engines/mads/nebular/rooms/room302.cpp b/engines/mads/nebular/rooms/room302.cpp
index a763e1757a4..a84e698d9e0 100644
--- a/engines/mads/nebular/rooms/room302.cpp
+++ b/engines/mads/nebular/rooms/room302.cpp
@@ -50,8 +50,8 @@ static void room_302_daemon() {
 	if (kernel.trigger == 71)
 		new_room = 303;
 
-	if ((_scene->_animation[0] != nullptr) && (_scene->_animation[0]->getCurrentFrame() != local._oldFrame)) {
-		local._oldFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((kernel_anim[0].anim != nullptr) && (kernel_anim[0].frame != local._oldFrame)) {
+		local._oldFrame = kernel_anim[0].frame;
 		if (local._oldFrame == 147) {
 			inter_move_object(OBJ_POISON_DARTS, 1);
 			inter_move_object(OBJ_BLOWGUN, 1);
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 692a8b6cbc0..7db6fa3722c 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -371,23 +371,23 @@ static void room_307_init() {
 static void room_307_daemon() {
 	handle_forcefield(&local._forcefield, &g_sprite_ids[0]);
 
-	if ((local._animationMode == 1) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() == 126) {
+	if ((local._animationMode == 1) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame == 126) {
 			local._forcefield._flag = false;
 			g_engine->_soundManager->command(5, 0);
 		}
 
-		if (_scene->_animation[0]->getCurrentFrame() == 194) {
+		if (kernel_anim[0].frame == 194) {
 			local._forcefield._flag = true;
 			g_engine->_soundManager->command(24, 0);
 		}
 	}
 
-	if ((local._animationMode == 2) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() == 54)
+	if ((local._animationMode == 2) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame == 54)
 			local._forcefield._flag = false;
 
-		if (_scene->_animation[0]->getCurrentFrame() == 150) {
+		if (kernel_anim[0].frame == 150) {
 			player.walker_visible = false;
 			player.clock = kernel.clock - player.frame_delay;
 		}
@@ -412,7 +412,7 @@ static void room_307_daemon() {
 		}
 		local._lastFrameTime = kernel.clock;
 
-		if ((local._guardTime > 3000) && !local._duringPeeingFl && (_scene->_animation[0] == nullptr)
+		if ((local._guardTime > 3000) && !local._duringPeeingFl && (kernel_anim[0].anim == nullptr)
 			&& (inter_input_mode != kInputConversation) && global[kMetBuddyBeast] && !local._activePrisonerFl) {
 			if (!player_has(OBJ_SCALPEL) && !local._grateOpenedFl) {
 				player.commands_allowed = false;
@@ -422,7 +422,7 @@ static void room_307_daemon() {
 				kernel_run_animation(kernel_name('b', -1), 70);
 			}
 			local._guardTime = 0;
-		} else if ((local._prisonerTimer > 300) && (inter_input_mode != kInputConversation) && (_scene->_animation[0] == nullptr) && !local._activePrisonerFl) {
+		} else if ((local._prisonerTimer > 300) && (inter_input_mode != kInputConversation) && (kernel_anim[0].anim == nullptr) && !local._activePrisonerFl) {
 			if (!global[kMetBuddyBeast]) {
 				if (local._prisonerMessageId == -1)
 					local._prisonerMessageId = 0x104;
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index 7614c3d66cb..69d18631d4d 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -73,9 +73,9 @@ static void room_309_init() {
 	player.commands_allowed = false;
 	kernel_run_animation(kernel_name('a', -1), 60);
 
-	local._characterSpriteIndexes[0] = _scene->_animation[0]->_spriteListIndexes[2];
-	local._characterSpriteIndexes[1] = _scene->_animation[0]->_spriteListIndexes[2];
-	local._characterSpriteIndexes[2] = _scene->_animation[0]->_spriteListIndexes[1];
+	local._characterSpriteIndexes[0] = kernel_anim[0].anim->series_id[2];
+	local._characterSpriteIndexes[1] = kernel_anim[0].anim->series_id[2];
+	local._characterSpriteIndexes[2] = kernel_anim[0].anim->series_id[1];
 
 	local._messagesIndexes[0] = -1;
 	local._messagesIndexes[1] = -1;
@@ -97,9 +97,9 @@ static void room_309_daemon() {
 	if (kernel.trigger == 62)
 		local._messagesIndexes[2] = -1;
 
-	if (_scene->_animation[0] != nullptr) {
-		if (local._lastFrame != _scene->_animation[0]->getCurrentFrame()) {
-			local._lastFrame = _scene->_animation[0]->getCurrentFrame();
+	if (kernel_anim[0].anim != nullptr) {
+		if (local._lastFrame != kernel_anim[0].frame) {
+			local._lastFrame = kernel_anim[0].frame;
 			if (local._lastFrame == 39) {
 				local._messagesIndexes[0] = kernel_message_add(quote_string(kernel.quotes, 348), 0, 0, 0x1110, 210, 61, 32);
 				local._messagesIndexes[1] = kernel_message_add(quote_string(kernel.quotes, 349), 0, 0, 0x1110, 210, 0, 32);
@@ -112,15 +112,15 @@ static void room_309_daemon() {
 				if (local._messagesIndexes[charIdx] >= 0) {
 					bool match = false;
 					int j = -1;
-					for (j = _scene->_animation[0]->_oldFrameEntry; j < _scene->_animation[0]->_frameEntriesCount; j++) {
-						if (_scene->_animation[0]->_frameEntries[j].series_id == local._characterSpriteIndexes[charIdx]) {
+					for (j = kernel_anim[0].image; j < (kernel_anim[0].anim ? kernel_anim[0].anim->num_images : 0); j++) {
+						if (kernel_anim[0].anim->image[j].series_id == local._characterSpriteIndexes[charIdx]) {
 							match = true;
 							break;
 						}
 					}
 
 					if (match) {
-						const Image &img = _scene->_animation[0]->_frameEntries[j];
+						const Image &img = kernel_anim[0].anim->image[j];
 						KernelMessage &kmsg = kernel_message[local._messagesIndexes[charIdx]];
 						kmsg.x = img.x;
 						kmsg.y = img.y - (50 + (14 * ((charIdx == 0) ? 2 : 1)));
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index 14e858c3336..8a2ba5df22f 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -213,7 +213,7 @@ static void room_318_init() {
 
 	if (global[kAfterHavoc]) {
 		kernel_run_animation(kernel_name('f', -1), 0);
-		_scene->_animation[0]->_repeatFlag = true;
+		kernel_anim[0].repeat = true;
 	} else if (!global[kHasSeenProfPyro]) {
 		_scene->_hotspots.activate(words_professors_gurney, false);
 		_scene->_hotspots.activate(words_professor, false);
@@ -320,9 +320,9 @@ static void room_318_init() {
 }
 
 static void room_318_daemon() {
-	if ((_scene->_animation[0] != nullptr) && (local._animMode == 2)) {
-		if (local._lastFrame != _scene->_animation[0]->getCurrentFrame()) {
-			local._lastFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((kernel_anim[0].anim != nullptr) && (local._animMode == 2)) {
+		if (local._lastFrame != kernel_anim[0].frame) {
+			local._lastFrame = kernel_anim[0].frame;
 			int nextFrame = -1;
 
 			switch (local._lastFrame) {
@@ -377,8 +377,8 @@ static void room_318_daemon() {
 				break;
 			}
 
-			if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextFrame);
+			if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextFrame);
 				local._lastFrame = nextFrame;
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index 7a05ca5f7cd..a675b241a8a 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -171,11 +171,11 @@ static void room_319_init() {
 }
 
 static void room_319_daemon() {
-	if (_scene->_animation[0] == nullptr)
+	if (kernel_anim[0].anim == nullptr)
 		return;
 
-	if (local._animFrame != _scene->_animation[0]->getCurrentFrame()) {
-		local._animFrame = _scene->_animation[0]->getCurrentFrame();
+	if (local._animFrame != kernel_anim[0].frame) {
+		local._animFrame = kernel_anim[0].frame;
 		int nextFrame = -1;
 		if (local._animMode == 1) {
 			switch (local._animFrame) {
@@ -291,8 +291,8 @@ static void room_319_daemon() {
 		if ((local._animMode == 4) && (local._animFrame == 16))
 			mcga_shakes = 80;
 
-		if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-			_scene->_animation[0]->setCurrentFrame(nextFrame);
+		if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+			kernel_reset_animation(0, nextFrame);
 			local._animFrame = nextFrame;
 		}
 	}
@@ -307,11 +307,11 @@ static void room_319_daemon() {
 		kernel_abort_animation(0);
 		kernel_run_animation(kernel_name('b', 0), 0);
 		if (local._nextAction1 == 3)
-			_scene->_animation[0]->setCurrentFrame(85);
+			kernel_reset_animation(0, 85);
 		else if (local._nextAction1 == 1)
-			_scene->_animation[0]->setCurrentFrame(40);
+			kernel_reset_animation(0, 40);
 
-		local._animFrame = _scene->_animation[0]->getCurrentFrame();
+		local._animFrame = kernel_anim[0].frame;
 		local._slacheTalkingFl = true;
 		mcga_shakes = 1;
 
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index ab822aa88b1..b9015374cfd 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -193,9 +193,9 @@ static void room_320_init() {
 }
 
 static void room_320_daemon() {
-	if (_scene->_animation[0] != nullptr) {
-		if (local._lastFrame != _scene->_animation[0]->getCurrentFrame()) {
-			local._lastFrame = _scene->_animation[0]->getCurrentFrame();
+	if (kernel_anim[0].anim != nullptr) {
+		if (local._lastFrame != kernel_anim[0].frame) {
+			local._lastFrame = kernel_anim[0].frame;
 			switch (local._lastFrame) {
 			case 95:
 				local._blinkFl = true;
diff --git a/engines/mads/nebular/rooms/room321.cpp b/engines/mads/nebular/rooms/room321.cpp
index 7dc9e5335f1..4047dd0c648 100644
--- a/engines/mads/nebular/rooms/room321.cpp
+++ b/engines/mads/nebular/rooms/room321.cpp
@@ -52,8 +52,8 @@ static void room_321_init() {
 }
 
 static void room_321_daemon() {
-	if (_scene->_animation[0] != nullptr) {
-		if ((_scene->_animation[0]->getCurrentFrame() >= 260) && (global[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= STORYMODE_NICE))
+	if (kernel_anim[0].anim != nullptr) {
+		if ((kernel_anim[0].frame >= 260) && (global[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= STORYMODE_NICE))
 			new_room = 316;
 	}
 
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 42145164d37..d53dfdee20e 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -628,7 +628,7 @@ static void room_402_init() {
 	local._refuseAlienLiquor = false;
 
 	kernel_run_animation(kernel_full_name(402, 'd', 1, "", EXT_AA), 0);
-	_scene->_animation[0]->_repeatFlag = true;
+	kernel_anim[0].repeat = true;
 
 	g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
 	_scene->_sequences.setDepth(g_sequence_ids[5], 1);
@@ -1317,43 +1317,43 @@ static void room_402_daemon() {
 	if (kernel.trigger == 32)
 		local._rightWomanMoving = false;
 
-	if (_scene->_animation[0]->getCurrentFrame() == 1) {
+	if (kernel_anim[0].frame == 1) {
 		switch (g_engine->getRandomNumber(1, 50)) {
 		case 1:
-			_scene->_animation[0]->setCurrentFrame(2);
+			kernel_reset_animation(0, 2);
 			break;
 
 		case 2:
-			_scene->_animation[0]->setCurrentFrame(7);
+			kernel_reset_animation(0, 7);
 			break;
 
 		case 3:
-			_scene->_animation[0]->setCurrentFrame(11);
+			kernel_reset_animation(0, 11);
 			break;
 
 		default:
-			_scene->_animation[0]->setCurrentFrame(0);
+			kernel_reset_animation(0, 0);
 			break;
 		}
 	}
 
-	if ((_scene->_animation[0]->getCurrentFrame() == 4) && (local._drinkTimer < 10)) {
+	if ((kernel_anim[0].frame == 4) && (local._drinkTimer < 10)) {
 		++local._drinkTimer;
-		_scene->_animation[0]->setCurrentFrame(3);
+		kernel_reset_animation(0, 3);
 	}
 
 	if (local._drinkTimer == 10) {
 		local._drinkTimer = 0;
-		_scene->_animation[0]->setCurrentFrame(4);
-		_scene->_animation[0]->_currentFrame = 5;
+		kernel_reset_animation(0, 4);
+		kernel_anim[0].frame = 5;
 	}
 
 
-	switch (_scene->_animation[0]->getCurrentFrame()) {
+	switch (kernel_anim[0].frame) {
 	case 6:
 	case 10:
 	case 14:
-		_scene->_animation[0]->setCurrentFrame(0);
+		kernel_reset_animation(0, 0);
 		break;
 
 	default:
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index 4026b9145e9..a90071be770 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -49,36 +49,36 @@ static void room_410_init() {
 	section_4_music();
 
 	kernel_run_animation(kernel_full_name(410, 'r', -1, "", EXT_AA), 0);
-	_scene->_animation[0]->_repeatFlag = true;
+	kernel_anim[0].repeat = true;
 }
 
 static void room_410_daemon() {
-	if (_scene->_animation[0]->getCurrentFrame() == 1) {
+	if (kernel_anim[0].frame == 1) {
 		if (g_engine->getRandomNumber(1, 30) == 1)
-			_scene->_animation[0]->setCurrentFrame(2);
+			kernel_reset_animation(0, 2);
 		else
-			_scene->_animation[0]->setCurrentFrame(0);
+			kernel_reset_animation(0, 0);
 	}
 
-	if (_scene->_animation[0]->getCurrentFrame() == 9) {
+	if (kernel_anim[0].frame == 9) {
 		if (g_engine->getRandomNumber(1, 30) == 1)
-			_scene->_animation[0]->setCurrentFrame(10);
+			kernel_reset_animation(0, 10);
 		else
-			_scene->_animation[0]->setCurrentFrame(8);
+			kernel_reset_animation(0, 8);
 	}
 
-	if (_scene->_animation[0]->getCurrentFrame() == 5) {
+	if (kernel_anim[0].frame == 5) {
 		if (g_engine->getRandomNumber(1, 30) == 1)
-			_scene->_animation[0]->setCurrentFrame(6);
+			kernel_reset_animation(0, 6);
 		else
-			_scene->_animation[0]->setCurrentFrame(4);
+			kernel_reset_animation(0, 4);
 	}
 
-	if (_scene->_animation[0]->getCurrentFrame() == 3) {
+	if (kernel_anim[0].frame == 3) {
 		if (g_engine->getRandomNumber(1, 2) == 1)
-			_scene->_animation[0]->setCurrentFrame(4);
+			kernel_reset_animation(0, 4);
 		else // == 2
-			_scene->_animation[0]->setCurrentFrame(8);
+			kernel_reset_animation(0, 8);
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index 10622890c63..00884eeca4a 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -252,7 +252,7 @@ static void handleDialog() {
 			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = false;
 			player.commands_allowed = false;
-			_scene->_animation[0]->setCurrentFrame(local._resetFrame);
+			kernel_reset_animation(0, local._resetFrame);
 		}
 		kernel_message_purge();
 		local._newQuantity = computeQuoteAndQuantity();
@@ -413,16 +413,16 @@ static void room_411_init() {
 	}
 
 	kernel_run_animation(kernel_name('a', -1), 0);
-	_scene->_animation[0]->setCurrentFrame(128);
+	kernel_reset_animation(0, 128);
 
 	local._makeMushroomCloud = false;
 	local._killRox = false;
 }
 
 static void room_411_daemon() {
-	if (_scene->_animation[0] != nullptr) {
-		if (local._curAnimationFrame != _scene->_animation[0]->getCurrentFrame()) {
-			local._curAnimationFrame = _scene->_animation[0]->getCurrentFrame();
+	if (kernel_anim[0].anim != nullptr) {
+		if (local._curAnimationFrame != kernel_anim[0].frame) {
+			local._curAnimationFrame = kernel_anim[0].frame;
 			local._resetFrame = -1;
 
 			switch (local._curAnimationFrame) {
@@ -490,14 +490,14 @@ static void room_411_daemon() {
 				break;
 			}
 
-			if ((local._resetFrame >= 0) && (local._resetFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(local._resetFrame);
+			if ((local._resetFrame >= 0) && (local._resetFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, local._resetFrame);
 				local._curAnimationFrame = local._resetFrame;
 			}
 		}
 	}
 
-	if (_scene->_animation[0]->getCurrentFrame() == 86)
+	if (kernel_anim[0].frame == 86)
 		g_engine->_soundManager->command(59, 0);
 }
 
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index 0b47b31be94..a1aa5f61ad8 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -105,10 +105,10 @@ static void room_413_init() {
 }
 
 static void room_413_daemon() {
-	if (_scene->_animation[0] && _scene->_animation[0]->getCurrentFrame() == 38)
-		_scene->_animation[0]->setCurrentFrame(37);
+	if ((kernel_anim[0].anim != nullptr) && kernel_anim[0].frame == 38)
+		kernel_reset_animation(0, 37);
 
-	if (_scene->_animation[0] && _scene->_animation[0]->getCurrentFrame() == 21 && local._canMove) {
+	if ((kernel_anim[0].anim != nullptr) && kernel_anim[0].frame == 21 && local._canMove) {
 		g_engine->_soundManager->command(27, 0);
 		local._canMove = false;
 	}
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index a5ac5d73bff..4401dbcab71 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -81,9 +81,9 @@ static void room_504_init() {
 }
 
 static void room_504_daemon() {
-	if ((local._carAnimationMode == 1) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carAnimationMode == 1) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 			int nextFrame;
 
 			if (local._carFrame == 1)
@@ -91,8 +91,8 @@ static void room_504_daemon() {
 			else
 				nextFrame = -1;
 
-			if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextFrame);
+			if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextFrame);
 				local._carFrame = nextFrame;
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room505.cpp b/engines/mads/nebular/rooms/room505.cpp
index f79ebc57376..6f781409278 100644
--- a/engines/mads/nebular/rooms/room505.cpp
+++ b/engines/mads/nebular/rooms/room505.cpp
@@ -85,15 +85,15 @@ static void room_505_init() {
 	player.commands_allowed = false;
 	local._frame = -1;
 	kernel_run_animation(kernel_name('a', -1), 0);
-	_scene->_animation[0]->setCurrentFrame(86);
+	kernel_reset_animation(0, 86);
 
 	section_5_music();
 	g_engine->_soundManager->command(16, 0);
 }
 
 static void room_505_daemon() {
-	if (local._frame != _scene->_animation[0]->getCurrentFrame()) {
-		local._frame = _scene->_animation[0]->getCurrentFrame();
+	if (local._frame != kernel_anim[0].frame) {
+		local._frame = kernel_anim[0].frame;
 		int resetFrame = -1;
 
 		switch (local._frame) {
@@ -231,8 +231,8 @@ static void room_505_daemon() {
 			break;
 		}
 
-		if ((resetFrame >= 0) && (resetFrame != _scene->_animation[0]->getCurrentFrame())) {
-			_scene->_animation[0]->setCurrentFrame(resetFrame);
+		if ((resetFrame >= 0) && (resetFrame != kernel_anim[0].frame)) {
+			kernel_reset_animation(0, resetFrame);
 			local._frame = resetFrame;
 		}
 	}
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index c85866f10f9..07c1f0bb669 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -208,7 +208,7 @@ static void room_506_daemon() {
 		switch (kernel.trigger) {
 		case 70:
 			player.walker_visible = true;
-			player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+			player.clock = kernel_anim[0].next_clock - player.frame_delay;
 			_scene->_sequences.addTimer(6, 71);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index 3cae8386fe2..0864cd162de 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -125,9 +125,9 @@ static void room_511_init() {
 }
 
 static void room_511_daemon() {
-	if ((local._lineAnimationMode == 1) && _scene->_animation[0]) {
-		if (local._lineFrame != _scene->_animation[0]->getCurrentFrame()) {
-			local._lineFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._lineAnimationMode == 1) && (kernel_anim[0].anim != nullptr)) {
+		if (local._lineFrame != kernel_anim[0].frame) {
+			local._lineFrame = kernel_anim[0].frame;
 			int resetFrame = -1;
 
 			if ((local._lineAnimationPosition == 2) && (local._lineFrame == 14))
@@ -143,8 +143,8 @@ static void room_511_daemon() {
 					resetFrame = 2;
 			}
 
-			if ((resetFrame >= 0) && (resetFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(resetFrame);
+			if ((resetFrame >= 0) && (resetFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, resetFrame);
 				local._lineFrame = resetFrame;
 			}
 		}
@@ -153,7 +153,7 @@ static void room_511_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 		_scene->_sequences.addTimer(6, 71);
 		break;
 
@@ -191,7 +191,7 @@ static void room_511_pre_parser() {
 			kernel_run_animation(kernel_name('R', 2), 1);
 		} else if (kernel.trigger == 1) {
 			player.walker_visible = true;
-			player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+			player.clock = kernel_anim[0].next_clock - player.frame_delay;
 			inter_move_object(OBJ_FISHING_LINE, 1);
 			local._handingLine = false;
 			player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index f9596447e25..2aaaab4608e 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -272,8 +272,8 @@ static void room_512_parser() {
 		text_show(51225);
 	else if (player_said_2(look, padlock_key) && object_is_here(OBJ_PADLOCK_KEY))
 		text_show(51215);
-	else if (player_said_2(look, fishing_rod) && (!_scene->_animation[0] ||
-		_scene->_animation[0]->getCurrentFrame() == 4))
+	else if (player_said_2(look, fishing_rod) && ((kernel_anim[0].anim == nullptr) ||
+		kernel_anim[0].frame == 4))
 		text_show(51216);
 	else if (player_said_2(look, ships_wheel))
 		text_show(51218);
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index ecca5b25a1b..23a3b297e8e 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -106,7 +106,7 @@ static void room_513_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 		_scene->_sequences.addTimer(6, 71);
 		break;
 
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index 0f7c333cdcb..a57781042b1 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -67,7 +67,7 @@ static void room_601_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 		_scene->_sequences.addTimer(30, 71);
 		break;
 
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index c86563b9599..0344f63696b 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -235,7 +235,7 @@ static void room_602_parser() {
 		case 1:
 		{
 			player.walker_visible = true;
-			player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+			player.clock = kernel_anim[0].next_clock - player.frame_delay;
 			local._lastSpriteIdx = g_sprite_ids[3];
 			local._lastSequenceIdx = _scene->_sequences.startCycle(local._lastSpriteIdx, false, -1);
 			_scene->_sequences.setDepth(local._lastSequenceIdx, 14);
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index 9e5aa803408..d22ae97164b 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -89,7 +89,7 @@ static void room_604_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 		_scene->_sequences.addTimer(30, 71);
 		break;
 
@@ -111,9 +111,9 @@ static void room_604_daemon() {
 		break;
 	}
 
-	if (local._monsterActive && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._monsterFrame) {
-			local._monsterFrame = _scene->_animation[0]->getCurrentFrame();
+	if (local._monsterActive && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._monsterFrame) {
+			local._monsterFrame = kernel_anim[0].frame;
 			int nextMonsterFrame = -1;
 
 			switch (local._monsterFrame) {
@@ -152,7 +152,7 @@ static void room_604_daemon() {
 			}
 
 			if ((nextMonsterFrame >= 0) && (nextMonsterFrame != local._monsterFrame)) {
-				_scene->_animation[0]->setCurrentFrame(nextMonsterFrame);
+				kernel_reset_animation(0, nextMonsterFrame);
 				local._monsterFrame = nextMonsterFrame;
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index 6dff76897f4..bd7722ac9d8 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -270,7 +270,7 @@ static void room_607_daemon() {
 	switch (kernel.trigger) {
 	case 80:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 		_scene->_sequences.addTimer(6, 81);
 		break;
 
@@ -304,7 +304,7 @@ static void handleThrowingBone() {
 
 	case 1:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 
 		if (local._animationMode != 1)
 			_scene->_hotspots.activate(words_obnoxious_dog, false);
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index 5ff6f8d534a..d1415e80917 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -91,7 +91,7 @@ static void restoreAnimations() {
 		_scene->_sequences.remove(g_sequence_ids[6]);
 		_scene->_sequences.remove(g_sequence_ids[7]);
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(6);
+		kernel_reset_animation(0, 6);
 	}
 }
 
@@ -243,7 +243,7 @@ static void room_608_init() {
 		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
 		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(6);
+		kernel_reset_animation(0, 6);
 	} else if (global[kCarStatus] == CAR_SQUASHES_DOG) {
 		local._carMode = 2;
 		local._dogDeathMode = 0;
@@ -414,13 +414,13 @@ static void room_608_daemon() {
 		local._animationMode = 0;
 	}
 
-	if ((local._carMode == 4) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carMode == 4) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 
 			if (local._carFrame == 10) {
 				player.walker_visible = true;
-				player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+				player.clock = kernel_anim[0].next_clock - player.frame_delay;
 			} else if (local._carFrame == 56) {
 				resetDogVariables();
 				local._animationMode = 0;
@@ -429,12 +429,12 @@ static void room_608_daemon() {
 		}
 	}
 
-	if ((local._carMode == 5) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carMode == 5) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 			if (local._carFrame == 10) {
 				player.walker_visible = true;
-				player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+				player.clock = kernel_anim[0].next_clock - player.frame_delay;
 			} else if (local._carFrame == 52) {
 				resetDogVariables();
 				local._animationMode = 0;
@@ -443,13 +443,13 @@ static void room_608_daemon() {
 		}
 	}
 
-	if ((local._carMode == 6) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carMode == 6) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 
 			if (local._carFrame == 11) {
 				player.walker_visible = true;
-				player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+				player.clock = kernel_anim[0].next_clock - player.frame_delay;
 			} else if (local._carFrame == 41) {
 				g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], false, 9, 0, 0, 0);
 				_scene->_sequences.setAnimRange(g_sequence_ids[10], 10, 11);
@@ -487,9 +487,9 @@ static void room_608_daemon() {
 	if (kernel.trigger == 112)
 		local._dogYelping = false;
 
-	if ((local._carMode == 0) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carMode == 0) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 			int nextFrame = -1;
 
 			if ((global[kCarStatus] == CAR_UP) || (global[kCarStatus] == CAR_DOWN)) {
@@ -502,7 +502,7 @@ static void room_608_daemon() {
 					break;
 
 				case 1:
-					if (_scene->_animation[0]->getCurrentFrame() >= 12) {
+					if (kernel_anim[0].frame >= 12) {
 						nextFrame = 0;
 						local._carMoveMode = 0;
 						global[kCarStatus] = CAR_UP;
@@ -510,7 +510,7 @@ static void room_608_daemon() {
 					break;
 
 				case 2:
-					if (_scene->_animation[0]->getCurrentFrame() >= 6) {
+					if (kernel_anim[0].frame >= 6) {
 						nextFrame = 6;
 						local._carMoveMode = 0;
 						global[kCarStatus] = CAR_DOWN;
@@ -522,35 +522,35 @@ static void room_608_daemon() {
 				}
 			}
 
-			if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextFrame);
+			if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextFrame);
 				local._carFrame = nextFrame;
 			}
 		}
 	}
 
-	if ((local._carMode == 2) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carMode == 2) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 			int nextFrame = -1;
 
 			if (local._carMoveMode == 0)
 				nextFrame = 28;
-			else if (_scene->_animation[0]->getCurrentFrame() >= 28) {
+			else if (kernel_anim[0].frame >= 28) {
 				nextFrame = 28;
 				local._carMoveMode = 0;
 			}
 
-			if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextFrame);
+			if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextFrame);
 				local._carFrame = nextFrame;
 			}
 		}
 	}
 
-	if ((local._carMode == 3) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carMode == 3) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 			int nextFrame = -1;
 
 			if (local._resetPositionsFl) {
@@ -558,22 +558,22 @@ static void room_608_daemon() {
 				local._carMoveMode = 0;
 			} else if (local._carMoveMode == 0)
 				nextFrame = 6;
-			else if (_scene->_animation[0]->getCurrentFrame() >= 6) {
+			else if (kernel_anim[0].frame >= 6) {
 				nextFrame = 6;
 				local._carMoveMode = 0;
 			}
 
-			if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextFrame);
+			if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextFrame);
 				local._carFrame = nextFrame;
 			}
 		}
 	}
 
 
-	if ((local._carMode == 1) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._carFrame) {
-			local._carFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._carMode == 1) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._carFrame) {
+			local._carFrame = kernel_anim[0].frame;
 			int nextFrame = -1;
 
 			if (local._resetPositionsFl) {
@@ -581,13 +581,13 @@ static void room_608_daemon() {
 				local._carMoveMode = 0;
 			} else if (local._carMoveMode == 0)
 				nextFrame = 6;
-			else if (_scene->_animation[0]->getCurrentFrame() >= 6) {
+			else if (kernel_anim[0].frame >= 6) {
 				nextFrame = 6;
 				local._carMoveMode = 0;
 			}
 
-			if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextFrame);
+			if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextFrame);
 				local._carFrame = nextFrame;
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index 3bcae36b505..bc275318222 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -128,7 +128,7 @@ static void room_609_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 		_scene->_sequences.addTimer(6, 71);
 		break;
 
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index 40e4a07fc55..e85880edafb 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -1135,13 +1135,13 @@ static void room_611_daemon() {
 			local._hermitMovingFl = true;
 	}
 
-	if (local._stickFingerFl && (_scene->_animation[0]->getCurrentFrame() == 47)) {
+	if (local._stickFingerFl && (kernel_anim[0].frame == 47)) {
 		local._stickFingerFl = false;
 		local._hermitMovingFl = true;
 		local._hermitMode = 1;
 	}
 
-	if (_scene->_animation[0] != nullptr && (_scene->_animation[0]->getCurrentFrame() == 240) && local._check1Fl) {
+	if (kernel_anim[0].anim != nullptr && (kernel_anim[0].frame == 240) && local._check1Fl) {
 		local._check1Fl = false;
 		kernel_message_add(quote_string(kernel.quotes, 0x27E), 33, 88, 0xFDFC, 90, 0, 0);
 		_scene->_sequences.addTimer(120, 120);
@@ -1230,7 +1230,7 @@ static void room_611_daemon() {
 		}
 	}
 
-	if (_scene->_animation[0] != nullptr && _scene->_animation[0]->getCurrentFrame() == 254)
+	if (kernel_anim[0].anim != nullptr && kernel_anim[0].frame == 254)
 		player.commands_allowed = true;
 
 	if (kernel.trigger == 110) {
@@ -1256,7 +1256,7 @@ static void room_611_daemon() {
 	}
 
 	if (local._hermitMode == 6) {
-		if ((_scene->_animation[0]->getCurrentFrame() == 9) && local._check1Fl) {
+		if ((kernel_anim[0].frame == 9) && local._check1Fl) {
 			_scene->_sequences.remove(g_sequence_ids[3]);
 			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
 			_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 2);
@@ -1265,7 +1265,7 @@ static void room_611_daemon() {
 			local._check1Fl = false;
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() == 17) && !local._check1Fl) {
+		if ((kernel_anim[0].frame == 17) && !local._check1Fl) {
 			local._nextFrame = 26;
 			local._hermitMode = 4;
 			local._check1Fl = true;
@@ -1273,13 +1273,13 @@ static void room_611_daemon() {
 	}
 
 	if (local._hermitMode == 4) {
-		if ((_scene->_animation[0]->getCurrentFrame() == 33) && local._check1Fl) {
+		if ((kernel_anim[0].frame == 33) && local._check1Fl) {
 			displayHermitQuestions(local._hermitDisplayedQuestion);
 			local._nextFrame = 1;
 			local._check1Fl = false;
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() == 9) && !local._check1Fl) {
+		if ((kernel_anim[0].frame == 9) && !local._check1Fl) {
 			local._nextFrame = 8;
 			_scene->_sequences.addTimer(1, 113);
 			local._check1Fl = true;
@@ -1305,8 +1305,8 @@ static void room_611_daemon() {
 		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 115);
 	}
 
-	if ((local._nextFrame >= 0) && (local._nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-		_scene->_animation[0]->setCurrentFrame(local._nextFrame);
+	if ((local._nextFrame >= 0) && (local._nextFrame != kernel_anim[0].frame)) {
+		kernel_reset_animation(0, local._nextFrame);
 		local._nextFrame = -1;
 	}
 
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index 4cb165d2ab8..7560321f505 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -138,7 +138,7 @@ static void room_612_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 		player.walker_visible = true;
-		player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 		_scene->_sequences.addTimer(6, 71);
 		break;
 
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index bc1d815b4a8..d2595a16e89 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -298,7 +298,7 @@ static void room_701_parser() {
 			case 1:
 			{
 				player.walker_visible = true;
-				player.clock = _scene->_animation[0]->getNextFrameTimer() - player.frame_delay;
+				player.clock = kernel_anim[0].next_clock - player.frame_delay;
 				g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
 				_scene->_sequences.setDepth(g_sequence_ids[2], 9);
 				int idx = _scene->_dynamicHotspots.add(words_boat, words_climb_into, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
diff --git a/engines/mads/nebular/rooms/room703.cpp b/engines/mads/nebular/rooms/room703.cpp
index 689a9893d78..ce300aeffa3 100644
--- a/engines/mads/nebular/rooms/room703.cpp
+++ b/engines/mads/nebular/rooms/room703.cpp
@@ -157,7 +157,7 @@ static void room_703_init() {
 		local._boatDir = 2;
 		local._monsterMode = 0;
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(34);
+		kernel_reset_animation(0, 34);
 	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.commands_allowed = false;
 		local._boatDir = 1;
@@ -175,17 +175,17 @@ static void room_703_init() {
 		local._boatDir = 1;
 		local._monsterMode = 1;
 		kernel_run_animation(kernel_name('B', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(39);
+		kernel_reset_animation(0, 39);
 	} else if (local._boatDir == 1) {
 		local._curSequence = 0;
 		local._monsterMode = 0;
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(9);
+		kernel_reset_animation(0, 9);
 	} else if (local._boatDir == 2) {
 		local._curSequence = 0;
 		local._monsterMode = 0;
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(56);
+		kernel_reset_animation(0, 56);
 	}
 
 	if (kernel.teleported_in) {
@@ -227,9 +227,9 @@ static void room_703_daemon() {
 	if (kernel.trigger == 70)
 		kernel.force_restart = true;
 
-	if ((local._monsterMode == 3) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._boatFrame) {
-			local._boatFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._monsterMode == 3) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._boatFrame) {
+			local._boatFrame = kernel_anim[0].frame;
 			int nextBoatFrame = -1;
 
 			if (local._boatFrame == 62) {
@@ -240,8 +240,8 @@ static void room_703_daemon() {
 				}
 			}
 
-			if ((nextBoatFrame >= 0) && (nextBoatFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextBoatFrame);
+			if ((nextBoatFrame >= 0) && (nextBoatFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextBoatFrame);
 				local._boatFrame = nextBoatFrame;
 			}
 		}
@@ -250,9 +250,9 @@ static void room_703_daemon() {
 	if (kernel.trigger == 70)
 		kernel.force_restart = true;
 
-	if ((local._monsterMode == 0) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._boatFrame) {
-			local._boatFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._monsterMode == 0) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._boatFrame) {
+			local._boatFrame = kernel_anim[0].frame;
 			int nextBoatFrame = -1;
 
 			switch (local._boatFrame) {
@@ -323,8 +323,8 @@ static void room_703_daemon() {
 				break;
 			}
 
-			if ((nextBoatFrame >= 0) && (nextBoatFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextBoatFrame);
+			if ((nextBoatFrame >= 0) && (nextBoatFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextBoatFrame);
 				local._boatFrame = nextBoatFrame;
 			}
 		}
@@ -358,9 +358,9 @@ static void room_703_daemon() {
 	}
 
 
-	if ((local._monsterMode == 1) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._boatFrame) {
-			local._boatFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._monsterMode == 1) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._boatFrame) {
+			local._boatFrame = kernel_anim[0].frame;
 			int nextBoatFrame = -1;
 
 			switch (local._boatFrame) {
@@ -397,16 +397,16 @@ static void room_703_daemon() {
 				break;
 			}
 
-			if ((nextBoatFrame >= 0) && (nextBoatFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextBoatFrame);
+			if ((nextBoatFrame >= 0) && (nextBoatFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextBoatFrame);
 				local._boatFrame = nextBoatFrame;
 			}
 		}
 	}
 
-	if ((local._monsterMode == 2) && (_scene->_animation[0] != nullptr)) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._boatFrame) {
-			local._boatFrame = _scene->_animation[0]->getCurrentFrame();
+	if ((local._monsterMode == 2) && (kernel_anim[0].anim != nullptr)) {
+		if (kernel_anim[0].frame != local._boatFrame) {
+			local._boatFrame = kernel_anim[0].frame;
 			int nextBoatFrame = -1;
 
 			switch (local._boatFrame) {
@@ -446,7 +446,7 @@ static void room_703_daemon() {
 				kernel_abort_animation(0);
 				local._monsterMode = 1;
 				kernel_run_animation(kernel_name('B', -1), 0);
-				_scene->_animation[0]->setCurrentFrame(39);
+				kernel_reset_animation(0, 39);
 				player.commands_allowed = true;
 				break;
 
@@ -455,7 +455,7 @@ static void room_703_daemon() {
 					kernel_abort_animation(0);
 					local._monsterMode = 1;
 					kernel_run_animation(kernel_name('B', -1), 0);
-					_scene->_animation[0]->setCurrentFrame(39);
+					kernel_reset_animation(0, 39);
 					player.commands_allowed = true;
 				} else
 					inter_move_object(OBJ_CHICKEN_BOMB, 1);
@@ -468,7 +468,7 @@ static void room_703_daemon() {
 				kernel_abort_animation(0);
 				local._monsterMode = 0;
 				kernel_run_animation(kernel_name('A', -1), 0);
-				_scene->_animation[0]->setCurrentFrame(9);
+				kernel_reset_animation(0, 9);
 				player.commands_allowed = true;
 				if (config_file.naughtiness == STORYMODE_NAUGHTY)
 					text_show(70321);
@@ -481,8 +481,8 @@ static void room_703_daemon() {
 				break;
 			}
 
-			if ((nextBoatFrame >= 0) && (nextBoatFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextBoatFrame);
+			if ((nextBoatFrame >= 0) && (nextBoatFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextBoatFrame);
 				local._boatFrame = nextBoatFrame;
 			}
 		}
@@ -518,7 +518,7 @@ static void room_703_parser() {
 		kernel_abort_animation(0);
 		local._monsterMode = 2;
 		kernel_run_animation(kernel_name('C', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(19);
+		kernel_reset_animation(0, 19);
 	} else if (player_said_3(throw, chicken, sea_monster)) {
 		player.commands_allowed = false;
 		kernel_abort_animation(0);
@@ -529,13 +529,13 @@ static void room_703_parser() {
 		kernel_abort_animation(0);
 		local._monsterMode = 2;
 		kernel_run_animation(kernel_name('C', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(39);
+		kernel_reset_animation(0, 39);
 	} else if (player_said_3(throw, bomb, sea_monster)) {
 		player.commands_allowed = false;
 		kernel_abort_animation(0);
 		local._monsterMode = 2;
 		kernel_run_animation(kernel_name('C', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(59);
+		kernel_reset_animation(0, 59);
 	} else if (player_said_3(throw, chicken_bomb, sea_monster)) {
 		local._useBomb = true;
 		player.commands_allowed = false;
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index b18f16fc2a8..60b33862303 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -148,21 +148,21 @@ static void room_704_init() {
 		local._animationMode = 2;
 		local._boatDirection = 2;
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(36);
+		kernel_reset_animation(0, 36);
 	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.commands_allowed = false;
 		local._boatDirection = 1;
 		kernel_run_animation(kernel_name('A', -1), 0);
 	} else if (local._boatDirection == 1) {
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(8);
+		kernel_reset_animation(0, 8);
 	} else if (local._boatDirection == 2) {
 		if (object[OBJ_BOTTLE].location == room_id) {
 			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(123, 125));
 			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
 		}
 		kernel_run_animation(kernel_name('A', -1), 0);
-		_scene->_animation[0]->setCurrentFrame(57);
+		kernel_reset_animation(0, 57);
 	}
 
 	if (kernel.teleported_in)
@@ -176,9 +176,9 @@ static void room_704_init() {
 }
 
 static void room_704_daemon() {
-	if (_scene->_animation[0] != nullptr) {
-		if (_scene->_animation[0]->getCurrentFrame() != local._boatCurrentFrame) {
-			local._boatCurrentFrame = _scene->_animation[0]->getCurrentFrame();
+	if (kernel_anim[0].anim != nullptr) {
+		if (kernel_anim[0].frame != local._boatCurrentFrame) {
+			local._boatCurrentFrame = kernel_anim[0].frame;
 			int nextFrame = -1;
 
 			switch (local._boatCurrentFrame) {
@@ -284,8 +284,8 @@ static void room_704_daemon() {
 				break;
 			}
 
-			if ((nextFrame >= 0) && (nextFrame != _scene->_animation[0]->getCurrentFrame())) {
-				_scene->_animation[0]->setCurrentFrame(nextFrame);
+			if ((nextFrame >= 0) && (nextFrame != kernel_anim[0].frame)) {
+				kernel_reset_animation(0, nextFrame);
 				local._boatCurrentFrame = nextFrame;
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index 53b1dc66008..cb4fad92779 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -187,9 +187,9 @@ static void room_706_daemon() {
 		kernel.force_restart = true;
 	}
 
-	if (_scene->_animation[0] != nullptr) {
-		if ((local._animationMode != 0) && (_scene->_animation[0]->getCurrentFrame() != local._animationFrame)) {
-			local._animationFrame = _scene->_animation[0]->getCurrentFrame();
+	if (kernel_anim[0].anim != nullptr) {
+		if ((local._animationMode != 0) && (kernel_anim[0].frame != local._animationFrame)) {
+			local._animationFrame = kernel_anim[0].frame;
 
 			if (local._animationFrame == 6) {
 				_scene->_sequences.remove(g_sequence_ids[1]);
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index da78768f0ed..1e95bdabc36 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -110,7 +110,7 @@ static void room_804_init() {
 static void room_804_daemon() {
 	if (!local._messWithThrottle) {
 
-		if ((local._throttleGone) && (local._movingThrottle) && (_scene->_animation[0]->getCurrentFrame() == 39)) {
+		if ((local._throttleGone) && (local._movingThrottle) && (kernel_anim[0].frame == 39)) {
 			g_sequence_ids[1] = _scene->_sequences.startCycle
 			(g_sprite_ids[1], false, 1);
 			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(133, 139));
@@ -118,7 +118,7 @@ static void room_804_daemon() {
 			local._throttleGone = false;
 		}
 
-		if ((local._movingThrottle) && (_scene->_animation[0]->getCurrentFrame() == 42)) {
+		if ((local._movingThrottle) && (kernel_anim[0].frame == 42)) {
 			local._resetFrame = 0;
 			local._movingThrottle = false;
 		}
@@ -127,13 +127,13 @@ static void room_804_daemon() {
 			local._resetFrame = 42;
 		}
 
-		if (_scene->_animation[0]->getCurrentFrame() == 65)
+		if (kernel_anim[0].frame == 65)
 			_scene->_sequences.remove(g_sequence_ids[7]);
 
 		switch (config_file.naughtiness) {
 		case STORYMODE_NAUGHTY:
 		default:
-			if (_scene->_animation[0]->getCurrentFrame() == 81) {
+			if (kernel_anim[0].frame == 81) {
 				local._resetFrame = 80;
 				global[kInSpace] = false;
 				global[kBeamIsUp] = true;
@@ -145,7 +145,7 @@ static void room_804_daemon() {
 			break;
 
 		case STORYMODE_NICE:
-			if (_scene->_animation[0]->getCurrentFrame() == 68) {
+			if (kernel_anim[0].frame == 68) {
 				local._resetFrame = 66;
 				global[kInSpace] = false;
 				global[kBeamIsUp] = true;
@@ -156,12 +156,12 @@ static void room_804_daemon() {
 			}
 		}
 
-		if (_scene->_animation[0]->getCurrentFrame() == 34) {
+		if (kernel_anim[0].frame == 34) {
 			local._resetFrame = 36;
 			_scene->_sequences.remove(g_sequence_ids[1]);
 		}
 
-		if (_scene->_animation[0]->getCurrentFrame() == 37) {
+		if (kernel_anim[0].frame == 37) {
 			local._resetFrame = 36;
 			if (!local._dontPullThrottleAgain) {
 				local._dontPullThrottleAgain = true;
@@ -173,20 +173,20 @@ static void room_804_daemon() {
 			new_room = 803;
 		}
 
-		if ((_scene->_animation[0]->getCurrentFrame() == 7) && (!global[kWindowFixed])) {
+		if ((kernel_anim[0].frame == 7) && (!global[kWindowFixed])) {
 			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
 			_scene->_sequences.addTimer(20, 110);
 			global[kWindowFixed] = true;
 		}
 
-		if (_scene->_animation[0]->getCurrentFrame() == 10) {
+		if (kernel_anim[0].frame == 10) {
 			local._resetFrame = 0;
 			player.commands_allowed = true;
 			inter_move_object(OBJ_POLYCEMENT, NOWHERE);
 		}
 
 		// FIXME: Original doesn't have resetFrame check. Check why this has been needed
-		if (local._resetFrame == -1 && _scene->_animation[0]->getCurrentFrame() == 1) {
+		if (local._resetFrame == -1 && kernel_anim[0].frame == 1) {
 			int randomVal = g_engine->getRandomNumber(29) + 1;
 			switch (randomVal) {
 			case 1:
@@ -204,7 +204,7 @@ static void room_804_daemon() {
 			}
 		}
 
-		switch (_scene->_animation[0]->getCurrentFrame()) {
+		switch (kernel_anim[0].frame) {
 		case 26:
 		case 28:
 		case 31:
@@ -214,12 +214,12 @@ static void room_804_daemon() {
 			break;
 		}
 	} else {
-		if ((_scene->_animation[0]->getCurrentFrame() == 36) && (!local._throttleGone)) {
+		if ((kernel_anim[0].frame == 36) && (!local._throttleGone)) {
 			_scene->_sequences.remove(g_sequence_ids[1]);
 			local._throttleGone = true;
 		}
 
-		if (_scene->_animation[0]->getCurrentFrame() == 39) {
+		if (kernel_anim[0].frame == 39) {
 			local._movingThrottle = false;
 			switch (local._throttleCounter) {
 			case 1:
@@ -259,8 +259,8 @@ static void room_804_daemon() {
 	}
 
 	if (local._resetFrame >= 0) {
-		if (local._resetFrame != _scene->_animation[0]->getCurrentFrame()) {
-			_scene->_animation[0]->setCurrentFrame(local._resetFrame);
+		if (local._resetFrame != kernel_anim[0].frame) {
+			kernel_reset_animation(0, local._resetFrame);
 			local._resetFrame = -1;
 		}
 	}
@@ -269,12 +269,12 @@ static void room_804_daemon() {
 		new_room = 803;
 	}
 
-	if ((_scene->_animation[0]->getCurrentFrame() == 72) && !local._alreadyPop) {
+	if ((kernel_anim[0].frame == 72) && !local._alreadyPop) {
 		g_engine->_soundManager->command(21, 0);
 		local._alreadyPop = true;
 	}
 
-	if ((_scene->_animation[0]->getCurrentFrame() == 80) && !local._alreadyOrgan) {
+	if ((kernel_anim[0].frame == 80) && !local._alreadyOrgan) {
 		g_engine->_soundManager->command(22, 0);
 		local._alreadyOrgan = true;
 	}
diff --git a/engines/mads/nebular/rooms/room810.cpp b/engines/mads/nebular/rooms/room810.cpp
index a6d040999df..ce387890f7e 100644
--- a/engines/mads/nebular/rooms/room810.cpp
+++ b/engines/mads/nebular/rooms/room810.cpp
@@ -49,7 +49,7 @@ static void room_810_init() {
 }
 
 static void room_810_daemon() {
-	if (_scene->_animation[0] && (_scene->_animation[0]->getCurrentFrame() == 200)
+	if ((kernel_anim[0].anim != nullptr) && (kernel_anim[0].frame == 200)
 		&& local._moveAllowed) {
 		_scene->_sequences.addTimer(100, 70);
 		local._moveAllowed = false;
diff --git a/engines/mads/nebular/rooms/thunks.cpp b/engines/mads/nebular/rooms/thunks.cpp
index 3434f3beee6..c3420594656 100644
--- a/engines/mads/nebular/rooms/thunks.cpp
+++ b/engines/mads/nebular/rooms/thunks.cpp
@@ -32,36 +32,6 @@ namespace Rooms {
 
 Scene _scene;
 
-static uint16 dummy_num_images;
-Scene::Animation::Animation(int anim_id) : _id(anim_id),
-		_currentFrame(kernel_anim[anim_id].frame),
-		_repeatFlag(kernel_anim[anim_id].repeat),
-		_spriteListIndexes(kernel_anim[anim_id].anim ? &kernel_anim[anim_id].anim->series_id[0] : nullptr),
-		_oldFrameEntry(kernel_anim[anim_id].image),
-		_frameEntriesCount(kernel_anim[anim_id].anim ? kernel_anim[anim_id].anim->num_images : dummy_num_images),
-		_frameEntries(kernel_anim[anim_id].anim ? kernel_anim[anim_id].anim->image : nullptr) {
-}
-
-int Scene::Animation::getCurrentFrame() const {
-	return _currentFrame;
-}
-
-void Scene::Animation::setNextFrameTimer(long time) {
-	kernel_anim[_id].next_clock = time;
-}
-
-long Scene::Animation::getNextFrameTimer() {
-	return 	kernel_anim[_id].next_clock;
-}
-
-void Scene::Animation::setCurrentFrame(int frameNum) {
-	kernel_reset_animation(_id, frameNum);
-}
-
-void Scene::Animation::resetSpriteSetsCount() {
-	kernel_anim[_id].anim->num_series = 0;
-}
-
 int Scene::DynamicHotspots::add(int vocab_id, int verb_id, int auto_sequence, const Common::Rect &r) {
 	return kernel_add_dynamic(vocab_id, verb_id, 0, auto_sequence,
 		r.left, r.top, r.width(), r.height());
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
index c09749f9303..0f9e79af385 100644
--- a/engines/mads/nebular/rooms/thunks.h
+++ b/engines/mads/nebular/rooms/thunks.h
@@ -128,51 +128,6 @@ struct Scene {
 		return this;
 	}
 
-	struct Animation {
-		int16 _id;
-		int &_currentFrame;
-		int &_repeatFlag;
-		int *const _spriteListIndexes;
-		int &_oldFrameEntry;
-		uint16 &_frameEntriesCount;
-		Image *const _frameEntries;
-
-		Animation(int anim_id);
-
-		Animation *operator->() {
-			return this;
-		}
-		const Animation *operator->() const {
-			return this;
-		}
-
-		bool operator!() const {
-			return kernel_anim[_id].anim == nullptr;
-		}
-		bool operator!=(std::nullptr_t) const {
-			return kernel_anim[_id].anim != nullptr;
-		}
-		bool operator==(std::nullptr_t) const {
-			return kernel_anim[_id].anim == nullptr;
-		}
-		explicit operator bool() const {
-			return kernel_anim[_id].anim != nullptr;
-		}
-
-
-		int getCurrentFrame() const;
-		void setNextFrameTimer(long time);
-		long getNextFrameTimer();
-		void setCurrentFrame(int frameNum);
-		void resetSpriteSetsCount();
-	};
-	struct Animations {
-		Animation operator[](int anim_id) {
-			return Animation(anim_id);
-		}
-	};
-	Animations _animation;
-
 	struct CustomDest {
 		int &x = inter_point_x;
 		int &y = inter_point_y;


Commit: a494dfee3bffe3c587b874c7e7d04ee5e1ed649b
    https://github.com/scummvm/scummvm/commit/a494dfee3bffe3c587b874c7e7d04ee5e1ed649b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:56+10:00

Commit Message:
MADS: NEBULAR: Refactored Sequences thunk

Changed paths:
    engines/mads/nebular/rooms/forcefield.cpp
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room301.cpp
    engines/mads/nebular/rooms/room303.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room310.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room515.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/room810.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/rooms/forcefield.cpp b/engines/mads/nebular/rooms/forcefield.cpp
index 3a30f76ad4f..4baf0b12e23 100644
--- a/engines/mads/nebular/rooms/forcefield.cpp
+++ b/engines/mads/nebular/rooms/forcefield.cpp
@@ -114,11 +114,11 @@ void handle_forcefield(Forcefield *force, int16 *sprites) {
 		}
 
 		if (id >= 0) {
-			force->_seqId[id] = _scene->_sequences.addSpriteCycle(sprites[spriteId], mirror, 2, 0, 0, 0);
-			_scene->_sequences.setDepth(force->_seqId[id], 8);
-			_scene->_sequences.setPosition(force->_seqId[id], Common::Point(posX, posY));
-			_scene->_sequences.setMotion(force->_seqId[id], 2, speedX, speedY);
-			_scene->_sequences.addSubEntry(force->_seqId[id], SEQUENCE_TRIGGER_EXPIRE, 0, 150 + id);
+			force->_seqId[id] = kernel_seq_forward(sprites[spriteId], mirror, 2, 0, 0, 0);
+			kernel_seq_depth(force->_seqId[id], 8);
+			kernel_seq_loc(force->_seqId[id], posX, posY);
+			kernel_seq_motion(force->_seqId[id], 2, speedX, speedY);
+			kernel_seq_trigger(force->_seqId[id], SEQUENCE_TRIGGER_EXPIRE, 0, 150 + id);
 			if (spriteId == 2)
 				force->_horizontal++;
 			else
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 5fdfca9c35d..84403cb4034 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -50,19 +50,19 @@ static void room_101_say_dang() {
 
 	switch (kernel.trigger) {
 	case 0:
-		_scene->_sequences.remove(g_sequence_ids[11]);
-		g_sequence_ids[11] = _scene->_sequences.startPingPongCycle(g_sprite_ids[11], false, 3, 6, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 21);
-		_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_delete(g_sequence_ids[11]);
+		g_sequence_ids[11] = kernel_seq_pingpong(g_sprite_ids[11], false, 3, 0, 0, 6);
+		kernel_seq_range(g_sequence_ids[11], 17, 21);
+		kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		g_engine->_soundManager->command(17, 0);
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 3, 2, 0, 0);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 3, 0, 0, 2);
 		break;
 
 	case 72:
-		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
+		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[11], 17, 17);
 		kernel_message_add(quote_string(kernel.quotes, 57), 143, 61, 0x1110, 60, 0, 0);
-		_scene->_sequences.addTimer(120, 73);
+		kernel_timing_trigger(120, 73);
 		break;
 
 	case 73:
@@ -91,16 +91,16 @@ static void room_101_init() {
 	g_sprite_ids[13] = kernel_load_series(kernel_name('x', 8), 0);
 	g_sprite_ids[14] = kernel_load_series(kernel_name('x', 0), 0);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 0, 25);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 4, 0, 1, 0);
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 2, 0);
-	_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 7, 70);
-	g_sequence_ids[4] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[4], false, 10, 0, 0, 60);
-	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 5, 0, 1, 0);
-	g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 10, 0, 2, 0);
-	g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6, 0, 0, 0);
-	g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, 0, 10, 4);
-	g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[10], false, 6, 0, 32, 47);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 25, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 4, 0, 1, 0);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 2, 0);
+	kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 7, 70);
+	g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 10, 60, 0, 0);
+	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 5, 0, 1, 0);
+	g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 10, 0, 2, 0);
+	g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 6, 0, 0, 0);
+	g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 6, 4, 10, 0);
+	g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 6, 47, 32, 0);
 
 	_scene->_hotspots.activate(words_shield_modulator, false);
 	local._panelOpened = false;
@@ -119,15 +119,15 @@ static void room_101_init() {
 		player.x = 161;
 		player.y = 123;
 		player.facing = FACING_NORTHEAST;
-		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
+		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[11], 17, 17);
 		_scene->_hotspots.activate(words_chair, false);
 		local._chairHotspotId = _scene->_dynamicHotspots.add(words_chair, words_sit_in, -1, Common::Rect(159, 84, 159 + 33, 84 + 36));
 		if (previous_room == 112)
 			room_101_say_dang();
 	} else {
-		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[12], 4);
+		g_sequence_ids[12] = kernel_seq_forward(g_sprite_ids[12], false, 6, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[12], 4);
 	}
 
 	kernel.quotes = quote_load(0x31, 0x32, 0x39, 0x36, 0x37, 0x38, 0);
@@ -225,10 +225,10 @@ static void room_101_pre_parser() {
 			case 0:
 				player.ready_to_walk = false;
 				player.commands_allowed = false;
-				_scene->_sequences.remove(g_sequence_ids[11]);
-				g_sequence_ids[11] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
-				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_scene->_sequences.setAnimRange(g_sequence_ids[11], 1, 17);
+				kernel_seq_delete(g_sequence_ids[11]);
+				g_sequence_ids[11] = kernel_seq_backward(g_sprite_ids[11], false, 3, 0, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_range(g_sequence_ids[11], 1, 17);
 				g_engine->_soundManager->command(16, 0);
 				break;
 
@@ -239,8 +239,8 @@ static void room_101_pre_parser() {
 				player.ready_to_walk = true;
 				_scene->_hotspots.activate(71, true);
 				_scene->_dynamicHotspots.remove(local._chairHotspotId);
-				g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 6, 0, 0, 0);
-				_scene->_sequences.setDepth(g_sequence_ids[12], 4);
+				g_sequence_ids[12] = kernel_seq_forward(g_sprite_ids[12], false, 6, 0, 0, 0);
+				kernel_seq_depth(g_sequence_ids[12], 4);
 				break;
 
 			default:
@@ -253,10 +253,10 @@ static void room_101_pre_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			if (player.need_to_walk) {
-				_scene->_sequences.remove(g_sequence_ids[13]);
+				kernel_seq_delete(g_sequence_ids[13]);
 				local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
-				g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[local._shieldSpriteIdx], false, 6, 1, 0, 0);
-				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[local._shieldSpriteIdx], false, 6, 0, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
 			}
@@ -291,11 +291,11 @@ static void room_101_parser() {
 		if (!local._sittingFl) {
 			switch (kernel.trigger) {
 			case 0:
-				_scene->_sequences.remove(g_sequence_ids[12]);
-				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 1);
-				_scene->_sequences.setAnimRange(g_sequence_ids[11], 1, 17);
-				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 10, 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_delete(g_sequence_ids[12]);
+				g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[11], 1, 17);
+				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 10, 1);
+				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				player.command_ready = false;
@@ -306,8 +306,8 @@ static void room_101_parser() {
 				break;
 
 			case 2:
-				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 0, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
+				g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 0);
+				kernel_seq_range(g_sequence_ids[11], 17, 17);
 				player.commands_allowed = true;
 				local._sittingFl = true;
 				_scene->_hotspots.activate(71, false);
@@ -333,16 +333,16 @@ static void room_101_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
-			g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[local._shieldSpriteIdx], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[local._shieldSpriteIdx], false, 6, 0, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[13]);
-			g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[local._shieldSpriteIdx], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
+			kernel_seq_delete(g_sequence_ids[13]);
+			g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[local._shieldSpriteIdx], false, 6, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[13], -2, -2);
 			player.commands_allowed = true;
 			local._panelOpened = true;
 			if (object_is_here(OBJ_SHIELD_MODULATOR))
@@ -358,9 +358,9 @@ static void room_101_parser() {
 
 	if ((player_said_2(take, shield_modulator) || player_said_2(pull, shield_modulator)) && object_is_here(OBJ_SHIELD_MODULATOR)) {
 		inter_give_to_player(OBJ_SHIELD_MODULATOR);
-		_scene->_sequences.remove(g_sequence_ids[13]);
-		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[14], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
+		kernel_seq_delete(g_sequence_ids[13]);
+		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[14], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[13], -2, -2);
 		_scene->_hotspots.activate(words_shield_modulator, false);
 		object_examine(OBJ_SHIELD_MODULATOR, 10120, 0);
 		g_engine->_soundManager->command(22, 0);
@@ -394,24 +394,24 @@ static void room_101_parser() {
 			switch (kernel.trigger) {
 			case 0:
 				player.commands_allowed = false;
-				_scene->_sequences.remove(g_sequence_ids[11]);
-				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 21);
-				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_delete(g_sequence_ids[11]);
+				g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[11], 17, 21);
+				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				g_engine->_soundManager->command(17, 0);
 				break;
 
 			case 1:
-				g_sequence_ids[11] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
-				_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 21);
+				g_sequence_ids[11] = kernel_seq_backward(g_sprite_ids[11], false, 3, 0, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_range(g_sequence_ids[11], 17, 21);
 				break;
 
 			case 2:
-				g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 3, 0, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[11], 17, 17);
-				g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 3, 1, 0, 0);
-				_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 0);
+				kernel_seq_range(g_sequence_ids[11], 17, 17);
+				g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 3, 0, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 			case 3:
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index 5d05b7b1484..9d201937d37 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -68,30 +68,30 @@ static void room_102_init() {
 	g_sprite_ids[11] = kernel_load_series("*RXMRC_8", 0);
 	g_sprite_ids[13] = kernel_load_series(kernel_name('x', 0), 0);
 
-	g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 8, 0, 0, 0);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 170, 0, 1, 6);
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 11, 0, 2, 3);
-	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 4, 0, 1, 0);
-	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 3, 0, 0, 5);
+	g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 8, 0, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 170, 6, 1, 0);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 11, 3, 2, 0);
+	g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 4, 0, 1, 0);
+	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 3, 5, 0, 0);
 
 	if (object_is_here(OBJ_BINOCULARS))
-		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 24, 0, 0, 24);
+		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 24, 24, 0, 0);
 	else
 		_scene->_hotspots.activate(words_binoculars, false);
 
 	_scene->_hotspots.activate(words_burger, false);
 
 	if (global[kMedicineCabinetOpen]) {
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[8], -2, -2);
 	}
 
 	if (previous_room == 101) {
 		player.x = 229;
 		player.y = 109;
 		player.commands_allowed = false;
-		g_sequence_ids[6] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[6], false, 6, 1, 2, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		g_sequence_ids[6] = kernel_seq_backward(g_sprite_ids[6], false, 6, 0, 2, 1);
+		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	} else if (previous_room == 103) {
 		player.x = 47;
 		player.y = 152;
@@ -104,16 +104,16 @@ static void room_102_init() {
 
 	if (previous_room != 106) {
 		if (global[kWaterInAPuddle]) {
-			g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[13], 5);
+			g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 6, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[13], -2, -2);
+			kernel_seq_depth(g_sequence_ids[13], 5);
 		}
 	} else {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 5);
+		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 6, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_depth(g_sequence_ids[13], 5);
 		g_engine->_soundManager->command(24, 0);
 		g_engine->_soundManager->command(28, 0);
 	}
@@ -136,10 +136,10 @@ static void room_102_daemon() {
 		player.commands_allowed = true;
 
 	if (kernel.trigger == 72) {
-		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], -2, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 5);
-		_scene->_sequences.addTimer(48, 90);
+		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[13], -2, -2);
+		kernel_seq_depth(g_sequence_ids[13], 5);
+		kernel_timing_trigger(48, 90);
 	}
 
 	if (kernel.trigger >= 90) {
@@ -152,7 +152,7 @@ static void room_102_daemon() {
 			g_engine->_soundManager->command(24, 0);
 		} else {
 			g_engine->_soundManager->command(23, 0);
-			_scene->_sequences.addTimer(48, kernel.trigger + 1);
+			kernel_timing_trigger(48, kernel.trigger + 1);
 		}
 	}
 
@@ -189,10 +189,10 @@ static void room_102_pre_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			if (player.need_to_walk) {
-				_scene->_sequences.remove(g_sequence_ids[7]);
-				g_sequence_ids[7] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[7], false, 6, 1, 0, 0);
-				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_scene->_sequences.setDepth(g_sequence_ids[7], 15);
+				kernel_seq_delete(g_sequence_ids[7]);
+				g_sequence_ids[7] = kernel_seq_backward(g_sprite_ids[7], false, 6, 0, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_depth(g_sequence_ids[7], 15);
 				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
 			}
@@ -200,7 +200,7 @@ static void room_102_pre_parser() {
 
 		case 1:
 			if (object_is_here(OBJ_BURGER)) {
-				_scene->_sequences.remove(g_sequence_ids[10]);
+				kernel_seq_delete(g_sequence_ids[10]);
 				_scene->_hotspots.activate(words_burger, false);
 			}
 			local._fridgeOpenedFl = false;
@@ -227,12 +227,12 @@ static void room_102_parser() {
 	if (player_said_1(refrigerator) && !local._fridgeOpenedFl) {
 		switch (kernel.trigger) {
 		case 0:
-			g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[7], 15);
-			_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 6, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[7], 15);
+			kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			if (object_is_here(OBJ_BURGER)) {
-				g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[10], false, 7, 0, 0, 0);
-				_scene->_sequences.setDepth(g_sequence_ids[10], 14);
+				g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 7, 0, 0, 0);
+				kernel_seq_depth(g_sequence_ids[10], 14);
 			}
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
@@ -240,15 +240,15 @@ static void room_102_parser() {
 			return;
 
 		case 1:
-			g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[7], -2, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[7], 15);
+			g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 6, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[7], -2, -2);
+			kernel_seq_depth(g_sequence_ids[7], 15);
 			int delay;
 			if (player_said_1(walkto) && !local._fridgeFirstOpenFl)
 				delay = 0;
 			else
 				delay = 48;
-			_scene->_sequences.addTimer(delay, 2);
+			kernel_timing_trigger(delay, 2);
 			player.command_ready = false;
 			return;
 
@@ -307,8 +307,8 @@ static void room_102_parser() {
 	if (player_said_2(walk_through, door)) {
 		switch (kernel.trigger) {
 		case 0:
-			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
@@ -426,19 +426,19 @@ static void room_102_parser() {
 
 		case 1:
 			g_engine->_soundManager->command(24, 0);
-			_scene->_sequences.addTimer(48, 2);
+			kernel_timing_trigger(48, 2);
 			break;
 
 		case 2:
 		case 3:
 		case 4:
 			g_engine->_soundManager->command(23, 0);
-			_scene->_sequences.addTimer(48, kernel.trigger + 1);
+			kernel_timing_trigger(48, kernel.trigger + 1);
 			break;
 
 		case 5:
 			g_engine->_soundManager->command(24, 0);
-			_scene->_sequences.addTimer(48, kernel.trigger + 1);
+			kernel_timing_trigger(48, kernel.trigger + 1);
 			break;
 
 		case 6:
@@ -517,15 +517,15 @@ static void room_102_parser() {
 	if (player_said_2(close, medicine_cabinet) && global[kMedicineCabinetOpen]) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->_sequences.remove(g_sequence_ids[8]);
-			g_sequence_ids[8] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_delete(g_sequence_ids[8]);
+			g_sequence_ids[8] = kernel_seq_backward(g_sprite_ids[8], false, 6, 0, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
 
 		case 1:
-			_scene->_sequences.addTimer(48, 2);
+			kernel_timing_trigger(48, 2);
 			break;
 
 		case 2:
@@ -544,16 +544,16 @@ static void room_102_parser() {
 	if (player_said_2(open, medicine_cabinet) && !global[kMedicineCabinetOpen]) {
 		switch (kernel.trigger) {
 		case 0:
-			g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
 
 		case 1:
-			g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
-			_scene->_sequences.addTimer(48, 2);
+			g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[8], -2, -2);
+			kernel_timing_trigger(48, 2);
 			break;
 
 		case 2:
@@ -577,16 +577,16 @@ static void room_102_parser() {
 	if (player_said_2(take, binoculars) && object_is_here(OBJ_BINOCULARS)) {
 		switch (kernel.trigger) {
 		case 0:
-			g_sequence_ids[11] = _scene->_sequences.startPingPongCycle(g_sprite_ids[11], false, 3, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[11]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[11] = kernel_seq_pingpong(g_sprite_ids[11], false, 3, 0, 0, 1);
+			kernel_seq_player(g_sequence_ids[11], false);
+			kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
 
 		case 1:
 			inter_give_to_player(OBJ_BINOCULARS);
-			_scene->_sequences.remove(g_sequence_ids[9]);
+			kernel_seq_delete(g_sequence_ids[9]);
 			_scene->_hotspots.activate(words_binoculars, false);
 			player.walker_visible = true;
 			player.commands_allowed = true;
@@ -604,7 +604,7 @@ static void room_102_parser() {
 	if (player_said_2(take, burger) && object_is_here(OBJ_BURGER)) {
 		if (kernel.trigger == 0) {
 			object_examine(OBJ_BURGER, 10235, 0);
-			_scene->_sequences.remove(g_sequence_ids[10]);
+			kernel_seq_delete(g_sequence_ids[10]);
 			inter_give_to_player(OBJ_BURGER);
 			_scene->_hotspots.activate(words_burger, false);
 			g_engine->_soundManager->command(22, 0);
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 1f245c52536..78d58c3d979 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -56,35 +56,35 @@ static void room_103_init() {
 	g_sprite_ids[11] = kernel_load_series(kernel_name('c', -1), 0);
 	g_sprite_ids[12] = kernel_load_series("*RXMBD_2", 0);
 	g_sprite_ids[13] = kernel_load_series("*RXMRD_3", 0);
-	g_sprite_ids[15] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 7, 0, 1, 0);
+	g_sprite_ids[15] = kernel_seq_forward(g_sprite_ids[0], false, 7, 0, 1, 0);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 2, 0);
-	_scene->_sequences.setDepth(g_sequence_ids[1], 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 2, 0);
+	kernel_seq_depth(g_sequence_ids[1], 0);
 
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 25);
-	_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 72);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 25, 0, 0);
+	kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 72);
 
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 1, 37);
-	_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 73);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 37, 1, 0);
+	kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 73);
 
-	g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8);
-	g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 6);
-	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6);
-	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6);
+	g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 0);
+	g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 6, 0, 0, 0);
+	g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
+	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 0);
 
 	if (object_is_here(OBJ_TIMER_MODULE))
-		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6);
+		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 6, 0, 0, 0);
 	else
 		_scene._hotspots.activate(371, false);
 
 	if (object_is_here(OBJ_REBREATHER))
-		g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[10], false, 6);
+		g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 6, 0, 0, 0);
 	else
 		_scene._hotspots.activate(289, false);
 
 	if (global[kTurkeyExploded]) {
-		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6);
-		_scene->_sequences.setAnimRange(g_sequence_ids[9], -2, -2);
+		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[9], -2, -2);
 		_scene->_hotspots.activate(362, false);
 	}
 
@@ -95,8 +95,8 @@ static void room_103_init() {
 
 	if (previous_room == 102) {
 		player.commands_allowed = false;
-		g_sequence_ids[6] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		g_sequence_ids[6] = kernel_seq_backward(g_sprite_ids[6], false, 6, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	}
 
 	section_1_music();
@@ -169,8 +169,8 @@ static void room_103_parser() {
 	else if (player_said_2(walk_through, door)) {
 		switch (kernel.trigger) {
 		case 0:
-			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
@@ -188,16 +188,16 @@ static void room_103_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			kernel_load_variant(1);
-			g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 3, 2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[13]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 3, 0, 0, 2);
+			kernel_seq_player(g_sequence_ids[13], false);
+			kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
+			kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[11]);
+			kernel_seq_delete(g_sequence_ids[11]);
 			break;
 
 		case 2:
@@ -217,16 +217,16 @@ static void room_103_parser() {
 	} else if (player_said_2(take, rebreather) && object_is_here(OBJ_REBREATHER)) {
 		switch (kernel.trigger) {
 		case 0:
-			g_sequence_ids[12] = _scene->_sequences.startPingPongCycle(g_sprite_ids[12], false, 3, 2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[12]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[12] = kernel_seq_pingpong(g_sprite_ids[12], false, 3, 0, 0, 2);
+			kernel_seq_player(g_sequence_ids[12], false);
+			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[10]);
+			kernel_seq_delete(g_sequence_ids[10]);
 			break;
 
 		case 2:
@@ -249,18 +249,18 @@ static void room_103_parser() {
 			g_engine->_soundManager->command(31, 0);
 
 		if (kernel.trigger < 2) {
-			g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, kernel.trigger < 1 ? 1 : 0);
+			g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 6, 0, 0, kernel.trigger < 1 ? 1 : 0);
 			if (kernel.trigger) {
 				// Lock the turkey into a permanent "exploded" frame
-				_scene->_sequences.setAnimRange(g_sequence_ids[9], -2, -2);
+				kernel_seq_range(g_sequence_ids[9], -2, -2);
 
 				// Rex says "Gads.."
 				char *msg = quote_string(kernel.quotes, 51);
 				kernel_message_add(msg, 0, 0, 0x1110, 60, 0, 18);
-				_scene->_sequences.addTimer(120, kernel.trigger + 1);
+				kernel_timing_trigger(120, kernel.trigger + 1);
 			} else {
 				// Initial turky explosion
-				_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			}
 		}
 
@@ -294,7 +294,7 @@ static void room_103_parser() {
 
 		case 2:
 			kernel_message_purge();
-			_scene->_sequences.addTimer(1, 3);
+			kernel_timing_trigger(1, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index e82c3e4b80d..383b06a3ae4 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -41,8 +41,8 @@ static Scratch local;
 
 static void room_104_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('h', -1), 0);
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 0, 0, 1);
-	_scene->_sequences.setDepth(g_sequence_ids[1], 8);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 14, 1, 0, 0);
+	kernel_seq_depth(g_sequence_ids[1], 8);
 
 	if (previous_room == 105) {
 		player.x = 302;
@@ -91,17 +91,17 @@ static void room_104_daemon() {
 				player.walker_visible = false;
 				g_sprite_ids[2] = kernel_load_series(kernel_name('a', 0), 0);
 				kernel_new_palette();
-				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], mirrorFl, 7, 1, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(198, 143));
-				_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], mirrorFl, 7, 0, 0, 1);
+				kernel_seq_loc(g_sequence_ids[2], 198, 143);
+				kernel_seq_depth(g_sequence_ids[2], 4);
+				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
-				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], mirrorFl, 7, 0, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(198, 143));
-				_scene->_sequences.setAnimRange(g_sequence_ids[2], -2, -2);
-				_scene->_sequences.addTimer(90, 2);
+				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], mirrorFl, 7, 0, 0, 0);
+				kernel_seq_loc(g_sequence_ids[2], 198, 143);
+				kernel_seq_range(g_sequence_ids[2], -2, -2);
+				kernel_timing_trigger(90, 2);
 				break;
 
 			case 2:
@@ -124,26 +124,26 @@ static void room_104_daemon() {
 				player.walker_visible = false;
 				g_sprite_ids[3] = kernel_load_series(kernel_name('a', 1), 0);
 				kernel_new_palette();
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(198, 143));
-				_scene->_sequences.setDepth(g_sequence_ids[3], 4);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 14);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
+				kernel_seq_loc(g_sequence_ids[3], 198, 143);
+				kernel_seq_depth(g_sequence_ids[3], 4);
+				kernel_seq_range(g_sequence_ids[3], 1, 14);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 5, 1, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(198, 143));
-				_scene->_sequences.setDepth(g_sequence_ids[3], 4);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], 15, 32);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 5, 0, 0, 1);
+				kernel_seq_loc(g_sequence_ids[3], 198, 143);
+				kernel_seq_depth(g_sequence_ids[3], 4);
+				kernel_seq_range(g_sequence_ids[3], 15, 32);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 2:
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 3, 0, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(198, 143));
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], -2, -2);
-				_scene->_sequences.addTimer(90, 3);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 3, 0, 0, 0);
+				kernel_seq_loc(g_sequence_ids[3], 198, 143);
+				kernel_seq_range(g_sequence_ids[3], -2, -2);
+				kernel_timing_trigger(90, 3);
 				break;
 
 			case 3:
@@ -166,19 +166,19 @@ static void room_104_daemon() {
 				player.walker_visible = false;
 				g_sprite_ids[4] = kernel_load_series(kernel_name('a', 2), 0);
 				kernel_new_palette();
-				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 8, 1, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(198, 143));
-				_scene->_sequences.setDepth(g_sequence_ids[4], 4);
-				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 8, 0, 0, 1);
+				kernel_seq_loc(g_sequence_ids[4], 198, 143);
+				kernel_seq_depth(g_sequence_ids[4], 4);
+				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				if (config_file.naughtiness >= STORYMODE_NICE)
-					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 15, 2);
+					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 15, 2);
 				break;
 
 			case 1:
-				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 8, 0, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(198, 143));
-				_scene->_sequences.setAnimRange(g_sequence_ids[4], -2, -2);
-				_scene->_sequences.addTimer(90, 2);
+				g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 8, 0, 0, 0);
+				kernel_seq_loc(g_sequence_ids[4], 198, 143);
+				kernel_seq_range(g_sequence_ids[4], -2, -2);
+				kernel_timing_trigger(90, 2);
 				break;
 
 			case 2:
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index adc5e2c875f..6a44ca71c86 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -41,11 +41,11 @@ static Scratch local;
 static void room_105_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('m', 1), 0);
 	g_sprite_ids[4] = kernel_load_series(kernel_name('f', 4), 0);
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 8, 0, 0, 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 8, 0, 0, 0);
 
 	if (global[kFishIn105]) {
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(48, 144));
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[4], 48, 144);
 
 		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(56, 141), FACING_NORTHWEST);
@@ -83,39 +83,39 @@ static void room_105_daemon() {
 			kernel_seq_init();
 			kernel_new_palette();
 
-			g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[0], 8);
-			_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[0], 8);
+			kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 
 			if (config_file.naughtiness >= STORYMODE_NICE)
-				_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 8, 3);
+				kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 8, 3);
 			break;
 
 		case 1:
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 8);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], -2, -2);
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 9, 1, 0, 0);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], g_sequence_ids[0]);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 8);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 5, 7);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 0);
+			kernel_seq_depth(g_sequence_ids[3], 8);
+			kernel_seq_range(g_sequence_ids[3], -2, -2);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 9, 0, 0, 1);
+			kernel_seq_timeout(g_sequence_ids[0], g_sequence_ids[2]);
+			kernel_seq_depth(g_sequence_ids[2], 8);
+			kernel_seq_range(g_sequence_ids[2], 5, 7);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 9, 0, 0, 0);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 8);
-			_scene->_sequences.addTimer(90, 3);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 9, 0, 0, 0);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_seq_depth(g_sequence_ids[2], 8);
+			kernel_timing_trigger(90, 3);
 		}
 		break;
 
 		case 3:
 			text_show(10507);
 			kernel.force_restart = true;
-			_scene->_sequences.addTimer(90, 4);
+			kernel_timing_trigger(90, 4);
 			break;
 
 		default:
@@ -153,7 +153,7 @@ static void room_105_parser() {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
 		} else {
-			_scene->_sequences.remove(g_sequence_ids[4]);
+			kernel_seq_delete(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
 			global[kFishIn105] = false;
 			object_examine(OBJ_DEAD_FISH, 802, 0);
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index c3bdb21c072..b74041de85b 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -51,13 +51,13 @@ static void room_106_init() {
 	}
 
 	g_sprite_ids[2] = kernel_load_series(kernel_name('G', -1), 0);
-	g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 21, 0, 0, 0);
+	g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 21, 0, 0, 0);
 	g_sprite_ids[4] = kernel_load_series(kernel_name('I', -1), 0);
-	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 32, 47);
+	g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 47, 32, 0);
 
 	if (previous_room == 102) {
-		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 1, 4, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 4, 1);
+		kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		player.facing = FACING_EAST;
@@ -82,9 +82,9 @@ static void room_106_init() {
 	}
 
 	if (previous_room != 102) {
-		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[0], -2, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[0], 14);
+		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[0], -2, -2);
+		kernel_seq_depth(g_sequence_ids[0], 14);
 	}
 
 	local._backToShipFl = false;
@@ -97,15 +97,15 @@ static void room_106_init() {
 
 static void room_106_daemon() {
 	if (kernel.trigger == 70) {
-		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[0], -2, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[0], 14);
+		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[0], -2, -2);
+		kernel_seq_depth(g_sequence_ids[0], 14);
 
 		if (!player_has(OBJ_REBREATHER) && !kernel.teleported_in) {
 			kernel_run_animation(kernel_full_name(106, 'A', -1, "", EXT_AA), 75);
 		} else {
-			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 28, 71);
+			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 4, 0, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 28, 71);
 		}
 	}
 
@@ -161,7 +161,7 @@ static void room_106_daemon() {
 		if (msgId >= 0) {
 			int nextTrigger = kernel.trigger + 1;
 			kernel_message_add(quote_string(kernel.quotes, msgId), 15, local._positionY, 0x1110, 360, 0, 0);
-			_scene->_sequences.addTimer(150, nextTrigger);
+			kernel_timing_trigger(150, nextTrigger);
 			local._positionY += 14;
 		}
 	}
@@ -170,14 +170,14 @@ static void room_106_daemon() {
 		if (!local._shadowFl) {
 			if (player.x < 204) {
 				local._shadowFl = true;
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 4, 1, 0, 0);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 44, 73);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 4, 0, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 44, 73);
 			}
 		} else if (kernel.trigger == 73)
 			player.walker_visible = false;
 		else if (kernel.trigger == 72)
-			_scene->_sequences.addTimer(24, 74);
+			kernel_timing_trigger(24, 74);
 		else if (kernel.trigger == 74)
 			new_room = 102;
 	}
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index 6143fbf7010..3b1d6bd6237 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -44,17 +44,17 @@ static void room_107_init() {
 
 	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", EXT_SS), 0);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 0, 0, 7);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 17, 0, 0, 13);
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 19, 0, 0, 9);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 14, 7, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 17, 13, 0, 0);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 19, 9, 0, 0);
 
 	for (int i = 1; i < 4; i++)
-		_scene->_sequences.setDepth(g_sequence_ids[i], 0);
+		kernel_seq_depth(g_sequence_ids[i], 0);
 
 	if (global[kFishIn107]) {
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(68, 151));
-		_scene->_sequences.setDepth(g_sequence_ids[4], 1);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[4], 68, 151);
+		kernel_seq_depth(g_sequence_ids[4], 1);
 		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(78, 135), FACING_SOUTHWEST);
 	}
@@ -74,10 +74,10 @@ static void room_107_init() {
 
 	if (((previous_room == 105) || (previous_room == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
 		g_sprite_ids[0] = kernel_load_series(kernel_full_name(105, 'R', 1, "", EXT_SS), 0);
-		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], true, 4, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[0], Common::Point(270, 150));
-		_scene->_sequences.setMotion(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[0], 2);
+		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], true, 4, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[0], 270, 150);
+		kernel_seq_motion(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
+		kernel_seq_depth(g_sequence_ids[0], 2);
 		_scene->_dynamicHotspots.add(words_manta_ray, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
 	}
 
@@ -116,7 +116,7 @@ static void room_107_parser() {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
 		} else {
-			_scene->_sequences.remove(g_sequence_ids[4]);
+			kernel_seq_delete(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
 			global[kFishIn107] = false;
 			object_examine(OBJ_DEAD_FISH, 802, 0);
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index 5841eb671ba..29c3ef44a5b 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -41,17 +41,17 @@ static void room_108_init() {
 	g_sprite_ids[3] = kernel_load_series(kernel_name('X', 3), 0);
 	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", EXT_SS), 0);
 
-	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 13, 0, 0, 7);
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 16, 0, 0, 9);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 17, 0, 0, 3);
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 14, 0, 0, 13);
+	g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 13, 7, 0, 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 16, 9, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 17, 3, 0, 0);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 14, 13, 0, 0);
 
 	for (int i = 0; i <= 3; i++)
-		_scene->_sequences.setDepth(g_sequence_ids[i], 0);
+		kernel_seq_depth(g_sequence_ids[i], 0);
 
 	if (global[kFishIn108]) {
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(41, 109));
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[4], 41, 109);
 		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(41, 109), FACING_NORTHWEST);
 	}
@@ -87,7 +87,7 @@ static void room_108_parser() {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
 		} else {
-			_scene->_sequences.remove(g_sequence_ids[4]);
+			kernel_seq_delete(g_sequence_ids[4]);
 			inter_give_to_player(OBJ_DEAD_FISH);
 			global[kFishIn108] = false;
 			object_examine(OBJ_DEAD_FISH, 10808, 0);
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index de4e359e2a5..69ca84f8617 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -75,9 +75,9 @@ static void room_109_init() {
 	}
 
 	if (!global[kHoovicAlive]) {
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 4);
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], -2, -2);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 1);
+		kernel_seq_depth(g_sequence_ids[6], 4);
+		kernel_seq_range(g_sequence_ids[6], -2, -2);
 
 		int idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(256, 57, 267, 87));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
@@ -91,8 +91,8 @@ static void room_109_init() {
 		kernel_load_variant(1);
 
 	if (object_is_here(OBJ_BURGER)) {
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], -2, -2);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[3], -2, -2);
 		int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
 	} else if (kernel.teleported_in)
@@ -113,11 +113,11 @@ static void room_109_init() {
 		g_sprite_ids[10] = kernel_load_series(kernel_full_name(105, 'F', 1, "", EXT_SS), 0);
 		g_sprite_ids[9] = kernel_load_series(kernel_name('H', 1), 0);
 
-		g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], true, 4, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[10], 5);
-		_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(126, 39));
-		_scene->_sequences.setMotion(g_sequence_ids[10], 0, 200, 0);
-		_scene->_sequences.setScale(g_sequence_ids[10], 80);
+		g_sequence_ids[10] = kernel_seq_pingpong(g_sprite_ids[10], true, 4, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[10], 5);
+		kernel_seq_loc(g_sequence_ids[10], 126, 39);
+		kernel_seq_motion(g_sequence_ids[10], 0, 200, 0);
+		kernel_seq_scale(g_sequence_ids[10], 80);
 		player.commands_allowed = false;
 	}
 
@@ -128,10 +128,10 @@ static void room_109_daemon() {
 	if (local._beforeEatingRex) {
 		if (!local._eatingRex) {
 			if (player.x > 205) {
-				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 1, 0, 0);
-				_scene->_sequences.setDepth(g_sequence_ids[4], 4);
-				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 70);
-				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+				g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 1);
+				kernel_seq_depth(g_sequence_ids[4], 4);
+				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 70);
+				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 
 				local._eatingRex = true;
 				g_engine->_soundManager->command(34, 0);
@@ -169,22 +169,22 @@ static void room_109_daemon() {
 		local._hungryFl = true;
 	}
 
-	if (local._eatingFirstFish && (_scene->_sequences[g_sequence_ids[10]]._position.x >= 178)) {
-		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 4, 1, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 4);
-		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_SPRITE, 29, 72);
-		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 29, 73);
-		_scene->_sequences.updateTimeout(g_sequence_ids[10], g_sequence_ids[9]);
+	if (local._eatingFirstFish && (sequence_list[g_sequence_ids[10]].x >= 178)) {
+		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 4, 0, 0, 1);
+		kernel_seq_depth(g_sequence_ids[9], 4);
+		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_SPRITE, 29, 72);
+		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 29, 73);
+		kernel_seq_timeout(g_sequence_ids[9], g_sequence_ids[10]);
 		local._eatingFirstFish = false;
 		player.commands_allowed = true;
 		g_engine->_soundManager->command(34, 0);
 	}
 
 	if (kernel.trigger == 72)
-		_scene->_sequences.remove(g_sequence_ids[10]);
+		kernel_seq_delete(g_sequence_ids[10]);
 
 	if (kernel.trigger == 73) {
-		_scene->_sequences.remove(g_sequence_ids[9]);
+		kernel_seq_delete(g_sequence_ids[9]);
 		matte_deallocate_series(g_sprite_ids[9], true);
 		matte_deallocate_series(g_sprite_ids[10], true);
 
@@ -239,9 +239,9 @@ static void room_109_parser() {
 						local._rexThrowingObject = true;
 						local._hoovicDifficultFl = false;
 						inter_move_object(local._throwingObjectId, NOWHERE);
-						g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 4, 1, 0, 0);
-						_scene->_sequences.setMsgLayout(g_sequence_ids[0]);
-						_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+						g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 4, 0, 0, 1);
+						kernel_seq_player(g_sequence_ids[0], false);
+						kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 						player.walker_visible = false;
 						player.commands_allowed = false;
 
@@ -268,24 +268,24 @@ static void room_109_parser() {
 						local._hoovicTrigger = 4;
 						switch (local._throwingObjectId) {
 						case OBJ_BURGER:
-							g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, (local._hoovicDifficultFl ? 4 : 6), 1, 0, 0);
-							_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, (local._hoovicDifficultFl ? 4 : 6), 0, 0, 1);
+							kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 2);
 							if (local._hoovicDifficultFl) {
-								_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 30);
-								_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+								kernel_seq_range(g_sequence_ids[3], 1, 30);
+								kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 							} else {
-								_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
-								_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+								kernel_seq_range(g_sequence_ids[3], 1, 4);
+								kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 								local._hoovicTrigger = 3;
 							}
 							break;
 						case OBJ_DEAD_FISH:
-							g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
-							_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 4, 0, 0, 1);
+							kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 2);
 							break;
 						case OBJ_STUFFED_FISH:
-							g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 4, 1, 0, 0);
-							_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 4, 0, 0, 1);
+							kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 2);
 							local._hoovicTrigger = 3;
 							break;
 						default:
@@ -295,12 +295,12 @@ static void room_109_parser() {
 
 					case 2:
 						if (local._hoovicDifficultFl)
-							g_sequence_ids[8] = _scene->_sequences.startPingPongCycle(g_sprite_ids[8], false, 4, 2, 0, 0);
+							g_sequence_ids[8] = kernel_seq_pingpong(g_sprite_ids[8], false, 4, 0, 0, 2);
 						else
-							g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 4, 1, 0, 0);
+							g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 4, 0, 0, 1);
 
-						_scene->_sequences.setDepth(g_sequence_ids[8], 4);
-						_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, local._hoovicTrigger);
+						kernel_seq_depth(g_sequence_ids[8], 4);
+						kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, local._hoovicTrigger);
 						g_engine->_soundManager->command(34, 0);
 						break;
 
@@ -312,9 +312,9 @@ static void room_109_parser() {
 
 					case 4:
 						if (!global[kHoovicAlive]) {
-							g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 1, 0, 0);
-							_scene->_sequences.setDepth(g_sequence_ids[6], 4);
-							_scene->_sequences.setAnimRange(g_sequence_ids[6], -2, -2);
+							g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 1);
+							kernel_seq_depth(g_sequence_ids[6], 4);
+							kernel_seq_range(g_sequence_ids[6], -2, -2);
 							int idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(256, 57, 256 + 12, 57 + 31));
 							_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
 							idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(242, 79, 242 + 24, 79 + 12));
@@ -348,11 +348,11 @@ static void room_109_parser() {
 							}
 						}
 						kernel_abort_animation(0);
-						_scene->_sequences.remove(g_sequence_ids[8]);
+						kernel_seq_delete(g_sequence_ids[8]);
 						matte_deallocate_series(g_sprite_ids[8], true);
 						_scene->_spriteSlots.clear();
 						_scene->_spriteSlots.fullRefresh();
-						_scene->_sequences.scan();
+						kernel_seq_full_update();
 						if (player.walker_visible) {
 							player.sprite_changed = true;
 							player_set_image();
@@ -365,29 +365,29 @@ static void room_109_parser() {
 					case 5:
 					{
 						inter_move_object(OBJ_BURGER, room_id);
-						g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
-						_scene->_sequences.setAnimRange(g_sequence_ids[3], 30, 30);
+						g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 0);
+						kernel_seq_range(g_sequence_ids[3], 30, 30);
 						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
-						_scene->_sequences.addTimer(65, 6);
+						kernel_timing_trigger(65, 6);
 					}
 					break;
 
 					case 6:
 					{
-						_scene->_sequences.remove(g_sequence_ids[3]);
-						g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
-						_scene->_sequences.setAnimRange(g_sequence_ids[3], 31, 46);
+						kernel_seq_delete(g_sequence_ids[3]);
+						g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
+						kernel_seq_range(g_sequence_ids[3], 31, 46);
 						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
-						_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
+						kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
 					}
 					break;
 
 					case 7:
 					{
-						_scene->_sequences.remove(g_sequence_ids[3]);
-						g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
+						kernel_seq_delete(g_sequence_ids[3]);
+						g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
 						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
 						text_show(10915);
@@ -395,8 +395,8 @@ static void room_109_parser() {
 					break;
 
 					case 8:
-						g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
-						_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, 16);
+						g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 0, 0, 1);
+						kernel_seq_range(g_sequence_ids[3], 5, 16);
 						break;
 
 					default:
@@ -412,7 +412,7 @@ static void room_109_parser() {
 	}
 
 	if (player_said_2(take, burger) && object_is_here(OBJ_BURGER)) {
-		_scene->_sequences.remove(g_sequence_ids[3]);
+		kernel_seq_delete(g_sequence_ids[3]);
 		inter_give_to_player(OBJ_BURGER);
 	} else if (player_said_2(look, ocean_floor))
 		text_show(10901);
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 33394398e12..aa451ba23dc 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -51,10 +51,10 @@ static void room_110_init() {
 		player.y = 71;
 		player.facing = FACING_EAST;
 
-		g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+		g_sequence_ids[0] = kernel_seq_stamp(g_sprite_ids[0], false, 1);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 
 		local._crabsFl = true;
 
@@ -96,15 +96,15 @@ static void room_110_pre_parser() {
 	if (local._crabsFl) {
 		local._crabsFl = false;
 
-		_scene->_sequences.remove(g_sequence_ids[0]);
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		_scene->_sequences.remove(g_sequence_ids[2]);
-		_scene->_sequences.remove(g_sequence_ids[3]);
+		kernel_seq_delete(g_sequence_ids[0]);
+		kernel_seq_delete(g_sequence_ids[1]);
+		kernel_seq_delete(g_sequence_ids[2]);
+		kernel_seq_delete(g_sequence_ids[3]);
 
-		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 16, 1, 0, 0);
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 16, 1, 0, 0);
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 16, 1, 0, 0);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 16, 1, 0, 0);
+		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 16, 0, 0, 1);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 16, 0, 0, 1);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 16, 0, 0, 1);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 16, 0, 0, 1);
 
 		int idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index 009dd89988c..8158c2cd353 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -50,16 +50,16 @@ static void room_111_init() {
 	g_sprite_ids[4] = kernel_load_series(kernel_name('B', 1), 0);
 	g_sprite_ids[5] = kernel_load_series(kernel_name('B', 2), 0);
 
-	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 8, 0, 0, 0);
-	_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 9, 73);
-	_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 13, 73);
+	g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 8, 0, 0, 0);
+	kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 9, 73);
+	kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 13, 73);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 0, 0);
-	_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 71, 71);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 0, 0, 0);
+	kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 71, 71);
 
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 0, 0, 0);
-	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
-	g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 0);
+	g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
+	g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
 
 	int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
@@ -105,26 +105,26 @@ static void room_111_daemon() {
 
 	if ((kernel.trigger == 71) && !local._stampedFl) {
 		local._stampedFl = true;
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 18, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 18, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 	}
 
 	if (kernel.trigger == 72) {
-		_scene->_sequences.remove(g_sequence_ids[2]);
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 20);
+		kernel_seq_delete(g_sequence_ids[2]);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 20);
 	}
 
 	if (!local._launch1Fl && (g_engine->getRandomNumber(1, 5000) == 1)) {
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 5, 1, 0, 0);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 5, 0, 0, 1);
 		local._launch1Fl = true;
 		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 	}
 
 	if (!local._launched2Fl && (g_engine->getRandomNumber(1, 30000) == 1)) {
-		_scene->_sequences.remove(g_sequence_ids[5]);
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 5, 1, 0, 0);
+		kernel_seq_delete(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 5, 0, 0, 1);
 		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 		local._launched2Fl = true;
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index 732079a4048..8ca89aeb99a 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -39,9 +39,9 @@ static void room_112_init() {
 	g_sprite_ids[2] = kernel_load_series(kernel_name('X', 2), 0);
 	g_sprite_ids[3] = kernel_load_series(kernel_name('X', 5), 0);
 
-	g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 10, 0, 17, 20);
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 0, 0, 0);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 3, 0);
+	g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 10, 20, 17, 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 4, 0, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 3, 0);
 
 	player.commands_allowed = false;
 	player.walker_visible = false;
@@ -61,9 +61,9 @@ static void room_112_daemon() {
 	}
 
 	if (kernel.trigger == 70) {
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 3, 0, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 1);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 11, 0, 3);
+		kernel_seq_depth(g_sequence_ids[3], 1);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (kernel.trigger == 71) {
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index 010ebcf60f3..40ecd965c3f 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -45,12 +45,12 @@ static void room_201_init() {
 	g_sprite_ids[3] = kernel_load_series(kernel_name('m', -1), 0);
 	g_sprite_ids[4] = kernel_load_series(kernel_name('b', -1), 0);
 	g_sprite_ids[5] = kernel_load_series("*SC002Z1", 0);
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 1, 0);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 0, 0, 50);
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 4, 0, 0, 0);
-	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
-	_scene->_sequences.setDepth(g_sequence_ids[4], 8);
-	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(185, 46));
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 1, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 50, 0, 0);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 4, 0, 0, 0);
+	g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
+	kernel_seq_depth(g_sequence_ids[4], 8);
+	kernel_seq_loc(g_sequence_ids[4], 185, 46);
 
 	int idx = _scene->_dynamicHotspots.add(words_birds, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 81), FACING_NORTH);
@@ -103,10 +103,10 @@ static void room_201_init() {
 		g_sprite_ids[7] = kernel_load_series(kernel_name('a', 1), 0);
 		kernel.quotes = quote_load(90, 91, 0);
 		player.commands_allowed = false;
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], -1, 12);
-		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 12, 70);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 7, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[6], -1, 12);
+		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 12, 70);
+		kernel_seq_depth(g_sequence_ids[6], 1);
 		local._pterodactylFlag = false;
 		player_walk(157, 143, FACING_NORTH);
 		pal_change_color(252, 45, 63, 45);
@@ -123,25 +123,25 @@ static void room_201_init() {
 
 static void room_201_daemon() {
 	if (local._pterodactylFlag && (g_engine->getRandomNumber(5000) == 9)) {
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 5, 1, 6, 0);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 5, 0, 6, 1);
 		int idx = _scene->_dynamicHotspots.add(words_swooping_creature, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(270, 80), FACING_EAST);
-		_scene->_sequences.setDepth(g_sequence_ids[5], 8);
+		kernel_seq_depth(g_sequence_ids[5], 8);
 		g_engine->_soundManager->command(14, 0);
 		local._pterodactylFlag = false;
 	}
 
 	if (kernel.trigger == 70) {
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 9, 1, 0, 0);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 9, 0, 0, 1);
 		player.walker_visible = false;
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], 12, 16);
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 9, 1, 0, 0);
+		kernel_seq_range(g_sequence_ids[6], 12, 16);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 9, 0, 0, 1);
 		g_engine->_soundManager->command(42, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 1);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 3, 81);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+		kernel_seq_depth(g_sequence_ids[6], 1);
+		kernel_seq_depth(g_sequence_ids[7], 1);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 3, 81);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 	}
 
 	if (kernel.trigger == 81) {
@@ -149,26 +149,26 @@ static void room_201_daemon() {
 	}
 
 	if (kernel.trigger == 71) {
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 9, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], -2, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 1);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 9, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[7], -2, -2);
+		kernel_seq_depth(g_sequence_ids[7], 1);
 	}
 
 	if (kernel.trigger == 73) {
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 9, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], 17, -2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 9, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[6], 17, -2);
+		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+		kernel_seq_depth(g_sequence_ids[6], 1);
 	}
 
 	if (kernel.trigger == 74) {
 		g_engine->_soundManager->command(40, 0);
 
 		kernel_message_add(quote_string(kernel.quotes, 91), 125, 56, 0xFDFC, 180, 82, 32);
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 9, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 1);
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], -2, -2);
-		_scene->_sequences.addTimer(180, 75);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 9, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[6], 1);
+		kernel_seq_range(g_sequence_ids[6], -2, -2);
+		kernel_timing_trigger(180, 75);
 	}
 
 	if (kernel.trigger == 75) {
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index f7b413ebaf9..5bd26167e2d 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -66,25 +66,25 @@ static void room_202_init() {
 	g_sprite_ids[9] = kernel_load_series(kernel_name('a', 1), 0);
 	g_sprite_ids[11] = kernel_load_series(kernel_name('a', 2), 0);
 
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 0);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
-	_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(149, 113));
-	_scene->_sequences.setDepth(g_sequence_ids[2], 10);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
+	kernel_seq_loc(g_sequence_ids[2], 149, 113);
+	kernel_seq_depth(g_sequence_ids[2], 10);
 	int idx = _scene->_dynamicHotspots.add(words_skull, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(153, 97), FACING_SOUTH);
 
 	if (!(global[kBone202Status] & 1)) {
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(130, 108));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 10);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[1], 130, 108);
+		kernel_seq_depth(g_sequence_ids[1], 10);
 		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(132, 97), FACING_SOUTH);
 	}
 
 	if (!(global[kBone202Status] & 2)) {
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[6], Common::Point(166, 110));
-		_scene->_sequences.setDepth(g_sequence_ids[6], 10);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[6], 166, 110);
+		kernel_seq_depth(g_sequence_ids[6], 10);
 		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(165, 99), FACING_SOUTH);
 	}
@@ -103,8 +103,8 @@ static void room_202_init() {
 	}
 
 	if (global[kLadderBroken]) {
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[5], 6);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[5], 6);
 		_scene->_hotspots.activate(words_ladder, false);
 		idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
@@ -115,7 +115,7 @@ static void room_202_init() {
 
 	if (previous_room == RETURNING_FROM_DIALOG) {
 		if (local._waitingMeteoFl) {
-			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+			g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 			player.walker_visible = false;
 		}
 	} else {
@@ -134,19 +134,19 @@ static void room_202_init() {
 		local._ladderTopFl = (global[kMeteorologistWatch] == METEOROLOGIST_TOWER);
 
 		if (local._ladderTopFl) {
-			g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 8);
-			_scene->_sequences.setDepth(g_sequence_ids[10], 1);
+			g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[9], true, 8);
+			kernel_seq_depth(g_sequence_ids[10], 1);
 
-			_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(247, 82));
+			kernel_seq_loc(g_sequence_ids[10], 247, 82);
 			player.x = 246;
 			player.y = 124;
 			player.facing = FACING_NORTH;
 			global[kTeleporterUnderstood] = true;
 		} else {
-			g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 6);
-			_scene->_sequences.setDepth(g_sequence_ids[10], 1);
+			g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[9], false, 6);
+			kernel_seq_depth(g_sequence_ids[10], 1);
 
-			_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
+			kernel_seq_loc(g_sequence_ids[10], 172, 123);
 			player.x = 171;
 			player.y = 122;
 			player.facing = FACING_NORTH;
@@ -157,9 +157,9 @@ static void room_202_init() {
 	} else {
 		if (local._ladderTopFl) {
 			player.walker_visible = false;
-			_scene->_sequences.startCycle(g_sequence_ids[9], true, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[9], 1);
-			_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
+			kernel_seq_stamp(g_sequence_ids[9], true, 1);
+			kernel_seq_depth(g_sequence_ids[9], 1);
+			kernel_seq_loc(g_sequence_ids[9], 247, 82);
 			player.x = 246;
 			player.y = 124;
 			player.facing = FACING_NORTH;
@@ -263,10 +263,10 @@ static void room_202_daemon() {
 				player2.words[1] = words_binoculars;
 				player2.words[2] = words_strange_device;
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_PARSER;
-				_scene->_sequences.addTimer(2 * 60, 2);
+				kernel_timing_trigger(2 * 60, 2);
 				local._meteorologistSpecial = true;
 			} else if (global[kMeteorologistWatch] == METEOROLOGIST_TOWER) {
-				_scene->_sequences.addTimer(2 * 60, 90);
+				kernel_timing_trigger(2 * 60, 90);
 			}
 		}
 
@@ -276,24 +276,24 @@ static void room_202_daemon() {
 	switch (kernel.trigger) {
 	case 90:
 		g_engine->_soundManager->command(41, 0);
-		_scene->_sequences.remove(g_sequence_ids[10]);
-		g_sequence_ids[9] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[9], true, 6, 1, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
-		_scene->_sequences.setDepth(g_sequence_ids[9], 1);
-		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
+		kernel_seq_delete(g_sequence_ids[10]);
+		g_sequence_ids[9] = kernel_seq_backward(g_sprite_ids[9], true, 6, 0, 0, 1);
+		kernel_seq_loc(g_sequence_ids[9], 247, 82);
+		kernel_seq_depth(g_sequence_ids[9], 1);
+		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
 		break;
 	case 91:
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 1);
-		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
-		_scene->_sequences.setDepth(g_sequence_ids[9], 1);
-		_scene->_sequences.addTimer(60, 92);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], true, 1);
+		kernel_seq_loc(g_sequence_ids[9], 247, 82);
+		kernel_seq_depth(g_sequence_ids[9], 1);
+		kernel_timing_trigger(60, 92);
 		break;
 	case 92:
 	{
-		_scene->_sequences.remove(g_sequence_ids[9]);
-		g_sequence_ids[11] = _scene->_sequences.addSpriteCycle(g_sprite_ids[11], false, 6, 1, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[11], 1);
-		_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
+		kernel_seq_delete(g_sequence_ids[9]);
+		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 6, 0, 0, 1);
+		kernel_seq_depth(g_sequence_ids[11], 1);
+		kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
 		kernel_message_purge();
 		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 98), 0, -65, 0x1110, 60, 0, 32);
 		kernel_message_attach(msgIndex, g_sequence_ids[11]);
@@ -302,12 +302,12 @@ static void room_202_daemon() {
 	case 93:
 	{
 		global[kLadderBroken] = false;
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 0, 0, 0);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 0);
 		_scene->_hotspots.activate(words_ladder, false);
 		int idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
-		_scene->_sequences.updateTimeout(g_sequence_ids[11], g_sequence_ids[5]);
-		_scene->_sequences.updateTimeout(-1, g_sequence_ids[11]);
+		kernel_seq_timeout(g_sequence_ids[5], g_sequence_ids[11]);
+		kernel_seq_timeout(g_sequence_ids[11], -1);
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		local._ladderTopFl = false;
@@ -434,12 +434,12 @@ static void room_202_pre_parser() {
 			g_engine->_soundManager->command(29, 0);
 			player.ready_to_walk = false;
 			player.commands_allowed = false;
-			_scene->_sequences.remove(g_sequence_ids[9]);
-			g_sequence_ids[8] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[8], 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_delete(g_sequence_ids[9]);
+			g_sequence_ids[8] = kernel_seq_backward(g_sprite_ids[8], false, 6, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[8], 1);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 		} else if (kernel.trigger == 1) {
-			_scene->_sequences.updateTimeout(-1, g_sequence_ids[8]);
+			kernel_seq_timeout(g_sequence_ids[8], -1);
 			_scene->_dynamicHotspots.remove(local._ladderHotspotId);
 			player.walker_visible = true;
 			player.ready_to_walk = true;
@@ -486,18 +486,18 @@ static void room_202_parser() {
 			} else {
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				g_sequence_ids[7] = _scene->_sequences.startPingPongCycle(g_sprite_ids[7], false, 3, 2, 0, 0);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[7]);
-				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[7] = kernel_seq_pingpong(g_sprite_ids[7], false, 3, 0, 0, 2);
+				kernel_seq_player(g_sequence_ids[7], false);
+				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 		case 1:
 			if (Common::Point(player.x, player.y) == Common::Point(132, 97)) {
-				_scene->_sequences.remove(g_sequence_ids[1]);
+				kernel_seq_delete(g_sequence_ids[1]);
 				global[kBone202Status] |= BONE_202_LEFT_GONE;
 			} else {
-				_scene->_sequences.remove(g_sequence_ids[6]);
+				kernel_seq_delete(g_sequence_ids[6]);
 				global[kBone202Status] |= BONE_202_RIGHT_GONE;
 			}
 			break;
@@ -529,16 +529,16 @@ static void room_202_parser() {
 
 			local._ladderHotspotId = _scene->_dynamicHotspots.add(words_ladder, words_climb_down, -1, Common::Rect(241, 68, 241 + 12, 68 + 54));
 			_scene->_dynamicHotspots.setPosition(local._ladderHotspotId, Common::Point(246, 124), FACING_NORTH);
-			g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[8], 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[8], 1);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 		case 1:
 		{
-			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 1);
-			_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
-			_scene->_sequences.setDepth(g_sequence_ids[9], 1);
-			_scene->_sequences.updateTimeout(g_sequence_ids[8], g_sequence_ids[9]);
+			g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], true, 1);
+			kernel_seq_loc(g_sequence_ids[9], 247, 82);
+			kernel_seq_depth(g_sequence_ids[9], 1);
+			kernel_seq_timeout(g_sequence_ids[9], g_sequence_ids[8]);
 			local._ladderTopFl = true;
 			player.commands_allowed = true;
 			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 97), 248, 15, 0x1110, 60, 0, 32);
@@ -556,37 +556,37 @@ static void room_202_parser() {
 				local._toTeleportFl = true;
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[10], 1, 6);
-				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
-				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[10]);
-				_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[9], false, 6, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[10], 1, 6);
+				kernel_seq_loc(g_sequence_ids[10], 172, 123);
+				kernel_seq_depth(g_sequence_ids[10], 1);
+				kernel_seq_timeout(g_sequence_ids[10], -1);
+				kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 			case 1:
-				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 6);
-				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
-				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
+				g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[9], false, 6);
+				kernel_seq_depth(g_sequence_ids[10], 1);
+				kernel_seq_loc(g_sequence_ids[10], 172, 123);
 				if ((kernel_anim[0].anim != nullptr)) {
 					local._waitingMeteoFl = true;
 					global[kMeteorologistWatch] = METEOROLOGIST_GROUND;
 				} else {
-					_scene->_sequences.addTimer(120, 2);
+					kernel_timing_trigger(120, 2);
 				}
 				break;
 			case 2:
 				if ((kernel_anim[0].anim == nullptr) && !local._meteorologistSpecial) {
 					text_show(20222);
 				}
-				_scene->_sequences.remove(g_sequence_ids[10]);
-				g_sequence_ids[10] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
-				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
-				_scene->_sequences.setAnimRange(g_sequence_ids[10], 1, 6);
-				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(172, 123));
-				_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_delete(g_sequence_ids[10]);
+				g_sequence_ids[10] = kernel_seq_backward(g_sprite_ids[9], false, 6, 0, 0, 1);
+				kernel_seq_depth(g_sequence_ids[10], 1);
+				kernel_seq_range(g_sequence_ids[10], 1, 6);
+				kernel_seq_loc(g_sequence_ids[10], 172, 123);
+				kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 			case 3:
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[10]);
+				kernel_seq_timeout(g_sequence_ids[10], -1);
 				player.commands_allowed = true;
 				player.walker_visible = true;
 				break;
@@ -599,19 +599,19 @@ static void room_202_parser() {
 			case 0:
 				local._toTeleportFl = true;
 				player.commands_allowed = false;
-				_scene->_sequences.remove(g_sequence_ids[9]);
-				g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], true, 6, 1, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
-				_scene->_sequences.setDepth(g_sequence_ids[9], 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_delete(g_sequence_ids[9]);
+				g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], true, 6, 0, 0, 1);
+				kernel_seq_loc(g_sequence_ids[9], 247, 82);
+				kernel_seq_depth(g_sequence_ids[9], 1);
+				kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 			case 1:
-				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[9], true, -2);
-				_scene->_sequences.setPosition(g_sequence_ids[10], Common::Point(247, 82));
-				_scene->_sequences.setDepth(g_sequence_ids[10], 1);
+				g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[9], true, -2);
+				kernel_seq_loc(g_sequence_ids[10], 247, 82);
+				kernel_seq_depth(g_sequence_ids[10], 1);
 				if ((kernel_anim[0].anim != nullptr)) {
 					if (kernel_anim[0].frame > 200) {
-						_scene->_sequences.addTimer(120, 2);
+						kernel_timing_trigger(120, 2);
 					} else {
 						local._waitingMeteoFl = true;
 						global[kMeteorologistWatch] = METEOROLOGIST_GONE;
@@ -625,23 +625,23 @@ static void room_202_parser() {
 						}
 					}
 				} else {
-					_scene->_sequences.addTimer(120, 2);
+					kernel_timing_trigger(120, 2);
 				}
 				break;
 			case 2:
 				if ((kernel_anim[0].anim == nullptr))
 					text_show(20222);
 				local._meteorologistSpecial = false;
-				_scene->_sequences.remove(g_sequence_ids[10]);
-				g_sequence_ids[9] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
-				_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
-				_scene->_sequences.setDepth(g_sequence_ids[9], 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_delete(g_sequence_ids[10]);
+				g_sequence_ids[9] = kernel_seq_backward(g_sprite_ids[9], false, 6, 0, 0, 1);
+				kernel_seq_loc(g_sequence_ids[9], 247, 82);
+				kernel_seq_depth(g_sequence_ids[9], 1);
+				kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 			case 3:
-				g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], true, 1);
-				_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(247, 82));
-				_scene->_sequences.setDepth(g_sequence_ids[9], 1);
+				g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], true, 1);
+				kernel_seq_loc(g_sequence_ids[9], 247, 82);
+				kernel_seq_depth(g_sequence_ids[9], 1);
 				player.commands_allowed = true;
 				break;
 			default:
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index f0fda388fb0..4b4c88614ec 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -70,7 +70,7 @@ static void room_203_init() {
 	if (!local._rhotundaEatFl) {
 		g_sprite_ids[0] = kernel_load_series(kernel_name('b', -1), 0);
 		if (g_engine->getRandomNumber(1, 3) == 2) {
-			g_sprite_ids[15] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 9, 1, 0, 0);
+			g_sprite_ids[15] = kernel_seq_forward(g_sprite_ids[0], false, 9, 0, 0, 1);
 			int idx = _scene->_dynamicHotspots.add(words_yellow_bird, words_look_at, g_sprite_ids[15], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
 			g_engine->_soundManager->command(14, 0);
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index 36092d96cab..b2ecb820637 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -55,27 +55,27 @@ static void room_205_init() {
 	if (global[kSexOfRex] == SEX_MALE)
 		g_sprite_ids[8] = kernel_load_series(kernel_name('a', 1), 0);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 10, 0, 0, 3);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 10, 3, 0, 0);
 	int idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
 
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 0, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 0, 0, 0);
 	idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 	_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
 
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 0, 0, 0);
-	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 0, 0, 0);
-	_scene->_sequences.setDepth(g_sequence_ids[5], 11);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 0);
+	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 0);
+	kernel_seq_depth(g_sequence_ids[5], 11);
 
 	if (!player.been_here_before) {
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 7, 1, 0, 0);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 7, 0, 0, 1);
 		idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
 	}
 
 	if (object[12].location == 205) {
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 7, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[4], 11);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 7, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[4], 11);
 	} else {
 		_scene->_hotspots.activate(450, false);
 	}
@@ -108,13 +108,13 @@ static void room_205_init() {
 		kernel_anim[0].repeat = true;
 	} else {
 		local._beingKicked = true;
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->_sequences.setDepth(g_sequence_ids[8], 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 6, 73);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 11, 74);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_depth(g_sequence_ids[8], 2);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 6, 73);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 11, 74);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	section_2_music();
@@ -134,8 +134,7 @@ static void room_205_daemon() {
 	}
 
 	if (kernel.clock - local._lastFishTime > 1300) {
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(
-			g_sprite_ids[6], false, 5, 1, 0, 0);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 5, 0, 0, 1);
 		int idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, g_sequence_ids[6],
 			Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
@@ -151,9 +150,9 @@ static void room_205_daemon() {
 	}
 
 	if (kernel.trigger == 71) {
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[8], 2);
-		_scene->_sequences.setAnimRange(g_sequence_ids[8], -2, -2);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[8], 2);
+		kernel_seq_range(g_sequence_ids[8], -2, -2);
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 114), 160, 68, 0xFBFA, 180, 72, 32);
 	}
@@ -202,7 +201,7 @@ static void room_205_parser() {
 			case 0x76:
 				if (kernel.trigger == 1) {
 					handleWomanSpeech(0x7D);
-					_scene->_sequences.addTimer(120, 2);
+					kernel_timing_trigger(120, 2);
 				} else if (kernel.trigger == 2) {
 					handleWomanSpeech(0x7E);
 					local._dialog1.write(0x76, false);
@@ -253,9 +252,9 @@ static void room_205_parser() {
 			kernel_dump_walker_only();
 			g_sprite_ids[9] = kernel_load_series(kernel_name('a', 0), 0);
 			kernel_new_palette();
-			g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 6, 1, 0, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_scene->_sequences.updateTimeout(g_sequence_ids[9], -1);
+			g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 6, 0, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_timeout(-1, g_sequence_ids[9]);
 			g_engine->_soundManager->command(27, 0);
 		} else if (kernel.trigger == 1) {
 			if (kernel_anim[0].anim != nullptr)
@@ -275,7 +274,7 @@ static void room_205_parser() {
 			}
 		} else if (player_said_2(take, chicken_on_spit) && global[kChickenPermitted] && object_is_here(OBJ_CHICKEN)) {
 			inter_give_to_player(OBJ_CHICKEN);
-			_scene->_sequences.remove(g_sequence_ids[4]);
+			kernel_seq_delete(g_sequence_ids[4]);
 			_scene->_hotspots.activate(words_chicken_on_spit, false);
 			object_examine(OBJ_CHICKEN, 812, 0);
 		} else if (player_said_2(take, chicken_on_spit) && (!global[kChickenPermitted]))
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index f9b123f6b16..27a1104ff19 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -52,8 +52,8 @@ static void room_207_init() {
 	g_sprite_ids[6] = kernel_load_series(kernel_name('e', 1), 0);
 	g_sprite_ids[7] = kernel_load_series(kernel_name('g', 1), 0);
 	g_sprite_ids[8] = kernel_load_series(kernel_name('g', 0), 0);
-	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 7, 0, 0, 0);
-	_scene->_sequences.setDepth(g_sequence_ids[5], 7);
+	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 7, 0, 0, 0);
+	kernel_seq_depth(g_sequence_ids[5], 7);
 
 	int var2;
 	if (!player.been_here_before) {
@@ -70,14 +70,14 @@ static void room_207_init() {
 	local._spiderFl = (var2 & 1);
 
 	if (local._vultureFl) {
-		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 30, 0, 0, 400);
+		g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 30, 400, 0, 0);
 		local._vultureHotspotId = _scene->_dynamicHotspots.add(words_vulture, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._vultureHotspotId, Common::Point(254, 94), FACING_WEST);
 	}
 
 	if (local._spiderFl) {
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], -1, -1);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 7, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], -1, -1);
 		local._spiderHotspotId = _scene->_dynamicHotspots.add(words_spider, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._spiderHotspotId, Common::Point(59, 132), FACING_SOUTH);
 	}
@@ -98,15 +98,15 @@ static void room_207_init() {
 
 	section_2_music();
 
-	g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 10, 1, 0, 0);
-	_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 22);
-	_scene->_sequences.setDepth(g_sequence_ids[6], 6);
-	_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+	g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 10, 0, 0, 1);
+	kernel_seq_range(g_sequence_ids[6], 1, 22);
+	kernel_seq_depth(g_sequence_ids[6], 6);
+	kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 }
 
 static void moveVulture() {
-	_scene->_sequences.remove(g_sequence_ids[1]);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 7, 1, 0, 0);
+	kernel_seq_delete(g_sequence_ids[1]);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
 	g_engine->_soundManager->command(43, 0);
 	local._vultureFl = false;
 	local._vultureTime = player.clock;
@@ -114,8 +114,8 @@ static void moveVulture() {
 }
 
 static void moveSpider() {
-	_scene->_sequences.remove(g_sequence_ids[4]);
-	g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 5, 1, 0, 0);
+	kernel_seq_delete(g_sequence_ids[4]);
+	g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 5, 0, 0, 1);
 	local._spiderFl = false;
 	local._spiderTime = player.clock;
 	_scene->_dynamicHotspots.remove(local._spiderHotspotId);
@@ -134,9 +134,9 @@ static void room_207_daemon() {
 	}
 
 	if (kernel.trigger == 70) {
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 10, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], 23, 34);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 6);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 10, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[6], 23, 34);
+		kernel_seq_depth(g_sequence_ids[6], 6);
 	}
 
 	if (kernel.trigger == 71)
@@ -146,11 +146,11 @@ static void room_207_daemon() {
 		return;
 
 	if ((player.x >= 124) && (player.x <= 201)) {
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 6);
-		_scene->_sequences.setDepth(g_sequence_ids[8], 6);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 10, 0, 0, 1);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
+		kernel_seq_depth(g_sequence_ids[7], 6);
+		kernel_seq_depth(g_sequence_ids[8], 6);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 		local._eyeFl = true;
 	}
 }
@@ -181,14 +181,14 @@ static void room_207_parser() {
 			(player.y > 111) && (player.y < 130)) {
 			if ((player.x <= 162) || (player.x >= 181) ||
 				(player.y <= 115) || (player.y >= 126)) {
-				g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 2, 0, 0);
-				g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 2, 0, 0);
-				_scene->_sequences.setDepth(g_sequence_ids[7], 6);
-				_scene->_sequences.setDepth(g_sequence_ids[8], 6);
+				g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 10, 0, 0, 2);
+				g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 2);
+				kernel_seq_depth(g_sequence_ids[7], 6);
+				kernel_seq_depth(g_sequence_ids[8], 6);
 			}
 		} else if (local._eyeFl) {
-			_scene->_sequences.remove(g_sequence_ids[7]);
-			_scene->_sequences.remove(g_sequence_ids[8]);
+			kernel_seq_delete(g_sequence_ids[7]);
+			kernel_seq_delete(g_sequence_ids[8]);
 			local._eyeFl = false;
 		}
 
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index fd6afb54265..defa5ed09ec 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -43,8 +43,8 @@ static Scratch local;
 
 static void updateTrap() {
 	if (global[kRhotundaStatus] == 1) {
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 8, 0, 0, 24);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 5);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 8, 24, 0, 0);
+		kernel_seq_depth(g_sequence_ids[1], 5);
 		int idx = _scene->_dynamicHotspots.add(words_huge_legs, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
 		_scene->_hotspots.activate(414, false);
@@ -54,16 +54,16 @@ static void updateTrap() {
 	switch (global[kLeavesStatus]) {
 	case LEAVES_ON_GROUND:
 	{
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[2], 15);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
+		kernel_seq_depth(g_sequence_ids[2], 15);
 		int idx = _scene->_dynamicHotspots.add(words_pile_of_leaves, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(60, 152), FACING_NORTH);
 	}
 	break;
 	case LEAVES_ON_TRAP:
 	{
-		_scene->_sequences.setDepth(g_sequence_ids[3], 15);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+		kernel_seq_depth(g_sequence_ids[3], 15);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 		_scene->_hotspots.activate(words_deep_pit, false);
 		int idx = _scene->_dynamicHotspots.add(words_leaf_covered_pit, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
@@ -126,7 +126,7 @@ static void room_208_daemon() {
 		local._rhotundaTime = kernel_anim[0].frame;
 
 		if (local._rhotundaTime == 125)
-			_scene->_sequences.remove(g_sequence_ids[4]);
+			kernel_seq_delete(g_sequence_ids[4]);
 	}
 
 	if (!local._rhotundaTurnFl)
@@ -146,10 +146,10 @@ static void room_208_daemon() {
 		local._rhotundaTime = 0;
 		break;
 	case 81:
-		_scene->_sequences.remove(g_sprite_ids[15]);
+		kernel_seq_delete(g_sprite_ids[15]);
 		global[kRhotundaStatus] = 1;
 		updateTrap();
-		_scene->_sequences.addTimer(90, 82);
+		kernel_timing_trigger(90, 82);
 		break;
 	case 82:
 		player.commands_allowed = true;
@@ -177,8 +177,8 @@ static void subAction(int mode) {
 	{
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 6, 1, 0, 0);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 1);
+		kernel_seq_player(g_sequence_ids[5], false);
 
 		int endTrigger;
 		if ((mode == 1) || (mode == 2))
@@ -186,17 +186,17 @@ static void subAction(int mode) {
 		else
 			endTrigger = 2;
 
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, endTrigger);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, endTrigger);
 	}
 	break;
 	case 1:
 	{
 		int oldSeq = g_sequence_ids[5];
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 3, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[5], 3, 4);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[5], oldSeq);
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 3);
+		kernel_seq_range(g_sequence_ids[5], 3, 4);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_seq_timeout(oldSeq, g_sequence_ids[5]);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		g_engine->_soundManager->command(20, 0);
 	}
 	break;
@@ -206,7 +206,7 @@ static void subAction(int mode) {
 		switch (mode) {
 		case 1:
 			inter_give_to_player(OBJ_BIG_LEAVES);
-			_scene->_sequences.remove(g_sequence_ids[2]);
+			kernel_seq_delete(g_sequence_ids[2]);
 			global[kLeavesStatus] = 1;
 			break;
 
@@ -217,8 +217,8 @@ static void subAction(int mode) {
 			break;
 
 		case 3:
-			_scene->_sequences.remove(g_sequence_ids[3]);
-			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
+			kernel_seq_delete(g_sequence_ids[3]);
+			g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 			inter_take_from_player(OBJ_TWINKIFRUIT, 1);
 			g_engine->_soundManager->command(34, 0);
 			break;
@@ -238,11 +238,11 @@ static void subAction(int mode) {
 		}
 
 		int oldVal = g_sequence_ids[5];
-		g_sequence_ids[5] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[5], false, 6, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[5], 1, 3);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[5], oldVal);
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		g_sequence_ids[5] = kernel_seq_backward(g_sprite_ids[5], false, 6, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[5], 1, 3);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_seq_timeout(oldVal, g_sequence_ids[5]);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 21e416f99ec..707077cf6e3 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -63,7 +63,7 @@ static void handlePause() {
 	switch (kernel.trigger) {
 	case 124:
 		if (++local._pauseCounter <= local._pauseCounterThreshold)
-			_scene->_sequences.addTimer(60, 124);
+			kernel_timing_trigger(60, 124);
 		else
 			local._pauseMode = 0;
 		break;
@@ -75,7 +75,7 @@ static void handlePause() {
 static void initPauseCounterThreshold() {
 	switch (kernel.trigger) {
 	case 226:
-		_scene->_sequences.addTimer(1, 124);
+		kernel_timing_trigger(1, 124);
 		local._pauseCounterThreshold = g_engine->getRandomNumber(7, 12);
 		local._pauseMode = 2;
 		local._pauseCounter = 0;
@@ -89,37 +89,37 @@ static void handlePeek() {
 	switch (kernel.trigger) {
 	case 133:
 		g_engine->_soundManager->command(18, 0);
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 51, 52);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 134);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 51, 52);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 134);
 		break;
 
 	case 134:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(60, 135);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(60, 135);
 	}
 	break;
 
 	case 135:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
-		_scene->_sequences.addTimer(10, 136);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 7);
+		kernel_timing_trigger(10, 136);
 		break;
 
 	case 136:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.addTimer(50, 137);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_timing_trigger(50, 137);
 		break;
 
 	case 137:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 51, 52);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 138);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 51, 52);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 138);
 		break;
 
 	case 138:
@@ -136,26 +136,26 @@ static void handlePeek() {
 static void handleVerticalMove() {
 	switch (kernel.trigger) {
 	case 140:
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 8, 0, 1);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 5);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 141);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 1, 0, 8);
+		kernel_seq_range(g_sequence_ids[3], 1, 5);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 141);
 		break;
 
 	case 141:
 	{
 		g_engine->_soundManager->command(18, 0);
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 5);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(60, 142);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 5);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(60, 142);
 	}
 	break;
 
 	case 142:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 5);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 143);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 1, 5);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 143);
 		break;
 
 	case 143:
@@ -174,34 +174,34 @@ static void handleLookStay() {
 	case 145:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 2;
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 51, 52);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 146);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 51, 52);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 146);
 		break;
 
 	case 146:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(15, 147);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(15, 147);
 	}
 	break;
 
 	case 147:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
-		_scene->_sequences.addTimer(8, 148);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 7);
+		kernel_timing_trigger(8, 148);
 		break;
 
 	case 148:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
 
 		if (!local._dodgeFl) {
-			_scene->_sequences.addTimer(90, 149);
+			kernel_timing_trigger(90, 149);
 		} else {
-			_scene->_sequences.addTimer(1, 149);
+			kernel_timing_trigger(1, 149);
 			local._shouldDodgeFl = true;
 		}
 		break;
@@ -218,18 +218,18 @@ static void handleLookStay() {
 static void handleLookRight() {
 	switch (kernel.trigger) {
 	case 151:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 14);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 152);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[3], 8, 14);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 152);
 		break;
 
 	case 152:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(60, 153);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(60, 153);
 	}
 	break;
 
@@ -247,21 +247,21 @@ static void handleLookRight() {
 static void handleBlink() {
 	switch (kernel.trigger) {
 	case 155:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.addTimer(50, 156);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_timing_trigger(50, 156);
 		break;
 
 	case 156:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
-		_scene->_sequences.addTimer(10, 157);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 7);
+		kernel_timing_trigger(10, 157);
 		break;
 
 	case 157:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.addTimer(50, 158);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_timing_trigger(50, 158);
 		break;
 
 	case 158:
@@ -280,34 +280,34 @@ static void handleGetBinoculars() {
 	case 161:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 3;
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 24);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 20, 165);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 8, 24);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 20, 165);
 		if (!local._fallFl && !local._dodgeFl) {
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 162);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 162);
 		} else {
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
 		}
 		break;
 
 	case 162:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 6, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 25);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 6);
+		kernel_seq_range(g_sequence_ids[3], 23, 25);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
 	}
 	break;
 
 	case 163:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 24);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(8, 164);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[3], 23, 24);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(8, 164);
 	}
 	break;
 
@@ -331,21 +331,21 @@ static void handleBinocularBlink() {
 	case 167:
 	{
 		int oldIdx = g_sequence_ids[3];
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 25);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 168);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[3], 23, 25);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 168);
 	}
 	break;
 
 	case 168:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 8, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 24);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(30, 169);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[3], 23, 24);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(30, 169);
 	}
 	break;
 
@@ -365,11 +365,11 @@ static void handleBinocularScan() {
 	case 171:
 	{
 		int oldIdx = g_sequence_ids[3];
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 43, 45);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 172);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[3], 43, 45);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 172);
 	}
 	break;
 
@@ -379,37 +379,37 @@ static void handleBinocularScan() {
 		int randAction = g_engine->getRandomNumber(1, 2);
 		switch (randAction) {
 		case 1:
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 2);
 			break;
 		case 2:
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 4, 0, 0);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 4);
 			break;
 		default:
 			break;
 		}
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 25);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 173);
+		kernel_seq_range(g_sequence_ids[3], 23, 25);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 173);
 	}
 	break;
 
 	case 173:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 26, 30);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 174);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[3], 26, 30);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 174);
 	}
 	break;
 
 	case 174:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 23, 24);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(60, 175);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[3], 23, 24);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(60, 175);
 	}
 	break;
 
@@ -431,16 +431,16 @@ static void handleJumpInTree() {
 		int oldIdx = 0;
 		local._monkeyPosition = 1;
 		if (local._removeMonkeyFl)
-			_scene->_sequences.remove(g_sequence_ids[3]);
+			kernel_seq_delete(g_sequence_ids[3]);
 		else
 			oldIdx = g_sequence_ids[3];
 
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 46, 49);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 46, 49);
 		if (!local._removeMonkeyFl)
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
 
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 179);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 179);
 	}
 	break;
 
@@ -448,10 +448,10 @@ static void handleJumpInTree() {
 	{
 		g_engine->_soundManager->command(18, 0);
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 53, 61);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 180);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 53, 61);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 180);
 	}
 	break;
 
@@ -472,31 +472,31 @@ static void handleTongue() {
 	case 182:
 	{
 		int oldIdx = g_sequence_ids[3];
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 26, 30);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 183);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 26, 30);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 183);
 	}
 	break;
 
 	case 183:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 31, 33);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 184);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 31, 33);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 184);
 	}
 	break;
 
 	case 184:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 36, 37);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 185);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 36, 37);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 185);
 	}
 	break;
 
@@ -504,20 +504,20 @@ static void handleTongue() {
 	{
 		g_engine->_soundManager->command(18, 0);
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 6, 20, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 38, 39);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 186);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 6, 0, 0, 20);
+		kernel_seq_range(g_sequence_ids[3], 38, 39);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 186);
 	}
 	break;
 
 	case 186:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 40, 41);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 178);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 40, 41);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 178);
 		local._removeMonkeyFl = false;
 	}
 	break;
@@ -531,38 +531,38 @@ static void handleStandFromPeek() {
 	switch (kernel.trigger) {
 	case 189:
 		local._monkeyPosition = 4;
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 50);
-		_scene->_sequences.addTimer(8, 190);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 50);
+		kernel_timing_trigger(8, 190);
 		break;
 
 	case 190:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.addTimer(8, 191);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_timing_trigger(8, 191);
 		break;
 
 	case 191:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 5);
-		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 192);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[6], 1, 5);
+		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 192);
 		break;
 
 	case 192:
 	{
 		g_engine->_soundManager->command(18, 0);
 		int oldIdx = g_sequence_ids[6];
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
-		_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
-		_scene->_sequences.addTimer(8, 193);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[5]);
+		kernel_timing_trigger(8, 193);
 	}
 	break;
 
 	case 193:
-		_scene->_sequences.remove(g_sequence_ids[5]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
-		_scene->_sequences.addTimer(5, 194);
+		kernel_seq_delete(g_sequence_ids[5]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 22);
+		kernel_timing_trigger(5, 194);
 		break;
 
 	case 194:
@@ -578,21 +578,21 @@ static void handleStandFromPeek() {
 static void handleStandBlink() {
 	switch (kernel.trigger) {
 	case 246:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
-		_scene->_sequences.addTimer(10, 247);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 22);
+		kernel_timing_trigger(10, 247);
 		break;
 
 	case 247:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 23);
-		_scene->_sequences.addTimer(8, 248);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 23);
+		kernel_timing_trigger(8, 248);
 		break;
 
 	case 248:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
-		_scene->_sequences.addTimer(10, 249);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 22);
+		kernel_timing_trigger(10, 249);
 		break;
 
 	case 249:
@@ -609,10 +609,10 @@ static void handleJumpAndHide() {
 	case 196:
 		g_engine->_soundManager->command(18, 0);
 		local._monkeyPosition = 1;
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[5], 1, 16);
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 197);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[5], 1, 16);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 197);
 		break;
 
 	case 197:
@@ -630,70 +630,70 @@ static void handleMonkeyEating() {
 	switch (kernel.trigger) {
 	case 199:
 		g_engine->_soundManager->command(18, 0);
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 1, 14);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 200);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 1, 14);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 200);
 		break;
 
 	case 200:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 10, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 15, 16);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 201);
+		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 10);
+		kernel_seq_range(g_sequence_ids[4], 15, 16);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 201);
 	}
 	break;
 
 	case 201:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 12);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addTimer(20, 202);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 12);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_timing_trigger(20, 202);
 	}
 	break;
 
 	case 202:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 19);
-		_scene->_sequences.addTimer(20, 203);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 19);
+		kernel_timing_trigger(20, 203);
 		break;
 
 	case 203:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 17);
-		_scene->_sequences.addTimer(20, 204);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 17);
+		kernel_timing_trigger(20, 204);
 		break;
 
 	case 204:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 8, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 18, 19);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 205);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 8);
+		kernel_seq_range(g_sequence_ids[4], 18, 19);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 205);
 		break;
 
 	case 205:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 8, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 20, 21);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 206);
+		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 8);
+		kernel_seq_range(g_sequence_ids[4], 20, 21);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 206);
 	}
 	break;
 
 	case 206:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 22, 25);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 22, 25);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
 		if (!local._dodgeFl && !local._fallFl)
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 207);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 207);
 		else
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
 	}
 	break;
 
@@ -704,10 +704,10 @@ static void handleMonkeyEating() {
 		kernel_message_teletype(msgIndex, 4, true);
 
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 15, 4, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 26, 27);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 208);
+		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 15, 0, 0, 4);
+		kernel_seq_range(g_sequence_ids[4], 26, 27);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 208);
 	}
 	break;
 
@@ -715,19 +715,19 @@ static void handleMonkeyEating() {
 	{
 		kernel_message_add(quote_string(kernel.quotes, 131), 180, 39, 0xFDFC, 90, 0, 0);
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 10, 4, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 28, 29);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
+		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 4);
+		kernel_seq_range(g_sequence_ids[4], 28, 29);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
 	}
 	break;
 
 	case 209:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addTimer(1, 210);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 22);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_timing_trigger(1, 210);
 	}
 	break;
 
@@ -752,16 +752,16 @@ static void handleMonkeyFall() {
 
 		g_sprite_ids[8] = kernel_load_series(kernel_name('m', 4), 0);
 		kernel_message_add(quote_string(kernel.quotes, 151), 180, 26, 0xFDFC, 90, 0, 0);
-		_scene->_sequences.addTimer(40, 100);
+		kernel_timing_trigger(40, 100);
 		_scene->_hotspots.activate(227, false);
 		int oldIdx = g_sequence_ids[3];
 		local._monkeyPosition = 1;
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[8], 1, 35);
-		_scene->_sequences.setDepth(g_sequence_ids[8], 6);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 220);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[8], 1, 35);
+		kernel_seq_depth(g_sequence_ids[8], 6);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 220);
 	}
 	break;
 
@@ -772,12 +772,12 @@ static void handleMonkeyFall() {
 		_scene->_hotspots.activate(227, false);
 		int oldIdx = g_sequence_ids[3];
 		local._monkeyPosition = 1;
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[8], 36, 42);
-		_scene->_sequences.setDepth(g_sequence_ids[8], 6);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 221);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[8], 36, 42);
+		kernel_seq_depth(g_sequence_ids[8], 6);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 221);
 	}
 	break;
 
@@ -786,14 +786,14 @@ static void handleMonkeyFall() {
 		inter_move_object(OBJ_BINOCULARS, 209);
 		local._binocularsDroppedFl = true;
 		int oldIdx = g_sequence_ids[8];
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
-		_scene->_sequences.updateTimeout(g_sequence_ids[9], oldIdx);
-		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(201, 131));
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[8], oldIdx);
-		_scene->_sequences.setAnimRange(g_sequence_ids[8], 43, 72);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 222);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[9]);
+		kernel_seq_loc(g_sequence_ids[9], 201, 131);
+		kernel_seq_depth(g_sequence_ids[9], 8);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[8]);
+		kernel_seq_range(g_sequence_ids[8], 43, 72);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 222);
 		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
 	}
@@ -803,10 +803,10 @@ static void handleMonkeyFall() {
 	{
 		kernel_message_add(quote_string(kernel.quotes, 160), 182, 109, 0xFDFC, 70, 0, 0);
 		int oldIdx = g_sequence_ids[8];
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[8], 73, 78);
-		_scene->_sequences.updateTimeout(g_sequence_ids[8], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 223);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[8], 73, 78);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[8]);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 223);
 	}
 	break;
 
@@ -832,29 +832,29 @@ static void handleMonkeyFall() {
 static void handleMonkey1() {
 	switch (kernel.trigger) {
 	case 212:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 9, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 1, 13);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 213);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 9, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 1, 13);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 213);
 		break;
 
 	case 213:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 1, 22);
-		_scene->_sequences.updateTimeout(g_sequence_ids[7], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 214);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 7, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 1, 22);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[7]);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 214);
 	}
 	break;
 
 	case 214:
 	{
 		int oldIdx = g_sequence_ids[7];
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 23, 26);
-		_scene->_sequences.updateTimeout(g_sequence_ids[7], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 7, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 23, 26);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[7]);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
 		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 156), 170, 21, 0xFDFC, 90, 0, 0);
 		kernel_message_teletype(msgIndex, 3, true);
 	}
@@ -865,19 +865,19 @@ static void handleMonkey1() {
 		g_engine->_soundManager->command(18, 0);
 		kernel_run_animation(kernel_full_name(209, 'a', -1, "", EXT_AA), 251);
 		int oldIdx = g_sequence_ids[7];
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 27, 35);
-		_scene->_sequences.updateTimeout(g_sequence_ids[7], oldIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 216);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 7, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 27, 35);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[7]);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 216);
 	}
 	break;
 
 	case 216:
 	{
 		int oldIdx = g_sequence_ids[7];
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 22);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addTimer(25, 217);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 22);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_timing_trigger(25, 217);
 	}
 	break;
 
@@ -885,7 +885,7 @@ static void handleMonkey1() {
 		local._pitchFl = false;
 		local._counter = 0;
 		local._pauseMode = 0;
-		_scene->_sequences.addTimer(1, 196);
+		kernel_timing_trigger(1, 196);
 		break;
 
 	default:
@@ -898,11 +898,11 @@ static void handleMonkey2() {
 	case 251:
 		kernel_message_add(quote_string(kernel.quotes, 137), 0, 0, 0x1110, 60, 0, 34);
 		g_engine->_soundManager->command(22, 0);
-		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 11, 1, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[12], Common::Point(111, 133));
-		_scene->_sequences.setScale(g_sequence_ids[12], 79);
-		_scene->_sequences.setAnimRange(g_sequence_ids[12], 1, 6);
-		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
+		g_sequence_ids[12] = kernel_seq_forward(g_sprite_ids[12], false, 11, 0, 0, 1);
+		kernel_seq_loc(g_sequence_ids[12], 111, 133);
+		kernel_seq_scale(g_sequence_ids[12], 79);
+		kernel_seq_range(g_sequence_ids[12], 1, 6);
+		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
 		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = false;
 		break;
@@ -912,16 +912,16 @@ static void handleMonkey2() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 132), 0, 0, 0x1110, 120, 0, 34);
 		int oldIdx = g_sequence_ids[12];
-		g_sequence_ids[12] = _scene->_sequences.startCycle(g_sprite_ids[12], false, 7);
-		_scene->_sequences.setPosition(g_sequence_ids[12], Common::Point(111, 133));
-		_scene->_sequences.setScale(g_sequence_ids[12], 79);
-		_scene->_sequences.updateTimeout(g_sequence_ids[12], oldIdx);
-		_scene->_sequences.addTimer(120, 253);
+		g_sequence_ids[12] = kernel_seq_stamp(g_sprite_ids[12], false, 7);
+		kernel_seq_loc(g_sequence_ids[12], 111, 133);
+		kernel_seq_scale(g_sequence_ids[12], 79);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[12]);
+		kernel_timing_trigger(120, 253);
 	}
 	break;
 
 	case 253:
-		_scene->_sequences.remove(g_sequence_ids[12]);
+		kernel_seq_delete(g_sequence_ids[12]);
 		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = true;
 		player.commands_allowed = true;
@@ -936,22 +936,22 @@ static void handleDodge() {
 	switch (kernel.trigger) {
 	case 241:
 		_scene->_hotspots.activate(227, true);
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
-		_scene->_sequences.addTimer(6, 242);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 7);
+		kernel_timing_trigger(6, 242);
 		break;
 
 	case 242:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 5);
-		_scene->_sequences.addTimer(25, 243);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 5);
+		kernel_timing_trigger(25, 243);
 		g_engine->_soundManager->command(24, 0);
 		break;
 
 	case 243:
 		g_engine->_soundManager->command(18, 0);
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
 		local._playingAnimFl = false;
 		local._pauseMode = 0;
 		kernel_message_purge();
@@ -988,10 +988,10 @@ static void room_209_init() {
 	pal_change_color(253, 63, 20, 22);
 
 	if (object_is_here(OBJ_PLANT_STALK)) {
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_plant_stalk, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(263, 129), FACING_SOUTH);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 13);
+		kernel_seq_depth(g_sequence_ids[1], 13);
 	}
 
 	if (previous_room == 208) {
@@ -1005,9 +1005,9 @@ static void room_209_init() {
 	}
 
 	if (object_is_here(OBJ_BINOCULARS)) {
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
-		_scene->_sequences.setPosition(g_sequence_ids[9], Common::Point(201, 131));
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
+		kernel_seq_loc(g_sequence_ids[9], 201, 131);
+		kernel_seq_depth(g_sequence_ids[9], 8);
 		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
 	}
@@ -1048,7 +1048,7 @@ static void room_209_daemon() {
 		switch (randAction) {
 		case 1:
 			if ((local._monkeyPosition == 1) && (local._counter < 2)) {
-				_scene->_sequences.addTimer(1, 133);
+				kernel_timing_trigger(1, 133);
 				local._playingAnimFl = true;
 				_scene->_hotspots.activate(227, true);
 				++local._counter;
@@ -1057,7 +1057,7 @@ static void room_209_daemon() {
 
 		case 2:
 			if ((local._monkeyPosition == 1) && (local._counter < 2)) {
-				_scene->_sequences.addTimer(1, 140);
+				kernel_timing_trigger(1, 140);
 				_scene->_hotspots.activate(227, true);
 				local._playingAnimFl = true;
 				++local._counter;
@@ -1066,7 +1066,7 @@ static void room_209_daemon() {
 
 		case 3:
 			if (local._monkeyPosition == 1) {
-				_scene->_sequences.addTimer(1, 145);
+				kernel_timing_trigger(1, 145);
 				_scene->_hotspots.activate(227, true);
 				local._playingAnimFl = true;
 				local._counter = 0;
@@ -1075,7 +1075,7 @@ static void room_209_daemon() {
 
 		case 4:
 			if ((local._monkeyPosition == 2) && (local._counter < 2)) {
-				_scene->_sequences.addTimer(1, 151);
+				kernel_timing_trigger(1, 151);
 				_scene->_hotspots.activate(227, true);
 				++local._counter;
 				local._playingAnimFl = true;
@@ -1084,7 +1084,7 @@ static void room_209_daemon() {
 
 		case 5:
 			if (local._monkeyPosition == 2) {
-				_scene->_sequences.addTimer(1, 161);
+				kernel_timing_trigger(1, 161);
 				_scene->_hotspots.activate(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
@@ -1093,7 +1093,7 @@ static void room_209_daemon() {
 
 		case 6:
 			if (local._monkeyPosition == 2) {
-				_scene->_sequences.addTimer(1, 189);
+				kernel_timing_trigger(1, 189);
 				_scene->_hotspots.activate(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
@@ -1102,14 +1102,14 @@ static void room_209_daemon() {
 		case 7:
 			if (local._monkeyPosition == 3) {
 				_scene->_hotspots.activate(227, true);
-				_scene->_sequences.addTimer(1, 167);
+				kernel_timing_trigger(1, 167);
 				local._playingAnimFl = true;
 			}
 			break;
 
 		case 8:
 			if (local._monkeyPosition == 3) {
-				_scene->_sequences.addTimer(1, 178);
+				kernel_timing_trigger(1, 178);
 				local._playingAnimFl = true;
 				_scene->_hotspots.activate(227, true);
 				local._counter = 0;
@@ -1118,7 +1118,7 @@ static void room_209_daemon() {
 
 		case 9:
 			if ((local._monkeyPosition == 3) && (player.x < 120)) {
-				_scene->_sequences.addTimer(1, 182);
+				kernel_timing_trigger(1, 182);
 				_scene->_hotspots.activate(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
@@ -1127,7 +1127,7 @@ static void room_209_daemon() {
 
 		case 10:
 			if (local._monkeyPosition == 4) {
-				_scene->_sequences.addTimer(1, 196);
+				kernel_timing_trigger(1, 196);
 				_scene->_hotspots.activate(227, true);
 				local._playingAnimFl = true;
 				local._counter = 0;
@@ -1136,7 +1136,7 @@ static void room_209_daemon() {
 
 		case 11:
 			if ((local._monkeyPosition == 4) && (local._counter < 3)) {
-				_scene->_sequences.addTimer(1, 199);
+				kernel_timing_trigger(1, 199);
 				_scene->_hotspots.activate(227, true);
 				++local._counter;
 				local._playingAnimFl = true;
@@ -1145,7 +1145,7 @@ static void room_209_daemon() {
 
 		case 30:
 			if (local._monkeyPosition == 4) {
-				_scene->_sequences.addTimer(1, 246);
+				kernel_timing_trigger(1, 246);
 				_scene->_hotspots.activate(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
@@ -1154,13 +1154,13 @@ static void room_209_daemon() {
 
 		default:
 			if ((randAction >= 12) && (randAction <= 20) && (local._monkeyPosition == 2) && (local._counter < 5)) {
-				_scene->_sequences.addTimer(1, 155);
+				kernel_timing_trigger(1, 155);
 				++local._counter;
 				local._playingAnimFl = true;
 			}
 
 			if ((randAction >= 21) && (randAction <= 29) && (local._monkeyPosition == 3) && (local._counter < 3)) {
-				_scene->_sequences.addTimer(1, 171);
+				kernel_timing_trigger(1, 171);
 				local._playingAnimFl = true;
 				++local._counter;
 			}
@@ -1169,7 +1169,7 @@ static void room_209_daemon() {
 	}
 
 	if (!local._dodgeFl && !local._pitchFl && !local._fallFl && (local._pauseMode == 1))
-		_scene->_sequences.addTimer(1, 226);
+		kernel_timing_trigger(1, 226);
 
 	if (!local._dodgeFl && !local._pitchFl && !local._fallFl && (local._pauseMode == 2))
 		handlePause();
@@ -1197,62 +1197,62 @@ static void room_209_daemon() {
 	handleMonkey2();
 
 	if ((local._monkeyPosition == 1) && !local._playingAnimFl && local._fallFl) {
-		_scene->_sequences.addTimer(1, 145);
+		kernel_timing_trigger(1, 145);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 2) && !local._playingAnimFl && local._fallFl) {
-		_scene->_sequences.addTimer(1, 161);
+		kernel_timing_trigger(1, 161);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 4) && !local._playingAnimFl && local._fallFl) {
-		_scene->_sequences.addTimer(1, 196);
+		kernel_timing_trigger(1, 196);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 3) && !local._playingAnimFl && local._fallFl && local._forceFallFl) {
-		_scene->_sequences.addTimer(1, 219);
+		kernel_timing_trigger(1, 219);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 1) && !local._playingAnimFl && local._pitchFl) {
-		_scene->_sequences.addTimer(1, 145);
+		kernel_timing_trigger(1, 145);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 2) && !local._playingAnimFl && local._pitchFl) {
-		_scene->_sequences.addTimer(1, 189);
+		kernel_timing_trigger(1, 189);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 4) && !local._playingAnimFl && local._pitchFl) {
-		_scene->_sequences.addTimer(1, 212);
+		kernel_timing_trigger(1, 212);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 3) && !local._playingAnimFl && local._pitchFl) {
-		_scene->_sequences.addTimer(1, 178);
+		kernel_timing_trigger(1, 178);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 1) && !local._playingAnimFl && local._dodgeFl) {
-		_scene->_sequences.addTimer(1, 145);
+		kernel_timing_trigger(1, 145);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 4) && !local._playingAnimFl && local._dodgeFl) {
-		_scene->_sequences.addTimer(1, 196);
+		kernel_timing_trigger(1, 196);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 3) && !local._playingAnimFl && local._dodgeFl) {
-		_scene->_sequences.addTimer(1, 178);
+		kernel_timing_trigger(1, 178);
 		local._playingAnimFl = true;
 	}
 
 	if ((local._monkeyPosition == 2) && !local._playingAnimFl && local._dodgeFl && local._forceDodgeFl) {
-		_scene->_sequences.addTimer(1, 241);
+		kernel_timing_trigger(1, 241);
 		local._playingAnimFl = true;
 	}
 
@@ -1266,44 +1266,44 @@ static void room_209_daemon() {
 		switch (kernel.trigger) {
 		case 228:
 			player.walker_visible = false;
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 7);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 229);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 1, 7);
+			kernel_seq_loc(g_sequence_ids[2], 116, 131);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 229);
 			break;
 
 		case 229:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 7);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addTimer(35, 230);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 7);
+			kernel_seq_loc(g_sequence_ids[2], 116, 131);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_timing_trigger(35, 230);
 		}
 		break;
 
 		case 230:
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 7);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 231);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 1, 7);
+			kernel_seq_loc(g_sequence_ids[2], 116, 131);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 231);
 			break;
 
 		case 231:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 8, 10);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 8, 10);
+			kernel_seq_loc(g_sequence_ids[2], 116, 131);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
 			player.clock = kernel.clock - player.frame_delay;
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], -1);
+			kernel_seq_timeout(-1, g_sequence_ids[2]);
 			player.walker_visible = false;
 		}
 		break;
@@ -1311,11 +1311,11 @@ static void room_209_daemon() {
 		case 232:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 10);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addTimer(2, 233);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 10);
+			kernel_seq_loc(g_sequence_ids[2], 116, 131);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_timing_trigger(2, 233);
 			kernel_message_purge();
 			if (local._dodgeFl && (local._monkeyPosition != 1) && (local._monkeyPosition != 2))
 				kernel_message_add(quote_string(kernel.quotes, 138), 0, 0, 0x1110, 34463, 0, 34);
@@ -1329,21 +1329,21 @@ static void room_209_daemon() {
 			break;
 
 		case 234:
-			_scene->_sequences.remove(g_sequence_ids[2]);
+			kernel_seq_delete(g_sequence_ids[2]);
 			kernel_message_purge();
 			if (player_said_3(hose_down, blowgun, monkey)) {
-				g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 7, 16, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[2], 11, 12);
-				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-				_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 12, 239);
-				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
+				g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 7, 0, 0, 16);
+				kernel_seq_range(g_sequence_ids[2], 11, 12);
+				kernel_seq_loc(g_sequence_ids[2], 116, 131);
+				kernel_seq_depth(g_sequence_ids[2], 4);
+				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 12, 239);
+				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
 			} else if (player_said_3(shoot, blowgun, monkey)) {
-				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[2], 11, 12);
-				_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-				_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
+				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[2], 11, 12);
+				kernel_seq_loc(g_sequence_ids[2], 116, 131);
+				kernel_seq_depth(g_sequence_ids[2], 4);
+				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
 				g_engine->_soundManager->command(23, 0);
 			}
 			break;
@@ -1351,33 +1351,33 @@ static void room_209_daemon() {
 		case 235:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 13);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addTimer(12, 236);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 13);
+			kernel_seq_loc(g_sequence_ids[2], 116, 131);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_timing_trigger(12, 236);
 			local._forceFallFl = true;
 			local._forceDodgeFl = true;
 		}
 		break;
 
 		case 236:
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 14, 16);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(116, 131));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 237);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 14, 16);
+			kernel_seq_loc(g_sequence_ids[2], 116, 131);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 237);
 			break;
 
 		case 237:
 			player.walker_visible = true;
 			player.clock = kernel.clock - player.frame_delay;
-			_scene->_sequences.addTimer(1, 238);
+			kernel_timing_trigger(1, 238);
 			break;
 
 		case 238:
-			_scene->_sequences.remove(g_sequence_ids[2]);
+			kernel_seq_delete(g_sequence_ids[2]);
 			if (local._dodgeFl)
 				player.commands_allowed = true;
 
@@ -1408,7 +1408,7 @@ static void room_209_daemon() {
 		kernel_message_add(quote_string(kernel.quotes, 134), 0, 0, 0x1110, 120, 0, 34);
 
 	if (local._shootReadyFl && (local._shouldFallFl || local._shouldDodgeFl)) {
-		_scene->_sequences.addTimer(4, 234);
+		kernel_timing_trigger(4, 234);
 		local._shootReadyFl = false;
 	}
 }
@@ -1451,7 +1451,7 @@ static void room_209_parser() {
 	}
 
 	if (player_said_2(talkto, monkey) && !local._pitchFl && !local._playingDialogFl) {
-		_scene->_sequences.addTimer(1, local._dialogAbortVal);
+		kernel_timing_trigger(1, local._dialogAbortVal);
 		local._playingDialogFl = true;
 		player.commands_allowed = false;
 		player.command_ready = false;
@@ -1473,7 +1473,7 @@ static void room_209_parser() {
 
 	case 6:
 		kernel_message_add(quote_string(kernel.quotes, 151), 180, 21, 0xFDFC, 60, 0, 0);
-		_scene->_sequences.addTimer(60, 130);
+		kernel_timing_trigger(60, 130);
 		local._dialogAbortVal = 7;
 		player.command_ready = false;
 		return;
@@ -1486,7 +1486,7 @@ static void room_209_parser() {
 
 	case 8:
 		kernel_message_add(quote_string(kernel.quotes, 149), 180, 21, 0xFDFC, 60, 0, 0);
-		_scene->_sequences.addTimer(60, 130);
+		kernel_timing_trigger(60, 130);
 		local._dialogAbortVal = 9;
 		player.command_ready = false;
 		return;
@@ -1494,7 +1494,7 @@ static void room_209_parser() {
 	case 9:
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 141), 0, 0, 0x1110, 180, 0, 34);
-		_scene->_sequences.addTimer(200, 10);
+		kernel_timing_trigger(200, 10);
 		player.command_ready = false;
 		return;
 
@@ -1505,7 +1505,7 @@ static void room_209_parser() {
 
 	case 11:
 		kernel_message_add(quote_string(kernel.quotes, 152), 180, 21, 0xFDFC, 60, 0, 0);
-		_scene->_sequences.addTimer(60, 130);
+		kernel_timing_trigger(60, 130);
 		local._dialogAbortVal = 12;
 		player.command_ready = false;
 		return;
@@ -1513,7 +1513,7 @@ static void room_209_parser() {
 	case 12:
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 143), 0, 0, 0x1110, 130, 0, 34);
-		_scene->_sequences.addTimer(150, 13);
+		kernel_timing_trigger(150, 13);
 		player.command_ready = false;
 		return;
 
@@ -1524,7 +1524,7 @@ static void room_209_parser() {
 
 	case 14:
 		kernel_message_add(quote_string(kernel.quotes, 151), 180, 21, 0xFDFC, 60, 0, 0);
-		_scene->_sequences.addTimer(60, 130);
+		kernel_timing_trigger(60, 130);
 		local._dialogAbortVal = 15;
 		player.command_ready = false;
 		return;
@@ -1564,7 +1564,7 @@ static void room_209_parser() {
 			&& player_said_1(blowgun) && player_has(OBJ_BLOWGUN) && player_has(OBJ_POISON_DARTS)) {
 			if (player_said_3(shoot, blowgun, monkey) && !local._startShootingInTimerFl) {
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-				_scene->_sequences.addTimer(1, 231);
+				kernel_timing_trigger(1, 231);
 				local._startShootingInTimerFl = true;
 				player.commands_allowed = false;
 				local._dodgeFl = true;
@@ -1574,7 +1574,7 @@ static void room_209_parser() {
 
 			if (player_said_3(hose_down, blowgun, monkey) && !local._startShootingInTimerFl) {
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-				_scene->_sequences.addTimer(1, 228);
+				kernel_timing_trigger(1, 228);
 				player.commands_allowed = false;
 				local._fallFl = true;
 				local._startShootingInTimerFl = true;
@@ -1597,21 +1597,21 @@ static void room_209_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[11] = _scene->_sequences.startPingPongCycle(g_sprite_ids[11], false, 3, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[11]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[11] = kernel_seq_pingpong(g_sprite_ids[11], false, 3, 0, 0, 2);
+			kernel_seq_player(g_sequence_ids[11], false);
+			kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[1]);
+			kernel_seq_delete(g_sequence_ids[1]);
 			inter_give_to_player(OBJ_PLANT_STALK);
 			break;
 
 		case 2:
 			player.walker_visible = true;
 			player.commands_allowed = true;
-			_scene->_sequences.addTimer(4, 3);
+			kernel_timing_trigger(4, 3);
 			object_examine(OBJ_PLANT_STALK, 0x328, 0);
 			break;
 
@@ -1631,14 +1631,14 @@ static void room_209_parser() {
 			g_sprite_ids[10] = kernel_load_series("*RXMBD_8", 0);
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], false, 3, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[10]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[10] = kernel_seq_pingpong(g_sprite_ids[10], false, 3, 0, 0, 2);
+			kernel_seq_player(g_sequence_ids[10], false);
+			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[9]);
+			kernel_seq_delete(g_sequence_ids[9]);
 			inter_give_to_player(OBJ_BINOCULARS);
 			break;
 
@@ -1646,7 +1646,7 @@ static void room_209_parser() {
 			player.walker_visible = true;
 			player.commands_allowed = true;
 			local._binocularsDroppedFl = false;
-			_scene->_sequences.addTimer(4, 3);
+			kernel_timing_trigger(4, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 9bc57773221..24e754c51c3 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -117,16 +117,16 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xB9, -1, 0);
-				_scene->_sequences.addTimer(180, 2);
+				kernel_timing_trigger(180, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 			break;
 
 		case 2:
 			local._nextHandsPlace = 0;
 			handleTwinklesSpeech(186, 0, 0);
-			_scene->_sequences.addTimer(180, 3);
+			kernel_timing_trigger(180, 3);
 			break;
 
 		default:
@@ -146,20 +146,20 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xBE, -2, 0);
-				_scene->_sequences.addTimer(180, 2);
+				kernel_timing_trigger(180, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 			break;
 		case 2:
 			local._nextHandsPlace = 2;
 			handleTwinklesSpeech(191, -1, 0);
-			_scene->_sequences.addTimer(180, 3);
+			kernel_timing_trigger(180, 3);
 			break;
 		case 3:
 			local._nextHandsPlace = 0;
 			handleTwinklesSpeech(192, 0, 0);
-			_scene->_sequences.addTimer(180, 4);
+			kernel_timing_trigger(180, 4);
 			break;
 		default:
 			local._shouldTalk = false;
@@ -183,9 +183,9 @@ static void setDialogNode(int node) {
 
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(quote, 0, 360);
-				_scene->_sequences.addTimer(120, 2);
+				kernel_timing_trigger(120, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 		} else {
 			_scene->_userInterface.setup(kInputBuildingSentences);
@@ -203,16 +203,16 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xCA, -1, 0);
-				_scene->_sequences.addTimer(180, 2);
+				kernel_timing_trigger(180, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 			break;
 
 		case 2:
 			local._nextHandsPlace = 1;
 			handleTwinklesSpeech(0xCB, 0, 0);
-			_scene->_sequences.addTimer(180, 3);
+			kernel_timing_trigger(180, 3);
 			break;
 
 		default:
@@ -232,21 +232,21 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xD0, -2, 0);
-				_scene->_sequences.addTimer(180, 2);
+				kernel_timing_trigger(180, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 			break;
 
 		case 2:
 			handleTwinklesSpeech(0xD1, -1, 0);
-			_scene->_sequences.addTimer(180, 3);
+			kernel_timing_trigger(180, 3);
 			break;
 
 		case 3:
 			local._nextHandsPlace = 1;
 			handleTwinklesSpeech(0xD2, 0, 0);
-			_scene->_sequences.addTimer(180, 4);
+			kernel_timing_trigger(180, 4);
 			break;
 
 		default:
@@ -266,15 +266,15 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xD6, -1, 0);
-				_scene->_sequences.addTimer(180, 2);
+				kernel_timing_trigger(180, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 			break;
 
 		case 2:
 			handleTwinklesSpeech(0xD7, 0, 0);
-			_scene->_sequences.addTimer(180, 3);
+			kernel_timing_trigger(180, 3);
 			break;
 
 		default:
@@ -293,15 +293,15 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				handleTwinklesSpeech(0xDD, -1, 0);
-				_scene->_sequences.addTimer(180, 2);
+				kernel_timing_trigger(180, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 			break;
 
 		case 2:
 			handleTwinklesSpeech(0xDE, 0, 0);
-			_scene->_sequences.addTimer(180, 3);
+			kernel_timing_trigger(180, 3);
 			break;
 
 		default:
@@ -323,15 +323,15 @@ static void setDialogNode(int node) {
 				_scene->_userInterface.emptyConversationList();
 				_scene->_userInterface.setup(kInputConversation);
 				handleTwinklesSpeech(0xE4, -1, 0);
-				_scene->_sequences.addTimer(180, 2);
+				kernel_timing_trigger(180, 2);
 			} else {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			}
 			break;
 
 		case 2:
 			handleTwinklesSpeech(0xE5, 0, 0);
-			_scene->_sequences.addTimer(180, 3);
+			kernel_timing_trigger(180, 3);
 			break;
 
 		case 3:
@@ -350,8 +350,8 @@ static void setDialogNode(int node) {
 
 		case 4:
 		{
-			g_sprite_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 5);
-			_scene->_sequences.setDepth(g_sprite_ids[8], 1);
+			g_sprite_ids[8] = kernel_seq_stamp(g_sprite_ids[1], false, 5);
+			kernel_seq_depth(g_sprite_ids[8], 1);
 
 			int msgIndex = kernel_message_add(quote_string(kernel.quotes, 231), 160, 20, 0x1110, 180, 5, 32);
 			kernel_message_teletype(msgIndex, 4, true);
@@ -554,13 +554,13 @@ static void handleConversations() {
 			quote_split_string(curQuote, line1, line2);
 			Common::strcpy_s(local._subQuote2, line2);
 			kernel_message_add(line1, 0, -14, 0x1110, 240, 0, 34);
-			_scene->_sequences.addTimer(60, 50);
+			kernel_timing_trigger(60, 50);
 		} else {
 			kernel_message_add(curQuote, 0, 0, 0x1110, 120, 1, 34);
 		}
 	} else if (kernel.trigger == 50) {
 		kernel_message_add(local._subQuote2, 0, 0, 0x1110, 240, 0, 34);
-		_scene->_sequences.addTimer(180, 1);
+		kernel_timing_trigger(180, 1);
 	} else {
 		if (kernel.trigger == 1)
 			kernel_message_purge();
@@ -633,8 +633,8 @@ static void room_210_init() {
 	}
 
 	if (!global[kCurtainOpen]) {
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 5);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 5);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 5);
+		kernel_seq_depth(g_sequence_ids[1], 5);
 	} else {
 		int idx = _scene->_dynamicHotspots.add(words_doorway, words_walk_through, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
 		local._doorway = _scene->_dynamicHotspots.setPosition(idx, Common::Point(168, 127), FACING_NORTH);
@@ -936,7 +936,7 @@ static void room_210_parser() {
 		case 1:
 			local._shouldTalk = true;
 			if (!local._twinklesTalking) {
-				_scene->_sequences.addTimer(6, 1);
+				kernel_timing_trigger(6, 1);
 			} else {
 				if (global[kTwinklesApproached] == 0) {
 					handleTwinklesSpeech(0xAF, -1, 0);
@@ -948,7 +948,7 @@ static void room_210_parser() {
 					local._twinklesTalk2 = true;
 					handleTwinklesSpeech(quote, 0, 0);
 				}
-				_scene->_sequences.addTimer(60, 3);
+				kernel_timing_trigger(60, 3);
 			}
 			break;
 
@@ -975,7 +975,7 @@ static void room_210_parser() {
 			local._shouldMoveHead = true;
 			player.commands_allowed = false;
 			handleTwinklesSpeech(quote, 0, 120);
-			_scene->_sequences.addTimer(120, 1);
+			kernel_timing_trigger(120, 1);
 		}
 		break;
 
@@ -995,10 +995,10 @@ static void room_210_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[1], false, 12, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[1], 5);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 12, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[1], 5);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -1015,18 +1015,18 @@ static void room_210_parser() {
 	} else if ((player_said_2(pull, curtain) || player_said_2(close, curtain)) && global[kCurtainOpen]) {
 		switch (kernel.trigger) {
 		case 0:
-			_scene->_sequences.remove(g_sequence_ids[1]);
+			kernel_seq_delete(g_sequence_ids[1]);
 			player.commands_allowed = false;
 			player.facing = FACING_NORTH;
-			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 12, 0, 0, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[1], 5);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 12, 1, 0, 0);
+			kernel_seq_depth(g_sequence_ids[1], 5);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			break;
 		case 1:
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 5);
-			_scene->_sequences.setDepth(g_sequence_ids[1], 5);
-			_scene->_sequences.addTimer(48, 2);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 5);
+			kernel_seq_depth(g_sequence_ids[1], 5);
+			kernel_timing_trigger(48, 2);
 			break;
 		case 2:
 			_scene->_dynamicHotspots.remove(local._doorway);
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index c1b2248e6d4..46a29386738 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -67,10 +67,10 @@ static void room_211_init() {
 	}
 
 	if (g_engine->getRandomNumber(1, 8) == 1) {
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(202, 126));
-		_scene->_sequences.setDepth(g_sequence_ids[2], 8);
-		_scene->_sequences.setMotion(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, -200, 0);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[2], 202, 126);
+		kernel_seq_depth(g_sequence_ids[2], 8);
+		kernel_seq_motion(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, -200, 0);
 		_scene->_dynamicHotspots.add(words_slithering_snake, words_walkto, g_sequence_ids[2], Common::Rect(1, 1, 1 + 41, 1 + 10));
 	}
 
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index 82b73388aef..a23b9f2ba51 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -49,17 +49,17 @@ static void room_214_init() {
 	local._devilRunningFl = false;
 
 	if (object_is_here(OBJ_POISON_DARTS)) {
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(103, 86));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 11);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[1], 103, 86);
+		kernel_seq_depth(g_sequence_ids[1], 11);
 	} else {
 		_scene->_hotspots.activate(words_poison_darts, false);
 	}
 
 	if (object_is_here(OBJ_BLOWGUN)) {
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
-		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(90, 87));
-		_scene->_sequences.setDepth(g_sequence_ids[2], 13);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
+		kernel_seq_loc(g_sequence_ids[2], 90, 87);
+		kernel_seq_depth(g_sequence_ids[2], 13);
 	} else {
 		_scene->_hotspots.activate(words_blowgun, false);
 	}
@@ -75,11 +75,11 @@ static void room_214_init() {
 static void room_214_daemon() {
 	if ((player.clock - local._devilTime > 800) && !local._devilRunningFl) {
 		local._devilRunningFl = true;
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 6, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 2);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 6, 1);
+		kernel_seq_range(g_sequence_ids[3], 1, 4);
+		kernel_seq_depth(g_sequence_ids[3], 2);
 		_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (local._devilRunningFl) {
@@ -87,23 +87,23 @@ static void room_214_daemon() {
 		case 71:
 		{
 			int oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 5, 0, 0);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 5);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
 			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, 8);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 2);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			kernel_seq_range(g_sequence_ids[3], 5, 8);
+			kernel_seq_depth(g_sequence_ids[3], 2);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		}
 		break;
 
 		case 72:
 		{
 			int oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
 			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 9, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 2);
+			kernel_seq_range(g_sequence_ids[3], 9, -2);
+			kernel_seq_depth(g_sequence_ids[3], 2);
 			local._devilTime = player.clock;
 			local._devilRunningFl = false;
 		}
@@ -125,23 +125,23 @@ static void room_214_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], true, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], true, 6, 0, 0, 1);
+			kernel_seq_player(g_sequence_ids[4], false);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
-			g_sequence_ids[4] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[4], true, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_scene->_sequences.remove(g_sequence_ids[1]);
+			g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], true, 6, 0, 0, 1);
+			kernel_seq_player(g_sequence_ids[4], false);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_delete(g_sequence_ids[1]);
 			inter_give_to_player(OBJ_POISON_DARTS);
 			_scene->_hotspots.activate(words_poison_darts, false);
 			break;
 
 		case 2:
 			player.walker_visible = true;
-			_scene->_sequences.addTimer(48, 3);
+			kernel_timing_trigger(48, 3);
 			break;
 
 		case 3:
@@ -157,23 +157,23 @@ static void room_214_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 1);
+			kernel_seq_player(g_sequence_ids[4], false);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
-			g_sequence_ids[4] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[4], false, 6, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
-			_scene->_sequences.remove(g_sequence_ids[2]);
+			g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 6, 0, 0, 1);
+			kernel_seq_player(g_sequence_ids[4], false);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_delete(g_sequence_ids[2]);
 			inter_give_to_player(OBJ_BLOWGUN);
 			_scene->_hotspots.activate(words_blowgun, false);
 			break;
 
 		case 2:
 			player.walker_visible = true;
-			_scene->_sequences.addTimer(48, 3);
+			kernel_timing_trigger(48, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index ac18e948de8..898ebe9f406 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -35,9 +35,9 @@ static void room_215_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('e', 0), 0);
 	g_sprite_ids[3] = kernel_load_series(kernel_name('a', 0), 0);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 0, 0, 0);
-	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(235, 83));
-	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 0);
+	kernel_seq_loc(g_sequence_ids[1], 235, 83);
+	kernel_seq_depth(g_sequence_ids[1], 15);
 
 	if (global[kSexOfRex] == REX_MALE)
 		g_sprite_ids[2] = kernel_load_series("*RXMRC_9", 0);
@@ -50,8 +50,8 @@ static void room_215_init() {
 		player.facing = FACING_SOUTHWEST;
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-		_scene->_sequences.addTimer(120, 70);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+		kernel_timing_trigger(120, 70);
 	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 204;
 		player.y = 152;
@@ -64,13 +64,13 @@ static void room_215_init() {
 
 static void room_215_daemon() {
 	if (kernel.trigger == 70) {
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (kernel.trigger == 71) {
-		_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
+		kernel_seq_timeout(g_sequence_ids[3], -1);
 		player.walker_visible = true;
 		player.commands_allowed = true;
 	}
@@ -86,11 +86,11 @@ static void room_215_parser() {
 				if (global[kSexOfRex] == REX_MALE) {
 					player.walker_visible = false;
 					player.commands_allowed = false;
-					g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 6, 2, 0, 0);
-					_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 4);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_LOOP, 0, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 6, 0, 0, 2);
+					kernel_seq_range(g_sequence_ids[2], 1, 4);
+					kernel_seq_player(g_sequence_ids[2], false);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_LOOP, 0, 1);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					inter_give_to_player(OBJ_TWINKIFRUIT);
 					object_examine(OBJ_TWINKIFRUIT, 0x5404, 0);
@@ -107,7 +107,7 @@ static void room_215_parser() {
 			case 2:
 				player.walker_visible = true;
 				player.commands_allowed = true;
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[2]);
+				kernel_seq_timeout(g_sequence_ids[2], -1);
 				break;
 
 			default:
diff --git a/engines/mads/nebular/rooms/room301.cpp b/engines/mads/nebular/rooms/room301.cpp
index 297d736dcf9..e3a75bf9a21 100644
--- a/engines/mads/nebular/rooms/room301.cpp
+++ b/engines/mads/nebular/rooms/room301.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_301_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('x', 0), 0);
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
 
 	global[kMeteorologistStatus] = METEOROLOGIST_GONE;
 	global[kTeleporterCommand] = TELEPORTER_NONE;
diff --git a/engines/mads/nebular/rooms/room303.cpp b/engines/mads/nebular/rooms/room303.cpp
index db5d4ae6286..e85737dc567 100644
--- a/engines/mads/nebular/rooms/room303.cpp
+++ b/engines/mads/nebular/rooms/room303.cpp
@@ -35,9 +35,9 @@ static void room_303_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
 	g_sprite_ids[2] = kernel_load_series(kernel_name('b', 1), 0);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 10, 0, 50, 120);
-	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 10, 0, 0, 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 10, 120, 50, 0);
+	kernel_seq_depth(g_sequence_ids[1], 1);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 10, 0, 0, 0);
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index 8f39a425855..c46d88f1790 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -52,8 +52,8 @@ static void room_304_init() {
 		g_sprite_ids[2] = kernel_load_series(kernel_name('a', 1), 0);
 		g_sprite_ids[3] = kernel_load_series(kernel_name('b', 0), 0);
 
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 150, 0, 3, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 2);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 150, 0, 3, 0);
+		kernel_seq_depth(g_sequence_ids[3], 2);
 		pal_change_color(252, 45, 63, 45);
 		pal_change_color(253, 20, 45, 20);
 
@@ -66,9 +66,9 @@ static void room_304_init() {
 			player.y = 116;
 		}
 
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 11, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], -1, -1);
-		_scene->_sequences.addTimer(48, 70);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 11, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[2], -1, -1);
+		kernel_timing_trigger(48, 70);
 	}
 
 	section_3_music();
@@ -84,74 +84,74 @@ static void room_304_daemon() {
 		case 70:
 		{
 			player.walker_visible = false;
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, 4);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 2, 4);
+			kernel_seq_depth(g_sequence_ids[2], 1);
 			if (global[kSexOfRex] == REX_MALE)
 				local._explosionSpriteId = g_sprite_ids[1];
 			else
 				local._explosionSpriteId = g_sprite_ids[4];
 
-			int sprIdx = _scene->_sequences.addSpriteCycle(local._explosionSpriteId, false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(sprIdx, -1, 4);
-			_scene->_sequences.setDepth(sprIdx, 1);
-			_scene->_sequences.addSubEntry(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			int sprIdx = kernel_seq_forward(local._explosionSpriteId, false, 8, 0, 0, 1);
+			kernel_seq_range(sprIdx, -1, 4);
+			kernel_seq_depth(sprIdx, 1);
+			kernel_seq_trigger(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 		}
 		break;
 
 		case 71:
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0xEB), 0, 0, 0x1110, 60, 0, 34);
-			_scene->_sequences.addTimer(1, 72);
+			kernel_timing_trigger(1, 72);
 			break;
 
 		case 72:
 		{
 			g_engine->_soundManager->command(43, 0);
-			int sprIdx = _scene->_sequences.addSpriteCycle(local._explosionSpriteId, false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(sprIdx, 5, -2);
-			_scene->_sequences.setDepth(sprIdx, 1);
-			_scene->_sequences.addSubEntry(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			int sprIdx = kernel_seq_forward(local._explosionSpriteId, false, 8, 0, 0, 1);
+			kernel_seq_range(sprIdx, 5, -2);
+			kernel_seq_depth(sprIdx, 1);
+			kernel_seq_trigger(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 			if (config_file.naughtiness == STORYMODE_NICE)
-				_scene->_sequences.addSubEntry(sprIdx, SEQUENCE_TRIGGER_SPRITE, 8, 78);
+				kernel_seq_trigger(sprIdx, SEQUENCE_TRIGGER_SPRITE, 8, 78);
 		}
 		break;
 
 		case 73:
 		{
-			int sprIdx = _scene->_sequences.addSpriteCycle(local._explosionSpriteId, false, 8, 0, 0, 0);
-			_scene->_sequences.setAnimRange(sprIdx, -2, -2);
-			_scene->_sequences.setDepth(sprIdx, 1);
+			int sprIdx = kernel_seq_forward(local._explosionSpriteId, false, 8, 0, 0, 0);
+			kernel_seq_range(sprIdx, -2, -2);
+			kernel_seq_depth(sprIdx, 1);
 		}
 		break;
 
 		case 74:
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 5, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 5, -2);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 			break;
 
 		case 75:
-			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 2, -2);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 			break;
 
 		case 76:
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 0, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, 2);
-			_scene->_sequences.addTimer(48, 77);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 0);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_range(g_sequence_ids[2], 2, 2);
+			kernel_timing_trigger(48, 77);
 			break;
 
 		case 77:
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0xEC), 211, 45, 0xFDFC, 180, 0, 32);
-			_scene->_sequences.addTimer(120, 78);
+			kernel_timing_trigger(120, 78);
 			break;
 
 		case 78:
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 7db6fa3722c..2da92f70df5 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -283,9 +283,9 @@ static void room_307_init() {
 
 	init_forcefield(&local._forcefield, true);
 
-	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[4], 15);
+	g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
+	kernel_seq_loc(g_sequence_ids[4], 127, 78);
+	kernel_seq_depth(g_sequence_ids[4], 15);
 
 	local._animationMode = 0;
 	local._fieldCollisionCounter = 0;
@@ -353,10 +353,10 @@ static void room_307_init() {
 		int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(129, 104), FACING_NORTH);
 		_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_UP);
 
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 2);
-		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-		_scene->_sequences.setDepth(g_sequence_ids[4], 15);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 2);
+		kernel_seq_loc(g_sequence_ids[4], 127, 78);
+		kernel_seq_depth(g_sequence_ids[4], 15);
 	}
 
 	pal_change_color(252, 63, 30, 20);
@@ -488,60 +488,60 @@ static void room_307_parser() {
 			player.commands_allowed = false;
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 239), 0, 0, 0x1110, 120, 0, 34);
-			_scene->_sequences.addTimer(120, 1);
+			kernel_timing_trigger(120, 1);
 			break;
 
 		case 1:
 			g_sprite_ids[5] = kernel_load_series("*RXCL_8", 0);
 			player.walker_visible = false;
-			g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[5], -1, 3);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[5], -1, 3);
+			kernel_seq_player(g_sequence_ids[5], false);
+			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
 		{
 			int oldIdx = g_sequence_ids[5];
-			g_sequence_ids[5] = _scene->_sequences.startPingPongCycle(g_sprite_ids[5], false, 12, 6, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-			_scene->_sequences.setAnimRange(g_sequence_ids[5], 2, 3);
-			_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
-			_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], false, 12, 0, 0, 6);
+			kernel_seq_player(g_sequence_ids[5], false);
+			kernel_seq_range(g_sequence_ids[5], 2, 3);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[5]);
+			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
 		case 3:
 		{
 			int oldIdx = g_sequence_ids[5];
-			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-			_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
-			_scene->_sequences.addTimer(48, 4);
+			g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
+			kernel_seq_player(g_sequence_ids[5], false);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[5]);
+			kernel_timing_trigger(48, 4);
 		}
 		break;
 
 		case 4:
 			g_engine->_soundManager->command(26, 0);
-			_scene->_sequences.remove(g_sequence_ids[4]);
-			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 2);
-			_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-			_scene->_sequences.setDepth(g_sequence_ids[4], 15);
-			_scene->_sequences.addTimer(90, 5);
+			kernel_seq_delete(g_sequence_ids[4]);
+			g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 2);
+			kernel_seq_loc(g_sequence_ids[4], 127, 78);
+			kernel_seq_depth(g_sequence_ids[4], 15);
+			kernel_timing_trigger(90, 5);
 			break;
 
 		case 5:
 			g_engine->_soundManager->command(10, 0);
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 241), 0, 0, 0x1110, 120, 0, 34);
-			_scene->_sequences.addTimer(120, 6);
+			kernel_timing_trigger(120, 6);
 			break;
 
 		case 6:
 		{
 			player.walker_visible = true;
 			player.clock = kernel.clock - player.frame_delay;
-			_scene->_sequences.remove(g_sequence_ids[5]);
+			kernel_seq_delete(g_sequence_ids[5]);
 			local._grateOpenedFl = true;
 			_scene->_hotspots.activate(17, false);
 			int idx = _scene->_dynamicHotspots.add(words_air_vent, words_climb_into, -1, Common::Rect(117, 67, 117 + 19, 67 + 13));
@@ -567,73 +567,73 @@ static void room_307_parser() {
 				g_sprite_ids[5] = kernel_load_series("*RXCL_8", 0);
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				_scene->_sequences.remove(g_sequence_ids[4]);
-				g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 60, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[4], 3, -2);
-				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(g_sequence_ids[4], 15);
-				g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 18, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[5], -1, 4);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-				_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_delete(g_sequence_ids[4]);
+				g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 60, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[4], 3, -2);
+				kernel_seq_loc(g_sequence_ids[4], 127, 78);
+				kernel_seq_depth(g_sequence_ids[4], 15);
+				g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 18, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[5], -1, 4);
+				kernel_seq_player(g_sequence_ids[5], false);
+				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
-				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, -2);
-				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(g_sequence_ids[4], 15);
+				g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, -2);
+				kernel_seq_loc(g_sequence_ids[4], 127, 78);
+				kernel_seq_depth(g_sequence_ids[4], 15);
 				break;
 
 			case 2:
 			{
 				int oldIdx = g_sequence_ids[5];
-				g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[5], 4, 10);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-				_scene->_sequences.updateTimeout(g_sequence_ids[5], oldIdx);
-				_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[5], 4, 10);
+				kernel_seq_player(g_sequence_ids[5], false);
+				kernel_seq_timeout(oldIdx, g_sequence_ids[5]);
+				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 			}
 			break;
 
 			case 3:
-				_scene->_sequences.remove(g_sequence_ids[4]);
-				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 3);
-				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(g_sequence_ids[4], 1);
-				g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 11);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-				_scene->_sequences.setPosition(g_sequence_ids[5], Common::Point(129, 102));
-				_scene->_sequences.addTimer(48, 4);
+				kernel_seq_delete(g_sequence_ids[4]);
+				g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 3);
+				kernel_seq_loc(g_sequence_ids[4], 127, 78);
+				kernel_seq_depth(g_sequence_ids[4], 1);
+				g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 11);
+				kernel_seq_player(g_sequence_ids[5], false);
+				kernel_seq_loc(g_sequence_ids[5], 129, 102);
+				kernel_timing_trigger(48, 4);
 				break;
 
 			case 4:
-				_scene->_sequences.remove(g_sequence_ids[4]);
-				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 2);
-				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(g_sequence_ids[4], 1);
-				_scene->_sequences.remove(g_sequence_ids[5]);
-				g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[5], 12, 14);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-				_scene->_sequences.setPosition(g_sequence_ids[5], Common::Point(129, 102));
-				_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+				kernel_seq_delete(g_sequence_ids[4]);
+				g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 2);
+				kernel_seq_loc(g_sequence_ids[4], 127, 78);
+				kernel_seq_depth(g_sequence_ids[4], 1);
+				kernel_seq_delete(g_sequence_ids[5]);
+				g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[5], 12, 14);
+				kernel_seq_player(g_sequence_ids[5], false);
+				kernel_seq_loc(g_sequence_ids[5], 129, 102);
+				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 				break;
 
 			case 5:
-				g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 15);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-				_scene->_sequences.setPosition(g_sequence_ids[5], Common::Point(129, 102));
-				_scene->_sequences.addTimer(48, 6);
+				g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 15);
+				kernel_seq_player(g_sequence_ids[5], false);
+				kernel_seq_loc(g_sequence_ids[5], 129, 102);
+				kernel_timing_trigger(48, 6);
 				break;
 
 			case 6:
-				_scene->_sequences.remove(g_sequence_ids[5]);
-				_scene->_sequences.remove(g_sequence_ids[4]);
-				g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
-				_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-				_scene->_sequences.setDepth(g_sequence_ids[4], 1);
-				_scene->_sequences.addTimer(48, 7);
+				kernel_seq_delete(g_sequence_ids[5]);
+				kernel_seq_delete(g_sequence_ids[4]);
+				g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
+				kernel_seq_loc(g_sequence_ids[4], 127, 78);
+				kernel_seq_depth(g_sequence_ids[4], 1);
+				kernel_timing_trigger(48, 7);
 				break;
 
 			case 7:
@@ -655,23 +655,23 @@ static void room_307_parser() {
 				local._duringPeeingFl = true;
 				player.commands_allowed = false;
 				player.walker_visible = false;
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], -1, 2);
-				_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[3], -1, 2);
+				kernel_seq_depth(g_sequence_ids[3], 9);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 5, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], 3, -2);
-				_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 5);
+				kernel_seq_range(g_sequence_ids[3], 3, -2);
+				kernel_seq_depth(g_sequence_ids[3], 9);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 2:
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
+				kernel_seq_timeout(g_sequence_ids[3], -1);
 				player.walker_visible = true;
-				_scene->_sequences.addTimer(48, 3);
+				kernel_timing_trigger(48, 3);
 				break;
 
 			case 3:
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index 7f9e4c3eccc..ec892da9bb7 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -53,12 +53,12 @@ static void room_308_init() {
 	pal_change_color(252, 63, 30, 20);
 	pal_change_color(253, 45, 15, 12);
 
-	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[4], 15);
-	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-	_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-	_scene->_sequences.addTimer(48, 70);
+	g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
+	kernel_seq_loc(g_sequence_ids[4], 127, 78);
+	kernel_seq_depth(g_sequence_ids[4], 15);
+	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+	kernel_seq_depth(g_sequence_ids[3], 9);
+	kernel_timing_trigger(48, 70);
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
@@ -80,80 +80,80 @@ static void room_308_daemon() {
 	switch (kernel.trigger) {
 	case 70:
 	{
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 18, 9, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 18, 0, 0, 9);
+		kernel_seq_range(g_sequence_ids[3], 2, 3);
+		kernel_seq_depth(g_sequence_ids[3], 9);
 		kernel_message_purge();
 		int idx = kernel_message_add(quote_string(kernel.quotes, 244), 171, 21, 0xFDFC, 120, 0, 0);
 		kernel_message_teletype(idx, 2, true);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 	break;
 
 	case 71:
 	{
 		int seqIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
-		_scene->_sequences.addTimer(48, 72);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 4);
+		kernel_seq_depth(g_sequence_ids[3], 9);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(48, 72);
 	}
 	break;
 
 	case 72:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 20, 5, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 3, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 20, 0, 0, 5);
+		kernel_seq_range(g_sequence_ids[3], 3, 4);
+		kernel_seq_depth(g_sequence_ids[3], 9);
 		kernel_message_purge();
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 		break;
 
 	case 73:
 	{
 		int seqIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 5);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
-		_scene->_sequences.addTimer(48, 74);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 5);
+		kernel_seq_depth(g_sequence_ids[3], 9);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(48, 74);
 	}
 	break;
 
 	case 74:
 	{
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 20, 8, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 6, 7);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 20, 0, 0, 8);
+		kernel_seq_range(g_sequence_ids[3], 6, 7);
+		kernel_seq_depth(g_sequence_ids[3], 9);
 		kernel_message_purge();
 		int idx = kernel_message_add(quote_string(kernel.quotes, 245), 171, 21, 0xFDFC, 120, 0, 0);
 		kernel_message_teletype(idx, 2, true);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 	}
 	break;
 
 	case 75:
 	{
 		int seqIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 23, 5, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 10);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 23, 0, 0, 5);
+		kernel_seq_range(g_sequence_ids[3], 8, 10);
+		kernel_seq_depth(g_sequence_ids[3], 9);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[3]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 	}
 	break;
 
 	case 76:
 	{
 		int seqIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 26, 0, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 9);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 26, 0, 0, 0);
+		kernel_seq_range(g_sequence_ids[3], 2, 3);
+		kernel_seq_depth(g_sequence_ids[3], 9);
 		kernel_message_purge();
 		int idx = kernel_message_add(quote_string(kernel.quotes, 246), 171, 21, 0xFDFC, 120, 0, 0);
 		kernel_message_teletype(idx, 2, true);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[3]);
 	}
 	break;
 
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index 69d18631d4d..e121a0a6f0c 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -53,14 +53,14 @@ static void room_309_init() {
 	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
 	g_sprite_ids[4] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
 
-	g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[4], 15);
+	g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
+	kernel_seq_loc(g_sequence_ids[4], 127, 78);
+	kernel_seq_depth(g_sequence_ids[4], 15);
 
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
-	_scene->_sequences.setAnimRange(g_sequence_ids[3], -1, 3);
-	_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-	_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 3, 70);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 0, 0, 1);
+	kernel_seq_range(g_sequence_ids[3], -1, 3);
+	kernel_seq_depth(g_sequence_ids[3], 11);
+	kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 3, 70);
 
 	pal_change_color(252, 63, 37, 26);
 	pal_change_color(253, 45, 24, 17);
@@ -136,91 +136,91 @@ static void room_309_daemon() {
 		{
 			int idx = _scene->_dynamicHotspots.add(words_ghastly_beast, words_gawk_at, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(142, 146), FACING_NORTHEAST);
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 4, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 4);
+			kernel_seq_range(g_sequence_ids[3], 2, 3);
+			kernel_seq_depth(g_sequence_ids[3], 11);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 		}
 		break;
 
 		case 71:
 		{
 			int _oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 7);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[3], 4, 7);
+			kernel_seq_depth(g_sequence_ids[3], 11);
+			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
 			int idx = kernel_message_add(quote_string(kernel.quotes, 248), 85, 37, 0xFDFC, 120, 0, 0);
 			kernel_message_teletype(idx, 2, true);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		}
 		break;
 
 		case 72:
 		{
 			int _oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 8, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 8, 11);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 8);
+			kernel_seq_range(g_sequence_ids[3], 8, 11);
+			kernel_seq_depth(g_sequence_ids[3], 11);
+			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 		}
 		break;
 
 		case 73:
 		{
 			int _oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 12, 20);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[3], 12, 20);
+			kernel_seq_depth(g_sequence_ids[3], 11);
+			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
 			int idx = kernel_message_add(quote_string(kernel.quotes, 249), 170, 49, 0xFDFC, 120, 0, 0);
 			kernel_message_teletype(idx, 2, true);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 		}
 		break;
 
 		case 74:
 		{
 			int _oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 6, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 21, 23);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 6);
+			kernel_seq_range(g_sequence_ids[3], 21, 23);
+			kernel_seq_depth(g_sequence_ids[3], 11);
+			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 		}
 		break;
 
 		case 75:
 		{
 			int _oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 6, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 24, 25);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 6);
+			kernel_seq_range(g_sequence_ids[3], 24, 25);
+			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
+			kernel_seq_depth(g_sequence_ids[3], 11);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 		}
 		break;
 
 		case 76:
 		{
 			int _oldIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 26, 28);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], _oldIdx);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[3], 26, 28);
+			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
+			kernel_seq_depth(g_sequence_ids[3], 11);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
 		}
 		break;
 
 		case 77:
 		{
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 90, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 29, 30);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 11);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 90, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[3], 29, 30);
+			kernel_seq_depth(g_sequence_ids[3], 11);
 			int idx = kernel_message_add(quote_string(kernel.quotes, 247), 15, 46, 0xFDFC, 120, 0, 0);
 			kernel_message_teletype(idx, 2, true);
-			_scene->_sequences.addTimer(120, 78);
+			kernel_timing_trigger(120, 78);
 		}
 		break;
 
diff --git a/engines/mads/nebular/rooms/room310.cpp b/engines/mads/nebular/rooms/room310.cpp
index 1893f5dbfe0..387737fdf92 100644
--- a/engines/mads/nebular/rooms/room310.cpp
+++ b/engines/mads/nebular/rooms/room310.cpp
@@ -47,9 +47,9 @@ static void room_310_init() {
 	init_forcefield(&local._forcefield, true);
 
 	g_sprite_ids[3] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
-	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[3], 15);
+	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+	kernel_seq_loc(g_sequence_ids[3], 127, 78);
+	kernel_seq_depth(g_sequence_ids[3], 15);
 
 	player.walker_visible = false;
 	player.commands_allowed = false;
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index 2e54dd0b3f7..e7e3a51bd8a 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -43,9 +43,9 @@ static void room_311_init() {
 	g_sprite_ids[2] = kernel_load_series("*RXCL_8", 0);
 	g_sprite_ids[3] = kernel_load_series("*RXCL_2", 0);
 
-	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+	kernel_seq_loc(g_sequence_ids[1], 165, 76);
+	kernel_seq_depth(g_sequence_ids[1], 15);
 
 	local._checkGuardFl = false;
 	kernel.quotes = quote_load(0xFA, 0);
@@ -57,7 +57,7 @@ static void room_311_init() {
 		player.facing = FACING_SOUTH;
 		player.x = 166;
 		player.y = 101;
-		_scene->_sequences.addTimer(120, 71);
+		kernel_timing_trigger(120, 71);
 	} else if (previous_room == 310) {
 		player.x = 302;
 		player.y = 145;
@@ -84,92 +84,92 @@ static void room_311_daemon() {
 		break;
 
 	case 71:
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addTimer(15, 72);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 2);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
+
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_timing_trigger(15, 72);
 		break;
 
 	case 72:
-		_scene->_sequences.setDone(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addTimer(15, 73);
+		kernel_player_expire(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 2);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_timing_trigger(15, 73);
 		break;
 
 	case 73:
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-		_scene->_sequences.setDone(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addTimer(15, 74);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 3);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
+
+		kernel_player_expire(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 3);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_timing_trigger(15, 74);
 		break;
 
 	case 74:
-		_scene->_sequences.setDone(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		kernel_player_expire(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 4, 5);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 		break;
 
 	case 75:
 		oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(15, 76);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(15, 76);
 		break;
 
 	case 76:
-		_scene->_sequences.setDone(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addTimer(15, 77);
+		kernel_player_expire(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 7);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_timing_trigger(15, 77);
 		break;
 
 	case 77:
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-		_scene->_sequences.setDone(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 8);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addTimer(15, 78);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 2);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
+
+		kernel_player_expire(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 8);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_timing_trigger(15, 78);
 		break;
 
 	case 78:
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-
-		_scene->_sequences.setDone(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 9);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addTimer(15, 79);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 15);
+
+		kernel_player_expire(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 9);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_timing_trigger(15, 79);
 		break;
 
 	case 79:
-		_scene->_sequences.setDone(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 10, -2);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		kernel_player_expire(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 10, -2);
+		kernel_seq_player(g_sequence_ids[3], false);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
 		break;
 
 	case 80:
-		_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
+		kernel_seq_timeout(g_sequence_ids[3], -1);
 		player.commands_allowed = true;
 		player.walker_visible = true;
 		break;
@@ -205,88 +205,88 @@ static void room_311_parser() {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 50, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[1], 3, -2);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], -1, 4);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 50, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[1], 3, -2);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 15);
+
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], -1, 4);
+			kernel_seq_player(g_sequence_ids[2], false);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
 		{
 			int oldIdx = g_sequence_ids[1];
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, -2);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-			_scene->_sequences.updateTimeout(g_sequence_ids[1], oldIdx);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, -2);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 15);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[1]);
 		}
 		break;
 
 		case 2:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 4, 10);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 4, 10);
+			kernel_seq_player(g_sequence_ids[2], false);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
 		case 3:
 		{
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 3);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 1);
 
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 11);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addTimer(15, 4);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 11);
+			kernel_seq_player(g_sequence_ids[2], false);
+			kernel_seq_loc(g_sequence_ids[2], 167, 100);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_timing_trigger(15, 4);
 		}
 		break;
 
 		case 4:
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 12, 14);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 2);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 1);
+
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[2], 12, 14);
+			kernel_seq_player(g_sequence_ids[2], false);
+			kernel_seq_loc(g_sequence_ids[2], 167, 100);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 			break;
 
 		case 5:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 15);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addTimer(15, 6);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 15);
+			kernel_seq_player(g_sequence_ids[2], false);
+			kernel_seq_loc(g_sequence_ids[2], 167, 100);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_timing_trigger(15, 6);
 		}
 		break;
 
 		case 6:
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-			_scene->_sequences.addTimer(15, 7);
+			kernel_seq_delete(g_sequence_ids[2]);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 1);
+			kernel_timing_trigger(15, 7);
 			break;
 
 		case 7:
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index 5c19cd49fc6..dc2200f6170 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -36,112 +36,112 @@ static void handleRexInGrate() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.addTimer(15, 1);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_timing_trigger(15, 1);
 		break;
 
 	case 1:
-		_scene->_sequences.setDone(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 12, 3, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 2, 3);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_player_expire(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 12, 0, 0, 3);
+		kernel_seq_range(g_sequence_ids[4], 2, 3);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 2:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 4, 8);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 4, 8);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 2, -2);
+		kernel_seq_depth(g_sequence_ids[3], 12);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 	}
 	break;
 
 	case 3:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
+		kernel_seq_depth(g_sequence_ids[3], 12);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
 	}
 	break;
 
 	case 4:
 	{
 		int oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 10, 11);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 10, 11);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 5, -2);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 	}
 	break;
 
 	case 5:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 3);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
 
 		oldIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 12);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], oldIdx);
-		_scene->_sequences.addTimer(15, 6);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 12);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
+		kernel_timing_trigger(15, 6);
 	}
 	break;
 
 	case 6:
-		_scene->_sequences.setDone(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 13, 14);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+		kernel_player_expire(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 13, 14);
+		kernel_seq_player(g_sequence_ids[4], false);
+
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 2, 3);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 		break;
 
 	case 7:
-		_scene->_sequences.setDone(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 15);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], -1);
+		kernel_player_expire(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 15);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_timeout(-1, g_sequence_ids[4]);
 		break;
 
 	case 8:
 	{
 		int oldIdx = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], oldIdx);
-		_scene->_sequences.addTimer(15, 9);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 2);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
+		kernel_timing_trigger(15, 9);
 	}
 	break;
 
 	case 9:
-		_scene->_sequences.setDone(g_sequence_ids[4]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.addTimer(48, 10);
+		kernel_player_expire(g_sequence_ids[4]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_timing_trigger(48, 10);
 		break;
 
 	case 10:
@@ -161,102 +161,102 @@ static void handleRoxInGrate() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.addTimer(15, 1);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_timing_trigger(15, 1);
 		break;
 
 	case 1:
-		_scene->_sequences.setDone(g_sequence_ids[5]);
-		g_sequence_ids[5] = _scene->_sequences.startPingPongCycle(g_sprite_ids[5], false, 17, 3, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[5], 2, 3);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_player_expire(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], false, 17, 0, 0, 3);
+		kernel_seq_range(g_sequence_ids[5], 2, 3);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 2:
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 17, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 2, -2);
+		kernel_seq_depth(g_sequence_ids[3], 12);
 
 		temp = g_sequence_ids[5];
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[5], 4, 8);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[5], temp);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 17, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[5], 4, 8);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_seq_timeout(temp, g_sequence_ids[5]);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 		break;
 
 	case 3:
 		temp1 = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 12);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], temp1);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
+		kernel_seq_depth(g_sequence_ids[3], 12);
+		kernel_seq_timeout(temp1, g_sequence_ids[3]);
 		break;
 
 	case 4:
 		temp = g_sequence_ids[5];
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[5], 10, 11);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[5], temp);
-
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 5, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 17, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[5], 10, 11);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_seq_timeout(temp, g_sequence_ids[5]);
+
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 17, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 5, -2);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 		break;
 
 	case 5:
 		temp = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], temp);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 3);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_timeout(temp, g_sequence_ids[3]);
 
 		temp = g_sequence_ids[5];
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 12);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[5], temp);
-		_scene->_sequences.addTimer(20, 6);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 12);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_seq_timeout(temp, g_sequence_ids[5]);
+		kernel_timing_trigger(20, 6);
 		break;
 
 	case 6:
-		_scene->_sequences.setDone(g_sequence_ids[5]);
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[5], 13, 15);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 17, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 3);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.addSubEntry(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+		kernel_player_expire(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 17, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[5], 13, 15);
+		kernel_seq_player(g_sequence_ids[5], false);
+
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 17, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[3], 2, 3);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 		break;
 
 	case 7:
-		_scene->_sequences.setDone(g_sequence_ids[5]);
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 16);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[5]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[5], -1);
+		kernel_player_expire(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 16);
+		kernel_seq_player(g_sequence_ids[5], false);
+		kernel_seq_timeout(-1, g_sequence_ids[5]);
 		break;
 
 	case 8:
 		temp = g_sequence_ids[3];
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.updateTimeout(g_sequence_ids[3], temp);
-		_scene->_sequences.addTimer(20, 9);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 2);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_seq_timeout(temp, g_sequence_ids[3]);
+		kernel_timing_trigger(20, 9);
 		break;
 
 	case 9:
-		_scene->_sequences.setDone(g_sequence_ids[5]);
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-		_scene->_sequences.addTimer(48, 10);
+		kernel_player_expire(g_sequence_ids[5]);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+		kernel_seq_depth(g_sequence_ids[3], 3);
+		kernel_timing_trigger(48, 10);
 		break;
 
 	case 10:
@@ -279,8 +279,8 @@ static void room_316_init() {
 	}
 
 	g_sprite_ids[3] = kernel_load_series(kernel_name('v', 0), 0);
-	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-	_scene->_sequences.setDepth(g_sequence_ids[3], 12);
+	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+	kernel_seq_depth(g_sequence_ids[3], 12);
 
 	if (previous_room == 366) {
 		player.commands_allowed = false;
@@ -288,7 +288,7 @@ static void room_316_init() {
 		player.x = 78;
 		player.y = 87;
 		player.facing = FACING_SOUTH;
-		_scene->_sequences.addTimer(48, 70);
+		kernel_timing_trigger(48, 70);
 	} else if (previous_room == 321) {
 		player.x = 153;
 		player.y = 102;
@@ -297,9 +297,9 @@ static void room_316_init() {
 		player.walker_visible = false;
 		g_engine->_soundManager->command(44, 0);
 		int spriteIdx = (global[kSexOfRex] == REX_MALE) ? 1 : 2;
-		g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[spriteIdx], false, 6, 1, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[spriteIdx], false, 6, 0, 0, 1);
+		kernel_seq_depth(g_sequence_ids[1], 2);
+		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
 	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 291;
 		player.y = 126;
@@ -311,7 +311,7 @@ static void room_316_init() {
 
 static void room_316_daemon() {
 	if (kernel.trigger == 60) {
-		_scene->_sequences.updateTimeout(-1, g_sequence_ids[1]);
+		kernel_seq_timeout(g_sequence_ids[1], -1);
 		player.walker_visible = true;
 		player.commands_allowed = true;
 	}
@@ -319,63 +319,63 @@ static void room_316_daemon() {
 	if (kernel.trigger >= 70) {
 		switch (kernel.trigger) {
 		case 70:
-			_scene->_sequences.remove(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 2, 6);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-
-			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 5);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			kernel_seq_delete(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[3], 2, 6);
+			kernel_seq_depth(g_sequence_ids[3], 3);
+
+			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[6], 1, 5);
+			kernel_seq_player(g_sequence_ids[6], false);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 			break;
 
 		case 71:
 		{
 			int synxIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 3);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], synxIdx);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
+			kernel_seq_depth(g_sequence_ids[3], 3);
+			kernel_seq_timeout(synxIdx, g_sequence_ids[3]);
 		}
 		break;
 
 		case 72:
 		{
 			int synxIdx = g_sequence_ids[6];
-			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[6], 6, 9);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
-			_scene->_sequences.updateTimeout(g_sequence_ids[6], synxIdx);
-			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[6], 6, 9);
+			kernel_seq_player(g_sequence_ids[6], false);
+			kernel_seq_timeout(synxIdx, g_sequence_ids[6]);
+			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 		}
 		break;
 
 		case 73:
-			_scene->_sequences.remove(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 5);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 12);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
-
-			g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[6], 10, -2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
-			_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			kernel_seq_delete(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[3], 1, 5);
+			kernel_seq_depth(g_sequence_ids[3], 12);
+			kernel_seq_player(g_sequence_ids[6], false);
+
+			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[6], 10, -2);
+			kernel_seq_player(g_sequence_ids[6], false);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 			break;
 
 		case 74:
 		{
 			int synxIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 12);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], synxIdx);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+			kernel_seq_depth(g_sequence_ids[3], 12);
+			kernel_seq_timeout(synxIdx, g_sequence_ids[3]);
 		}
 		break;
 
 		case 75:
-			_scene->_sequences.updateTimeout(-1, g_sequence_ids[6]);
+			kernel_seq_timeout(g_sequence_ids[6], -1);
 			player.commands_allowed = true;
 			player.walker_visible = true;
 			break;
@@ -411,41 +411,41 @@ static void room_316_parser() {
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				if (global[kSexOfRex] == REX_MALE) {
-					g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
-					_scene->_sequences.setAnimRange(g_sequence_ids[1], -1, 7);
-					_scene->_sequences.setDepth(g_sequence_ids[1], 2);
-					_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+					g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 1);
+					kernel_seq_range(g_sequence_ids[1], -1, 7);
+					kernel_seq_depth(g_sequence_ids[1], 2);
+					kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				} else {
-					g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 7, 1, 0, 0);
-					_scene->_sequences.setDepth(g_sequence_ids[2], 2);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+					g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
+					kernel_seq_depth(g_sequence_ids[2], 2);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				}
 			}
 			break;
 
 		case 1:
-			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[1], 8, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[1], 2);
+			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[1], 8, -2);
+			kernel_seq_depth(g_sequence_ids[1], 2);
 			kernel_message_purge();
 			if (!player_has_been_in_room(321))
 				kernel_message_add(quote_string(kernel.quotes, 253), 0, 0, 0x1110, 120, 0, 34);
 
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
-			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[1], -2, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[1], 2);
-			_scene->_sequences.addTimer(48, 4);
+			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[1], -2, -2);
+			kernel_seq_depth(g_sequence_ids[1], 2);
+			kernel_timing_trigger(48, 4);
 			break;
 
 		case 3:
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 7, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], -2, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 2);
-			_scene->_sequences.addTimer(48, 4);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[2], -2, -2);
+			kernel_seq_depth(g_sequence_ids[2], 2);
+			kernel_timing_trigger(48, 4);
 			break;
 
 		case 4:
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index 8a2ba5df22f..fc173b237a2 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -92,12 +92,12 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 	// WORKAROUND: In case the player launches multiple talk selections with the
 	// intern before previous ones have finished, take care of removing any
 	int seqIndex;
-	while ((seqIndex = _scene->_sequences.findByTrigger(63)) != -1)
-		_scene->_sequences.remove(seqIndex);
+	while ((seqIndex = kernel_seq_find_by_trigger(63)) != -1)
+		kernel_seq_delete(seqIndex);
 
 	for (int i = 0; i < quoteNum; i++) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(180, 63);
+		kernel_timing_trigger(180, 63);
 		kernel_message_add(quote_string(kernel.quotes, curQuoteId), posX, posY, 0xFDFC, timeout, 0, 0);
 		posY += 14;
 		curQuoteId++;
@@ -110,10 +110,10 @@ static void handleDialog() {
 		handleRexDialogs(player2.words[0]);
 	} else if (kernel.trigger == 2) {
 		int synxIdx = g_sequence_ids[2];
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
-		_scene->_sequences.updateTimeout(g_sequence_ids[2], synxIdx);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
+		kernel_seq_depth(g_sequence_ids[2], 1);
+		kernel_seq_loc(g_sequence_ids[2], 142, 121);
+		kernel_seq_timeout(synxIdx, g_sequence_ids[2]);
 		g_engine->_soundManager->command(3, 0);
 		_scene->_userInterface.setup(kInputBuildingSentences);
 		player.commands_allowed = true;
@@ -180,12 +180,12 @@ static void handleDialog() {
 
 		case 0x19C:
 		case 0x19D:
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 6, 8);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 8, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_loc(g_sequence_ids[2], 142, 121);
+			kernel_seq_range(g_sequence_ids[2], 6, 8);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 
 			local._dialogFl = false;
 			handleInternDialog(0x1D0, 1, 120);
@@ -221,8 +221,8 @@ static void room_318_init() {
 	}
 
 	if (object_is_here(OBJ_SCALPEL)) {
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 0, 0, 120);
-		_scene->_sequences.setDepth(g_sequence_ids[3], 4);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 120, 0, 0);
+		kernel_seq_depth(g_sequence_ids[3], 4);
 		_scene->_dynamicHotspots.add(words_scalpel, words_take, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 	}
 
@@ -287,12 +287,12 @@ static void room_318_init() {
 
 			if (local._dialogFl) {
 				local._dialog1.start();
-				g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 8);
+				g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 8);
 			} else
-				g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
+				g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
 
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
+			kernel_seq_loc(g_sequence_ids[2], 142, 121);
+			kernel_seq_depth(g_sequence_ids[2], 1);
 		}
 	}
 
@@ -446,8 +446,8 @@ static void room_318_daemon() {
 
 	if ((kernel.clock - local._dropTimer) > 600) {
 		g_engine->_soundManager->command(51, 0);
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 14, 1, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 10);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 14, 0, 0, 1);
+		kernel_seq_depth(g_sequence_ids[1], 10);
 		local._dropTimer = kernel.clock;
 	}
 }
@@ -476,12 +476,12 @@ static void room_318_parser() {
 			player.commands_allowed = false;
 			handleRexDialogs(g_engine->getRandomNumber(0x18C, 0x18E));
 
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 8, 1, 0, 80);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 6, 8);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 80, 0, 1);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_loc(g_sequence_ids[2], 142, 121);
+			kernel_seq_range(g_sequence_ids[2], 6, 8);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		}
 		break;
 
@@ -494,10 +494,10 @@ static void room_318_parser() {
 		case 2:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 8);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 8);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_loc(g_sequence_ids[2], 142, 121);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
 		}
 		break;
 
@@ -512,13 +512,13 @@ static void room_318_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 8, 2, 0, 80);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 2, 5);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 8, 80, 0, 2);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_loc(g_sequence_ids[2], 142, 121);
+			kernel_seq_range(g_sequence_ids[2], 2, 5);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -527,18 +527,18 @@ static void room_318_parser() {
 			else {
 				inter_give_to_player(OBJ_SCALPEL);
 				object_examine(OBJ_SCALPEL, 0x7C5D, 0);
-				_scene->_sequences.remove(g_sequence_ids[3]);
+				kernel_seq_delete(g_sequence_ids[3]);
 			}
 			break;
 
 		case 2:
 		{
 			int oldIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 1);
-			_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(142, 121));
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], oldIdx);
-			_scene->_sequences.addTimer(60, 3);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
+			kernel_seq_depth(g_sequence_ids[2], 1);
+			kernel_seq_loc(g_sequence_ids[2], 142, 121);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
+			kernel_timing_trigger(60, 3);
 		}
 		break;
 
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index a675b241a8a..05e4eb123c6 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -89,18 +89,18 @@ static void room_319_init() {
 	g_sprite_ids[4] = kernel_load_series(kernel_name('k', -1), 0);
 
 	if (!player_has(OBJ_SCALPEL)) {
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[4], 1);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
+		kernel_seq_depth(g_sequence_ids[4], 1);
 	}
 
-	g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 18, 0, 0, 300);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 67, 0, 0, 377);
-	g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 173, 0, 0, 233);
-	_scene->_sequences.setDepth(g_sequence_ids[2], 14);
-	_scene->_sequences.setDepth(g_sequence_ids[3], 14);
+	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 18, 300, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 67, 377, 0, 0);
+	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 173, 233, 0, 0);
+	kernel_seq_depth(g_sequence_ids[2], 14);
+	kernel_seq_depth(g_sequence_ids[3], 14);
 
-	g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
-	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+	g_sequence_ids[0] = kernel_seq_stamp(g_sprite_ids[0], false, 1);
+	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 
 	local._dialog1.setup(0x43, 0x165, 0x166, 0x167, 0x168, 0x169, 0x16A, 0);
 	local._dialog2.setup(0x44, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0);
@@ -260,14 +260,14 @@ static void room_319_daemon() {
 				}
 
 				if (!local._animFrame) {
-					_scene->_sequences.remove(g_sequence_ids[0]);
-					_scene->_sequences.remove(g_sequence_ids[1]);
+					kernel_seq_delete(g_sequence_ids[0]);
+					kernel_seq_delete(g_sequence_ids[1]);
 
 					for (int i = 0; i <= 1; i++) {
-						g_sequence_ids[i] = _scene->_sequences.addSpriteCycle(g_sprite_ids[i], false, 8, 1, 0, 0);
-						_scene->_sequences.setAnimRange(g_sequence_ids[i], 1, 7);
+						g_sequence_ids[i] = kernel_seq_forward(g_sprite_ids[i], false, 8, 0, 0, 1);
+						kernel_seq_range(g_sequence_ids[i], 1, 7);
 					}
-					_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+					kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 				}
 			}
 		}
@@ -317,18 +317,18 @@ static void room_319_daemon() {
 
 		for (int i = 0; i <= 1; i++) {
 			int oldIdx = g_sequence_ids[i];
-			_scene->_sequences.remove(g_sequence_ids[i]);
-			g_sequence_ids[i] = _scene->_sequences.addSpriteCycle(g_sprite_ids[i], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[i], 8, 13);
-			_scene->_sequences.updateTimeout(g_sequence_ids[i], oldIdx);
+			kernel_seq_delete(g_sequence_ids[i]);
+			g_sequence_ids[i] = kernel_seq_forward(g_sprite_ids[i], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[i], 8, 13);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[i]);
 		}
-		_scene->_sequences.addSubEntry(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+		kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 
 		// WORKAROUND: This fixes the game sometimes going into an endless waiting
 		// loop even after the doctor has finished hitting Rex. Note sure if it's due
 		// to a bug in room script or in the engine, but this at least fixes it
-		int seqIndex = _scene->_sequences.findByTrigger(2);
-		_scene->_sequences[seqIndex]._doneFlag = false;
+		int seqIndex = kernel_seq_find_by_trigger(2);
+		sequence_list[seqIndex].expired = false;
 		break;
 	}
 
@@ -344,19 +344,19 @@ static void room_319_daemon() {
 	case 73:
 		for (int i = 0; i <= 1; i++) {
 			int oldIdx = g_sequence_ids[i];
-			_scene->_sequences.remove(g_sequence_ids[i]);
-			g_sequence_ids[i] = _scene->_sequences.addSpriteCycle(g_sprite_ids[i], false, 8, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[i], 6, 7);
-			_scene->_sequences.updateTimeout(g_sequence_ids[i], oldIdx);
+			kernel_seq_delete(g_sequence_ids[i]);
+			g_sequence_ids[i] = kernel_seq_forward(g_sprite_ids[i], false, 8, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[i], 6, 7);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[i]);
 		}
 		break;
 
 	case 74:
 		for (int i = 0; i <= 1; i++) {
 			int oldIdx = g_sequence_ids[i];
-			_scene->_sequences.remove(g_sequence_ids[i]);
-			g_sequence_ids[i] = _scene->_sequences.startCycle(g_sprite_ids[i], false, 1);
-			_scene->_sequences.updateTimeout(g_sequence_ids[i], oldIdx);
+			kernel_seq_delete(g_sequence_ids[i]);
+			g_sequence_ids[i] = kernel_seq_stamp(g_sprite_ids[i], false, 1);
+			kernel_seq_timeout(oldIdx, g_sequence_ids[i]);
 		}
 		break;
 
@@ -379,7 +379,7 @@ static void room_319_parser() {
 			}
 
 			if (!local._slacheTalkingFl) {
-				_scene->_sequences.addTimer(4, 2);
+				kernel_timing_trigger(4, 2);
 			} else {
 				handleSlacheDialogs(0x16B, 2, INDEFINITE_TIMEOUT);
 				local._dialog2.start();
@@ -396,7 +396,7 @@ static void room_319_parser() {
 			}
 
 			if (!local._slacheTalkingFl) {
-				_scene->_sequences.addTimer(4, 2);
+				kernel_timing_trigger(4, 2);
 			} else {
 				handleSlacheDialogs(0x177, 2, INDEFINITE_TIMEOUT);
 				local._dialog3.start();
@@ -414,13 +414,13 @@ static void room_319_parser() {
 			}
 
 			if (!local._slacheTalkingFl) {
-				_scene->_sequences.addTimer(4, 2);
+				kernel_timing_trigger(4, 2);
 			} else {
 				if (kernel.trigger == 2)
 					handleSlacheDialogs(0x184, 2, 180);
 
 				if (!local._slacheReady) {
-					_scene->_sequences.addTimer(120, 3);
+					kernel_timing_trigger(120, 3);
 				} else {
 					global[kRexHasMetSlache] = true;
 					new_room = 318;
@@ -452,7 +452,7 @@ static void room_319_parser() {
 				}
 
 				if (local._nextAction1 != local._nextAction2) {
-					_scene->_sequences.addTimer(4, 2);
+					kernel_timing_trigger(4, 2);
 				} else {
 					Dialog *curDialog;
 					int nextDocQuote;
@@ -484,7 +484,7 @@ static void room_319_parser() {
 				}
 
 				if (local._nextAction1 != local._nextAction2) {
-					_scene->_sequences.addTimer(4, 2);
+					kernel_timing_trigger(4, 2);
 				} else {
 					Dialog *curDialog;
 					int nextDocQuote;
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index b9015374cfd..9ff08b63a97 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -47,7 +47,7 @@ static Scratch local;
 
 
 static void setRightView(int view) {
-	if (local._rightItemId < 8) _scene->_sequences.remove(g_sequence_ids[10]);
+	if (local._rightItemId < 8) kernel_seq_delete(g_sequence_ids[10]);
 
 	int spriteNum;
 	switch (view) {
@@ -73,8 +73,8 @@ static void setRightView(int view) {
 	}
 
 	if (view != 8) {
-		g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[spriteNum], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[10], 0);
+		g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[spriteNum], false, 1);
+		kernel_seq_depth(g_sequence_ids[10], 0);
 	}
 
 	global[kRightView320] = local._rightItemId = view;
@@ -82,13 +82,13 @@ static void setRightView(int view) {
 
 static void setLeftView(int view) {
 	if (local._leftItemId < 10)
-		_scene->_sequences.remove(g_sequence_ids[0]);
+		kernel_seq_delete(g_sequence_ids[0]);
 
 	if (view != 10) {
-		g_sequence_ids[0] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[view], false, 6, 0, 0, 18);
-		_scene->_sequences.setDepth(g_sequence_ids[0], 0);
+		g_sequence_ids[0] = kernel_seq_backward(g_sprite_ids[view], false, 6, 18, 0, 0);
+		kernel_seq_depth(g_sequence_ids[0], 0);
 		if (!local._blinkFl)
-			_scene->_sequences.setAnimRange(g_sequence_ids[0], 2, 2);
+			kernel_seq_range(g_sequence_ids[0], 2, 2);
 	}
 
 	local._leftItemId = view;
@@ -249,12 +249,12 @@ static void room_320_parser() {
 		case 0:
 			player.commands_allowed = false;
 			handleButtons();
-			g_sequence_ids[18] = _scene->_sequences.startPingPongCycle(g_sprite_ids[18], local._flippedFl, 4, 2, 0, 0);
-			_scene->_sequences.setScale(g_sequence_ids[18], 60);
-			_scene->_sequences.setPosition(g_sequence_ids[18], Common::Point(local._posX, 170));
-			_scene->_sequences.setDepth(g_sequence_ids[18], 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[18], SEQUENCE_TRIGGER_LOOP, 0, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[18], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[18] = kernel_seq_pingpong(g_sprite_ids[18], local._flippedFl, 4, 0, 0, 2);
+			kernel_seq_scale(g_sequence_ids[18], 60);
+			kernel_seq_loc(g_sequence_ids[18], local._posX, 170);
+			kernel_seq_depth(g_sequence_ids[18], 0);
+			kernel_seq_trigger(g_sequence_ids[18], SEQUENCE_TRIGGER_LOOP, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[18], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index 2d60a1c9953..d0ca35bb32d 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -40,8 +40,8 @@ static void room_351_init() {
 	g_sprite_ids[3] = kernel_load_series("*RXRD_7", 0);
 
 	if (object_is_here(OBJ_CREDIT_CHIP)) {
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 4);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[1], 4);
 	} else
 		_scene->_hotspots.activate(words_credit_chip, false);
 
@@ -128,21 +128,21 @@ static void room_351_parser() {
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				if (global[kSexOfRex] == REX_FEMALE) {
-					g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 5, 0, 0, 2);
+					kernel_seq_player(g_sequence_ids[2], false);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 5, 0, 0, 2);
+					kernel_seq_player(g_sequence_ids[3], false);
+					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
 			case 1:
 				_scene->_hotspots.activate(words_credit_chip, false);
-				_scene->_sequences.remove(g_sequence_ids[1]);
+				kernel_seq_delete(g_sequence_ids[1]);
 				inter_give_to_player(OBJ_CREDIT_CHIP);
 				break;
 
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index f9b2e940699..19ccb769c51 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -50,28 +50,28 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 	switch (kernel.trigger) {
 	case 0:
 		kernel_message_add(quote_string(kernel.quotes, 0xFF), 0, 0, 0x1110, 120, 0, 34);
-		_scene->_sequences.addTimer(48, 1);
+		kernel_timing_trigger(48, 1);
 		break;
 
 	case 1:
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		if (global[kSexOfRex] == REX_FEMALE) {
-			g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 5, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 2);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 5, 0, 0, 2);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 2);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		} else {
-			g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 5, 2, 0, 0);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 2);
-			_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 5, 0, 0, 2);
+			kernel_seq_player(g_sequence_ids[4], false);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 2);
+			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
 	case 2:
 	{
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
 		kernel_load_variant(0);
@@ -84,9 +84,9 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 		inter_move_object(OBJ_GUARDS_ARM, room_id);
 		player.walker_visible = true;
 		if (corridorExit)
-			_scene->_sequences.addTimer(48, 6);
+			kernel_timing_trigger(48, 6);
 		else if (doorwayExit)
-			_scene->_sequences.addTimer(48, 4);
+			kernel_timing_trigger(48, 4);
 		else {
 			local._mustPutArmDownFl = false;
 			player.commands_allowed = true;
@@ -96,7 +96,7 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 	case 4:
 		player_walk(116, 107, FACING_NORTH);
 		local._mustPutArmDownFl = false;
-		_scene->_sequences.addTimer(180, 5);
+		kernel_timing_trigger(180, 5);
 		local._leaveRoomFl = true;
 		break;
 
@@ -110,7 +110,7 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 		player_walk(171, 152, FACING_SOUTH);
 		player.commands_allowed = true;
 		local._mustPutArmDownFl = false;
-		_scene->_sequences.addTimer(180, 7);
+		kernel_timing_trigger(180, 7);
 		local._leaveRoomFl = true;
 		break;
 
@@ -150,8 +150,8 @@ static void room_352_init() {
 	local._leaveRoomFl = false;
 
 	if (object_is_here(OBJ_TAPE_PLAYER)) {
-		g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 12, 0, 0, 0);
-		_scene->_sequences.setDepth(g_sequence_ids[5], 5);
+		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 0);
+		kernel_seq_depth(g_sequence_ids[5], 5);
 		int idx = _scene->_dynamicHotspots.add(words_tape_player, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		local._tapePlayerHotspotIdx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(84, 145), FACING_WEST);
 	}
@@ -165,7 +165,7 @@ static void room_352_init() {
 	}
 
 	if (object_is_here(OBJ_GUARDS_ARM)) {
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
 		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
 	} else
@@ -204,11 +204,11 @@ static void room_352_pre_parser() {
 		case 0:
 			if (player.need_to_walk) {
 				player.commands_allowed = false;
-				_scene->_sequences.remove(local._commonSequenceIdx);
+				kernel_seq_delete(local._commonSequenceIdx);
 				g_engine->_soundManager->command(20, 0);
-				local._commonSequenceIdx = _scene->_sequences.addReverseSpriteCycle(local._commonSpriteIndex, false, 6, 1, 0, 0);
-				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				_scene->_sequences.setDepth(local._commonSequenceIdx, 15);
+				local._commonSequenceIdx = kernel_seq_backward(local._commonSpriteIndex, false, 6, 0, 0, 1);
+				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_depth(local._commonSequenceIdx, 15);
 			}
 			break;
 
@@ -258,35 +258,35 @@ static void room_352_parser() {
 				else
 					local._commonSpriteIndex = g_sprite_ids[8];
 
-				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
-				_scene->_sequences.updateTimeout(local._commonSequenceIdx, -1);
-				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				local._commonSequenceIdx = kernel_seq_forward(local._commonSpriteIndex, false, 8, 0, 0, 1);
+				kernel_seq_timeout(-1, local._commonSequenceIdx);
+				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
 			{
 				g_engine->_soundManager->command(21, 0);
-				g_sequence_ids[12] = _scene->_sequences.startPingPongCycle(g_sprite_ids[12], false, 7, 2, 20, 0);
-				_scene->_sequences.setDepth(g_sequence_ids[12], FACING_NORTH);
+				g_sequence_ids[12] = kernel_seq_pingpong(g_sprite_ids[12], false, 7, 0, 20, 2);
+				kernel_seq_depth(g_sequence_ids[12], FACING_NORTH);
 				int oldIdx = local._commonSequenceIdx;
-				local._commonSequenceIdx = _scene->_sequences.startCycle(local._commonSpriteIndex, false, -2);
-				_scene->_sequences.updateTimeout(local._commonSequenceIdx, oldIdx);
-				_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				local._commonSequenceIdx = kernel_seq_stamp(local._commonSpriteIndex, false, -2);
+				kernel_seq_timeout(oldIdx, local._commonSequenceIdx);
+				kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
 			case 2:
 				g_engine->_soundManager->command(22, 0);
-				_scene->_sequences.remove(local._commonSequenceIdx);
-				local._commonSequenceIdx = _scene->_sequences.startPingPongCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(local._commonSequenceIdx, 1, 3);
-				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_delete(local._commonSequenceIdx);
+				local._commonSequenceIdx = kernel_seq_pingpong(local._commonSpriteIndex, false, 8, 0, 0, 1);
+				kernel_seq_range(local._commonSequenceIdx, 1, 3);
+				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 			case 3:
-				_scene->_sequences.updateTimeout(-1, local._commonSequenceIdx);
+				kernel_seq_timeout(local._commonSequenceIdx, -1);
 				player.walker_visible = true;
-				_scene->_sequences.addTimer(60, 4);
+				kernel_timing_trigger(60, 4);
 				break;
 
 			case 4:
@@ -336,20 +336,20 @@ static void room_352_parser() {
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				if (global[kSexOfRex] == REX_FEMALE) {
-					g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 5, 0, 0, 2);
+					kernel_seq_player(g_sequence_ids[3], false);
+					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 1);
+					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], false, 5, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 5, 0, 0, 2);
+					kernel_seq_player(g_sequence_ids[4], false);
+					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
 			case 1:
-				_scene->_sequences.remove(g_sequence_ids[2]);
+				kernel_seq_delete(g_sequence_ids[2]);
 				inter_give_to_player(OBJ_GUARDS_ARM);
 				kernel_load_variant(1);
 				break;
@@ -379,34 +379,34 @@ static void room_352_parser() {
 				else
 					local._commonSpriteIndex = g_sprite_ids[10];
 
-				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
-				_scene->_sequences.updateTimeout(local._commonSequenceIdx, -1);
-				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				local._commonSequenceIdx = kernel_seq_forward(local._commonSpriteIndex, false, 8, 0, 0, 1);
+				kernel_seq_timeout(-1, local._commonSequenceIdx);
+				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
 			{
 				g_engine->_soundManager->command(21, 0);
-				g_sequence_ids[12] = _scene->_sequences.startPingPongCycle(g_sprite_ids[12], false, 7, 2, 20, 0);
-				_scene->_sequences.setDepth(g_sequence_ids[12], 8);
+				g_sequence_ids[12] = kernel_seq_pingpong(g_sprite_ids[12], false, 7, 0, 20, 2);
+				kernel_seq_depth(g_sequence_ids[12], 8);
 				int oldIdx = local._commonSequenceIdx;
-				local._commonSequenceIdx = _scene->_sequences.startCycle(local._commonSpriteIndex, false, -2);
-				_scene->_sequences.updateTimeout(local._commonSequenceIdx, oldIdx);
-				_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				local._commonSequenceIdx = kernel_seq_stamp(local._commonSpriteIndex, false, -2);
+				kernel_seq_timeout(oldIdx, local._commonSequenceIdx);
+				kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
 			case 2:
 				g_engine->_soundManager->command(23, 0);
-				_scene->_sequences.remove(local._commonSequenceIdx);
-				local._commonSequenceIdx = _scene->_sequences.addReverseSpriteCycle(local._commonSpriteIndex, false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(local._commonSequenceIdx, 1, 4);
-				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_delete(local._commonSequenceIdx);
+				local._commonSequenceIdx = kernel_seq_backward(local._commonSpriteIndex, false, 8, 0, 0, 1);
+				kernel_seq_range(local._commonSequenceIdx, 1, 4);
+				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 
 			case 3:
-				_scene->_sequences.updateTimeout(-1, local._commonSequenceIdx);
+				kernel_seq_timeout(local._commonSequenceIdx, -1);
 				player.walker_visible = true;
 				if (global[kHaveYourStuff])
 					local._commonSpriteIndex = g_sprite_ids[13];
@@ -414,16 +414,16 @@ static void room_352_parser() {
 					local._commonSpriteIndex = g_sprite_ids[1];
 
 				g_engine->_soundManager->command(20, 0);
-				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 6, 1, 0, 0);
-				_scene->_sequences.setDepth(local._commonSequenceIdx, 15);
-				_scene->_sequences.addSubEntry(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+				local._commonSequenceIdx = kernel_seq_forward(local._commonSpriteIndex, false, 6, 0, 0, 1);
+				kernel_seq_depth(local._commonSequenceIdx, 15);
+				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 				break;
 
 			case 4:
-				local._commonSequenceIdx = _scene->_sequences.addSpriteCycle(local._commonSpriteIndex, false, 6, 0, 0, 0);
-				_scene->_sequences.setAnimRange(local._commonSequenceIdx, -2, -2);
-				_scene->_sequences.setDepth(local._commonSequenceIdx, 15);
-				_scene->_sequences.addTimer(60, 5);
+				local._commonSequenceIdx = kernel_seq_forward(local._commonSpriteIndex, false, 6, 0, 0, 0);
+				kernel_seq_range(local._commonSequenceIdx, -2, -2);
+				kernel_seq_depth(local._commonSequenceIdx, 15);
+				kernel_timing_trigger(60, 5);
 				break;
 
 			case 5:
@@ -458,17 +458,17 @@ static void room_352_parser() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			if (global[kSexOfRex] == REX_MALE) {
-				g_sequence_ids[14] = _scene->_sequences.startPingPongCycle(g_sprite_ids[14], false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[14], 1, 2);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[14]);
-				_scene->_sequences.addSubEntry(g_sequence_ids[14], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[14], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[14] = kernel_seq_pingpong(g_sprite_ids[14], false, 8, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[14], 1, 2);
+				kernel_seq_player(g_sequence_ids[14], false);
+				kernel_seq_trigger(g_sequence_ids[14], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+				kernel_seq_trigger(g_sequence_ids[14], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			} else {
-				g_sequence_ids[15] = _scene->_sequences.startPingPongCycle(g_sprite_ids[15], false, 8, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[15], 1, 2);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[15]);
-				_scene->_sequences.addSubEntry(g_sequence_ids[15], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[15], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[15] = kernel_seq_pingpong(g_sprite_ids[15], false, 8, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[15], 1, 2);
+				kernel_seq_player(g_sequence_ids[15], false);
+				kernel_seq_trigger(g_sequence_ids[15], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+				kernel_seq_trigger(g_sequence_ids[15], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -481,16 +481,16 @@ static void room_352_parser() {
 					inter_give_to_player(i);
 			}
 
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[13], 15);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, -2);
+			kernel_seq_depth(g_sequence_ids[13], 15);
 			break;
 
 		case 2:
 			if (global[kSexOfRex] == REX_MALE)
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[14]);
+				kernel_seq_timeout(g_sequence_ids[14], -1);
 			else
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[15]);
+				kernel_seq_timeout(g_sequence_ids[15], -1);
 
 			player.walker_visible = true;
 			player.commands_allowed = true;
@@ -505,29 +505,29 @@ static void room_352_parser() {
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			if (global[kSexOfRex] == REX_MALE) {
-				g_sequence_ids[6] = _scene->_sequences.startPingPongCycle(g_sprite_ids[6], true, 6, 2, 0, 0);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[6]);
-				_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[6] = kernel_seq_pingpong(g_sprite_ids[6], true, 6, 0, 0, 2);
+				kernel_seq_player(g_sequence_ids[6], false);
+				kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+				kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			} else {
-				g_sequence_ids[7] = _scene->_sequences.startPingPongCycle(g_sprite_ids[7], true, 6, 2, 0, 0);
-				_scene->_sequences.setMsgLayout(g_sequence_ids[7]);
-				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				g_sequence_ids[7] = kernel_seq_pingpong(g_sprite_ids[7], true, 6, 0, 0, 2);
+				kernel_seq_player(g_sequence_ids[7], false);
+				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[5]);
+			kernel_seq_delete(g_sequence_ids[5]);
 			_scene->_dynamicHotspots.remove(local._tapePlayerHotspotIdx);
 			break;
 
 		case 2:
 			inter_give_to_player(OBJ_TAPE_PLAYER);
 			if (global[kSexOfRex] == REX_MALE)
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[6]);
+				kernel_seq_timeout(g_sequence_ids[6], -1);
 			else
-				_scene->_sequences.updateTimeout(-1, g_sequence_ids[7]);
+				kernel_seq_timeout(g_sequence_ids[7], -1);
 
 			player.walker_visible = true;
 			player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index 2276932afe1..4ef4c980fed 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -40,8 +40,8 @@ static Scratch local;
 
 static void room_353_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_full_name(303, 'B', 0, "", EXT_SS), 0);
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 5, 0);
-	_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 0, 5, 0);
+	kernel_seq_depth(g_sequence_ids[1], 1);
 
 	if (previous_room == 352) {
 		player.x = 144;
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index 24018328c06..b2f823b6276 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -34,9 +34,9 @@ namespace Rooms {
 static void room_357_init() {
 	global[kAfterHavoc] = true;
 	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
-	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+	kernel_seq_loc(g_sequence_ids[1], 127, 78);
+	kernel_seq_depth(g_sequence_ids[1], 15);
 
 	if (previous_room == 318) {
 		player.x = 298;
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index c5b72426a0c..3682dfdb01d 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -33,9 +33,9 @@ namespace Rooms {
 
 static void room_358_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
-	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+	kernel_seq_loc(g_sequence_ids[1], 127, 78);
+	kernel_seq_depth(g_sequence_ids[1], 15);
 
 	if (previous_room == 357) {
 		player.x = 305;
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index 887c432468b..b2f66e74f0a 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -47,12 +47,12 @@ static void room_359_init() {
 	else
 		g_sprite_ids[4] = kernel_load_series("*ROXBD_2", 0);
 
-	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[3], 15);
+	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+	kernel_seq_loc(g_sequence_ids[3], 127, 78);
+	kernel_seq_depth(g_sequence_ids[3], 15);
 
 	if (object_is_here(OBJ_SECURITY_CARD)) {
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
 		local._cardHotspotId = _scene->_dynamicHotspots.add(words_security_card, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._cardHotspotId, Common::Point(107, 107), FACING_SOUTH);
 	}
@@ -91,21 +91,21 @@ static void room_359_parser() {
 				player.walker_visible = false;
 				text_show(35920);
 				if (global[kSexOfRex] == REX_MALE) {
-					g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 4, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 4, 0, 0, 2);
+					kernel_seq_player(g_sequence_ids[2], false);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					g_sequence_ids[4] = _scene->_sequences.startPingPongCycle(g_sprite_ids[4], true, 7, 2, 0, 0);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-					_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(106, 110));
-					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], true, 7, 0, 0, 2);
+					kernel_seq_player(g_sequence_ids[4], false);
+					kernel_seq_loc(g_sequence_ids[4], 106, 110);
+					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
 			case 1:
-				_scene->_sequences.remove(g_sequence_ids[1]);
+				kernel_seq_delete(g_sequence_ids[1]);
 				_scene->_dynamicHotspots.remove(local._cardHotspotId);
 				g_engine->_soundManager->command(57, 0);
 				inter_give_to_player(OBJ_SECURITY_CARD);
@@ -115,9 +115,9 @@ static void room_359_parser() {
 
 			case 2:
 				if (global[kSexOfRex] == REX_MALE)
-					_scene->_sequences.updateTimeout(-1, g_sequence_ids[2]);
+					kernel_seq_timeout(g_sequence_ids[2], -1);
 				else
-					_scene->_sequences.updateTimeout(-1, g_sequence_ids[4]);
+					kernel_seq_timeout(g_sequence_ids[4], -1);
 
 				player.walker_visible = true;
 				player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index f8891a11191..63bdccb3bec 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -33,9 +33,9 @@ namespace Rooms {
 
 static void room_360_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
-	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(127, 78));
-	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+	kernel_seq_loc(g_sequence_ids[1], 127, 78);
+	kernel_seq_depth(g_sequence_ids[1], 15);
 
 	if (previous_room == 359) {
 		player.x = 304;
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 1a45709cb52..4dfe40ff77c 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -36,88 +36,88 @@ static void handleRexAction() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 50, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[1], 3, -2);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 15, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], -1, 4);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 50, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[1], 3, -2);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 15);
+
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[2], -1, 4);
+		kernel_seq_player(g_sequence_ids[2], false);
+		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
 	{
 		int seqIdx = g_sequence_ids[1];
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 4);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-		_scene->_sequences.updateTimeout(g_sequence_ids[1], seqIdx);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 4);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 15);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[1]);
 	}
 	break;
 
 	case 2:
 	{
 		int seqIdx = g_sequence_ids[2];
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], 4, 10);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[2], 4, 10);
+		kernel_seq_player(g_sequence_ids[2], false);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[2]);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
 	case 3:
 	{
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 3);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
 
 		int seqIdx = g_sequence_ids[2];
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 11);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
-		_scene->_sequences.addTimer(15, 4);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 11);
+		kernel_seq_player(g_sequence_ids[2], false);
+		kernel_seq_loc(g_sequence_ids[2], 167, 100);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[2]);
+		kernel_timing_trigger(15, 4);
 	}
 	break;
 
 	case 4:
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-		_scene->_sequences.setDone(g_sequence_ids[2]);
-		g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], 12, 14);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 2);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
+
+		kernel_player_expire(g_sequence_ids[2]);
+		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[2], 12, 14);
+		kernel_seq_player(g_sequence_ids[2], false);
+		kernel_seq_loc(g_sequence_ids[2], 167, 100);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 		break;
 
 	case 5:
 	{
 		int seqIdx = g_sequence_ids[2];
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 15);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
-		_scene->_sequences.addTimer(15, 6);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 15);
+		kernel_seq_player(g_sequence_ids[2], false);
+		kernel_seq_loc(g_sequence_ids[2], 167, 100);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[2]);
+		kernel_timing_trigger(15, 6);
 	}
 	break;
 
 	case 6:
-		_scene->_sequences.setDone(g_sequence_ids[2]);
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-		_scene->_sequences.addTimer(48, 7);
+		kernel_player_expire(g_sequence_ids[2]);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
+		kernel_timing_trigger(48, 7);
 		break;
 
 	case 7:
@@ -134,93 +134,93 @@ static void handleRoxAction() {
 	case 0:
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 18, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[1], 2, 4);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 18, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], -1, 3);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 18, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[1], 2, 4);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 15);
+
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 18, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], -1, 3);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
 	{
 		int tmpIdx = g_sequence_ids[1];
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 4);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-		_scene->_sequences.updateTimeout(g_sequence_ids[1], tmpIdx);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 4);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 15);
+		kernel_seq_timeout(tmpIdx, g_sequence_ids[1]);
 	}
 	break;
 
 	case 2:
 	{
 		int tmpIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 4, 8);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 4, 8);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_timeout(tmpIdx, g_sequence_ids[4]);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
 	case 3:
 	{
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 3);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
 
 		int tmpIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 9, 10);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 9, 10);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_loc(g_sequence_ids[4], 167, 100);
+		kernel_seq_timeout(tmpIdx, g_sequence_ids[4]);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
 	}
 	break;
 
 	case 4:
 	{
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 2);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
 
 		int tmpIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 11, 15);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 11, 15);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_loc(g_sequence_ids[4], 167, 100);
+		kernel_seq_timeout(tmpIdx, g_sequence_ids[4]);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
 	}
 	break;
 
 	case 5:
 	{
 		int tmpIdx = g_sequence_ids[4];
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], false, 16);
-		_scene->_sequences.setMsgLayout(g_sequence_ids[4]);
-		_scene->_sequences.setPosition(g_sequence_ids[4], Common::Point(167, 100));
-		_scene->_sequences.updateTimeout(g_sequence_ids[4], tmpIdx);
-		_scene->_sequences.addTimer(48, 6);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 16);
+		kernel_seq_player(g_sequence_ids[4], false);
+		kernel_seq_loc(g_sequence_ids[4], 167, 100);
+		kernel_seq_timeout(tmpIdx, g_sequence_ids[4]);
+		kernel_timing_trigger(48, 6);
 	}
 	break;
 
 	case 6:
-		_scene->_sequences.setDone(g_sequence_ids[4]);
+		kernel_player_expire(g_sequence_ids[4]);
 
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-		_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-		_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-		_scene->_sequences.addTimer(48, 7);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+		kernel_seq_loc(g_sequence_ids[1], 165, 76);
+		kernel_seq_depth(g_sequence_ids[1], 1);
+		kernel_timing_trigger(48, 7);
 		break;
 
 	case 7:
@@ -241,9 +241,9 @@ static void room_361_init() {
 	} else
 		g_sprite_ids[4] = kernel_load_series("*ROXCL_8", 0);
 
-	g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-	_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-	_scene->_sequences.setDepth(g_sequence_ids[1], 15);
+	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+	kernel_seq_loc(g_sequence_ids[1], 165, 76);
+	kernel_seq_depth(g_sequence_ids[1], 15);
 
 	if (previous_room == 391) {
 		global[kSexOfRex] = REX_MALE;
@@ -252,7 +252,7 @@ static void room_361_init() {
 		player.facing = FACING_SOUTH;
 		player.x = 166;
 		player.y = 101;
-		_scene->_sequences.addTimer(120, 70);
+		kernel_timing_trigger(120, 70);
 	} else if (previous_room == 360) {
 		player.x = 302;
 		player.y = 145;
@@ -278,94 +278,94 @@ static void room_361_daemon() {
 	if (kernel.trigger >= 70) {
 		switch (kernel.trigger) {
 		case 70:
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addTimer(15, 71);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 2);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 1);
+
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_timing_trigger(15, 71);
 			break;
 
 		case 71:
-			_scene->_sequences.setDone(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addTimer(15, 72);
+			kernel_player_expire(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 2);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_timing_trigger(15, 72);
 			break;
 
 		case 72:
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 3);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-			_scene->_sequences.setDone(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 3);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addTimer(15, 73);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 3);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 1);
+
+			kernel_player_expire(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 3);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_timing_trigger(15, 73);
 			break;
 
 		case 73:
-			_scene->_sequences.setDone(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			kernel_player_expire(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[3], 4, 5);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
 			break;
 
 		case 74:
 		{
 			int seqIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 6);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], seqIdx);
-			_scene->_sequences.addTimer(15, 75);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 6);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_seq_timeout(seqIdx, g_sequence_ids[3]);
+			kernel_timing_trigger(15, 75);
 		}
 		break;
 
 		case 75:
-			_scene->_sequences.setDone(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 7);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addTimer(15, 76);
+			kernel_player_expire(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 7);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_timing_trigger(15, 76);
 			break;
 
 		case 76:
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 2);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 1);
-
-			_scene->_sequences.setDone(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 8);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addTimer(15, 77);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 2);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 1);
+
+			kernel_player_expire(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 8);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_timing_trigger(15, 77);
 			break;
 
 		case 77:
-			_scene->_sequences.remove(g_sequence_ids[1]);
-			g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
-			_scene->_sequences.setPosition(g_sequence_ids[1], Common::Point(165, 76));
-			_scene->_sequences.setDepth(g_sequence_ids[1], 15);
-
-			_scene->_sequences.setDone(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 9);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addTimer(15, 78);
+			kernel_seq_delete(g_sequence_ids[1]);
+			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
+			kernel_seq_loc(g_sequence_ids[1], 165, 76);
+			kernel_seq_depth(g_sequence_ids[1], 15);
+
+			kernel_player_expire(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 9);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_timing_trigger(15, 78);
 			break;
 
 		case 78:
-			_scene->_sequences.setDone(g_sequence_ids[3]);
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[3], 10, -2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
+			kernel_player_expire(g_sequence_ids[3]);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[3], 10, -2);
+			kernel_seq_player(g_sequence_ids[3], false);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
 			break;
 
 		case 79:
-			_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
+			kernel_seq_timeout(g_sequence_ids[3], -1);
 			player.commands_allowed = true;
 			player.walker_visible = true;
 			break;
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 089f45f5ab8..35fcd3cc027 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -39,7 +39,7 @@ static void room_388_init() {
 		_scene->_hotspots.activate(words_sauropod, false);
 	else {
 		g_sprite_ids[0] = kernel_load_series(kernel_name('b', 0), 0);
-		g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
+		g_sequence_ids[0] = kernel_seq_stamp(g_sprite_ids[0], false, 1);
 	}
 
 	player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index c29de5a8cfa..a7a795de11f 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -50,7 +50,7 @@ static void room_389_init() {
 		_scene->_hotspots.activate(words_monster, false);
 	else {
 		g_sprite_ids[0] = kernel_load_series(kernel_name('m', -1), 0);
-		g_sequence_ids[0] = _scene->_sequences.addSpriteCycle(g_sprite_ids[0], false, 6, 0, 0, 0);
+		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 0, 0);
 		kernel_random_messages_init(1, 88, 177, 19, 77, 13, 2, 0xFDFC, 60, 247, 248, 249, 0);
 	}
 
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index d53dfdee20e..c5c04ac6e5e 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -148,7 +148,7 @@ static void handleConversation1() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, quoteId), quotePosX, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 120;
 		setDialogNode(2);
 	}
@@ -158,7 +158,7 @@ static void handleConversation1() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1EC), 260, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 120;
 		local._bartenderCurrentQuestion = 1;
 		setDialogNode(3);
@@ -169,7 +169,7 @@ static void handleConversation1() {
 		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
 		setDialogNode(0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1120;
 		break;
 
@@ -249,7 +249,7 @@ static void handleConversation2() {
 		switch (g_engine->getRandomNumber(1, 3)) {
 		case 1:
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			_scene->_sequences.addTimer(1, 100);
+			kernel_timing_trigger(1, 100);
 			local._talkTimer = 180;
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x1E7), 198, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
@@ -259,7 +259,7 @@ static void handleConversation2() {
 
 		case 2:
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			_scene->_sequences.addTimer(1, 100);
+			kernel_timing_trigger(1, 100);
 			local._talkTimer = 180;
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x1E9), 220, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
@@ -269,7 +269,7 @@ static void handleConversation2() {
 
 		case 3:
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			_scene->_sequences.addTimer(1, 100);
+			kernel_timing_trigger(1, 100);
 			local._talkTimer = 150;
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x1EB), 196, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
@@ -284,7 +284,7 @@ static void handleConversation2() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1120;
 	}
 }
@@ -296,7 +296,7 @@ static void handleConversation3() {
 	case 0x235:
 	case 0x236:
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 86);
+		kernel_timing_trigger(1, 86);
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1ED), 188, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x1EE), 199, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
@@ -308,7 +308,7 @@ static void handleConversation3() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1120;
 		setDialogNode(0);
 		break;
@@ -328,12 +328,12 @@ static void handleConversation4() {
 		kernel_message_add(quote_string(kernel.quotes, 0x1F1), 184, 27, 0xFDFC, 180, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x1F2), 200, 41, 0xFDFC, 180, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1100;
 		local._dialog4.write(0x238, false);
 		local._bartenderMode = 22;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(100, 95);
+		kernel_timing_trigger(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
 
@@ -341,7 +341,7 @@ static void handleConversation4() {
 		player.commands_allowed = false;
 		local._roxMode = 21;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 92);
+		kernel_timing_trigger(1, 92);
 		_scene->_userInterface.setup(kInputBuildingSentences);
 		local._conversationFl = false;
 		break;
@@ -354,11 +354,11 @@ static void handleConversation4() {
 		local._dialog4.write(0x23A, false);
 		global[kHasSaidTimer] = true;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1100;
 		local._bartenderMode = 22;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(100, 95);
+		kernel_timing_trigger(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
 
@@ -370,11 +370,11 @@ static void handleConversation4() {
 		local._dialog4.write(0x23D, false);
 		global[kHasSaidBinocs] = true;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1100;
 		local._bartenderMode = 22;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(100, 95);
+		kernel_timing_trigger(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
 
@@ -385,10 +385,10 @@ static void handleConversation4() {
 		kernel_message_add(quote_string(kernel.quotes, 0x1F8), 205, 41, 0xFDFC, 100, 0, 0);
 		local._bartenderMode = 22;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1050;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(50, 95);
+		kernel_timing_trigger(50, 95);
 		local._refuseAlienLiquor = true;
 		break;
 
@@ -407,10 +407,10 @@ static void handleDialogs() {
 			quote_split_string(curQuote, subQuote1, subQuote2);
 			kernel_message_add(subQuote1, 230, 42, 0x1110, 140, 0, 32);
 			kernel_message_add(subQuote2, 230, 56, 0x1110, 140, 0, 32);
-			_scene->_sequences.addTimer(160, 120);
+			kernel_timing_trigger(160, 120);
 		} else {
 			kernel_message_add(curQuote, 230, 56, 0x1110, 140, 1, 32);
-			_scene->_sequences.addTimer(160, 120);
+			kernel_timing_trigger(160, 120);
 		}
 	} else if (kernel.trigger == 120) {
 		player.commands_allowed = true;
@@ -630,47 +630,47 @@ static void room_402_init() {
 	kernel_run_animation(kernel_full_name(402, 'd', 1, "", EXT_AA), 0);
 	kernel_anim[0].repeat = true;
 
-	g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
-	_scene->_sequences.setDepth(g_sequence_ids[5], 1);
+	g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
+	kernel_seq_depth(g_sequence_ids[5], 1);
 
-	g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
-	_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+	g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 2);
+	kernel_seq_depth(g_sequence_ids[13], 8);
 
 	if (!player_has(OBJ_REPAIR_LIST)) {
-		g_sequence_ids[14] = _scene->_sequences.startCycle(g_sprite_ids[14], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[14], 7);
-		_scene->_sequences.setPosition(g_sequence_ids[14], Common::Point(210, 80));
+		g_sequence_ids[14] = kernel_seq_stamp(g_sprite_ids[14], false, 1);
+		kernel_seq_depth(g_sequence_ids[14], 7);
+		kernel_seq_loc(g_sequence_ids[14], 210, 80);
 		int idx = _scene->_dynamicHotspots.add(words_repair_list, words_look_at, g_sequence_ids[14], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
 	}
 
 	{
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
+		kernel_seq_depth(g_sequence_ids[9], 8);
 		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 	}
 
 	if (!object_is_here(OBJ_ALIEN_LIQUOR) && !player_has(OBJ_CREDIT_CHIP)) {
-		g_sequence_ids[15] = _scene->_sequences.startCycle(g_sprite_ids[15], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[15], 8);
-		_scene->_sequences.setPosition(g_sequence_ids[15], Common::Point(250, 80));
+		g_sequence_ids[15] = kernel_seq_stamp(g_sprite_ids[15], false, 1);
+		kernel_seq_depth(g_sequence_ids[15], 8);
+		kernel_seq_loc(g_sequence_ids[15], 250, 80);
 		int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, g_sequence_ids[15], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
 	}
 
-	g_sequence_ids[20] = _scene->_sequences.startCycle(g_sprite_ids[20], false, 1);
-	_scene->_sequences.setDepth(g_sequence_ids[20], 7);
-	_scene->_sequences.setPosition(g_sequence_ids[20], Common::Point(234, 72));
+	g_sequence_ids[20] = kernel_seq_stamp(g_sprite_ids[20], false, 1);
+	kernel_seq_depth(g_sequence_ids[20], 7);
+	kernel_seq_loc(g_sequence_ids[20], 234, 72);
 
 	if (global[kBottleDisplayed]) {
-		g_sequence_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[8], false, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[8], 7);
+		g_sequence_ids[8] = kernel_seq_stamp(g_sprite_ids[8], false, 4);
+		kernel_seq_depth(g_sequence_ids[8], 7);
 	}
 
 	if (local._roxOnStool) {
-		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
+		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, 11);
+		kernel_seq_depth(g_sequence_ids[6], 5);
 		player.walker_visible = false;
 	}
 
@@ -681,7 +681,7 @@ static void room_402_daemon() {
 	if (kernel.trigger == 104) {
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
-		_scene->_sequences.remove(g_sequence_ids[15]);
+		kernel_seq_delete(g_sequence_ids[15]);
 		inter_give_to_player(OBJ_CREDIT_CHIP);
 		object_examine(OBJ_CREDIT_CHIP, 40242, 0);
 		player.commands_allowed = true;
@@ -689,10 +689,10 @@ static void room_402_daemon() {
 
 	if ((g_engine->getRandomNumber(1, 1500) == 1) && (!local._activeTeleporter) && (player.x < 150)) {
 		g_engine->_soundManager->command(30, 0);
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 13, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[4], 1, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[4], 14);
-		_scene->_sequences.addSubEntry(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 48);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 13, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[4], 1, 11);
+		kernel_seq_depth(g_sequence_ids[4], 14);
+		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 48);
 		local._activeTeleporter = true;
 		global[kSomeoneHasExploded] = true;
 	}
@@ -703,36 +703,36 @@ static void room_402_daemon() {
 	if (kernel.trigger == 100) {
 		local._bartenderReady = false;
 		if (local._bartenderHandsHips) {
-			_scene->_sequences.remove(g_sequence_ids[10]);
+			kernel_seq_delete(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
 		} else if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(g_sequence_ids[11]);
+			kernel_seq_delete(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
 		} else if (local._bartenderSteady) {
-			_scene->_sequences.remove(g_sequence_ids[9]);
+			kernel_seq_delete(g_sequence_ids[9]);
 			local._bartenderSteady = false;
 		}
 
 		if (!local._bartenderTalking) {
-			g_sequence_ids[10] = _scene->_sequences.startPingPongCycle(g_sprite_ids[10], false, 7, 0, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[10], 3, 4);
-			_scene->_sequences.setDepth(g_sequence_ids[10], 8);
+			g_sequence_ids[10] = kernel_seq_pingpong(g_sprite_ids[10], false, 7, 0, 0, 0);
+			kernel_seq_range(g_sequence_ids[10], 3, 4);
+			kernel_seq_depth(g_sequence_ids[10], 8);
 			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[10], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 			local._bartenderTalking = true;
 			if (local._talkTimer > 1000)
-				_scene->_sequences.addTimer(local._talkTimer - 1000, 101);
+				kernel_timing_trigger(local._talkTimer - 1000, 101);
 			else
-				_scene->_sequences.addTimer(local._talkTimer, 101);
+				kernel_timing_trigger(local._talkTimer, 101);
 		}
 	}
 
 	if ((kernel.trigger == 101) && local._bartenderTalking) {
-		_scene->_sequences.remove(g_sequence_ids[10]);
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		kernel_seq_delete(g_sequence_ids[10]);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		kernel_seq_depth(g_sequence_ids[9], 8);
 		local._bartenderSteady = true;
 		local._bartenderTalking = false;
 		if (local._talkTimer < 1000)
@@ -745,11 +745,11 @@ static void room_402_daemon() {
 	switch (kernel.trigger) {
 	case 92:
 		player.commands_allowed = false;
-		_scene->_sequences.remove(g_sequence_ids[6]);
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 1, 2);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
+		kernel_seq_delete(g_sequence_ids[6]);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 1, 2);
+		kernel_seq_depth(g_sequence_ids[7], 5);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
 		break;
 
 	case 93:
@@ -758,40 +758,40 @@ static void room_402_daemon() {
 		switch (local._roxMode) {
 		case 20:
 			g_engine->_soundManager->command(57, 0);
-			_scene->_sequences.remove(g_sequence_ids[15]);
+			kernel_seq_delete(g_sequence_ids[15]);
 			inter_give_to_player(OBJ_CREDIT_CHIP);
 			object_examine(OBJ_CREDIT_CHIP, 40242, 0);
 			break;
 
 		case 22:
 			g_engine->_soundManager->command(57, 0);
-			_scene->_sequences.remove(g_sequence_ids[8]);
+			kernel_seq_delete(g_sequence_ids[8]);
 			inter_give_to_player(OBJ_ALIEN_LIQUOR);
 			global[kBottleDisplayed] = false;
 			object_examine(OBJ_ALIEN_LIQUOR, 40241, 0);
 			break;
 
 		case 21:
-			g_sequence_ids[15] = _scene->_sequences.startCycle(g_sprite_ids[15], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[15], 8);
-			_scene->_sequences.setPosition(g_sequence_ids[15], Common::Point(250, 80));
+			g_sequence_ids[15] = kernel_seq_stamp(g_sprite_ids[15], false, 1);
+			kernel_seq_depth(g_sequence_ids[15], 8);
+			kernel_seq_loc(g_sequence_ids[15], 250, 80);
 			break;
 
 		default:
 			break;
 		}
-		g_sequence_ids[7] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 1, 3);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
-		_scene->_sequences.updateTimeout(g_sequence_ids[7], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 94);
+		g_sequence_ids[7] = kernel_seq_backward(g_sprite_ids[7], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 1, 3);
+		kernel_seq_depth(g_sequence_ids[7], 5);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[7]);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 94);
 
 		if (local._roxMode == 21) {
 			if (player_has(OBJ_CREDIT_CHIP))
 				inter_move_object(OBJ_CREDIT_CHIP, NOWHERE);
 
 			local._bartenderMode = 20;
-			_scene->_sequences.addTimer(60, 95);
+			kernel_timing_trigger(60, 95);
 		}
 	}
 	break;
@@ -799,15 +799,15 @@ static void room_402_daemon() {
 	case 94:
 	{
 		int seqIdx = g_sequence_ids[7];
-		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
-		_scene->_sequences.updateTimeout(g_sequence_ids[6], seqIdx);
+		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, 11);
+		kernel_seq_depth(g_sequence_ids[6], 5);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[6]);
 		if (local._roxMode == 22) {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x23F), 230, 56, 0x1110, 120, 0, 32);
 			local._bartenderMode = 21;
 			global[kHasPurchased] = true;
-			_scene->_sequences.addTimer(140, 95);
+			kernel_timing_trigger(140, 95);
 		} else if (local._roxMode == 20)
 			player.commands_allowed = true;
 
@@ -823,34 +823,34 @@ static void room_402_daemon() {
 		local._bartenderReady = false;
 		player.commands_allowed = false;
 		if (local._bartenderHandsHips || local._bartenderTalking) {
-			_scene->_sequences.remove(g_sequence_ids[10]);
+			kernel_seq_delete(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
 			local._bartenderTalking = false;
 		}
 
 		if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(g_sequence_ids[11]);
+			kernel_seq_delete(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
 		}
 
 		if (local._bartenderSteady) {
-			_scene->_sequences.remove(g_sequence_ids[9]);
+			kernel_seq_delete(g_sequence_ids[9]);
 			local._bartenderSteady = false;
 		}
-		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[12], 1, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 96);
+		g_sequence_ids[12] = kernel_seq_forward(g_sprite_ids[12], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[12], 1, 4);
+		kernel_seq_depth(g_sequence_ids[12], 8);
+		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 96);
 		break;
 
 	case 96:
 	{
 		int seqIdx = g_sequence_ids[12];
-		g_sequence_ids[12] = _scene->_sequences.addSpriteCycle(g_sprite_ids[12], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[12], 6, 7);
-		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[12], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 97);
+		g_sequence_ids[12] = kernel_seq_forward(g_sprite_ids[12], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[12], 6, 7);
+		kernel_seq_depth(g_sequence_ids[12], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[12]);
+		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 97);
 	}
 	break;
 
@@ -859,21 +859,21 @@ static void room_402_daemon() {
 		int seqIdx = g_sequence_ids[12];
 		switch (local._bartenderMode) {
 		case 20:
-			_scene->_sequences.remove(g_sequence_ids[15]);
+			kernel_seq_delete(g_sequence_ids[15]);
 			break;
 
 		case 21:
 		{
-			g_sequence_ids[15] = _scene->_sequences.startCycle(g_sprite_ids[15], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[15], 8);
-			_scene->_sequences.setPosition(g_sequence_ids[15], Common::Point(250, 80));
+			g_sequence_ids[15] = kernel_seq_stamp(g_sprite_ids[15], false, 1);
+			kernel_seq_depth(g_sequence_ids[15], 8);
+			kernel_seq_loc(g_sequence_ids[15], 250, 80);
 			int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, g_sequence_ids[15], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
 		}
 		break;
 
 		case 22:
-			_scene->_sequences.remove(g_sequence_ids[8]);
+			kernel_seq_delete(g_sequence_ids[8]);
 			global[kBottleDisplayed] = false;
 			break;
 
@@ -881,37 +881,37 @@ static void room_402_daemon() {
 			break;
 		}
 
-		g_sequence_ids[12] = _scene->_sequences.startCycle(g_sprite_ids[12], false, 6);
-		_scene->_sequences.updateTimeout(g_sequence_ids[12], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
-		_scene->_sequences.addTimer(10, 98);
+		g_sequence_ids[12] = kernel_seq_stamp(g_sprite_ids[12], false, 6);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[12]);
+		kernel_seq_depth(g_sequence_ids[12], 8);
+		kernel_timing_trigger(10, 98);
 	}
 	break;
 
 	case 98:
-		_scene->_sequences.remove(g_sequence_ids[12]);
-		g_sequence_ids[12] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[12], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[12], 1, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[12], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 99);
+		kernel_seq_delete(g_sequence_ids[12]);
+		g_sequence_ids[12] = kernel_seq_backward(g_sprite_ids[12], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[12], 1, 4);
+		kernel_seq_depth(g_sequence_ids[12], 8);
+		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 99);
 		break;
 
 	case 99:
 	{
 		int seqIdx = g_sequence_ids[12];
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 		local._bartenderSteady = true;
 		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
-		_scene->_sequences.updateTimeout(g_sequence_ids[9], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[9]);
+		kernel_seq_depth(g_sequence_ids[9], 8);
 		if (local._bartenderMode == 20) {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x1F3), 210, 41, 0xFDFC, 100, 0, 0);
-			_scene->_sequences.addTimer(5, 100);
+			kernel_timing_trigger(5, 100);
 			local._talkTimer = 180;
 			local._roxMode = 22;
-			_scene->_sequences.addTimer(65, 92);
+			kernel_timing_trigger(65, 92);
 		} else if ((local._bartenderMode == 21) || (local._bartenderMode == 22)) {
 			player.commands_allowed = true;
 			local._bartenderReady = true;
@@ -929,64 +929,64 @@ static void room_402_daemon() {
 		local._bartenderReady = false;
 		player.commands_allowed = false;
 		if ((local._bartenderHandsHips) || (local._bartenderTalking)) {
-			_scene->_sequences.remove(g_sequence_ids[10]);
+			kernel_seq_delete(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
 			local._bartenderTalking = false;
 		} else if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(g_sequence_ids[11]);
+			kernel_seq_delete(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
 		} else if (local._bartenderSteady) {
-			_scene->_sequences.remove(g_sequence_ids[9]);
+			kernel_seq_delete(g_sequence_ids[9]);
 			local._bartenderSteady = false;
 		}
-		g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[9], 1, 9);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 87);
+		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[9], 1, 9);
+		kernel_seq_depth(g_sequence_ids[9], 8);
+		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 87);
 		break;
 
 	case 87:
 	{
 		int seqIdx = g_sequence_ids[9];
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 9);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[9], seqIdx);
-		_scene->_sequences.addTimer(10, 89);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 9);
+		kernel_seq_depth(g_sequence_ids[9], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[9]);
+		kernel_timing_trigger(10, 89);
 
-		g_sequence_ids[8] = _scene->_sequences.addSpriteCycle(g_sprite_ids[8], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[8], 1, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[8], 7);
-		_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 88);
+		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[8], 1, 4);
+		kernel_seq_depth(g_sequence_ids[8], 7);
+		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 88);
 	}
 	break;
 
 	case 88:
-		g_sequence_ids[8] = _scene->_sequences.startCycle(g_sprite_ids[8], false, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[8], 7);
+		g_sequence_ids[8] = kernel_seq_stamp(g_sprite_ids[8], false, 4);
+		kernel_seq_depth(g_sequence_ids[8], 7);
 		global[kBottleDisplayed] = true;
 		break;
 
 	case 89:
-		_scene->_sequences.remove(g_sequence_ids[9]);
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 6);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
-		_scene->_sequences.addTimer(10, 90);
+		kernel_seq_delete(g_sequence_ids[9]);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 6);
+		kernel_seq_depth(g_sequence_ids[9], 8);
+		kernel_timing_trigger(10, 90);
 		break;
 
 	case 90:
-		_scene->_sequences.remove(g_sequence_ids[9]);
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 5);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
-		_scene->_sequences.addTimer(10, 91);
+		kernel_seq_delete(g_sequence_ids[9]);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 5);
+		kernel_seq_depth(g_sequence_ids[9], 8);
+		kernel_timing_trigger(10, 91);
 		break;
 
 	case 91:
 	{
-		_scene->_sequences.remove(g_sequence_ids[9]);
-		g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+		kernel_seq_delete(g_sequence_ids[9]);
+		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
-		_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+		kernel_seq_depth(g_sequence_ids[9], 8);
 		local._bartenderSteady = true;
 		player.commands_allowed = true;
 		local._bartenderReady = true;
@@ -1003,46 +1003,46 @@ static void room_402_daemon() {
 		if (local._beatCounter >= 20) {
 			local._ginnyLooking = true;
 			local._beatCounter = 0;
-			_scene->_sequences.addTimer(60, 54);
+			kernel_timing_trigger(60, 54);
 		} else {
-			_scene->_sequences.addTimer(30, 75);
+			kernel_timing_trigger(30, 75);
 		}
 	}
 
 	switch (kernel.trigger) {
 	case 75:
-		_scene->_sequences.remove(g_sequence_ids[5]);
+		kernel_seq_delete(g_sequence_ids[5]);
 		local._bigBeatFl = !local._bigBeatFl;
 
 		if (local._bigBeatFl) {
-			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 5);
-			_scene->_sequences.addTimer(8, 130);
+			g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 5);
+			kernel_timing_trigger(8, 130);
 		} else {
-			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 5);
-			_scene->_sequences.addTimer(8, 53);
+			g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 5);
+			kernel_timing_trigger(8, 53);
 		}
 
-		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
+		kernel_seq_depth(g_sequence_ids[5], 1);
 		break;
 
 	case 130:
-		_scene->_sequences.remove(g_sequence_ids[5]);
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 6);
-		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
-		_scene->_sequences.addTimer(8, 131);
+		kernel_seq_delete(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 6);
+		kernel_seq_depth(g_sequence_ids[5], 1);
+		kernel_timing_trigger(8, 131);
 		break;
 
 	case 131:
-		_scene->_sequences.remove(g_sequence_ids[5]);
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 5);
-		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
-		_scene->_sequences.addTimer(8, 53);
+		kernel_seq_delete(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 5);
+		kernel_seq_depth(g_sequence_ids[5], 1);
+		kernel_timing_trigger(8, 53);
 		break;
 
 	case 53:
-		_scene->_sequences.remove(g_sequence_ids[5]);
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[5], 1);
+		kernel_seq_delete(g_sequence_ids[5]);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
+		kernel_seq_depth(g_sequence_ids[5], 1);
 		local._waitingGinnyMove = false;
 		break;
 
@@ -1058,31 +1058,31 @@ static void room_402_daemon() {
 			local._beatCounter = 0;
 			local._bigBeatFl = true;
 		} else {
-			_scene->_sequences.remove(g_sequence_ids[5]);
-			g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, g_engine->getRandomNumber(1, 4));
-			_scene->_sequences.setDepth(g_sequence_ids[5], 1);
-			_scene->_sequences.addTimer(60, 54);
+			kernel_seq_delete(g_sequence_ids[5]);
+			g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, g_engine->getRandomNumber(1, 4));
+			kernel_seq_depth(g_sequence_ids[5], 1);
+			kernel_timing_trigger(60, 54);
 		}
 	}
 
 	if (local._bartenderReady) {
 		if (g_engine->getRandomNumber(1, 250) == 1) {
 			if (local._bartenderLooksLeft) {
-				_scene->_sequences.remove(g_sequence_ids[11]);
+				kernel_seq_delete(g_sequence_ids[11]);
 				local._bartenderLooksLeft = false;
 			} else if (local._bartenderHandsHips) {
-				_scene->_sequences.remove(g_sequence_ids[10]);
+				kernel_seq_delete(g_sequence_ids[10]);
 				local._bartenderHandsHips = false;
 			} else if (local._bartenderSteady) {
-				_scene->_sequences.remove(g_sequence_ids[9]);
+				kernel_seq_delete(g_sequence_ids[9]);
 				local._bartenderSteady = false;
 			}
 
 			switch (g_engine->getRandomNumber(1, 3)) {
 			case 1:
 			{
-				g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[10], false, 4);
-				_scene->_sequences.setDepth(g_sequence_ids[10], 8);
+				g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[10], false, 4);
+				kernel_seq_depth(g_sequence_ids[10], 8);
 				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[10], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 				local._bartenderHandsHips = true;
@@ -1091,8 +1091,8 @@ static void room_402_daemon() {
 
 			case 2:
 			{
-				g_sequence_ids[11] = _scene->_sequences.startCycle(g_sprite_ids[11], false, 2);
-				_scene->_sequences.setDepth(g_sequence_ids[11], 8);
+				g_sequence_ids[11] = kernel_seq_stamp(g_sprite_ids[11], false, 2);
+				kernel_seq_depth(g_sequence_ids[11], 8);
 				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[11], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 				local._bartenderLooksLeft = true;
@@ -1101,8 +1101,8 @@ static void room_402_daemon() {
 
 			case 3:
 			{
-				g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
-				_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+				g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
+				kernel_seq_depth(g_sequence_ids[9], 8);
 				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 				local._bartenderSteady = true;
@@ -1117,9 +1117,9 @@ static void room_402_daemon() {
 
 	if (kernel.trigger == 76) {
 		int seqIdx = g_sequence_ids[6];
-		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
-		_scene->_sequences.updateTimeout(g_sequence_ids[6], seqIdx);
+		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, 11);
+		kernel_seq_depth(g_sequence_ids[6], 5);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[6]);
 		if (!global[kBeenThruHelgaScene]) {
 			player.commands_allowed = false;
 			local._cutSceneNeeded = true;
@@ -1132,11 +1132,11 @@ static void room_402_daemon() {
 	switch (kernel.trigger) {
 	case 77:
 		player.commands_allowed = false;
-		_scene->_sequences.remove(g_sequence_ids[6]);
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 10, 12);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 78);
+		kernel_seq_delete(g_sequence_ids[6]);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 10, 12);
+		kernel_seq_depth(g_sequence_ids[7], 5);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 78);
 		break;
 
 	case 78:
@@ -1144,22 +1144,22 @@ static void room_402_daemon() {
 		g_engine->_soundManager->command(57, 0);
 		int seqIdx = g_sequence_ids[7];
 		inter_give_to_player(OBJ_REPAIR_LIST);
-		_scene->_sequences.remove(g_sequence_ids[14]);
-		g_sequence_ids[7] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[7], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 10, 12);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
-		_scene->_sequences.updateTimeout(g_sequence_ids[7], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
+		kernel_seq_delete(g_sequence_ids[14]);
+		g_sequence_ids[7] = kernel_seq_backward(g_sprite_ids[7], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 10, 12);
+		kernel_seq_depth(g_sequence_ids[7], 5);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[7]);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
 	}
 	break;
 
 	case 79:
 	{
 		int seqIdx = g_sequence_ids[7];
-		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
-		_scene->_sequences.updateTimeout(g_sequence_ids[6], seqIdx);
-		_scene->_sequences.addTimer(20, 180);
+		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, 11);
+		kernel_seq_depth(g_sequence_ids[6], 5);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[6]);
+		kernel_timing_trigger(20, 180);
 	}
 	break;
 
@@ -1174,35 +1174,35 @@ static void room_402_daemon() {
 
 	if (local._cutSceneNeeded && local._cutSceneReady) {
 		local._cutSceneNeeded = false;
-		_scene->_sequences.addTimer(20, 55);
+		kernel_timing_trigger(20, 55);
 		local._helgaReady = false;
 		local._bartenderReady = false;
 	}
 
 	if (g_engine->getRandomNumber(1, 25) == 1) {
 		if (local._lightOn) {
-			_scene->_sequences.remove(g_sequence_ids[0]);
+			kernel_seq_delete(g_sequence_ids[0]);
 			local._lightOn = false;
 		} else {
-			g_sequence_ids[0] = _scene->_sequences.startCycle(g_sprite_ids[0], false, 1);
+			g_sequence_ids[0] = kernel_seq_stamp(g_sprite_ids[0], false, 1);
 			local._lightOn = true;
 		}
 	}
 
 	if (!local._blowingSmoke && (g_engine->getRandomNumber(1, 300) == 1)) {
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[1], 1, 14);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 14);
-		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 30);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[1], 1, 14);
+		kernel_seq_depth(g_sequence_ids[1], 14);
+		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 30);
 		local._blowingSmoke = true;
 	}
 
 	switch (kernel.trigger) {
 	case 30:
-		g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[1], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[1], 1, 5);
-		_scene->_sequences.setDepth(g_sequence_ids[1], 14);
-		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 31);
+		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[1], 1, 5);
+		kernel_seq_depth(g_sequence_ids[1], 14);
+		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 31);
 		break;
 
 	case 31:
@@ -1217,15 +1217,15 @@ static void room_402_daemon() {
 		if (g_engine->getRandomNumber(1, 1000) == 1) {
 			switch (g_engine->getRandomNumber(1, 2)) {
 			case 1:
-				g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 8);
-				_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 33);
+				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 12, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[2], 1, 8);
+				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 33);
 				local._leftWomanMoving = true;
 				break;
 
 			case 2:
-				g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
-				_scene->_sequences.addTimer(12, 35);
+				g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
+				kernel_timing_trigger(12, 35);
 				local._leftWomanMoving = true;
 				break;
 
@@ -1239,33 +1239,33 @@ static void room_402_daemon() {
 	case 33:
 	{
 		int seqIdx = g_sequence_ids[2];
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 9);
-		_scene->_sequences.updateTimeout(g_sequence_ids[2], seqIdx);
-		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 250), 34);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 9);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[2]);
+		kernel_timing_trigger(g_engine->getRandomNumber(60, 250), 34);
 	}
 	break;
 
 	case 34:
-		_scene->_sequences.remove(g_sequence_ids[2]);
-		g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 12, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 38);
+		kernel_seq_delete(g_sequence_ids[2]);
+		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 12, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[2], 1, 8);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 38);
 		break;
 
 	case 35:
-		_scene->_sequences.remove(g_sequence_ids[2]);
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 2);
-		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 300), 36);
+		kernel_seq_delete(g_sequence_ids[2]);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 2);
+		kernel_timing_trigger(g_engine->getRandomNumber(60, 300), 36);
 		break;
 
 	case 36:
-		_scene->_sequences.remove(g_sequence_ids[2]);
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
-		_scene->_sequences.addTimer(12, 37);
+		kernel_seq_delete(g_sequence_ids[2]);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
+		kernel_timing_trigger(12, 37);
 		break;
 
 	case 37:
-		_scene->_sequences.remove(g_sequence_ids[2]);
+		kernel_seq_delete(g_sequence_ids[2]);
 		local._leftWomanMoving = false;
 		break;
 
@@ -1281,30 +1281,30 @@ static void room_402_daemon() {
 		if (g_engine->getRandomNumber(1, 300) == 1) {
 			switch (g_engine->getRandomNumber(1, 4)) {
 			case 1:
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[3], 1, 4);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 2:
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 2);
+				kernel_seq_range(g_sequence_ids[3], 4, 5);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 3:
-				g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], 4, 5);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 2);
+				kernel_seq_range(g_sequence_ids[3], 4, 5);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 4:
-				g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 12, 2, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[3], 3, 4);
-				_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 2);
+				kernel_seq_range(g_sequence_ids[3], 3, 4);
+				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
@@ -1364,12 +1364,12 @@ static void room_402_daemon() {
 	case 39:
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1D8), 89, 67, 0xFDFC, 120, 0, 32);
-		_scene->_sequences.addTimer(150, 40);
+		kernel_timing_trigger(150, 40);
 		break;
 
 	case 40:
 		kernel_message_add(quote_string(kernel.quotes, 0x1D9), 89, 67, 0xFDFC, 120, 0, 32);
-		_scene->_sequences.addTimer(150, 41);
+		kernel_timing_trigger(150, 41);
 		break;
 
 	case 41:
@@ -1380,7 +1380,7 @@ static void room_402_daemon() {
 	case 42:
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1DC), 89, 67, 0xFDFC, 120, 0, 32);
-		_scene->_sequences.addTimer(150, 43);
+		kernel_timing_trigger(150, 43);
 		break;
 
 	case 43:
@@ -1399,80 +1399,80 @@ static void room_402_daemon() {
 	switch (kernel.trigger) {
 	case 55:
 		if (local._bartenderHandsHips) {
-			_scene->_sequences.remove(g_sequence_ids[10]);
+			kernel_seq_delete(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
-			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+			g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 			local._bartenderSteady = true;
-			_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+			kernel_seq_depth(g_sequence_ids[9], 8);
 		} else if (local._bartenderLooksLeft) {
-			_scene->_sequences.remove(g_sequence_ids[11]);
+			kernel_seq_delete(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
-			g_sequence_ids[9] = _scene->_sequences.startCycle(g_sprite_ids[9], false, 1);
+			g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
 			local._bartenderSteady = true;
-			_scene->_sequences.setDepth(g_sequence_ids[9], 8);
+			kernel_seq_depth(g_sequence_ids[9], 8);
 		}
 		player.commands_allowed = false;
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1FE), 180, 47, 0xFBFA, 100, 0, 0);
-		_scene->_sequences.addTimer(120, 56);
+		kernel_timing_trigger(120, 56);
 		break;
 
 	case 56:
-		_scene->_sequences.remove(g_sequence_ids[13]);
-		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 2, 5);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 57);
+		kernel_seq_delete(g_sequence_ids[13]);
+		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 2, 5);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 57);
 		break;
 
 	case 57:
 	{
 		int seqIdx = g_sequence_ids[13];
-		_scene->_sequences.remove(g_sequence_ids[20]);
-		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 6, 9);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 58);
+		kernel_seq_delete(g_sequence_ids[20]);
+		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 6, 9);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 58);
 	}
 	break;
 
 	case 58:
 	{
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 5, 9);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 59);
+		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 5, 9);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 59);
 	}
 	break;
 
 	case 59:
 	{
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 1, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
-		g_sequence_ids[20] = _scene->_sequences.startCycle(g_sprite_ids[20], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[20], 8);
-		_scene->_sequences.setPosition(g_sequence_ids[20], Common::Point(234, 72));
+		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 1, 4);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+		g_sequence_ids[20] = kernel_seq_stamp(g_sprite_ids[20], false, 1);
+		kernel_seq_depth(g_sequence_ids[20], 8);
+		kernel_seq_loc(g_sequence_ids[20], 234, 72);
 	}
 	break;
 
 	case 60:
 	{
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addTimer(10, 61);
+		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 2);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_timing_trigger(10, 61);
 	}
 	break;
 
@@ -1480,20 +1480,20 @@ static void room_402_daemon() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1FF), 181, 33, 0xFBFA, 130, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x200), 171, 47, 0xFBFA, 130, 0, 0);
-		_scene->_sequences.addTimer(150, 63);
-		_scene->_sequences.remove(g_sequence_ids[13]);
-		g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 30, 4, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 62);
+		kernel_timing_trigger(150, 63);
+		kernel_seq_delete(g_sequence_ids[13]);
+		g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 30, 0, 0, 4);
+		kernel_seq_range(g_sequence_ids[13], 10, 11);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 62);
 		break;
 
 	case 62:
 	{
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 2);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_depth(g_sequence_ids[13], 8);
 	}
 	break;
 
@@ -1501,85 +1501,85 @@ static void room_402_daemon() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x201), 160, 33, 0xFBFA, 130, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x202), 165, 47, 0xFBFA, 130, 0, 0);
-		_scene->_sequences.addTimer(150, 64);
+		kernel_timing_trigger(150, 64);
 		break;
 
 	case 64:
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1E0), 210, 27, 0xFDFC, 130, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x1E1), 198, 41, 0xFDFC, 130, 0, 0);
-		_scene->_sequences.addTimer(150, 65);
-		_scene->_sequences.addTimer(1, 100);
+		kernel_timing_trigger(150, 65);
+		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1130;
 		break;
 
 	case 65:
 		g_engine->_soundManager->command(30, 0);
-		g_sequence_ids[16] = _scene->_sequences.addSpriteCycle(g_sprite_ids[16], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[16], 1, 6);
-		_scene->_sequences.setDepth(g_sequence_ids[16], 9);
-		_scene->_sequences.addSubEntry(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 66);
+		g_sequence_ids[16] = kernel_seq_forward(g_sprite_ids[16], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[16], 1, 6);
+		kernel_seq_depth(g_sequence_ids[16], 9);
+		kernel_seq_trigger(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 66);
 		break;
 
 	case 66:
 	{
 		int seqIdx = g_sequence_ids[16];
-		g_sequence_ids[16] = _scene->_sequences.addSpriteCycle(g_sprite_ids[16], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[16], 7, 37);
-		_scene->_sequences.setDepth(g_sequence_ids[16], 9);
-		_scene->_sequences.updateTimeout(g_sequence_ids[16], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 68);
-
-		_scene->_sequences.remove(g_sequence_ids[13]);
-		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 12, 13);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 67);
+		g_sequence_ids[16] = kernel_seq_forward(g_sprite_ids[16], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[16], 7, 37);
+		kernel_seq_depth(g_sequence_ids[16], 9);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[16]);
+		kernel_seq_trigger(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 68);
+
+		kernel_seq_delete(g_sequence_ids[13]);
+		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 12, 13);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 67);
 	}
 	break;
 
 	case 67:
 	{
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 13);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 13);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_depth(g_sequence_ids[13], 8);
 	}
 	break;
 
 	case 68:
-		_scene->_sequences.remove(g_sequence_ids[13]);
-		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 12, 13);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 69);
+		kernel_seq_delete(g_sequence_ids[13]);
+		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 12, 13);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 69);
 		break;
 
 	case 69:
 	{
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 25, 4, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
+		g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 25, 0, 0, 4);
+		kernel_seq_range(g_sequence_ids[13], 10, 11);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
 
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x203), 179, 33, 0xFBFA, 130, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x204), 167, 47, 0xFBFA, 130, 0, 0);
-		_scene->_sequences.addTimer(150, 71);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_timing_trigger(150, 71);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 	}
 	break;
 
 	case 70:
-		g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 25, 4, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 12);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 25, 0, 0, 4);
+		kernel_seq_range(g_sequence_ids[13], 10, 12);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 71:
-		_scene->_sequences.addTimer(210, 73);
+		kernel_timing_trigger(210, 73);
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x205), 168, 33, 0xFBFA, 180, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x206), 151, 47, 0xFBFA, 180, 0, 0);
@@ -1590,9 +1590,9 @@ static void room_402_daemon() {
 	case 72:
 	{
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 2);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_depth(g_sequence_ids[13], 8);
 	}
 	break;
 
@@ -1619,51 +1619,51 @@ static void room_402_daemon() {
 			case 1:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(g_sequence_ids[13]);
-				g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[13], 2, 5);
-				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
+				kernel_seq_delete(g_sequence_ids[13]);
+				g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[13], 2, 5);
+				kernel_seq_depth(g_sequence_ids[13], 8);
+				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
 				break;
 
 			case 2:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(g_sequence_ids[13]);
-				g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 15, 2, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[13], 11, 13);
-				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				kernel_seq_delete(g_sequence_ids[13]);
+				g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 15, 0, 0, 2);
+				kernel_seq_range(g_sequence_ids[13], 11, 13);
+				kernel_seq_depth(g_sequence_ids[13], 8);
+				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 3:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(g_sequence_ids[13]);
-				g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[13], 10, 11);
-				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				kernel_seq_delete(g_sequence_ids[13]);
+				g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[13], 10, 11);
+				kernel_seq_depth(g_sequence_ids[13], 8);
+				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 4:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(g_sequence_ids[13]);
-				g_sequence_ids[13] = _scene->_sequences.startPingPongCycle(g_sprite_ids[13], false, 15, 2, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[13], 14, 15);
-				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				kernel_seq_delete(g_sequence_ids[13]);
+				g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 15, 0, 0, 2);
+				kernel_seq_range(g_sequence_ids[13], 14, 15);
+				kernel_seq_depth(g_sequence_ids[13], 8);
+				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 5:
 				local._cutSceneReady = false;
 				local._helgaReady = false;
-				_scene->_sequences.remove(g_sequence_ids[13]);
-				g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-				_scene->_sequences.setAnimRange(g_sequence_ids[13], 16, 19);
-				_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-				_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+				kernel_seq_delete(g_sequence_ids[13]);
+				g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
+				kernel_seq_range(g_sequence_ids[13], 16, 19);
+				kernel_seq_depth(g_sequence_ids[13], 8);
+				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
 				break;
 
 			default:
@@ -1673,25 +1673,25 @@ static void room_402_daemon() {
 
 	if (kernel.trigger == 80) {
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 19);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addTimer(g_engine->getRandomNumber(60, 120), 81);
+		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 19);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_timing_trigger(g_engine->getRandomNumber(60, 120), 81);
 	}
 
 	if (kernel.trigger == 81) {
-		_scene->_sequences.remove(g_sequence_ids[13]);
-		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 16, 19);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+		kernel_seq_delete(g_sequence_ids[13]);
+		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 16, 19);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
 	}
 
 	if (kernel.trigger == 26) {
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 2);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_depth(g_sequence_ids[13], 8);
 		local._cutSceneReady = true;
 
 		if (!local._cutSceneNeeded)
@@ -1699,54 +1699,54 @@ static void room_402_daemon() {
 	}
 
 	if (kernel.trigger == 82) {
-		_scene->_sequences.remove(g_sequence_ids[20]);
+		kernel_seq_delete(g_sequence_ids[20]);
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.addSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 6, 9);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 6, 9);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
 	}
 
 	if (kernel.trigger == 83) {
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 5, 9);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 84);
+		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 5, 9);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 84);
 	}
 
 	if (kernel.trigger == 84) {
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[13], false, 10, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[13], 1, 4);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.addSubEntry(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 85);
+		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[13], 1, 4);
+		kernel_seq_depth(g_sequence_ids[13], 8);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 85);
 
-		g_sequence_ids[20] = _scene->_sequences.startCycle(g_sprite_ids[20], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[20], 8);
-		_scene->_sequences.setPosition(g_sequence_ids[20], Common::Point(234, 72));
+		g_sequence_ids[20] = kernel_seq_stamp(g_sprite_ids[20], false, 1);
+		kernel_seq_depth(g_sequence_ids[20], 8);
+		kernel_seq_loc(g_sequence_ids[20], 234, 72);
 	}
 
 	if (kernel.trigger == 85) {
 		int seqIdx = g_sequence_ids[13];
-		g_sequence_ids[13] = _scene->_sequences.startCycle(g_sprite_ids[13], false, 2);
-		_scene->_sequences.updateTimeout(g_sequence_ids[13], seqIdx);
-		_scene->_sequences.setDepth(g_sequence_ids[13], 8);
+		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 2);
+		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
+		kernel_seq_depth(g_sequence_ids[13], 8);
 		local._cutSceneReady = true;
 		if (!local._cutSceneNeeded)
 			local._helgaReady = true;
 	}
 
 	if (kernel.trigger == 102) {
-		_scene->_sequences.remove(g_sequence_ids[6]);
+		kernel_seq_delete(g_sequence_ids[6]);
 		player.clock = kernel.clock - player.frame_delay;
-		g_sequence_ids[7] = _scene->_sequences.addSpriteCycle(g_sprite_ids[7], false, 8, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[7], 14, 18);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 5);
-		_scene->_sequences.addSubEntry(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 103);
+		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 8, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[7], 14, 18);
+		kernel_seq_depth(g_sequence_ids[7], 5);
+		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 103);
 	} else if (kernel.trigger == 103) {
 		player.clock = kernel.clock + player.frame_delay;
 		local._roxOnStool = false;
@@ -1759,46 +1759,46 @@ static void room_402_daemon() {
 
 	if (local._activeArrows) {
 		if (!local._activeArrow1) {
-			g_sequence_ids[17] = _scene->_sequences.startCycle(g_sprite_ids[17], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[17], 1);
-			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 49);
+			g_sequence_ids[17] = kernel_seq_stamp(g_sprite_ids[17], false, 1);
+			kernel_seq_depth(g_sequence_ids[17], 1);
+			kernel_timing_trigger(g_engine->getRandomNumber(10, 15), 49);
 			local._activeArrow1 = true;
 		}
 
 		if (!local._activeArrow2) {
-			g_sequence_ids[18] = _scene->_sequences.startCycle(g_sprite_ids[18], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[18], 1);
-			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 50);
+			g_sequence_ids[18] = kernel_seq_stamp(g_sprite_ids[18], false, 1);
+			kernel_seq_depth(g_sequence_ids[18], 1);
+			kernel_timing_trigger(g_engine->getRandomNumber(10, 15), 50);
 			local._activeArrow2 = true;
 		}
 
 		if (!local._activeArrow3) {
-			g_sequence_ids[19] = _scene->_sequences.startCycle(g_sprite_ids[19], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[19], 1);
-			_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 51);
+			g_sequence_ids[19] = kernel_seq_stamp(g_sprite_ids[19], false, 1);
+			kernel_seq_depth(g_sequence_ids[19], 1);
+			kernel_timing_trigger(g_engine->getRandomNumber(10, 15), 51);
 			local._activeArrow3 = true;
 		}
 	}
 
 	if (kernel.trigger == 49) {
-		_scene->_sequences.remove(g_sequence_ids[17]);
-		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 45);
+		kernel_seq_delete(g_sequence_ids[17]);
+		kernel_timing_trigger(g_engine->getRandomNumber(10, 15), 45);
 	}
 
 	if (kernel.trigger == 45)
 		local._activeArrow1 = false;
 
 	if (kernel.trigger == 50) {
-		_scene->_sequences.remove(g_sequence_ids[18]);
-		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 46);
+		kernel_seq_delete(g_sequence_ids[18]);
+		kernel_timing_trigger(g_engine->getRandomNumber(10, 15), 46);
 	}
 
 	if (kernel.trigger == 46)
 		local._activeArrow2 = false;
 
 	if (kernel.trigger == 51) {
-		_scene->_sequences.remove(g_sequence_ids[19]);
-		_scene->_sequences.addTimer(g_engine->getRandomNumber(10, 15), 47);
+		kernel_seq_delete(g_sequence_ids[19]);
+		kernel_timing_trigger(g_engine->getRandomNumber(10, 15), 47);
 	}
 
 	if (kernel.trigger == 47)
@@ -1836,7 +1836,7 @@ static void room_402_pre_parser() {
 			player.ready_to_walk = false;
 			player.commands_allowed = false;
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			_scene->_sequences.addTimer(1, 102);
+			kernel_timing_trigger(1, 102);
 		}
 	}
 
@@ -1853,25 +1853,25 @@ static void room_402_pre_parser() {
 static void room_402_parser() {
 	if (player_said_2(take, repair_list) && object_is_here(OBJ_REPAIR_LIST) && local._roxOnStool) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 77);
+		kernel_timing_trigger(1, 77);
 		player.need_to_walk = false;
 	} else if (player_said_2(take, repair_list) && object_is_here(OBJ_REPAIR_LIST) && !local._roxOnStool) {
 		if (kernel.trigger == 0) {
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[21] = _scene->_sequences.startPingPongCycle(g_sprite_ids[21], false, 7, 2, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[21], 1, 2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[21]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[21], SEQUENCE_TRIGGER_SPRITE, 2, 165);
-			_scene->_sequences.addSubEntry(g_sequence_ids[21], SEQUENCE_TRIGGER_EXPIRE, 0, 166);
+			g_sequence_ids[21] = kernel_seq_pingpong(g_sprite_ids[21], false, 7, 0, 0, 2);
+			kernel_seq_range(g_sequence_ids[21], 1, 2);
+			kernel_seq_player(g_sequence_ids[21], false);
+			kernel_seq_trigger(g_sequence_ids[21], SEQUENCE_TRIGGER_SPRITE, 2, 165);
+			kernel_seq_trigger(g_sequence_ids[21], SEQUENCE_TRIGGER_EXPIRE, 0, 166);
 		} else if (kernel.trigger == 165) {
-			_scene->_sequences.remove(g_sequence_ids[14]);
+			kernel_seq_delete(g_sequence_ids[14]);
 			inter_give_to_player(OBJ_REPAIR_LIST);
 		}
 	} else if (kernel.trigger == 166) {
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
-		_scene->_sequences.addTimer(20, 167);
+		kernel_timing_trigger(20, 167);
 	} else if (kernel.trigger == 167) {
 		object_examine(OBJ_REPAIR_LIST, 40240, 0);
 		player.commands_allowed = true;
@@ -1903,17 +1903,17 @@ static void room_402_parser() {
 			switch (random) {
 			case 1:
 				kernel_message_add(quote_string(kernel.quotes, 0x211), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
-				_scene->_sequences.addTimer(110, 25);
+				kernel_timing_trigger(110, 25);
 				break;
 
 			case 2:
 				kernel_message_add(quote_string(kernel.quotes, 0x212), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
-				_scene->_sequences.addTimer(110, 25);
+				kernel_timing_trigger(110, 25);
 				break;
 
 			case 3:
 				kernel_message_add(quote_string(kernel.quotes, 0x213), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
-				_scene->_sequences.addTimer(110, 25);
+				kernel_timing_trigger(110, 25);
 				break;
 
 			default:
@@ -1930,7 +1930,7 @@ static void room_402_parser() {
 				kernel_message_add(quote_string(kernel.quotes, 0x209), 177, 33, 0xFBFA, 130, 0, 0);
 				kernel_message_add(quote_string(kernel.quotes, 0x20A), 182, 47, 0xFBFA, 130, 0, 0);
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-				_scene->_sequences.addTimer(130, 28);
+				kernel_timing_trigger(130, 28);
 				break;
 
 			case 1:
@@ -1938,7 +1938,7 @@ static void room_402_parser() {
 				local._helgaTalkMode = 2;
 				kernel_message_add(quote_string(kernel.quotes, 0x20B), 157, 47, 0xFBFA, 100, 0, 0);
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-				_scene->_sequences.addTimer(100, 28);
+				kernel_timing_trigger(100, 28);
 				break;
 
 			case 2:
@@ -1946,7 +1946,7 @@ static void room_402_parser() {
 				local._helgaTalkMode = 3;
 				kernel_message_add(quote_string(kernel.quotes, 0x20C), 172, 47, 0xFBFA, 100, 0, 0);
 				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-				_scene->_sequences.addTimer(100, 28);
+				kernel_timing_trigger(100, 28);
 				break;
 
 			case 3:
@@ -1964,18 +1964,18 @@ static void room_402_parser() {
 	} else if (player_said_2(talkto, woman_in_chair) && !local._firstTalkToGirlInChair) {
 		kernel_message_add(quote_string(kernel.quotes, 0x1D7), 0, 0, 0x1110, 120, 0, 34);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(150, 39);
+		kernel_timing_trigger(150, 39);
 		player.commands_allowed = false;
 		local._firstTalkToGirlInChair = true;
 	} else if (player_said_2(talkto, woman_in_chair) && local._firstTalkToGirlInChair) {
 		kernel_message_add(quote_string(kernel.quotes, 0x1DB), 0, 0, 0x1110, 120, 0, 34);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(150, 42);
+		kernel_timing_trigger(150, 42);
 		player.commands_allowed = false;
 	} else if (player_said_2(talkto, woman_in_alcove) || player_said_2(walkto, woman_in_alcove)) {
 		kernel_message_add(quote_string(kernel.quotes, 0x1DE), 102, 48, 0xFBFA, 120, 0, 0);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(120, 44);
+		kernel_timing_trigger(120, 44);
 		player.commands_allowed = false;
 	} else if (player_said_2(sit_on, bar_stool) && (player.target_x == 248)) {
 		kernel_message_add(quote_string(kernel.quotes, 0x20D), 0, -14, 0x1110, 120, 0, 34);
@@ -1983,26 +1983,26 @@ static void room_402_parser() {
 	} else if (player_said_2(sit_on, bar_stool) && !local._roxOnStool && (player.target_x != 248)) {
 		player.walker_visible = false;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		g_sequence_ids[6] = _scene->_sequences.addSpriteCycle(g_sprite_ids[6], false, 7, 1, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[6], 1, 11);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 5);
-		_scene->_sequences.addSubEntry(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 7, 0, 0, 1);
+		kernel_seq_range(g_sequence_ids[6], 1, 11);
+		kernel_seq_depth(g_sequence_ids[6], 5);
+		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 		player.commands_allowed = false;
 	} else if (player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP) && local._roxOnStool) {
 		local._roxMode = 20;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addTimer(1, 92);
+		kernel_timing_trigger(1, 92);
 	} else if (player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP) && !local._roxOnStool) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[22] = _scene->_sequences.startPingPongCycle(g_sprite_ids[22], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[22], 1, 2);
-		_scene->_sequences.setPosition(g_sequence_ids[22], Common::Point(player.x, player.y + 1));
-		_scene->_sequences.setDepth(g_sequence_ids[22], 5);
-		_scene->_sequences.setScale(g_sequence_ids[22], 88);
+		g_sequence_ids[22] = kernel_seq_pingpong(g_sprite_ids[22], false, 7, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[22], 1, 2);
+		kernel_seq_loc(g_sequence_ids[22], player.x, player.y + 1);
+		kernel_seq_depth(g_sequence_ids[22], 5);
+		kernel_seq_scale(g_sequence_ids[22], 88);
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.addSubEntry(g_sequence_ids[22], SEQUENCE_TRIGGER_EXPIRE, 0, 104);
+		kernel_seq_trigger(g_sequence_ids[22], SEQUENCE_TRIGGER_EXPIRE, 0, 104);
 	} else if (player_said_2(talkto, bartender)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -2027,9 +2027,9 @@ static void room_402_parser() {
 			}
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, quoteId), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
-			_scene->_sequences.addTimer(110, 29);
+			kernel_timing_trigger(110, 29);
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			_scene->_sequences.addTimer(90, 28);
+			kernel_timing_trigger(90, 28);
 		}
 		break;
 
@@ -2039,21 +2039,21 @@ static void room_402_parser() {
 				if (object_is_here(OBJ_ALIEN_LIQUOR)) {
 					kernel_message_add(quote_string(kernel.quotes, 0x1DF), 177, 41, 0xFDFC, 120, 0, 0);
 					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-					_scene->_sequences.addTimer(1, 100);
+					kernel_timing_trigger(1, 100);
 					local._talkTimer = 120;
 				} else if (local._rexMode == 0) {
 					kernel_message_add(quote_string(kernel.quotes, 0x1F9), 175, 13, 0xFDFC, 180, 0, 0);
 					kernel_message_add(quote_string(kernel.quotes, 0x1FA), 184, 27, 0xFDFC, 180, 0, 0);
 					kernel_message_add(quote_string(kernel.quotes, 0x1FB), 200, 41, 0xFDFC, 180, 0, 0);
 					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-					_scene->_sequences.addTimer(1, 100);
+					kernel_timing_trigger(1, 100);
 					local._talkTimer = 180;
 					local._rexMode = 1;
 				} else if (local._rexMode == 1) {
 					kernel_message_add(quote_string(kernel.quotes, 0x1FC), 205, 41, 0xFDFC, 120, 0, 0);
 					player.commands_allowed = true;
 					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-					_scene->_sequences.addTimer(1, 100);
+					kernel_timing_trigger(1, 100);
 					local._talkTimer = 120;
 					local._rexMode = 3;
 				} else {
@@ -2067,7 +2067,7 @@ static void room_402_parser() {
 						kernel_message_add(quote_string(kernel.quotes, 0x1E3), 199, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 						local._bartenderCurrentQuestion = 10;
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-						_scene->_sequences.addTimer(1, 100);
+						kernel_timing_trigger(1, 100);
 						local._talkTimer = 120;
 						local._conversationFl = true;
 						local._bartenderDialogNode = 1;
@@ -2078,7 +2078,7 @@ static void room_402_parser() {
 					} else {
 						kernel_message_add(quote_string(kernel.quotes, 0x1EF), 177, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-						_scene->_sequences.addTimer(1, 100);
+						kernel_timing_trigger(1, 100);
 						local._talkTimer = 120;
 						local._bartenderCurrentQuestion = 3;
 						local._conversationFl = true;
@@ -2095,14 +2095,14 @@ static void room_402_parser() {
 						kernel_message_add(quote_string(kernel.quotes, 0x1FA), 184, 27, 0xFDFC, 180, 0, 0);
 						kernel_message_add(quote_string(kernel.quotes, 0x1FB), 200, 41, 0xFDFC, 180, 0, 0);
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-						_scene->_sequences.addTimer(1, 100);
+						kernel_timing_trigger(1, 100);
 						local._talkTimer = 180;
 						local._rexMode = 1;
 					} else if (local._rexMode == 1) {
 						kernel_message_add(quote_string(kernel.quotes, 0x1FC), 205, 41, 0xFDFC, 120, 0, 0);
 						player.commands_allowed = true;
 						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-						_scene->_sequences.addTimer(1, 100);
+						kernel_timing_trigger(1, 100);
 						local._talkTimer = 120;
 						local._rexMode = 3;
 					} else {
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index 39a2b06321d..896a31bb0f1 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -59,9 +59,9 @@ static void room_405_init() {
 	}
 
 	if (global[kArmoryDoorOpen])
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
 	else
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 
 	if (kernel.teleported_in) {
 		global[kArmoryDoorOpen] = false;
@@ -74,7 +74,7 @@ static void room_405_init() {
 
 static void room_405_daemon() {
 	if (kernel.trigger == 80) {
-		_scene->_sequences.addTimer(20, 81);
+		kernel_timing_trigger(20, 81);
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 	}
@@ -87,26 +87,26 @@ static void room_405_daemon() {
 	if (kernel.trigger == 70) {
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
-		g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[1], false, 6, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 6, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 		g_engine->_soundManager->command(19, 0);
 	}
 
 	if (kernel.trigger == 71) {
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 		global[kArmoryDoorOpen] = false;
-		_scene->_sequences.remove(g_sequence_ids[2]);
+		kernel_seq_delete(g_sequence_ids[2]);
 		player.commands_allowed = true;
 	}
 
 	if (kernel.trigger == 75) {
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 1, 0, 0);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 1);
 		global[kArmoryDoorOpen] = true;
 		player.commands_allowed = true;
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2],
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2],
 			false, 1);
 		g_engine->_soundManager->command(19, 0);
 	}
@@ -137,30 +137,30 @@ static void room_405_parser() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[3], 1, 2);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 		Common::Point msgPos = Common::Point(player.x, player.y + 1);
-		_scene->_sequences.setPosition(g_sequence_ids[3], msgPos);
-		_scene->_sequences.setScale(g_sequence_ids[3], 87);
+		kernel_seq_loc(g_sequence_ids[3], msgPos.x, msgPos.y);
+		kernel_seq_scale(g_sequence_ids[3], 87);
 	} else if ((player_said_3(put, security_card, card_slot) || player_said_2(close, wide_door)) && global[kArmoryDoorOpen]) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
-		_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(player.x, player.y));
-		_scene->_sequences.setScale(g_sequence_ids[3], 87);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[3], 1, 2);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_loc(g_sequence_ids[3], player.x, player.y);
+		kernel_seq_scale(g_sequence_ids[3], 87);
 	} else if (player_said_2(put, card_slot)) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
-		_scene->_sequences.setPosition(g_sequence_ids[3], Common::Point(player.x, player.y));
-		_scene->_sequences.setScale(g_sequence_ids[3], 87);
+		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[3], 1, 2);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		kernel_seq_loc(g_sequence_ids[3], player.x, player.y);
+		kernel_seq_scale(g_sequence_ids[3], 87);
 	} else if (player_said_2(look, cannon_balls))
 		text_show(40510);
 	else if (player_said_2(take, cannon_balls))
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index d3fd3d1ffc8..fba15de6ae0 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -72,15 +72,15 @@ static void room_406_init() {
 	}
 
 	if (!global[kStorageDoorOpen])
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 
 	if (previous_room != 411)
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 	else {
 		player.commands_allowed = false;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 3, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
+		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 3, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
 		g_engine->_soundManager->command(19, 0);
 	}
 
@@ -92,7 +92,7 @@ static void room_406_init() {
 static void room_406_daemon() {
 	if (kernel.trigger == 90) {
 		player.commands_allowed = true;
-		g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 	}
 
 	if (kernel.trigger == 80)
@@ -104,7 +104,7 @@ static void room_406_daemon() {
 	}
 
 	if (kernel.trigger == 110) {
-		_scene->_sequences.addTimer(20, 111);
+		kernel_timing_trigger(20, 111);
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 	}
@@ -117,20 +117,20 @@ static void room_406_daemon() {
 	if (kernel.trigger == 70) {
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
-		g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 4, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 		g_engine->_soundManager->command(19, 0);
 	}
 
 	if (kernel.trigger == 71) {
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 		global[kStorageDoorOpen] = false;
 		player.commands_allowed = true;
 	}
 
 	if (kernel.trigger == 75) {
-		_scene->_sequences.remove(g_sequence_ids[1]);
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 4, 1, 0, 0);
+		kernel_seq_delete(g_sequence_ids[1]);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 4, 0, 0, 1);
 		global[kStorageDoorOpen] = true;
 		player.commands_allowed = true;
 		player.clock = kernel.clock + player.frame_delay;
@@ -157,9 +157,9 @@ static void room_406_parser() {
 	if (player_said_2(walk_through, door) && (player.target_x > 100)) {
 		player.commands_allowed = false;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		_scene->_sequences.remove(g_sequence_ids[3]);
-		g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 3, 1, 0, 0);
-		_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		kernel_seq_delete(g_sequence_ids[3]);
+		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 3, 0, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
 		g_engine->_soundManager->command(19, 0);
 	} else if (player_said_2(walk_through, door) && global[kStorageDoorOpen] && (player.target_x < 100))
 		new_room = 410;
@@ -167,37 +167,37 @@ static void room_406_parser() {
 		kernel_message_add(quote_string(kernel.quotes, 0x24F), 0, 0, 0x1110, 60, 0, 34);
 		if (!local._hitStorageDoor) {
 			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			_scene->_sequences.addTimer(80, 100);
+			kernel_timing_trigger(80, 100);
 		}
 	} else if (player_said_3(put, security_card, card_slot) && !global[kStorageDoorOpen]) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[2], 1, 2);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
 		Common::Point msgPos = Common::Point(player.x, player.y + 1);
-		_scene->_sequences.setPosition(g_sequence_ids[2], msgPos);
-		_scene->_sequences.setScale(g_sequence_ids[2], 87);
+		kernel_seq_loc(g_sequence_ids[2], msgPos.x, msgPos.y);
+		kernel_seq_scale(g_sequence_ids[2], 87);
 	} else if (player_said_3(put, security_card, card_slot) && global[kStorageDoorOpen]) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[2], 1, 2);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
 		Common::Point msgPos = Common::Point(player.x, player.y + 1);
-		_scene->_sequences.setPosition(g_sequence_ids[2], msgPos);
-		_scene->_sequences.setScale(g_sequence_ids[2], 87);
+		kernel_seq_loc(g_sequence_ids[2], msgPos.x, msgPos.y);
+		kernel_seq_scale(g_sequence_ids[2], 87);
 	} else if (player_said_2(put, card_slot)) {
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 7, 2, 0, 0);
-		_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 2);
-		_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 110);
-		_scene->_sequences.setPosition(g_sequence_ids[2], Common::Point(player.x, player.y));
-		_scene->_sequences.setScale(g_sequence_ids[2], 87);
+		g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
+		kernel_seq_range(g_sequence_ids[2], 1, 2);
+		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 110);
+		kernel_seq_loc(g_sequence_ids[2], player.x, player.y);
+		kernel_seq_scale(g_sequence_ids[2], 87);
 	} else if (player_said_2(look, trash))
 		text_show(40610);
 	else if (player_said_2(take, trash))
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index a5afb40fd87..e10fad70ebf 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -40,8 +40,8 @@ static void room_408_init() {
 	g_sprite_ids[2] = kernel_load_series(kernel_name('m', -1), 0);
 
 	if (object_is_here(OBJ_TARGET_MODULE)) {
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[2], 3);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
+		kernel_seq_depth(g_sequence_ids[2], 3);
 		int idx = _scene->_dynamicHotspots.add(words_target_module, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(283, 128), FACING_NORTHEAST);
 	}
@@ -66,15 +66,15 @@ static void room_408_parser() {
 			g_engine->_soundManager->command(57, 0);
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[1] = _scene->_sequences.startPingPongCycle(g_sprite_ids[1], true, 7, 2, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[1], 1, 2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[1]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], true, 7, 0, 0, 2);
+			kernel_seq_range(g_sequence_ids[1], 1, 2);
+			kernel_seq_player(g_sequence_ids[1], false);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[2]);
+			kernel_seq_delete(g_sequence_ids[2]);
 			inter_give_to_player(OBJ_TARGET_MODULE);
 			object_examine(OBJ_TARGET_MODULE, 40847, 0);
 			break;
@@ -82,7 +82,7 @@ static void room_408_parser() {
 		case 2:
 			player.clock = player.frame_delay + kernel.clock;
 			player.walker_visible = true;
-			_scene->_sequences.addTimer(20, 3);
+			kernel_timing_trigger(20, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index a90071be770..47629cff3c1 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -36,7 +36,7 @@ static void room_410_init() {
 	g_sprite_ids[2] = kernel_load_series("*ROXRC_7", 0);
 
 	if (object_is_here(OBJ_CHARGE_CASES))
-		g_sequence_ids[1] = _scene->_sequences.startCycle(g_sprite_ids[1], false, 1);
+		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 	else
 		_scene->_hotspots.activate(words_charge_cases, false);
 
@@ -105,15 +105,15 @@ static void room_410_parser() {
 			g_engine->_soundManager->command(57, 0);
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 7, 2, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 3);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 3, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
+			kernel_seq_range(g_sequence_ids[2], 1, 3);
+			kernel_seq_player(g_sequence_ids[2], false);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 3, 1);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[1]);
+			kernel_seq_delete(g_sequence_ids[1]);
 			_scene->_hotspots.activate(words_charge_cases, false);
 			inter_give_to_player(OBJ_CHARGE_CASES);
 			object_examine(OBJ_CHARGE_CASES, 41032, 0);
@@ -122,7 +122,7 @@ static void room_410_parser() {
 		case 2:
 			player.clock = player.frame_delay + kernel.clock;
 			player.walker_visible = true;
-			_scene->_sequences.addTimer(20, 3);
+			kernel_timing_trigger(20, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index 00884eeca4a..67fab670477 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -209,14 +209,12 @@ static int computeQuoteAndQuantity() {
 static void handleKettleAction() {
 	switch (global[kNextIngredient]) {
 	case 1:
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4],
-			false, 15, 0, 0, 0);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 15, 0, 0, 0);
 		break;
 
 	case 2:
-		_scene->_sequences.remove(g_sequence_ids[4]);
-		g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4],
-			false, 6, 0, 0, 0);
+		kernel_seq_delete(g_sequence_ids[4]);
+		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
 		break;
 
 	case 3:
@@ -316,8 +314,8 @@ static void room_411_init() {
 	g_sprite_ids[11] = kernel_load_series(kernel_name('a', 1), 0);
 	g_sprite_ids[8] = kernel_load_series("*ROXRC_9", 0);
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 5, 0, 0, 0);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 50, 0, 0, 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 0, 0, 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 50, 0, 0, 0);
 
 	kernel.quotes = quote_load(0x252, 0x25E, 0x25A, 0x256, 0x253, 0x25F, 0x25B, 0x257, 0x254, 0x260, 0x25C, 0x258, 0x255,
 		0x261, 0x25D, 0x259, 0x262, 0x267, 0x263, 0x26B, 0x26F, 0x268, 0x264, 0x26C, 0x270, 0x26A, 0x266, 0x26E,
@@ -337,7 +335,7 @@ static void room_411_init() {
 	}
 
 	if (global[kNextIngredient] >= 4 && object_check_quality(OBJ_CHARGE_CASES, 3)) {
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], true, 6);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], true, 6);
 	} else if (!object_check_quality(OBJ_CHARGE_CASES, 3)) {
 		switch (global[kNextIngredient]) {
 		case 1:
@@ -347,14 +345,14 @@ static void room_411_init() {
 		case 2:
 			g_engine->_soundManager->command(53, 0);
 			g_engine->_soundManager->command(54, 0);
-			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 15, 0, 0, 0);
+			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 15, 0, 0, 0);
 			break;
 
 		case 3:
 			g_engine->_soundManager->command(53, 0);
 			g_engine->_soundManager->command(54, 0);
 			g_engine->_soundManager->command(55, 0);
-			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
+			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
 			break;
 
 		case 4:
@@ -362,7 +360,7 @@ static void room_411_init() {
 			g_engine->_soundManager->command(54, 0);
 			g_engine->_soundManager->command(55, 0);
 			g_engine->_soundManager->command(56, 0);
-			g_sequence_ids[4] = _scene->_sequences.addSpriteCycle(g_sprite_ids[4], false, 6, 0, 0, 0);
+			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
 			break;
 
 		default:
@@ -372,27 +370,27 @@ static void room_411_init() {
 	}
 
 	if (global[kNextIngredient] >= 4 && object_check_quality(OBJ_CHARGE_CASES, 3)) {
-		g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], true, 6);
-		_scene->_sequences.setDepth(g_sequence_ids[4], 1);
+		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], true, 6);
+		kernel_seq_depth(g_sequence_ids[4], 1);
 	}
 
 	if (object_is_here(OBJ_FORMALDEHYDE)) {
-		g_sequence_ids[7] = _scene->_sequences.startCycle(g_sprite_ids[7], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[7], 1);
+		g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, 1);
+		kernel_seq_depth(g_sequence_ids[7], 1);
 		int idx = _scene->_dynamicHotspots.add(words_formaldehyde, words_walkto, g_sequence_ids[7], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(206, 145), FACING_SOUTHEAST);
 	}
 
 	if (object_is_here(OBJ_PETROX)) {
-		g_sequence_ids[5] = _scene->_sequences.startCycle(g_sprite_ids[5], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[5], 8);
+		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
+		kernel_seq_depth(g_sequence_ids[5], 8);
 		int idx = _scene->_dynamicHotspots.add(words_petrox, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 112), FACING_NORTHEAST);
 	}
 
 	if (object_is_here(OBJ_LECITHIN)) {
-		g_sequence_ids[6] = _scene->_sequences.startCycle(g_sprite_ids[6], false, 1);
-		_scene->_sequences.setDepth(g_sequence_ids[6], 8);
+		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, 1);
+		kernel_seq_depth(g_sequence_ids[6], 8);
 		int idx = _scene->_dynamicHotspots.add(words_lecithin, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(idx, Common::Point(220, 121), FACING_NORTHEAST);
 	}
@@ -470,7 +468,7 @@ static void room_411_daemon() {
 			case 59:
 			case 115:
 				if (local._makeMushroomCloud) {
-					g_sequence_ids[9] = _scene->_sequences.addSpriteCycle(g_sprite_ids[9], false, 5, 1, 0, 0);
+					g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 5, 0, 0, 1);
 					local._makeMushroomCloud = false;
 					_scene->_hotspots.activate(words_kettle, false);
 					_scene->_hotspots.activate(words_explosives, true);
@@ -543,35 +541,35 @@ static void room_411_parser() {
 			g_engine->_soundManager->command(57, 0);
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[10] = _scene->_sequences.addSpriteCycle(g_sprite_ids[10], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[10], 1, 6);
-			_scene->_sequences.setDepth(g_sequence_ids[10], 3);
-			_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 110);
+			g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[10], 1, 6);
+			kernel_seq_depth(g_sequence_ids[10], 3);
+			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 110);
 			break;
 
 		case 110:
 		{
 			int idx = g_sequence_ids[10];
-			g_sequence_ids[10] = _scene->_sequences.startCycle(g_sprite_ids[10], false, 6);
-			_scene->_sequences.setDepth(g_sequence_ids[10], 3);
-			_scene->_sequences.updateTimeout(g_sequence_ids[10], idx);
-			_scene->_sequences.addTimer(180, 111);
+			g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[10], false, 6);
+			kernel_seq_depth(g_sequence_ids[10], 3);
+			kernel_seq_timeout(idx, g_sequence_ids[10]);
+			kernel_timing_trigger(180, 111);
 		}
 		break;
 
 		case 111:
 			_scene->_hotspots.activate(words_kettle, true);
 			_scene->_hotspots.activate(words_explosives, false);
-			_scene->_sequences.remove(g_sequence_ids[4]);
-			_scene->_sequences.remove(g_sequence_ids[10]);
+			kernel_seq_delete(g_sequence_ids[4]);
+			kernel_seq_delete(g_sequence_ids[10]);
 
-			g_sequence_ids[4] = _scene->_sequences.startCycle(g_sprite_ids[4], true, 6);
-			_scene->_sequences.setDepth(g_sequence_ids[4], 1);
+			g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], true, 6);
+			kernel_seq_depth(g_sequence_ids[4], 1);
 
-			g_sequence_ids[10] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[10], false, 8, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[10], 1, 6);
-			_scene->_sequences.setDepth(g_sequence_ids[10], 3);
-			_scene->_sequences.addSubEntry(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 112);
+			g_sequence_ids[10] = kernel_seq_backward(g_sprite_ids[10], false, 8, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[10], 1, 6);
+			kernel_seq_depth(g_sequence_ids[10], 3);
+			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 112);
 			// fall through
 		case 112:
 			player.clock = kernel.clock - player.frame_delay;
@@ -598,15 +596,15 @@ static void room_411_parser() {
 			g_engine->_soundManager->command(57, 0);
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[8] = _scene->_sequences.startPingPongCycle(g_sprite_ids[8], false, 7, 2, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[8], 1, 2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[8]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[8] = kernel_seq_pingpong(g_sprite_ids[8], false, 7, 0, 0, 2);
+			kernel_seq_range(g_sequence_ids[8], 1, 2);
+			kernel_seq_player(g_sequence_ids[8], false);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[5]);
+			kernel_seq_delete(g_sequence_ids[5]);
 			inter_give_to_player(OBJ_PETROX);
 			object_examine(OBJ_PETROX, 41120, 0);
 			break;
@@ -615,7 +613,7 @@ static void room_411_parser() {
 			player.clock = kernel.clock + player.frame_delay;
 			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = true;
-			_scene->_sequences.addTimer(20, 3);
+			kernel_timing_trigger(20, 3);
 			break;
 
 		case 3:
@@ -635,15 +633,15 @@ static void room_411_parser() {
 			g_engine->_soundManager->command(57, 0);
 			player.commands_allowed = false;
 			player.walker_visible = false;
-			g_sequence_ids[8] = _scene->_sequences.startPingPongCycle(g_sprite_ids[8], false, 7, 2, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[8], 1, 2);
-			_scene->_sequences.setMsgLayout(g_sequence_ids[8]);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			_scene->_sequences.addSubEntry(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			g_sequence_ids[8] = kernel_seq_pingpong(g_sprite_ids[8], false, 7, 0, 0, 2);
+			kernel_seq_range(g_sequence_ids[8], 1, 2);
+			kernel_seq_player(g_sequence_ids[8], false);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
-			_scene->_sequences.remove(g_sequence_ids[6]);
+			kernel_seq_delete(g_sequence_ids[6]);
 			inter_give_to_player(OBJ_LECITHIN);
 			object_examine(OBJ_LECITHIN, 41124, 0);
 			break;
@@ -651,7 +649,7 @@ static void room_411_parser() {
 		case 2:
 			player.clock = kernel.clock + player.frame_delay;
 			player.walker_visible = true;
-			_scene->_sequences.addTimer(20, 3);
+			kernel_timing_trigger(20, 3);
 			break;
 
 		case 3:
@@ -669,21 +667,21 @@ static void room_411_parser() {
 		g_engine->_soundManager->command(57, 0);
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		g_sequence_ids[11] = _scene->_sequences.startCycle(g_sprite_ids[11], false, 2);
-		_scene->_sequences.setDepth(g_sequence_ids[11], 1);
-		_scene->_sequences.addTimer(20, 100);
-		_scene->_sequences.remove(g_sequence_ids[7]);
+		g_sequence_ids[11] = kernel_seq_stamp(g_sprite_ids[11], false, 2);
+		kernel_seq_depth(g_sequence_ids[11], 1);
+		kernel_timing_trigger(20, 100);
+		kernel_seq_delete(g_sequence_ids[7]);
 		inter_give_to_player(OBJ_FORMALDEHYDE);
 		player.command_ready = false;
 		return;
 	}
 
 	if (kernel.trigger == 100) {
-		_scene->_sequences.remove(g_sequence_ids[11]);
+		kernel_seq_delete(g_sequence_ids[11]);
 		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = true;
 		player.commands_allowed = true;
-		_scene->_sequences.addTimer(20, 10);
+		kernel_timing_trigger(20, 10);
 	}
 
 	if (kernel.trigger == 10)
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index a1aa5f61ad8..450c4729ccc 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -69,19 +69,19 @@ static void room_413_init() {
 		case 1:
 			g_engine->_soundManager->command(30, 0);
 			player.walker_visible = false;
-			g_sequence_ids[1] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[1], 1, 19);
-			_scene->_sequences.setDepth(g_sequence_ids[1], 8);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 7, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[1], 1, 19);
+			kernel_seq_depth(g_sequence_ids[1], 8);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
 			break;
 
 		case 2:
 			player.walker_visible = false;
 			g_engine->_soundManager->command(30, 0);
-			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 7, 1, 0, 0);
-			_scene->_sequences.setAnimRange(g_sequence_ids[1], 1, 20);
-			_scene->_sequences.setDepth(g_sequence_ids[1], 8);
-			_scene->_sequences.addSubEntry(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
+			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 1);
+			kernel_seq_range(g_sequence_ids[1], 1, 20);
+			kernel_seq_depth(g_sequence_ids[1], 8);
+			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 8067638a93a..68bdb59916c 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -57,27 +57,27 @@ static void handleSlotActions() {
 			frameIndex = 2;
 		}
 
-		local._mainSequenceId = _scene->_sequences.startPingPongCycle(local._mainSpriteId, false, numTicks, 1, 0, 0);
-		_scene->_sequences.setAnimRange(local._mainSequenceId, 1, frameIndex);
-		_scene->_sequences.setMsgLayout(local._mainSequenceId);
+		local._mainSequenceId = kernel_seq_pingpong(local._mainSpriteId, false, numTicks, 0, 0, 1);
+		kernel_seq_range(local._mainSequenceId, 1, frameIndex);
+		kernel_seq_player(local._mainSequenceId, false);
 		g_engine->_soundManager->command(10, 0);
-		_scene->_sequences.addSubEntry(local._mainSequenceId, SEQUENCE_TRIGGER_SPRITE, frameIndex, 1);
-		_scene->_sequences.addSubEntry(local._mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(local._mainSequenceId, SEQUENCE_TRIGGER_SPRITE, frameIndex, 1);
+		kernel_seq_trigger(local._mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 12, 6, 0, 0);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 12, 0, 0, 6);
 		break;
 
 	case 2:
-		_scene->_sequences.updateTimeout(-1, local._mainSequenceId);
+		kernel_seq_timeout(local._mainSequenceId, -1);
 		player.walker_visible = true;
-		_scene->_sequences.addTimer(15, 3);
+		kernel_timing_trigger(15, 3);
 		break;
 
 	case 3:
 		player_walk(282, 110, FACING_NORTH);
-		_scene->_sequences.addTimer(60, 4);
+		kernel_timing_trigger(60, 4);
 		break;
 
 	default:
@@ -98,13 +98,13 @@ static void room_501_init() {
 		g_sprite_ids[7] = kernel_load_series("*ROXCD_7", 0);
 	}
 
-	g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
+	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 	int idx = _scene->_dynamicHotspots.add(words_door, words_walk_through, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 	local._doorHotspotid = _scene->_dynamicHotspots.setPosition(idx, Common::Point(282, 110), FACING_NORTH);
 	_scene->_dynamicHotspots.setCursor(local._doorHotspotid, CURSOR_GO_UP);
-	_scene->_sequences.setDepth(g_sequence_ids[3], 7);
-	g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
-	_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+	kernel_seq_depth(g_sequence_ids[3], 7);
+	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
+	kernel_seq_depth(g_sequence_ids[2], 4);
 	local._rexPunched = true;
 
 	if (previous_room == 504) {
@@ -114,9 +114,9 @@ static void room_501_init() {
 		player.facing = FACING_NORTHWEST;
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		_scene->_sequences.remove(g_sequence_ids[2]);
-		g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
-		_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+		kernel_seq_delete(g_sequence_ids[2]);
+		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -2);
+		kernel_seq_depth(g_sequence_ids[2], 4);
 		if (global[kSexOfRex] == REX_MALE)
 			kernel_run_animation(kernel_name('G', 2), 70);
 		else
@@ -125,7 +125,7 @@ static void room_501_init() {
 		player.x = 317;
 		player.y = 102;
 		player.facing = FACING_SOUTHWEST;
-		_scene->_sequences.addTimer(15, 80);
+		kernel_timing_trigger(15, 80);
 	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 299;
 		player.y = 131;
@@ -141,7 +141,7 @@ static void room_501_init() {
 	kernel.quotes = quote_load(0x275, 0x276, 0x277, 0);
 
 	if (!player.been_here_before)
-		_scene->_sequences.addTimer(2, 90);
+		kernel_timing_trigger(2, 90);
 }
 
 static void room_501_daemon() {
@@ -152,34 +152,34 @@ static void room_501_daemon() {
 		switch (kernel.trigger) {
 		case 80:
 			player.commands_allowed = false;
-			_scene->_sequences.remove(g_sequence_ids[3]);
-			g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 12, 6, 0, 0);
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 7);
+			kernel_seq_delete(g_sequence_ids[3]);
+			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 12, 0, 0, 6);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[3], 7);
 			g_engine->_soundManager->command(11, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
 			break;
 
 		case 81:
 			_scene->_dynamicHotspots.remove(local._doorHotspotid);
 			player_walk(276, 110, FACING_SOUTHWEST);
-			_scene->_sequences.addTimer(120, 82);
+			kernel_timing_trigger(120, 82);
 			break;
 
 		case 82:
-			g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 7);
+			g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 9, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[3], 7);
 			g_engine->_soundManager->command(12, 0);
 			local._doorHotspotid = _scene->_dynamicHotspots.add(words_door, words_walk_through, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
 			_scene->_dynamicHotspots.setPosition(g_sequence_ids[3], Common::Point(282, 110), FACING_NORTH);
 			_scene->_dynamicHotspots.setCursor(local._doorHotspotid, CURSOR_GO_UP);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
 			break;
 
 		case 83:
 			player.commands_allowed = true;
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, -1);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 7);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -1);
+			kernel_seq_depth(g_sequence_ids[3], 7);
 			break;
 
 		default:
@@ -192,25 +192,25 @@ static void room_501_daemon() {
 		case 70:
 			player.walker_visible = true;
 			player.clock = kernel.clock - player.frame_delay;
-			_scene->_sequences.addTimer(15, 71);
+			kernel_timing_trigger(15, 71);
 			break;
 
 		case 71:
 			player_walk(92, 130, FACING_SOUTH);
-			_scene->_sequences.addTimer(30, 72);
+			kernel_timing_trigger(30, 72);
 			break;
 
 		case 72:
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[2], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 6, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
 			break;
 
 		case 73:
 			player.commands_allowed = true;
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -1);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
+			kernel_seq_depth(g_sequence_ids[2], 4);
 			break;
 
 		default:
@@ -229,19 +229,19 @@ static void room_501_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
-			_scene->_sequences.remove(g_sequence_ids[2]);
-			g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_delete(g_sequence_ids[2]);
+			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
 		{
 			int syncIdx = g_sequence_ids[2];
-			g_sequence_ids[2] = _scene->_sequences.startCycle(g_sprite_ids[2], false, -2);
-			_scene->_sequences.setDepth(g_sequence_ids[2], 4);
-			_scene->_sequences.updateTimeout(g_sequence_ids[2], syncIdx);
-			_scene->_sequences.addTimer(15, 2);
+			g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -2);
+			kernel_seq_depth(g_sequence_ids[2], 4);
+			kernel_seq_timeout(syncIdx, g_sequence_ids[2]);
+			kernel_timing_trigger(15, 2);
 		}
 		break;
 
@@ -252,18 +252,18 @@ static void room_501_parser() {
 			else
 				local._mainSpriteId = g_sprite_ids[7];
 
-			local._mainSequenceId = _scene->_sequences.addSpriteCycle(local._mainSpriteId, false, 8, 1, 0, 0);
-			_scene->_sequences.setMsgLayout(local._mainSequenceId);
-			_scene->_sequences.addSubEntry(local._mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			local._mainSequenceId = kernel_seq_forward(local._mainSpriteId, false, 8, 0, 0, 1);
+			kernel_seq_player(local._mainSequenceId, false);
+			kernel_seq_trigger(local._mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
 		{
 			int syncIdx = local._mainSequenceId;
-			local._mainSequenceId = _scene->_sequences.startCycle(local._mainSpriteId, false, -2);
-			_scene->_sequences.setMsgLayout(local._mainSequenceId);
-			_scene->_sequences.updateTimeout(local._mainSequenceId, syncIdx);
-			_scene->_sequences.addTimer(30, 4);
+			local._mainSequenceId = kernel_seq_stamp(local._mainSpriteId, false, -2);
+			kernel_seq_player(local._mainSequenceId, false);
+			kernel_seq_timeout(syncIdx, local._mainSequenceId);
+			kernel_timing_trigger(30, 4);
 		}
 		break;
 
@@ -300,7 +300,7 @@ static void room_501_parser() {
 		case 5:
 			player.walker_visible = true;
 			player.clock = kernel.clock - player.frame_delay;
-			_scene->_sequences.addTimer(30, 6);
+			kernel_timing_trigger(30, 6);
 			break;
 
 		case 6:
@@ -330,37 +330,37 @@ static void room_501_parser() {
 			break;
 
 		case 4:
-			_scene->_sequences.remove(g_sequence_ids[3]);
+			kernel_seq_delete(g_sequence_ids[3]);
 			_scene->_dynamicHotspots.remove(local._doorHotspotid);
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 7);
+			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[3], 7);
 			g_engine->_soundManager->command(11, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 6);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 6);
 			break;
 
 		case 6:
 			player_walk(317, 102, FACING_NORTHEAST);
-			_scene->_sequences.addTimer(120, 7);
+			kernel_timing_trigger(120, 7);
 			break;
 
 		case 7:
 		{
 			g_engine->_soundManager->command(12, 0);
 			int syncIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.addReverseSpriteCycle(g_sprite_ids[3], false, 9, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 7);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
+			g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 9, 0, 0, 1);
+			kernel_seq_depth(g_sequence_ids[3], 7);
+			kernel_seq_timeout(syncIdx, g_sequence_ids[3]);
 			g_engine->_soundManager->command(12, 0);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
 		}
 		break;
 
 		case 8:
 		{
 			int syncIdx = g_sequence_ids[3];
-			g_sequence_ids[3] = _scene->_sequences.startCycle(g_sprite_ids[3], false, 1);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 7);
-			_scene->_sequences.updateTimeout(g_sequence_ids[3], syncIdx);
+			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
+			kernel_seq_depth(g_sequence_ids[3], 7);
+			kernel_seq_timeout(syncIdx, g_sequence_ids[3]);
 			new_room = 503;
 		}
 		break;
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index 30de37adef1..31a8d16058c 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -48,7 +48,7 @@ static void room_503_init() {
 		g_sprite_ids[3] = kernel_load_series("*ROXBD_2", 0);
 
 	if (object[OBJ_DETONATORS].location == room_id) {
-		g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 9, 0, 0, 0);
+		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
 		local._detonatorHotspotId = _scene->_dynamicHotspots.add(words_detonators, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
 		_scene->_dynamicHotspots.setPosition(local._detonatorHotspotId, Common::Point(254, 135), FACING_SOUTH);
 	}
@@ -72,23 +72,23 @@ static void room_503_parser() {
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				if (global[kSexOfRex] == REX_MALE) {
-					g_sequence_ids[2] = _scene->_sequences.startPingPongCycle(g_sprite_ids[2], false, 8, 1, 0, 0);
-					_scene->_sequences.setAnimRange(g_sequence_ids[2], 1, 3);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[2]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 3, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 8, 0, 0, 1);
+					kernel_seq_range(g_sequence_ids[2], 1, 3);
+					kernel_seq_player(g_sequence_ids[2], false);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 3, 1);
+					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				} else {
-					g_sequence_ids[3] = _scene->_sequences.startPingPongCycle(g_sprite_ids[3], true, 8, 1, 0, 0);
-					_scene->_sequences.setAnimRange(g_sequence_ids[3], 1, 4);
-					_scene->_sequences.setMsgLayout(g_sequence_ids[3]);
-					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-					_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], true, 8, 0, 0, 1);
+					kernel_seq_range(g_sequence_ids[3], 1, 4);
+					kernel_seq_player(g_sequence_ids[3], false);
+					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 4, 1);
+					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
 			case 1:
 				g_engine->_soundManager->command(9, 0);
-				_scene->_sequences.remove(g_sequence_ids[1]);
+				kernel_seq_delete(g_sequence_ids[1]);
 				_scene->_dynamicHotspots.remove(local._detonatorHotspotId);
 				inter_give_to_player(OBJ_DETONATORS);
 				object_examine(OBJ_DETONATORS, 50326, 0);
@@ -96,9 +96,9 @@ static void room_503_parser() {
 
 			case 2:
 				if (global[kSexOfRex] == REX_MALE)
-					_scene->_sequences.updateTimeout(-1, g_sequence_ids[2]);
+					kernel_seq_timeout(g_sequence_ids[2], -1);
 				else
-					_scene->_sequences.updateTimeout(-1, g_sequence_ids[3]);
+					kernel_seq_timeout(g_sequence_ids[3], -1);
 
 				player.walker_visible = true;
 				player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index 4401dbcab71..55e1441dd24 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -53,16 +53,16 @@ static void room_504_init() {
 		kernel_load_variant(1);
 	}
 
-	g_sequence_ids[1] = _scene->_sequences.addSpriteCycle(g_sprite_ids[1], false, 6, 1, 0, 0);
-	_scene->_sequences.setDepth(g_sequence_ids[1], 0);
-	g_sequence_ids[2] = _scene->_sequences.addSpriteCycle(g_sprite_ids[2], false, 6, 0, 0, 0);
+	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 1);
+	kernel_seq_depth(g_sequence_ids[1], 0);
+	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
 	local._carFrame = -1;
 
 	if ((previous_room == 505) && (global[kHoverCarDestination] != global[kHoverCarLocation])) {
 		local._carAnimationMode = 1;
 		kernel_run_animation(kernel_name('A', -1), 0);
 		g_engine->_soundManager->command(14, 0);
-		_scene->_sequences.addTimer(1, 70);
+		kernel_timing_trigger(1, 70);
 		player.commands_allowed = false;
 	} else {
 		g_sprite_ids[3] = kernel_load_series(kernel_name('a', 3), 0);
@@ -71,7 +71,7 @@ static void room_504_init() {
 		if ((previous_room != RETURNING_FROM_DIALOG) && (previous_room != 505))
 			global[kHoverCarLocation] = previous_room;
 
-		g_sequence_ids[7] = _scene->_sequences.startCycle(g_sprite_ids[7], false, 1);
+		g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, 1);
 	}
 
 	if (global[kTimebombTimer] > 10500)
@@ -149,41 +149,41 @@ static void room_504_parser() {
 		case 0:
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(39, 0);
-			g_sequence_ids[3] = _scene->_sequences.addSpriteCycle(g_sprite_ids[3], false, 6, 1, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[3], 13);
-			_scene->_sequences.addSubEntry(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			_scene->_sequences.remove(g_sequence_ids[7]);
-			g_sequence_ids[5] = _scene->_sequences.addSpriteCycle(g_sprite_ids[5], false, 18, 0, 0, 0);
-			_scene->_sequences.setDepth(g_sequence_ids[5], 14);


Commit: 89ce28f6621de68f9c56d7567ea781b7cdbd1b01
    https://github.com/scummvm/scummvm/commit/89ce28f6621de68f9c56d7567ea781b7cdbd1b01
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:56+10:00

Commit Message:
MADS: NEBULAR: Refactor remainder of Scene thunk

Changed paths:
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room216.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room321.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room366.cpp
    engines/mads/nebular/rooms/room387.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room390.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/room810.cpp
    engines/mads/nebular/rooms/thunks.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 84403cb4034..f9fd5916525 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -102,7 +102,7 @@ static void room_101_init() {
 	g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 6, 4, 10, 0);
 	g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 6, 47, 32, 0);
 
-	_scene->_hotspots.activate(words_shield_modulator, false);
+	kernel_flip_hotspot(words_shield_modulator, false);
 	local._panelOpened = false;
 
 	if (previous_room != RETURNING_FROM_LOADING)
@@ -121,8 +121,8 @@ static void room_101_init() {
 		player.facing = FACING_NORTHEAST;
 		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 0);
 		kernel_seq_range(g_sequence_ids[11], 17, 17);
-		_scene->_hotspots.activate(words_chair, false);
-		local._chairHotspotId = _scene->_dynamicHotspots.add(words_chair, words_sit_in, -1, Common::Rect(159, 84, 159 + 33, 84 + 36));
+		kernel_flip_hotspot(words_chair, false);
+		local._chairHotspotId = kernel_add_dynamic(words_chair, words_sit_in, 0, -1, 159, 84, 33, 36);
 		if (previous_room == 112)
 			room_101_say_dang();
 	} else {
@@ -237,8 +237,8 @@ static void room_101_pre_parser() {
 				player.walker_visible = true;
 				player.commands_allowed = true;
 				player.ready_to_walk = true;
-				_scene->_hotspots.activate(71, true);
-				_scene->_dynamicHotspots.remove(local._chairHotspotId);
+				kernel_flip_hotspot(71, true);
+				kernel_delete_dynamic(local._chairHotspotId);
 				g_sequence_ids[12] = kernel_seq_forward(g_sprite_ids[12], false, 6, 0, 0, 0);
 				kernel_seq_depth(g_sequence_ids[12], 4);
 				break;
@@ -265,7 +265,7 @@ static void room_101_pre_parser() {
 		case 1:
 			player.commands_allowed = true;
 			local._panelOpened = false;
-			_scene->_hotspots.activate(words_shield_modulator, false);
+			kernel_flip_hotspot(words_shield_modulator, false);
 			break;
 
 		default:
@@ -310,8 +310,8 @@ static void room_101_parser() {
 				kernel_seq_range(g_sequence_ids[11], 17, 17);
 				player.commands_allowed = true;
 				local._sittingFl = true;
-				_scene->_hotspots.activate(71, false);
-				local._chairHotspotId = _scene->_dynamicHotspots.add(words_chair, words_sit_in, -1, Common::Rect(159, 84, 159 + 33, 84 + 36));
+				kernel_flip_hotspot(71, false);
+				local._chairHotspotId = kernel_add_dynamic(words_chair, words_sit_in, 0, -1, 159, 84, 33, 36);
 				if (!player_said_2(look, view_screen)) {
 					player.command_ready = false;
 					return;
@@ -346,7 +346,7 @@ static void room_101_parser() {
 			player.commands_allowed = true;
 			local._panelOpened = true;
 			if (object_is_here(OBJ_SHIELD_MODULATOR))
-				_scene->_hotspots.activate(words_shield_modulator, true);
+				kernel_flip_hotspot(words_shield_modulator, true);
 			break;
 
 		default:
@@ -361,7 +361,7 @@ static void room_101_parser() {
 		kernel_seq_delete(g_sequence_ids[13]);
 		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[14], false, 6, 0, 0, 0);
 		kernel_seq_range(g_sequence_ids[13], -2, -2);
-		_scene->_hotspots.activate(words_shield_modulator, false);
+		kernel_flip_hotspot(words_shield_modulator, false);
 		object_examine(OBJ_SHIELD_MODULATOR, 10120, 0);
 		g_engine->_soundManager->command(22, 0);
 		player.command_ready = false;
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index 9d201937d37..54f860b07a8 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -77,9 +77,9 @@ static void room_102_init() {
 	if (object_is_here(OBJ_BINOCULARS))
 		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 24, 24, 0, 0);
 	else
-		_scene->_hotspots.activate(words_binoculars, false);
+		kernel_flip_hotspot(words_binoculars, false);
 
-	_scene->_hotspots.activate(words_burger, false);
+	kernel_flip_hotspot(words_burger, false);
 
 	if (global[kMedicineCabinetOpen]) {
 		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 0);
@@ -201,7 +201,7 @@ static void room_102_pre_parser() {
 		case 1:
 			if (object_is_here(OBJ_BURGER)) {
 				kernel_seq_delete(g_sequence_ids[10]);
-				_scene->_hotspots.activate(words_burger, false);
+				kernel_flip_hotspot(words_burger, false);
 			}
 			local._fridgeOpenedFl = false;
 			player.commands_allowed = true;
@@ -259,7 +259,7 @@ static void room_102_parser() {
 			player.commands_allowed = true;
 			justOpenedFl = true;
 			if (object_is_here(OBJ_BURGER))
-				_scene->_hotspots.activate(words_burger, true);
+				kernel_flip_hotspot(words_burger, true);
 			break;
 
 		default:
@@ -587,7 +587,7 @@ static void room_102_parser() {
 		case 1:
 			inter_give_to_player(OBJ_BINOCULARS);
 			kernel_seq_delete(g_sequence_ids[9]);
-			_scene->_hotspots.activate(words_binoculars, false);
+			kernel_flip_hotspot(words_binoculars, false);
 			player.walker_visible = true;
 			player.commands_allowed = true;
 			g_engine->_soundManager->command(22, 0);
@@ -606,7 +606,7 @@ static void room_102_parser() {
 			object_examine(OBJ_BURGER, 10235, 0);
 			kernel_seq_delete(g_sequence_ids[10]);
 			inter_give_to_player(OBJ_BURGER);
-			_scene->_hotspots.activate(words_burger, false);
+			kernel_flip_hotspot(words_burger, false);
 			g_engine->_soundManager->command(22, 0);
 			player.walker_visible = true;
 			player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 78d58c3d979..8ea84de175a 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -75,17 +75,17 @@ static void room_103_init() {
 	if (object_is_here(OBJ_TIMER_MODULE))
 		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 6, 0, 0, 0);
 	else
-		_scene._hotspots.activate(371, false);
+		kernel_flip_hotspot(371, false);
 
 	if (object_is_here(OBJ_REBREATHER))
 		g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 6, 0, 0, 0);
 	else
-		_scene._hotspots.activate(289, false);
+		kernel_flip_hotspot(289, false);
 
 	if (global[kTurkeyExploded]) {
 		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 6, 0, 0, 0);
 		kernel_seq_range(g_sequence_ids[9], -2, -2);
-		_scene->_hotspots.activate(362, false);
+		kernel_flip_hotspot(362, false);
 	}
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
@@ -205,7 +205,7 @@ static void room_103_parser() {
 			inter_give_to_player(OBJ_TIMER_MODULE);
 			kernel_load_variant(0);
 			matte_frame(kTransitionNone, false);
-			_scene->_hotspots.activate(371, false);
+			kernel_flip_hotspot(371, false);
 			player.walker_visible = true;
 			player.commands_allowed = true;
 			object_examine(OBJ_TIMER_MODULE, 805, 0);
@@ -232,7 +232,7 @@ static void room_103_parser() {
 		case 2:
 			g_engine->_soundManager->command(22, 0);
 			inter_give_to_player(OBJ_REBREATHER);
-			_scene->_hotspots.activate(289, false);
+			kernel_flip_hotspot(289, false);
 			player.walker_visible = true;
 			player.commands_allowed = true;
 			object_examine(OBJ_REBREATHER, 804, 0);
@@ -271,7 +271,7 @@ static void room_103_parser() {
 		if (kernel.trigger == 2) {
 			// Show exposition dialog at end of sequence
 			text_show(10302);
-			_scene->_hotspots.activate(362, false);
+			kernel_flip_hotspot(362, false);
 		}
 	} else if (player_said_2(look, oven))
 		text_show(!global[kTurkeyExploded] ? 10323 : 10303);
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 383b06a3ae4..4284f116cad 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -198,10 +198,10 @@ static void room_104_daemon() {
 			g_engine->_soundManager->command(34, 0);
 	}
 
-	if (player.walking && (_scene->_rails.getNext() > 0)) {
+	if (player.walking && (player.next_special_code > 0)) {
 		player_cancel_command();
 		player_start_walking(189, 70, FACING_NONE);
-		_scene->_rails.resetNext();
+		player.next_special_code = 0;
 	}
 
 	if ((player.special_code > 0) && player.commands_allowed)
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index 6a44ca71c86..889bf92b8d8 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -47,8 +47,8 @@ static void room_105_init() {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
 		kernel_seq_loc(g_sequence_ids[4], 48, 144);
 
-		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(56, 141), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_dead_fish, words_swim_to, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 56, 141, FACING_NORTHWEST);
 	}
 
 	if (previous_room == 104) {
@@ -123,10 +123,10 @@ static void room_105_daemon() {
 		}
 	}
 
-	if (player.walking && (_scene->_rails.getNext() > 0)) {
+	if (player.walking && (player.next_special_code > 0)) {
 		player_cancel_command();
 		player_start_walking(170, 87, FACING_NONE);
-		_scene->_rails.resetNext();
+		player.next_special_code = 0;
 	}
 
 	if ((player.special_code > 0) && player.commands_allowed)
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index 3b1d6bd6237..19cbaa01105 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -55,8 +55,8 @@ static void room_107_init() {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
 		kernel_seq_loc(g_sequence_ids[4], 68, 151);
 		kernel_seq_depth(g_sequence_ids[4], 1);
-		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(78, 135), FACING_SOUTHWEST);
+		int idx = kernel_add_dynamic(words_dead_fish, words_swim_to, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 78, 135, FACING_SOUTHWEST);
 	}
 
 	if (previous_room == 105) {
@@ -78,7 +78,7 @@ static void room_107_init() {
 		kernel_seq_loc(g_sequence_ids[0], 270, 150);
 		kernel_seq_motion(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
 		kernel_seq_depth(g_sequence_ids[0], 2);
-		_scene->_dynamicHotspots.add(words_manta_ray, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
+		kernel_add_dynamic(words_manta_ray, words_swim_to, 0, g_sequence_ids[0], 0, 0, 0, 0);
 	}
 
 	kernel.quotes = quote_load(0x4A, 0x4B, 0x4C, 0x35, 0x34, 0);
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index 29c3ef44a5b..a264282b553 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -52,8 +52,8 @@ static void room_108_init() {
 	if (global[kFishIn108]) {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 0);
 		kernel_seq_loc(g_sequence_ids[4], 41, 109);
-		int idx = _scene->_dynamicHotspots.add(words_dead_fish, words_swim_to, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(41, 109), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_dead_fish, words_swim_to, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 41, 109, FACING_NORTHWEST);
 	}
 
 	if (previous_room == 107) {
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 69ca84f8617..1af37f72ac7 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -79,12 +79,12 @@ static void room_109_init() {
 		kernel_seq_depth(g_sequence_ids[6], 4);
 		kernel_seq_range(g_sequence_ids[6], -2, -2);
 
-		int idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(256, 57, 267, 87));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
-		idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(242, 79, 265, 90));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
-		idx = _scene->_dynamicHotspots.add(words_monster_sludge, words_swim_to, -1, Common::Rect(231, 88, 253, 94));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_dead_purple_monster, words_swim_to, 0, -1, 256, 57, 11, 30);
+		kernel_dynamic_walk(idx, 241, 91, FACING_NORTHEAST);
+		idx = kernel_add_dynamic(words_dead_purple_monster, words_swim_to, 0, -1, 242, 79, 23, 11);
+		kernel_dynamic_walk(idx, 241, 91, FACING_NORTHEAST);
+		idx = kernel_add_dynamic(words_monster_sludge, words_swim_to, 0, -1, 231, 88, 22, 6);
+		kernel_dynamic_walk(idx, 241, 91, FACING_NORTHEAST);
 	}
 
 	if (!global[kHoovicAlive] || global[kHoovicSated])
@@ -93,8 +93,8 @@ static void room_109_init() {
 	if (object_is_here(OBJ_BURGER)) {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 0);
 		kernel_seq_range(g_sequence_ids[3], -2, -2);
-		int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_burger, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -3, 0, FACING_NORTHEAST);
 	} else if (kernel.teleported_in)
 		inter_give_to_player(OBJ_BURGER);
 
@@ -162,10 +162,10 @@ static void room_109_daemon() {
 		kernel_new_palette();
 	}
 
-	if (player.walking && (_scene->_rails.getNext() > 0) && global[kHoovicAlive] && !global[kHoovicSated] && !local._hungryFl && !local._beforeEatingRex) {
+	if (player.walking && (player.next_special_code > 0) && global[kHoovicAlive] && !global[kHoovicSated] && !local._hungryFl && !local._beforeEatingRex) {
 		player_cancel_command();
 		player_start_walking(160, 32, FACING_EAST);
-		_scene->_rails.resetNext();
+		player.next_special_code = 0;
 		local._hungryFl = true;
 	}
 
@@ -188,8 +188,8 @@ static void room_109_daemon() {
 		matte_deallocate_series(g_sprite_ids[9], true);
 		matte_deallocate_series(g_sprite_ids[10], true);
 
-		_scene->_spriteSlots.clear();
-		_scene->_spriteSlots.fullRefresh();
+		image_marker = 0;
+		matte_refresh_work();
 
 		int randVal = g_engine->getRandomNumber(85, 88);
 		int idx = kernel_message_add(quote_string(kernel.quotes, randVal), 0, 0, 0x1110, 120, 0, 34);
@@ -315,12 +315,12 @@ static void room_109_parser() {
 							g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 1);
 							kernel_seq_depth(g_sequence_ids[6], 4);
 							kernel_seq_range(g_sequence_ids[6], -2, -2);
-							int idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(256, 57, 256 + 12, 57 + 31));
-							_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
-							idx = _scene->_dynamicHotspots.add(words_dead_purple_monster, words_swim_to, -1, Common::Rect(242, 79, 242 + 24, 79 + 12));
-							_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
-							idx = _scene->_dynamicHotspots.add(words_monster_sludge, words_swim_to, -1, Common::Rect(231, 88, 231 + 23, 88 + 7));
-							_scene->_dynamicHotspots.setPosition(idx, Common::Point(241, 91), FACING_NORTHEAST);
+							int idx = kernel_add_dynamic(words_dead_purple_monster, words_swim_to, 0, -1, 256, 57, 12, 31);
+							kernel_dynamic_walk(idx, 241, 91, FACING_NORTHEAST);
+							idx = kernel_add_dynamic(words_dead_purple_monster, words_swim_to, 0, -1, 242, 79, 24, 12);
+							kernel_dynamic_walk(idx, 241, 91, FACING_NORTHEAST);
+							idx = kernel_add_dynamic(words_monster_sludge, words_swim_to, 0, -1, 231, 88, 23, 7);
+							kernel_dynamic_walk(idx, 241, 91, FACING_NORTHEAST);
 							kernel_load_variant(1);
 						} else {
 							if (local._throwingObjectId == OBJ_DEAD_FISH) {
@@ -350,8 +350,8 @@ static void room_109_parser() {
 						kernel_abort_animation(0);
 						kernel_seq_delete(g_sequence_ids[8]);
 						matte_deallocate_series(g_sprite_ids[8], true);
-						_scene->_spriteSlots.clear();
-						_scene->_spriteSlots.fullRefresh();
+						image_marker = 0;
+						matte_refresh_work();
 						kernel_seq_full_update();
 						if (player.walker_visible) {
 							player.sprite_changed = true;
@@ -367,8 +367,8 @@ static void room_109_parser() {
 						inter_move_object(OBJ_BURGER, room_id);
 						g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 0);
 						kernel_seq_range(g_sequence_ids[3], 30, 30);
-						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
+						int idx = kernel_add_dynamic(words_burger, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
+						kernel_dynamic_walk(idx, -3, 0, FACING_NORTHEAST);
 						kernel_timing_trigger(65, 6);
 					}
 					break;
@@ -378,8 +378,8 @@ static void room_109_parser() {
 						kernel_seq_delete(g_sequence_ids[3]);
 						g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
 						kernel_seq_range(g_sequence_ids[3], 31, 46);
-						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
+						int idx = kernel_add_dynamic(words_burger, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
+						kernel_dynamic_walk(idx, -3, 0, FACING_NORTHEAST);
 						kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
 					}
 					break;
@@ -388,8 +388,8 @@ static void room_109_parser() {
 					{
 						kernel_seq_delete(g_sequence_ids[3]);
 						g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
-						int idx = _scene->_dynamicHotspots.add(words_burger, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-						_scene->_dynamicHotspots.setPosition(idx, Common::Point(-3, 0), FACING_NORTHEAST);
+						int idx = kernel_add_dynamic(words_burger, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
+						kernel_dynamic_walk(idx, -3, 0, FACING_NORTHEAST);
 						text_show(10915);
 					}
 					break;
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index aa451ba23dc..3f5021237b7 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -58,14 +58,14 @@ static void room_110_init() {
 
 		local._crabsFl = true;
 
-		int idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
+		int idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[0], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
+		idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
+		idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
+		idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
 	} else if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 194;
 		player.y = 23;
@@ -106,14 +106,14 @@ static void room_110_pre_parser() {
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 16, 0, 0, 1);
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 16, 0, 0, 1);
 
-		int idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[0], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
-		idx = _scene->_dynamicHotspots.add(words_crab, words_swim_to, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-1, 0), FACING_NONE);
+		int idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[0], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
+		idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
+		idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
+		idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index 8158c2cd353..cbe79d5a73e 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -61,12 +61,12 @@ static void room_111_init() {
 	g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 	g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
 
-	int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
-	idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
-	idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
+	int idx = kernel_add_dynamic(words_bats, words_look_at, 0, g_sequence_ids[3], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, -2, 0, FACING_NONE);
+	idx = kernel_add_dynamic(words_bats, words_look_at, 0, g_sequence_ids[4], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, -2, 0, FACING_NONE);
+	idx = kernel_add_dynamic(words_bats, words_look_at, 0, g_sequence_ids[5], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, -2, 0, FACING_NONE);
 
 	local._launch1Fl = false;
 	local._launched2Fl = false;
@@ -118,15 +118,15 @@ static void room_111_daemon() {
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 5, 0, 0, 1);
 		local._launch1Fl = true;
-		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
+		int idx = kernel_add_dynamic(words_bats, words_look_at, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -2, 0, FACING_NONE);
 	}
 
 	if (!local._launched2Fl && (g_engine->getRandomNumber(1, 30000) == 1)) {
 		kernel_seq_delete(g_sequence_ids[5]);
 		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 5, 0, 0, 1);
-		int idx = _scene->_dynamicHotspots.add(words_bats, words_look_at, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
+		int idx = kernel_add_dynamic(words_bats, words_look_at, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -2, 0, FACING_NONE);
 		local._launched2Fl = true;
 	}
 
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index 8ca89aeb99a..c39219c7b1e 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -46,8 +46,8 @@ static void room_112_init() {
 	player.commands_allowed = false;
 	player.walker_visible = false;
 
-	_scene->_userInterface.emptyConversationList();
-	_scene->_userInterface.setup(kInputConversation);
+	inter_reset_dialog();
+	kernel_set_interface_mode(kInputConversation);
 
 	kernel_run_animation(kernel_full_name(112, 'X', -1, "", EXT_AA), 70);
 }
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index 40ecd965c3f..26568db1e4c 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -52,8 +52,8 @@ static void room_201_init() {
 	kernel_seq_depth(g_sequence_ids[4], 8);
 	kernel_seq_loc(g_sequence_ids[4], 185, 46);
 
-	int idx = _scene->_dynamicHotspots.add(words_birds, words_look_at, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 81), FACING_NORTH);
+	int idx = kernel_add_dynamic(words_birds, words_look_at, 0, g_sequence_ids[4], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 186, 81, FACING_NORTH);
 
 	if ((previous_room == 202) || (previous_room == RETURNING_FROM_LOADING)) {
 		player.x = 165;
@@ -116,7 +116,7 @@ static void room_201_init() {
 		local._pterodactylFlag = true;
 
 	if (global[kTeleporterUnderstood])
-		_scene->_hotspots.activate(words_strange_device, false);
+		kernel_flip_hotspot(words_strange_device, false);
 
 	section_2_music();
 }
@@ -124,8 +124,8 @@ static void room_201_init() {
 static void room_201_daemon() {
 	if (local._pterodactylFlag && (g_engine->getRandomNumber(5000) == 9)) {
 		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 5, 0, 6, 1);
-		int idx = _scene->_dynamicHotspots.add(words_swooping_creature, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(270, 80), FACING_EAST);
+		int idx = kernel_add_dynamic(words_swooping_creature, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 270, 80, FACING_EAST);
 		kernel_seq_depth(g_sequence_ids[5], 8);
 		g_engine->_soundManager->command(14, 0);
 		local._pterodactylFlag = false;
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index 5bd26167e2d..1f238f60467 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -70,23 +70,23 @@ static void room_202_init() {
 	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
 	kernel_seq_loc(g_sequence_ids[2], 149, 113);
 	kernel_seq_depth(g_sequence_ids[2], 10);
-	int idx = _scene->_dynamicHotspots.add(words_skull, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(153, 97), FACING_SOUTH);
+	int idx = kernel_add_dynamic(words_skull, words_walkto, 0, g_sequence_ids[2], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 153, 97, FACING_SOUTH);
 
 	if (!(global[kBone202Status] & 1)) {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 0);
 		kernel_seq_loc(g_sequence_ids[1], 130, 108);
 		kernel_seq_depth(g_sequence_ids[1], 10);
-		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(132, 97), FACING_SOUTH);
+		idx = kernel_add_dynamic(words_bone, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 132, 97, FACING_SOUTH);
 	}
 
 	if (!(global[kBone202Status] & 2)) {
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 0);
 		kernel_seq_loc(g_sequence_ids[6], 166, 110);
 		kernel_seq_depth(g_sequence_ids[6], 10);
-		idx = _scene->_dynamicHotspots.add(words_bone, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(165, 99), FACING_SOUTH);
+		idx = kernel_add_dynamic(words_bone, words_walkto, 0, g_sequence_ids[6], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 165, 99, FACING_SOUTH);
 	}
 
 	if (global[kBone202Status])
@@ -105,9 +105,9 @@ static void room_202_init() {
 	if (global[kLadderBroken]) {
 		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 0);
 		kernel_seq_depth(g_sequence_ids[5], 6);
-		_scene->_hotspots.activate(words_ladder, false);
-		idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
+		kernel_flip_hotspot(words_ladder, false);
+		idx = kernel_add_dynamic(words_broken_ladder, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 246, 124, FACING_NORTH);
 	}
 
 	kernel.quotes = quote_load(0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x61, 0);
@@ -303,9 +303,9 @@ static void room_202_daemon() {
 	{
 		global[kLadderBroken] = false;
 		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 0);
-		_scene->_hotspots.activate(words_ladder, false);
-		int idx = _scene->_dynamicHotspots.add(words_broken_ladder, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(246, 124), FACING_NORTH);
+		kernel_flip_hotspot(words_ladder, false);
+		int idx = kernel_add_dynamic(words_broken_ladder, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 246, 124, FACING_NORTH);
 		kernel_seq_timeout(g_sequence_ids[5], g_sequence_ids[11]);
 		kernel_seq_timeout(g_sequence_ids[11], -1);
 		player.commands_allowed = true;
@@ -440,7 +440,7 @@ static void room_202_pre_parser() {
 			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
 		} else if (kernel.trigger == 1) {
 			kernel_seq_timeout(g_sequence_ids[8], -1);
-			_scene->_dynamicHotspots.remove(local._ladderHotspotId);
+			kernel_delete_dynamic(local._ladderHotspotId);
 			player.walker_visible = true;
 			player.ready_to_walk = true;
 			player.commands_allowed = true;
@@ -527,8 +527,8 @@ static void room_202_parser() {
 			player.walker_visible = false;
 			player.commands_allowed = false;
 
-			local._ladderHotspotId = _scene->_dynamicHotspots.add(words_ladder, words_climb_down, -1, Common::Rect(241, 68, 241 + 12, 68 + 54));
-			_scene->_dynamicHotspots.setPosition(local._ladderHotspotId, Common::Point(246, 124), FACING_NORTH);
+			local._ladderHotspotId = kernel_add_dynamic(words_ladder, words_climb_down, 0, -1, 241, 68, 12, 54);
+			kernel_dynamic_walk(local._ladderHotspotId, 246, 124, FACING_NORTH);
 			g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[8], 1);
 			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 4b4c88614ec..5411f3a9208 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -62,17 +62,17 @@ static void room_203_init() {
 	if ((global[kRhotundaStatus] == 0) && (!kernel.teleported_in)) {
 		local._rhotundaEatFl = true;
 		player_walk(158, 135, FACING_SOUTH);
-		int idx = _scene->_dynamicHotspots.add(words_field_to_south, words_walk_towards, 0, Common::Rect(0, 0, 320, 156));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(155, 152), FACING_SOUTH);
-		_scene->_dynamicHotspots.setCursor(idx, CURSOR_GO_DOWN);
+		int idx = kernel_add_dynamic(words_field_to_south, words_walk_towards, 0, 0, 0, 0, 320, 156);
+		kernel_dynamic_walk(idx, 155, 152, FACING_SOUTH);
+		kernel_dynamic_cursor(idx, CURSOR_GO_DOWN);
 	}
 
 	if (!local._rhotundaEatFl) {
 		g_sprite_ids[0] = kernel_load_series(kernel_name('b', -1), 0);
 		if (g_engine->getRandomNumber(1, 3) == 2) {
 			g_sprite_ids[15] = kernel_seq_forward(g_sprite_ids[0], false, 9, 0, 0, 1);
-			int idx = _scene->_dynamicHotspots.add(words_yellow_bird, words_look_at, g_sprite_ids[15], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
+			int idx = kernel_add_dynamic(words_yellow_bird, words_look_at, 0, g_sprite_ids[15], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, -2, 0, FACING_NONE);
 			g_engine->_soundManager->command(14, 0);
 		}
 	}
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index b2ecb820637..6a950dd1a70 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -56,12 +56,12 @@ static void room_205_init() {
 		g_sprite_ids[8] = kernel_load_series(kernel_name('a', 1), 0);
 
 	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 10, 3, 0, 0);
-	int idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
+	int idx = kernel_add_dynamic(words_chicken, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 162, 120, FACING_NORTHEAST);
 
 	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 0, 0, 0);
-	idx = _scene->_dynamicHotspots.add(words_chicken, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(162, 120), FACING_NORTHEAST);
+	idx = kernel_add_dynamic(words_chicken, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 162, 120, FACING_NORTHEAST);
 
 	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 0);
 	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 0);
@@ -69,15 +69,15 @@ static void room_205_init() {
 
 	if (!player.been_here_before) {
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 7, 0, 0, 1);
-		idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
+		idx = kernel_add_dynamic(words_piranha, words_walkto, 0, g_sequence_ids[6], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 49, 86, FACING_NORTH);
 	}
 
 	if (object[12].location == 205) {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 7, 0, 0, 0);
 		kernel_seq_depth(g_sequence_ids[4], 11);
 	} else {
-		_scene->_hotspots.activate(450, false);
+		kernel_flip_hotspot(450, false);
 	}
 
 	local._beingKicked = false;
@@ -135,9 +135,8 @@ static void room_205_daemon() {
 
 	if (kernel.clock - local._lastFishTime > 1300) {
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 5, 0, 0, 1);
-		int idx = _scene->_dynamicHotspots.add(words_piranha, words_walkto, g_sequence_ids[6],
-			Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(49, 86), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_piranha, words_walkto, 0, g_sequence_ids[6], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 49, 86, FACING_NORTH);
 		local._lastFishTime = kernel.clock;
 	}
 
@@ -211,7 +210,7 @@ static void room_205_parser() {
 
 			case 0x77:
 				kernel_message_add(quote_string(kernel.quotes, 0x7F), 186, 27, 0xFBFA, 120, 0, 0);
-				_scene->_userInterface.setup(kInputBuildingSentences);
+				kernel_set_interface_mode(kInputBuildingSentences);
 				break;
 
 			default:
@@ -275,7 +274,7 @@ static void room_205_parser() {
 		} else if (player_said_2(take, chicken_on_spit) && global[kChickenPermitted] && object_is_here(OBJ_CHICKEN)) {
 			inter_give_to_player(OBJ_CHICKEN);
 			kernel_seq_delete(g_sequence_ids[4]);
-			_scene->_hotspots.activate(words_chicken_on_spit, false);
+			kernel_flip_hotspot(words_chicken_on_spit, false);
 			object_examine(OBJ_CHICKEN, 812, 0);
 		} else if (player_said_2(take, chicken_on_spit) && (!global[kChickenPermitted]))
 			kernel_message_add(quote_string(kernel.quotes, 0x80), 186, 27, 0xFBFA, 120, 0, 32);
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index 27a1104ff19..d1c5e4c8932 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -71,15 +71,15 @@ static void room_207_init() {
 
 	if (local._vultureFl) {
 		g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 30, 400, 0, 0);
-		local._vultureHotspotId = _scene->_dynamicHotspots.add(words_vulture, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._vultureHotspotId, Common::Point(254, 94), FACING_WEST);
+		local._vultureHotspotId = kernel_add_dynamic(words_vulture, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._vultureHotspotId, 254, 94, FACING_WEST);
 	}
 
 	if (local._spiderFl) {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[4], -1, -1);
-		local._spiderHotspotId = _scene->_dynamicHotspots.add(words_spider, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._spiderHotspotId, Common::Point(59, 132), FACING_SOUTH);
+		local._spiderHotspotId = kernel_add_dynamic(words_spider, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._spiderHotspotId, 59, 132, FACING_SOUTH);
 	}
 
 	local._eyeFl = false;
@@ -110,7 +110,7 @@ static void moveVulture() {
 	g_engine->_soundManager->command(43, 0);
 	local._vultureFl = false;
 	local._vultureTime = player.clock;
-	_scene->_dynamicHotspots.remove(local._vultureHotspotId);
+	kernel_delete_dynamic(local._vultureHotspotId);
 }
 
 static void moveSpider() {
@@ -118,7 +118,7 @@ static void moveSpider() {
 	g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 5, 0, 0, 1);
 	local._spiderFl = false;
 	local._spiderTime = player.clock;
-	_scene->_dynamicHotspots.remove(local._spiderHotspotId);
+	kernel_delete_dynamic(local._spiderHotspotId);
 }
 
 static void room_207_daemon() {
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index defa5ed09ec..4f5aead400b 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -45,9 +45,9 @@ static void updateTrap() {
 	if (global[kRhotundaStatus] == 1) {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 8, 24, 0, 0);
 		kernel_seq_depth(g_sequence_ids[1], 5);
-		int idx = _scene->_dynamicHotspots.add(words_huge_legs, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
-		_scene->_hotspots.activate(414, false);
+		int idx = kernel_add_dynamic(words_huge_legs, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 100, 146, FACING_NORTH);
+		kernel_flip_hotspot(414, false);
 		return;
 	}
 
@@ -56,18 +56,18 @@ static void updateTrap() {
 	{
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
 		kernel_seq_depth(g_sequence_ids[2], 15);
-		int idx = _scene->_dynamicHotspots.add(words_pile_of_leaves, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(60, 152), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_pile_of_leaves, words_walkto, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 60, 152, FACING_NORTH);
 	}
 	break;
 	case LEAVES_ON_TRAP:
 	{
 		kernel_seq_depth(g_sequence_ids[3], 15);
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
-		_scene->_hotspots.activate(words_deep_pit, false);
-		int idx = _scene->_dynamicHotspots.add(words_leaf_covered_pit, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(100, 146), FACING_NORTH);
-		_scene->_dynamicHotspots[idx]._articleNumber = PREP_ON;
+		kernel_flip_hotspot(words_deep_pit, false);
+		int idx = kernel_add_dynamic(words_leaf_covered_pit, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 100, 146, FACING_NORTH);
+		kernel_dynamic_hot[idx].prep = PREP_ON;
 	}
 	break;
 	default:
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 707077cf6e3..214b3b97252 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -124,7 +124,7 @@ static void handlePeek() {
 
 	case 138:
 		local._pauseMode = 1;
-		_scene->_hotspots.activate(227, false);
+		kernel_flip_hotspot(227, false);
 		local._playingAnimFl = false;
 		break;
 
@@ -161,7 +161,7 @@ static void handleVerticalMove() {
 	case 143:
 		local._pauseMode = 1;
 		local._playingAnimFl = false;
-		_scene->_hotspots.activate(227, false);
+		kernel_flip_hotspot(227, false);
 		break;
 
 	default:
@@ -459,7 +459,7 @@ static void handleJumpInTree() {
 		local._removeMonkeyFl = true;
 		local._pauseMode = 1;
 		local._playingAnimFl = false;
-		_scene->_hotspots.activate(227, false);
+		kernel_flip_hotspot(227, false);
 		break;
 
 	default:
@@ -617,7 +617,7 @@ static void handleJumpAndHide() {
 
 	case 197:
 		local._pauseMode = 1;
-		_scene->_hotspots.activate(227, false);
+		kernel_flip_hotspot(227, false);
 		local._playingAnimFl = false;
 		break;
 
@@ -753,7 +753,7 @@ static void handleMonkeyFall() {
 		g_sprite_ids[8] = kernel_load_series(kernel_name('m', 4), 0);
 		kernel_message_add(quote_string(kernel.quotes, 151), 180, 26, 0xFDFC, 90, 0, 0);
 		kernel_timing_trigger(40, 100);
-		_scene->_hotspots.activate(227, false);
+		kernel_flip_hotspot(227, false);
 		int oldIdx = g_sequence_ids[3];
 		local._monkeyPosition = 1;
 		kernel_seq_delete(g_sequence_ids[3]);
@@ -769,7 +769,7 @@ static void handleMonkeyFall() {
 	{
 		g_engine->_soundManager->command(18, 0);
 		kernel_message_add(quote_string(kernel.quotes, 159), 182, 109, 0xFDFC, 90, 0, 0);
-		_scene->_hotspots.activate(227, false);
+		kernel_flip_hotspot(227, false);
 		int oldIdx = g_sequence_ids[3];
 		local._monkeyPosition = 1;
 		kernel_seq_delete(g_sequence_ids[3]);
@@ -794,8 +794,8 @@ static void handleMonkeyFall() {
 		kernel_seq_timeout(oldIdx, g_sequence_ids[8]);
 		kernel_seq_range(g_sequence_ids[8], 43, 72);
 		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 222);
-		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_binoculars, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 200, 133, FACING_NORTH);
 	}
 	break;
 
@@ -935,7 +935,7 @@ static void handleMonkey2() {
 static void handleDodge() {
 	switch (kernel.trigger) {
 	case 241:
-		_scene->_hotspots.activate(227, true);
+		kernel_flip_hotspot(227, true);
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 7);
 		kernel_timing_trigger(6, 242);
@@ -989,8 +989,8 @@ static void room_209_init() {
 
 	if (object_is_here(OBJ_PLANT_STALK)) {
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_plant_stalk, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(263, 129), FACING_SOUTH);
+		int idx = kernel_add_dynamic(words_plant_stalk, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 263, 129, FACING_SOUTH);
 		kernel_seq_depth(g_sequence_ids[1], 13);
 	}
 
@@ -1008,8 +1008,8 @@ static void room_209_init() {
 		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 		kernel_seq_loc(g_sequence_ids[9], 201, 131);
 		kernel_seq_depth(g_sequence_ids[9], 8);
-		int idx = _scene->_dynamicHotspots.add(words_binoculars, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(200, 133), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_binoculars, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 200, 133, FACING_NORTH);
 	}
 
 	if (kernel.teleported_in) {
@@ -1037,7 +1037,7 @@ static void room_209_init() {
 	local._removeMonkeyFl = true;
 	local._shootReadyFl = false;
 
-	_scene->_hotspots.activate(227, false);
+	kernel_flip_hotspot(227, false);
 
 	section_2_music();
 }
@@ -1050,7 +1050,7 @@ static void room_209_daemon() {
 			if ((local._monkeyPosition == 1) && (local._counter < 2)) {
 				kernel_timing_trigger(1, 133);
 				local._playingAnimFl = true;
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				++local._counter;
 			}
 			break;
@@ -1058,7 +1058,7 @@ static void room_209_daemon() {
 		case 2:
 			if ((local._monkeyPosition == 1) && (local._counter < 2)) {
 				kernel_timing_trigger(1, 140);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._playingAnimFl = true;
 				++local._counter;
 			}
@@ -1067,7 +1067,7 @@ static void room_209_daemon() {
 		case 3:
 			if (local._monkeyPosition == 1) {
 				kernel_timing_trigger(1, 145);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._playingAnimFl = true;
 				local._counter = 0;
 			}
@@ -1076,7 +1076,7 @@ static void room_209_daemon() {
 		case 4:
 			if ((local._monkeyPosition == 2) && (local._counter < 2)) {
 				kernel_timing_trigger(1, 151);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				++local._counter;
 				local._playingAnimFl = true;
 			}
@@ -1085,7 +1085,7 @@ static void room_209_daemon() {
 		case 5:
 			if (local._monkeyPosition == 2) {
 				kernel_timing_trigger(1, 161);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
 			}
@@ -1094,14 +1094,14 @@ static void room_209_daemon() {
 		case 6:
 			if (local._monkeyPosition == 2) {
 				kernel_timing_trigger(1, 189);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
 			}
 			break;
 		case 7:
 			if (local._monkeyPosition == 3) {
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				kernel_timing_trigger(1, 167);
 				local._playingAnimFl = true;
 			}
@@ -1111,7 +1111,7 @@ static void room_209_daemon() {
 			if (local._monkeyPosition == 3) {
 				kernel_timing_trigger(1, 178);
 				local._playingAnimFl = true;
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._counter = 0;
 			}
 			break;
@@ -1119,7 +1119,7 @@ static void room_209_daemon() {
 		case 9:
 			if ((local._monkeyPosition == 3) && (player.x < 120)) {
 				kernel_timing_trigger(1, 182);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
 			}
@@ -1128,7 +1128,7 @@ static void room_209_daemon() {
 		case 10:
 			if (local._monkeyPosition == 4) {
 				kernel_timing_trigger(1, 196);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._playingAnimFl = true;
 				local._counter = 0;
 			}
@@ -1137,7 +1137,7 @@ static void room_209_daemon() {
 		case 11:
 			if ((local._monkeyPosition == 4) && (local._counter < 3)) {
 				kernel_timing_trigger(1, 199);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				++local._counter;
 				local._playingAnimFl = true;
 			}
@@ -1146,7 +1146,7 @@ static void room_209_daemon() {
 		case 30:
 			if (local._monkeyPosition == 4) {
 				kernel_timing_trigger(1, 246);
-				_scene->_hotspots.activate(227, true);
+				kernel_flip_hotspot(227, true);
 				local._counter = 0;
 				local._playingAnimFl = true;
 			}
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 24e754c51c3..eefeb659049 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -102,7 +102,7 @@ static void newNode(int node) {
 static void setDialogNode(int node) {
 	switch (node) {
 	case 0:
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		local._shouldFaceRex = false;
 		local._shouldTalk = false;
 		player.commands_allowed = true;
@@ -188,7 +188,7 @@ static void setDialogNode(int node) {
 				kernel_timing_trigger(6, 1);
 			}
 		} else {
-			_scene->_userInterface.setup(kInputBuildingSentences);
+			kernel_set_interface_mode(kInputBuildingSentences);
 			local._shouldFaceRex = false;
 			local._shouldTalk = false;
 			player.commands_allowed = true;
@@ -320,8 +320,8 @@ static void setDialogNode(int node) {
 			local._shouldTalk = true;
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
-				_scene->_userInterface.emptyConversationList();
-				_scene->_userInterface.setup(kInputConversation);
+				inter_reset_dialog();
+				kernel_set_interface_mode(kInputConversation);
 				handleTwinklesSpeech(0xE4, -1, 0);
 				kernel_timing_trigger(180, 2);
 			} else {
@@ -636,9 +636,10 @@ static void room_210_init() {
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 5);
 		kernel_seq_depth(g_sequence_ids[1], 5);
 	} else {
-		int idx = _scene->_dynamicHotspots.add(words_doorway, words_walk_through, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
-		local._doorway = _scene->_dynamicHotspots.setPosition(idx, Common::Point(168, 127), FACING_NORTH);
-		_scene->_dynamicHotspots.setCursor(local._doorway, CURSOR_GO_UP);
+		int idx = kernel_add_dynamic(words_doorway, words_walk_through, 0, -1, 163, 87, 19, 36);
+		kernel_dynamic_walk(idx, 168, 127, FACING_NORTH);
+		local._doorway = idx;
+		kernel_dynamic_cursor(local._doorway, CURSOR_GO_UP);
 	}
 
 	kernel.quotes = quote_load(0x5A, 0x73, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xB7,
@@ -681,7 +682,7 @@ static void room_210_init() {
 		kernel_run_animation(kernel_name('A', -1), 0);
 		local._twinkleAnimationType = 1;
 	} else
-		_scene->_hotspots.activate(476, false);
+		kernel_flip_hotspot(476, false);
 
 	if (local._curDialogNode) {
 		int quote = 0;
@@ -893,9 +894,9 @@ static void room_210_daemon() {
 			local._shouldTalk = false;
 	}
 
-	if ((local._twinkleAnimationType == 1) && (_scene->_rails.getNext() > 0)) {
+	if ((local._twinkleAnimationType == 1) && (player.next_special_code > 0)) {
 		player_walk(214, 150, FACING_NORTHWEST);
-		_scene->_rails.resetNext();
+		player.next_special_code = 0;
 		local._stopWalking = true;
 	}
 }
@@ -1004,9 +1005,9 @@ static void room_210_parser() {
 		case 1:
 			player.commands_allowed = true;
 			global[kCurtainOpen] = true;
-			local._doorway = _scene->_dynamicHotspots.add(words_doorway, words_walk_through, -1, Common::Rect(163, 87, 163 + 19, 87 + 36));
-			_scene->_dynamicHotspots.setPosition(local._doorway, Common::Point(168, 127), FACING_NORTH);
-			_scene->_dynamicHotspots.setCursor(local._doorway, CURSOR_GO_UP);
+			local._doorway = kernel_add_dynamic(words_doorway, words_walk_through, 0, -1, 163, 87, 19, 36);
+			kernel_dynamic_walk(local._doorway, 168, 127, FACING_NORTH);
+			kernel_dynamic_cursor(local._doorway, CURSOR_GO_UP);
 			break;
 
 		default:
@@ -1029,7 +1030,7 @@ static void room_210_parser() {
 			kernel_timing_trigger(48, 2);
 			break;
 		case 2:
-			_scene->_dynamicHotspots.remove(local._doorway);
+			kernel_delete_dynamic(local._doorway);
 			player.commands_allowed = true;
 			global[kCurtainOpen] = false;
 			break;
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index 46a29386738..4c5f53a3174 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -71,7 +71,7 @@ static void room_211_init() {
 		kernel_seq_loc(g_sequence_ids[2], 202, 126);
 		kernel_seq_depth(g_sequence_ids[2], 8);
 		kernel_seq_motion(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, -200, 0);
-		_scene->_dynamicHotspots.add(words_slithering_snake, words_walkto, g_sequence_ids[2], Common::Rect(1, 1, 1 + 41, 1 + 10));
+		kernel_add_dynamic(words_slithering_snake, words_walkto, 0, g_sequence_ids[2], 1, 1, 41, 10);
 	}
 
 	if (kernel.teleported_in)
@@ -119,8 +119,8 @@ static void room_211_daemon() {
 					g_engine->_soundManager->command(19, 0);
 					int count = (int)inven_num_objects;
 					for (int idx = 0; idx < count; idx++) {
-						if ((inven[idx] == OBJ_BINOCULARS) && (_scene->_userInterface._selectedInvIndex != idx))
-							_scene->_userInterface.selectObject(idx);
+						if ((inven[idx] == OBJ_BINOCULARS) && (active_inven != idx))
+							inter_set_active_inven(idx);
 					}
 				}
 				break;
@@ -177,7 +177,7 @@ static void room_211_daemon() {
 		break;
 
 		case 97:
-			_scene->_userInterface.selectObject(-1);
+			inter_set_active_inven(-1);
 			inter_take_from_player(OBJ_BINOCULARS, 1);
 			break;
 
@@ -269,7 +269,7 @@ static void room_211_daemon() {
 
 static void room_211_pre_parser() {
 	if (player_said_2(walk_down, jungle_path) && player_has(OBJ_BINOCULARS) && (global[kMonkeyStatus] == MONKEY_AMBUSH_READY)
-		&& (_scene->_customDest.x <= 52) && (_scene->_customDest.y >= 132))
+		&& (inter_point_x <= 52) && (inter_point_y >= 132))
 		player_walk(52, 132, FACING_WEST);
 
 	if (player_said_2(walk_down, path_to_west)) {
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index a23b9f2ba51..826db8ebd7b 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -53,7 +53,7 @@ static void room_214_init() {
 		kernel_seq_loc(g_sequence_ids[1], 103, 86);
 		kernel_seq_depth(g_sequence_ids[1], 11);
 	} else {
-		_scene->_hotspots.activate(words_poison_darts, false);
+		kernel_flip_hotspot(words_poison_darts, false);
 	}
 
 	if (object_is_here(OBJ_BLOWGUN)) {
@@ -61,7 +61,7 @@ static void room_214_init() {
 		kernel_seq_loc(g_sequence_ids[2], 90, 87);
 		kernel_seq_depth(g_sequence_ids[2], 13);
 	} else {
-		_scene->_hotspots.activate(words_blowgun, false);
+		kernel_flip_hotspot(words_blowgun, false);
 	}
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
@@ -78,7 +78,7 @@ static void room_214_daemon() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 6, 1);
 		kernel_seq_range(g_sequence_ids[3], 1, 4);
 		kernel_seq_depth(g_sequence_ids[3], 2);
-		_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
+		kernel_add_dynamic(words_captive_creature, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
 		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
 	}
 
@@ -89,7 +89,7 @@ static void room_214_daemon() {
 			int oldIdx = g_sequence_ids[3];
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 5);
 			kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
+			kernel_add_dynamic(words_captive_creature, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
 			kernel_seq_range(g_sequence_ids[3], 5, 8);
 			kernel_seq_depth(g_sequence_ids[3], 2);
 			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
@@ -101,7 +101,7 @@ static void room_214_daemon() {
 			int oldIdx = g_sequence_ids[3];
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
 			kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-			_scene->_dynamicHotspots.add(words_captive_creature, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
+			kernel_add_dynamic(words_captive_creature, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
 			kernel_seq_range(g_sequence_ids[3], 9, -2);
 			kernel_seq_depth(g_sequence_ids[3], 2);
 			local._devilTime = player.clock;
@@ -136,7 +136,7 @@ static void room_214_parser() {
 			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			kernel_seq_delete(g_sequence_ids[1]);
 			inter_give_to_player(OBJ_POISON_DARTS);
-			_scene->_hotspots.activate(words_poison_darts, false);
+			kernel_flip_hotspot(words_poison_darts, false);
 			break;
 
 		case 2:
@@ -168,7 +168,7 @@ static void room_214_parser() {
 			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			kernel_seq_delete(g_sequence_ids[2]);
 			inter_give_to_player(OBJ_BLOWGUN);
-			_scene->_hotspots.activate(words_blowgun, false);
+			kernel_flip_hotspot(words_blowgun, false);
 			break;
 
 		case 2:
diff --git a/engines/mads/nebular/rooms/room216.cpp b/engines/mads/nebular/rooms/room216.cpp
index 0973233ba4d..c6e4ebf7c71 100644
--- a/engines/mads/nebular/rooms/room216.cpp
+++ b/engines/mads/nebular/rooms/room216.cpp
@@ -35,8 +35,8 @@ void room_216_init() {
 	player.commands_allowed = false;
 	player.walker_visible = false;
 
-	_scene->_userInterface.emptyConversationList();
-	_scene->_userInterface.setup(kInputConversation);
+	inter_reset_dialog();
+	kernel_set_interface_mode(kInputConversation);
 	kernel_run_animation(kernel_name('A', -1), 60);
 
 	section_2_music();
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 2da92f70df5..b50ed8f7983 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -94,7 +94,7 @@ static void setDialogNode(int node) {
 	switch (node) {
 	case 0:
 		handlePrisonerSpeech(0x153, 2, 120);
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		break;
 
 	case 1:
@@ -111,7 +111,7 @@ static void setDialogNode(int node) {
 
 	case 4:
 		handlePrisonerSpeech(0x116, 1, 120);
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		break;
 
 	case 5:
@@ -122,7 +122,7 @@ static void setDialogNode(int node) {
 
 	case 6:
 		handlePrisonerSpeech(0x123, 1, 120);
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		break;
 
 	case 7:
@@ -183,7 +183,7 @@ static void setDialogNode(int node) {
 
 	case 15:
 		handlePrisonerSpeech(0x152, 1, 120);
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		break;
 
 	case 16:
@@ -347,11 +347,12 @@ static void room_307_init() {
 	}
 
 	if (local._grateOpenedFl) {
-		_scene->_hotspots.activate(17, false);
+		kernel_flip_hotspot(17, false);
 
-		int idx = _scene->_dynamicHotspots.add(words_air_vent, words_climb_into, -1, Common::Rect(117, 67, 117 + 19, 67 + 13));
-		int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(129, 104), FACING_NORTH);
-		_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_UP);
+		int idx = kernel_add_dynamic(words_air_vent, words_climb_into, 0, -1, 117, 67, 19, 13);
+		kernel_dynamic_walk(idx, 129, 104, FACING_NORTH);
+		int hotspotId = idx;
+		kernel_dynamic_cursor(hotspotId, CURSOR_GO_UP);
 
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 2);
@@ -543,10 +544,11 @@ static void room_307_parser() {
 			player.clock = kernel.clock - player.frame_delay;
 			kernel_seq_delete(g_sequence_ids[5]);
 			local._grateOpenedFl = true;
-			_scene->_hotspots.activate(17, false);
-			int idx = _scene->_dynamicHotspots.add(words_air_vent, words_climb_into, -1, Common::Rect(117, 67, 117 + 19, 67 + 13));
-			int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(129, 104), FACING_NORTH);
-			_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_UP);
+			kernel_flip_hotspot(17, false);
+			int idx = kernel_add_dynamic(words_air_vent, words_climb_into, 0, -1, 117, 67, 19, 13);
+			kernel_dynamic_walk(idx, 129, 104, FACING_NORTH);
+			int hotspotId = idx;
+			kernel_dynamic_cursor(hotspotId, CURSOR_GO_UP);
 			inter_take_from_player(OBJ_SCALPEL, NOWHERE);
 			kernel_message_player(0xF2, 120, 7);
 		}
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index e121a0a6f0c..b6511aff4bc 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -134,8 +134,8 @@ static void room_309_daemon() {
 		switch (kernel.trigger) {
 		case 70:
 		{
-			int idx = _scene->_dynamicHotspots.add(words_ghastly_beast, words_gawk_at, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(142, 146), FACING_NORTHEAST);
+			int idx = kernel_add_dynamic(words_ghastly_beast, words_gawk_at, 0, g_sequence_ids[3], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 142, 146, FACING_NORTHEAST);
 			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 4);
 			kernel_seq_range(g_sequence_ids[3], 2, 3);
 			kernel_seq_depth(g_sequence_ids[3], 11);
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index e7e3a51bd8a..1aee4c2a5b9 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -178,7 +178,7 @@ static void room_311_daemon() {
 		break;
 	}
 
-	if (player.walking && (_scene->_rails.getNext() > 0)) {
+	if (player.walking && (player.next_special_code > 0)) {
 		int x = player.prepare_walk_x;
 		if (x < 75)
 			x = 75;
@@ -187,7 +187,7 @@ static void room_311_daemon() {
 
 		local._checkGuardFl = true;
 		player_start_walking(x, 122, FACING_SOUTH);
-		_scene->_rails.resetNext();
+		player.next_special_code = 0;
 	}
 }
 
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index 0a33f35a20d..c6c1ed0be7e 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -34,7 +34,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_313_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 
 	if ((previous_room == 366) || (previous_room == 316)) {
 		player.x = 30;
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index fc173b237a2..ec0669acdfa 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -115,7 +115,7 @@ static void handleDialog() {
 		kernel_seq_loc(g_sequence_ids[2], 142, 121);
 		kernel_seq_timeout(synxIdx, g_sequence_ids[2]);
 		g_engine->_soundManager->command(3, 0);
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		player.commands_allowed = true;
 	} else {
 		if (player2.words[0] < 0x19C)
@@ -215,15 +215,15 @@ static void room_318_init() {
 		kernel_run_animation(kernel_name('f', -1), 0);
 		kernel_anim[0].repeat = true;
 	} else if (!global[kHasSeenProfPyro]) {
-		_scene->_hotspots.activate(words_professors_gurney, false);
-		_scene->_hotspots.activate(words_professor, false);
-		_scene->_hotspots.activate(words_tape_player, false);
+		kernel_flip_hotspot(words_professors_gurney, false);
+		kernel_flip_hotspot(words_professor, false);
+		kernel_flip_hotspot(words_tape_player, false);
 	}
 
 	if (object_is_here(OBJ_SCALPEL)) {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 120, 0, 0);
 		kernel_seq_depth(g_sequence_ids[3], 4);
-		_scene->_dynamicHotspots.add(words_scalpel, words_take, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
+		kernel_add_dynamic(words_scalpel, words_take, 0, g_sequence_ids[3], 0, 0, 0, 0);
 	}
 
 	if (previous_room == 357) {
@@ -251,7 +251,7 @@ static void room_318_init() {
 	}
 
 	local._lastFrame = 0;
-	_scene->_hotspots.activate(words_intern, false);
+	kernel_flip_hotspot(words_intern, false);
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
 		local._dialogFl = false;
@@ -282,7 +282,7 @@ static void room_318_init() {
 				local._dialogFl = false;
 			} else {
 				kernel_run_animation(kernel_name('b', -1), 61);
-				_scene->_hotspots.activate(words_intern, true);
+				kernel_flip_hotspot(words_intern, true);
 			}
 
 			if (local._dialogFl) {
@@ -368,7 +368,7 @@ static void room_318_daemon() {
 
 				if (nextFrame == 184) {
 					handleInternDialog(0x1D1, 3, 240);
-					_scene->_hotspots.activate(words_intern, false);
+					kernel_flip_hotspot(words_intern, false);
 					local._internVisibleFl = false;
 				}
 				break;
diff --git a/engines/mads/nebular/rooms/room321.cpp b/engines/mads/nebular/rooms/room321.cpp
index 4047dd0c648..0b3ae3f9015 100644
--- a/engines/mads/nebular/rooms/room321.cpp
+++ b/engines/mads/nebular/rooms/room321.cpp
@@ -35,8 +35,8 @@ static void room_321_init() {
 	player.walker_visible = false;
 	player.commands_allowed = false;
 
-	_scene->_userInterface.emptyConversationList();
-	_scene->_userInterface.setup(kInputConversation);
+	inter_reset_dialog();
+	kernel_set_interface_mode(kInputConversation);
 
 	int suffixNum;
 	if (global[kSexOfRex] == REX_FEMALE) {
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index d0ca35bb32d..d1629e772a0 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -43,7 +43,7 @@ static void room_351_init() {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 0);
 		kernel_seq_depth(g_sequence_ids[1], 4);
 	} else
-		_scene->_hotspots.activate(words_credit_chip, false);
+		kernel_flip_hotspot(words_credit_chip, false);
 
 	if (previous_room == 352) {
 		player.x = 148;
@@ -141,7 +141,7 @@ static void room_351_parser() {
 				break;
 
 			case 1:
-				_scene->_hotspots.activate(words_credit_chip, false);
+				kernel_flip_hotspot(words_credit_chip, false);
 				kernel_seq_delete(g_sequence_ids[1]);
 				inter_give_to_player(OBJ_CREDIT_CHIP);
 				break;
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index 19ccb769c51..4afc0ec7fe5 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -72,8 +72,8 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 	case 2:
 	{
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
-		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_guards_arm2, words_walkto, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 230, 117, FACING_NORTHWEST);
 		kernel_load_variant(0);
 	}
 	break;
@@ -152,8 +152,9 @@ static void room_352_init() {
 	if (object_is_here(OBJ_TAPE_PLAYER)) {
 		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 0);
 		kernel_seq_depth(g_sequence_ids[5], 5);
-		int idx = _scene->_dynamicHotspots.add(words_tape_player, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		local._tapePlayerHotspotIdx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(84, 145), FACING_WEST);
+		int idx = kernel_add_dynamic(words_tape_player, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 84, 145, FACING_WEST);
+		local._tapePlayerHotspotIdx = idx;
 	}
 
 	local._vaultOpenFl = false;
@@ -166,8 +167,8 @@ static void room_352_init() {
 
 	if (object_is_here(OBJ_GUARDS_ARM)) {
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 0);
-		int idx = _scene->_dynamicHotspots.add(words_guards_arm2, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(230, 117), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_guards_arm2, words_walkto, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 230, 117, FACING_NORTHWEST);
 	} else
 		local._mustPutArmDownFl = true;
 
@@ -214,10 +215,10 @@ static void room_352_pre_parser() {
 
 		case 1:
 			if (!global[kHaveYourStuff])
-				_scene->_dynamicHotspots.remove(local._hotspot2Idx);
+				kernel_delete_dynamic(local._hotspot2Idx);
 
-			_scene->_dynamicHotspots.remove(local._hotspot1Idx);
-			_scene->_dynamicHotspots.remove(local._lampHostpotIdx);
+			kernel_delete_dynamic(local._hotspot1Idx);
+			kernel_delete_dynamic(local._lampHostpotIdx);
 			local._vaultOpenFl = false;
 			player.commands_allowed = true;
 			break;
@@ -431,8 +432,9 @@ static void room_352_parser() {
 				local._vaultOpenFl = true;
 				int idx;
 				if (!global[kHaveYourStuff]) {
-					idx = _scene->_dynamicHotspots.add(words_your_stuff, words_walkto, -1, Common::Rect(282, 87, 282 + 13, 87 + 7));
-					local._hotspot2Idx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(280, 111), FACING_NORTHEAST);
+					idx = kernel_add_dynamic(words_your_stuff, words_walkto, 0, -1, 282, 87, 13, 7);
+					kernel_dynamic_walk(idx, 280, 111, FACING_NORTHEAST);
+					local._hotspot2Idx = idx;
 					g_sequence_ids[1] = local._commonSequenceIdx;
 					kernel_message_add(quote_string(kernel.quotes, 0x102), 0, 0, 0x1110, 120, 0, 34);
 				} else {
@@ -440,10 +442,12 @@ static void room_352_parser() {
 					kernel_message_add(quote_string(kernel.quotes, 0x103), 0, 0, 0x1110, 120, 0, 34);
 				}
 
-				idx = _scene->_dynamicHotspots.add(words_other_stuff, words_walkto, -1, Common::Rect(282, 48, 282 + 36, 48 + 27));
-				local._hotspot1Idx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(287, 115), FACING_NORTHEAST);
-				idx = _scene->_dynamicHotspots.add(words_lamp, words_walkto, -1, Common::Rect(296, 76, 296 + 11, 76 + 17));
-				local._lampHostpotIdx = _scene->_dynamicHotspots.setPosition(idx, Common::Point(287, 115), FACING_NORTHEAST);
+				idx = kernel_add_dynamic(words_other_stuff, words_walkto, 0, -1, 282, 48, 36, 27);
+				kernel_dynamic_walk(idx, 287, 115, FACING_NORTHEAST);
+				local._hotspot1Idx = idx;
+				idx = kernel_add_dynamic(words_lamp, words_walkto, 0, -1, 296, 76, 11, 17);
+				kernel_dynamic_walk(idx, 287, 115, FACING_NORTHEAST);
+				local._lampHostpotIdx = idx;
 				player.commands_allowed = true;
 			}
 			break;
@@ -473,7 +477,7 @@ static void room_352_parser() {
 			break;
 
 		case 1:
-			_scene->_dynamicHotspots.remove(local._hotspot2Idx);
+			kernel_delete_dynamic(local._hotspot2Idx);
 			global[kHaveYourStuff] = true;
 
 			for (uint16 i = 0; i < num_objects; i++) {
@@ -519,7 +523,7 @@ static void room_352_parser() {
 
 		case 1:
 			kernel_seq_delete(g_sequence_ids[5]);
-			_scene->_dynamicHotspots.remove(local._tapePlayerHotspotIdx);
+			kernel_delete_dynamic(local._tapePlayerHotspotIdx);
 			break;
 
 		case 2:
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index b2f66e74f0a..ea130c28bdd 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -53,8 +53,8 @@ static void room_359_init() {
 
 	if (object_is_here(OBJ_SECURITY_CARD)) {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
-		local._cardHotspotId = _scene->_dynamicHotspots.add(words_security_card, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._cardHotspotId, Common::Point(107, 107), FACING_SOUTH);
+		local._cardHotspotId = kernel_add_dynamic(words_security_card, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._cardHotspotId, 107, 107, FACING_SOUTH);
 	}
 
 	if (previous_room == 358) {
@@ -106,7 +106,7 @@ static void room_359_parser() {
 
 			case 1:
 				kernel_seq_delete(g_sequence_ids[1]);
-				_scene->_dynamicHotspots.remove(local._cardHotspotId);
+				kernel_delete_dynamic(local._cardHotspotId);
 				g_engine->_soundManager->command(57, 0);
 				inter_give_to_player(OBJ_SECURITY_CARD);
 				object_examine(OBJ_SECURITY_CARD, 0x330, 0);
diff --git a/engines/mads/nebular/rooms/room366.cpp b/engines/mads/nebular/rooms/room366.cpp
index 33793d2f19a..d9755cb69df 100644
--- a/engines/mads/nebular/rooms/room366.cpp
+++ b/engines/mads/nebular/rooms/room366.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_366_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	player.walker_visible = false;
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room387.cpp b/engines/mads/nebular/rooms/room387.cpp
index 44c3fe0d449..ecc5d89c752 100644
--- a/engines/mads/nebular/rooms/room387.cpp
+++ b/engines/mads/nebular/rooms/room387.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_387_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	player.walker_visible = false;
 
 	section_3_music();
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 35fcd3cc027..7e217a44132 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -33,10 +33,10 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_388_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 
 	if (global[kAfterHavoc])
-		_scene->_hotspots.activate(words_sauropod, false);
+		kernel_flip_hotspot(words_sauropod, false);
 	else {
 		g_sprite_ids[0] = kernel_load_series(kernel_name('b', 0), 0);
 		g_sequence_ids[0] = kernel_seq_stamp(g_sprite_ids[0], false, 1);
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index a7a795de11f..74b14891e46 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -42,12 +42,12 @@ static Scratch local;
 
 
 static void room_389_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	local._monsterTime = 0;
 	local._circularQuoteId = 0x159;
 
 	if (global[kAfterHavoc])
-		_scene->_hotspots.activate(words_monster, false);
+		kernel_flip_hotspot(words_monster, false);
 	else {
 		g_sprite_ids[0] = kernel_load_series(kernel_name('m', -1), 0);
 		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 0, 0);
diff --git a/engines/mads/nebular/rooms/room390.cpp b/engines/mads/nebular/rooms/room390.cpp
index 11e5af3b1f2..7601b9f480f 100644
--- a/engines/mads/nebular/rooms/room390.cpp
+++ b/engines/mads/nebular/rooms/room390.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_390_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	player.walker_visible = false;
 
 	section_3_music();
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index 43420ad6bc4..2d39bd015dc 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_391_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	player.walker_visible = false;
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index 921c70f99d7..c68bd63b80f 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_399_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	player.walker_visible = false;
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index c5c04ac6e5e..257691b7810 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -87,7 +87,7 @@ static void setDialogNode(int node) {
 
 	switch (node) {
 	case 0:
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		local._conversationFl = false;
 		local._bartenderDialogNode = 0;
 		break;
@@ -342,7 +342,7 @@ static void handleConversation4() {
 		local._roxMode = 21;
 		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 92);
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		local._conversationFl = false;
 		break;
 
@@ -525,7 +525,7 @@ static void room_402_init() {
 	if (local._conversationFl) {
 		switch (local._bartenderDialogNode) {
 		case 0:
-			_scene->_userInterface.setup(kInputBuildingSentences);
+			kernel_set_interface_mode(kInputBuildingSentences);
 			local._bartenderDialogNode = 1;
 			break;
 
@@ -640,23 +640,23 @@ static void room_402_init() {
 		g_sequence_ids[14] = kernel_seq_stamp(g_sprite_ids[14], false, 1);
 		kernel_seq_depth(g_sequence_ids[14], 7);
 		kernel_seq_loc(g_sequence_ids[14], 210, 80);
-		int idx = _scene->_dynamicHotspots.add(words_repair_list, words_look_at, g_sequence_ids[14], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
+		int idx = kernel_add_dynamic(words_repair_list, words_look_at, 0, g_sequence_ids[14], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 0, 0, FACING_NONE);
 	}
 
 	{
 		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 		kernel_seq_depth(g_sequence_ids[9], 8);
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+		int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 	}
 
 	if (!object_is_here(OBJ_ALIEN_LIQUOR) && !player_has(OBJ_CREDIT_CHIP)) {
 		g_sequence_ids[15] = kernel_seq_stamp(g_sprite_ids[15], false, 1);
 		kernel_seq_depth(g_sequence_ids[15], 8);
 		kernel_seq_loc(g_sequence_ids[15], 250, 80);
-		int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, g_sequence_ids[15], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
+		int idx = kernel_add_dynamic(words_credit_chip, words_take, 0, g_sequence_ids[15], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 0, 0, FACING_NONE);
 	}
 
 	g_sequence_ids[20] = kernel_seq_stamp(g_sprite_ids[20], false, 1);
@@ -717,8 +717,8 @@ static void room_402_daemon() {
 			g_sequence_ids[10] = kernel_seq_pingpong(g_sprite_ids[10], false, 7, 0, 0, 0);
 			kernel_seq_range(g_sequence_ids[10], 3, 4);
 			kernel_seq_depth(g_sequence_ids[10], 8);
-			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[10], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+			int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[10], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 			local._bartenderTalking = true;
 			if (local._talkTimer > 1000)
 				kernel_timing_trigger(local._talkTimer - 1000, 101);
@@ -730,8 +730,8 @@ static void room_402_daemon() {
 	if ((kernel.trigger == 101) && local._bartenderTalking) {
 		kernel_seq_delete(g_sequence_ids[10]);
 		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+		int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 		kernel_seq_depth(g_sequence_ids[9], 8);
 		local._bartenderSteady = true;
 		local._bartenderTalking = false;
@@ -867,8 +867,8 @@ static void room_402_daemon() {
 			g_sequence_ids[15] = kernel_seq_stamp(g_sprite_ids[15], false, 1);
 			kernel_seq_depth(g_sequence_ids[15], 8);
 			kernel_seq_loc(g_sequence_ids[15], 250, 80);
-			int idx = _scene->_dynamicHotspots.add(words_credit_chip, words_take, g_sequence_ids[15], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), FACING_NONE);
+			int idx = kernel_add_dynamic(words_credit_chip, words_take, 0, g_sequence_ids[15], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 0, 0, FACING_NONE);
 		}
 		break;
 
@@ -901,8 +901,8 @@ static void room_402_daemon() {
 		int seqIdx = g_sequence_ids[12];
 		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 		local._bartenderSteady = true;
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+		int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[9]);
 		kernel_seq_depth(g_sequence_ids[9], 8);
 		if (local._bartenderMode == 20) {
@@ -984,8 +984,8 @@ static void room_402_daemon() {
 	{
 		kernel_seq_delete(g_sequence_ids[9]);
 		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+		int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 		kernel_seq_depth(g_sequence_ids[9], 8);
 		local._bartenderSteady = true;
 		player.commands_allowed = true;
@@ -1083,8 +1083,8 @@ static void room_402_daemon() {
 			{
 				g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[10], false, 4);
 				kernel_seq_depth(g_sequence_ids[10], 8);
-				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[10], Common::Rect(0, 0, 0, 0));
-				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+				int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[10], 0, 0, 0, 0);
+				kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 				local._bartenderHandsHips = true;
 			}
 			break;
@@ -1093,8 +1093,8 @@ static void room_402_daemon() {
 			{
 				g_sequence_ids[11] = kernel_seq_stamp(g_sprite_ids[11], false, 2);
 				kernel_seq_depth(g_sequence_ids[11], 8);
-				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[11], Common::Rect(0, 0, 0, 0));
-				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+				int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[11], 0, 0, 0, 0);
+				kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 				local._bartenderLooksLeft = true;
 			}
 			break;
@@ -1103,8 +1103,8 @@ static void room_402_daemon() {
 			{
 				g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 				kernel_seq_depth(g_sequence_ids[9], 8);
-				int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-				_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+				int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+				kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 				local._bartenderSteady = true;
 			}
 			break;
@@ -1402,16 +1402,16 @@ static void room_402_daemon() {
 			kernel_seq_delete(g_sequence_ids[10]);
 			local._bartenderHandsHips = false;
 			g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
-			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+			int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 			local._bartenderSteady = true;
 			kernel_seq_depth(g_sequence_ids[9], 8);
 		} else if (local._bartenderLooksLeft) {
 			kernel_seq_delete(g_sequence_ids[11]);
 			local._bartenderLooksLeft = false;
 			g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
-			int idx = _scene->_dynamicHotspots.add(words_bartender, words_walkto, g_sequence_ids[9], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(228, 83), FACING_SOUTH);
+			int idx = kernel_add_dynamic(words_bartender, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 228, 83, FACING_SOUTH);
 			local._bartenderSteady = true;
 			kernel_seq_depth(g_sequence_ids[9], 8);
 		}
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index e10fad70ebf..f7687f24156 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -42,8 +42,8 @@ static void room_408_init() {
 	if (object_is_here(OBJ_TARGET_MODULE)) {
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
 		kernel_seq_depth(g_sequence_ids[2], 3);
-		int idx = _scene->_dynamicHotspots.add(words_target_module, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(283, 128), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_target_module, words_walkto, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 283, 128, FACING_NORTHEAST);
 	}
 	section_4_music();
 }
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index 47629cff3c1..112bb7c76b7 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -38,7 +38,7 @@ static void room_410_init() {
 	if (object_is_here(OBJ_CHARGE_CASES))
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 	else
-		_scene->_hotspots.activate(words_charge_cases, false);
+		kernel_flip_hotspot(words_charge_cases, false);
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 155;
@@ -114,7 +114,7 @@ static void room_410_parser() {
 
 		case 1:
 			kernel_seq_delete(g_sequence_ids[1]);
-			_scene->_hotspots.activate(words_charge_cases, false);
+			kernel_flip_hotspot(words_charge_cases, false);
 			inter_give_to_player(OBJ_CHARGE_CASES);
 			object_examine(OBJ_CHARGE_CASES, 41032, 0);
 			break;
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index 67fab670477..cf8df5a2022 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -263,9 +263,9 @@ static void handleDialog() {
 		} else
 			local._killRox = true;
 
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 	} else if (player2.words[0] == 0x262)
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 }
 
 static void giveToRex(int object_id) {
@@ -327,11 +327,11 @@ static void room_411_init() {
 	local._dialog4.setup(0x5E, 0x255, 0x261, 0x25D, 0x259, 0x262, -1);
 
 	if (global[kNextIngredient] >= 4 && !object_check_quality(OBJ_CHARGE_CASES, 3)) {
-		_scene->_hotspots.activate(words_kettle, false);
-		_scene->_hotspots.activate(words_explosives, true);
+		kernel_flip_hotspot(words_kettle, false);
+		kernel_flip_hotspot(words_explosives, true);
 	} else {
-		_scene->_hotspots.activate(words_explosives, false);
-		_scene->_hotspots.activate(words_kettle, true);
+		kernel_flip_hotspot(words_explosives, false);
+		kernel_flip_hotspot(words_kettle, true);
 	}
 
 	if (global[kNextIngredient] >= 4 && object_check_quality(OBJ_CHARGE_CASES, 3)) {
@@ -377,22 +377,22 @@ static void room_411_init() {
 	if (object_is_here(OBJ_FORMALDEHYDE)) {
 		g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, 1);
 		kernel_seq_depth(g_sequence_ids[7], 1);
-		int idx = _scene->_dynamicHotspots.add(words_formaldehyde, words_walkto, g_sequence_ids[7], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(206, 145), FACING_SOUTHEAST);
+		int idx = kernel_add_dynamic(words_formaldehyde, words_walkto, 0, g_sequence_ids[7], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 206, 145, FACING_SOUTHEAST);
 	}
 
 	if (object_is_here(OBJ_PETROX)) {
 		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
 		kernel_seq_depth(g_sequence_ids[5], 8);
-		int idx = _scene->_dynamicHotspots.add(words_petrox, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(186, 112), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_petrox, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 186, 112, FACING_NORTHEAST);
 	}
 
 	if (object_is_here(OBJ_LECITHIN)) {
 		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, 1);
 		kernel_seq_depth(g_sequence_ids[6], 8);
-		int idx = _scene->_dynamicHotspots.add(words_lecithin, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(220, 121), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_lecithin, words_walkto, 0, g_sequence_ids[6], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 220, 121, FACING_NORTHEAST);
 	}
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
@@ -470,8 +470,8 @@ static void room_411_daemon() {
 				if (local._makeMushroomCloud) {
 					g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 5, 0, 0, 1);
 					local._makeMushroomCloud = false;
-					_scene->_hotspots.activate(words_kettle, false);
-					_scene->_hotspots.activate(words_explosives, true);
+					kernel_flip_hotspot(words_kettle, false);
+					kernel_flip_hotspot(words_explosives, true);
 				}
 				break;
 
@@ -558,8 +558,8 @@ static void room_411_parser() {
 		break;
 
 		case 111:
-			_scene->_hotspots.activate(words_kettle, true);
-			_scene->_hotspots.activate(words_explosives, false);
+			kernel_flip_hotspot(words_kettle, true);
+			kernel_flip_hotspot(words_explosives, false);
 			kernel_seq_delete(g_sequence_ids[4]);
 			kernel_seq_delete(g_sequence_ids[10]);
 
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 68bdb59916c..4add35d8a15 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -99,9 +99,10 @@ static void room_501_init() {
 	}
 
 	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
-	int idx = _scene->_dynamicHotspots.add(words_door, words_walk_through, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-	local._doorHotspotid = _scene->_dynamicHotspots.setPosition(idx, Common::Point(282, 110), FACING_NORTH);
-	_scene->_dynamicHotspots.setCursor(local._doorHotspotid, CURSOR_GO_UP);
+	int idx = kernel_add_dynamic(words_door, words_walk_through, 0, g_sequence_ids[3], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 282, 110, FACING_NORTH);
+	local._doorHotspotid = idx;
+	kernel_dynamic_cursor(local._doorHotspotid, CURSOR_GO_UP);
 	kernel_seq_depth(g_sequence_ids[3], 7);
 	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
 	kernel_seq_depth(g_sequence_ids[2], 4);
@@ -161,7 +162,7 @@ static void room_501_daemon() {
 			break;
 
 		case 81:
-			_scene->_dynamicHotspots.remove(local._doorHotspotid);
+			kernel_delete_dynamic(local._doorHotspotid);
 			player_walk(276, 110, FACING_SOUTHWEST);
 			kernel_timing_trigger(120, 82);
 			break;
@@ -170,9 +171,9 @@ static void room_501_daemon() {
 			g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 9, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 7);
 			g_engine->_soundManager->command(12, 0);
-			local._doorHotspotid = _scene->_dynamicHotspots.add(words_door, words_walk_through, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(g_sequence_ids[3], Common::Point(282, 110), FACING_NORTH);
-			_scene->_dynamicHotspots.setCursor(local._doorHotspotid, CURSOR_GO_UP);
+			local._doorHotspotid = kernel_add_dynamic(words_door, words_walk_through, 0, g_sequence_ids[3], 0, 0, 0, 0);
+			kernel_dynamic_walk(g_sequence_ids[3], 282, 110, FACING_NORTH);
+			kernel_dynamic_cursor(local._doorHotspotid, CURSOR_GO_UP);
 			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
 			break;
 
@@ -331,7 +332,7 @@ static void room_501_parser() {
 
 		case 4:
 			kernel_seq_delete(g_sequence_ids[3]);
-			_scene->_dynamicHotspots.remove(local._doorHotspotid);
+			kernel_delete_dynamic(local._doorHotspotid);
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 7);
 			g_engine->_soundManager->command(11, 0);
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index 31a8d16058c..0d97298152c 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -49,8 +49,8 @@ static void room_503_init() {
 
 	if (object[OBJ_DETONATORS].location == room_id) {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
-		local._detonatorHotspotId = _scene->_dynamicHotspots.add(words_detonators, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._detonatorHotspotId, Common::Point(254, 135), FACING_SOUTH);
+		local._detonatorHotspotId = kernel_add_dynamic(words_detonators, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._detonatorHotspotId, 254, 135, FACING_SOUTH);
 	}
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
@@ -89,7 +89,7 @@ static void room_503_parser() {
 			case 1:
 				g_engine->_soundManager->command(9, 0);
 				kernel_seq_delete(g_sequence_ids[1]);
-				_scene->_dynamicHotspots.remove(local._detonatorHotspotId);
+				kernel_delete_dynamic(local._detonatorHotspotId);
 				inter_give_to_player(OBJ_DETONATORS);
 				object_examine(OBJ_DETONATORS, 50326, 0);
 				break;
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index 4139bffa964..bc686bd6432 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -100,9 +100,10 @@ static void handleDoorSequences() {
 	case 83:
 	{
 		local._doorSequenceIdx = kernel_seq_stamp(local._doorSpriteIdx, false, 1);
-		int idx = _scene->_dynamicHotspots.add(local._doorWord, words_walk_into, local._doorSequenceIdx, Common::Rect(0, 0, 0, 0));
-		int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(local._doorPos_x, local._doorPos_y), FACING_NORTHWEST);
-		_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_LEFT);
+		int idx = kernel_add_dynamic(local._doorWord, words_walk_into, 0, local._doorSequenceIdx, 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, local._doorPos_x, local._doorPos_y, FACING_NORTHWEST);
+		int hotspotId = idx;
+		kernel_dynamic_cursor(hotspotId, CURSOR_GO_LEFT);
 		kernel_seq_depth(local._doorSequenceIdx, local._doorDepth);
 		local._firstDoorFl = true;
 		if (local._labDoorFl) {
@@ -148,14 +149,16 @@ static void room_506_init() {
 	}
 
 	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
-	int idx = _scene->_dynamicHotspots.add(words_laboratory, words_walk_into, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-	int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(65, 125), FACING_NORTHWEST);
-	_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_LEFT);
+	int idx = kernel_add_dynamic(words_laboratory, words_walk_into, 0, g_sequence_ids[1], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 65, 125, FACING_NORTHWEST);
+	int hotspotId = idx;
+	kernel_dynamic_cursor(hotspotId, CURSOR_GO_LEFT);
 	kernel_seq_depth(g_sequence_ids[1], 10);
 	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
-	idx = _scene->_dynamicHotspots.add(words_software_store, words_walk_into, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-	hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(112, 102), FACING_NORTHWEST);
-	_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_LEFT);
+	idx = kernel_add_dynamic(words_software_store, words_walk_into, 0, g_sequence_ids[2], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 112, 102, FACING_NORTHWEST);
+	hotspotId = idx;
+	kernel_dynamic_cursor(hotspotId, CURSOR_GO_LEFT);
 	kernel_seq_depth(g_sequence_ids[2], 13);
 
 	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -1);
diff --git a/engines/mads/nebular/rooms/room507.cpp b/engines/mads/nebular/rooms/room507.cpp
index 580c22fb47e..df9fe22eef0 100644
--- a/engines/mads/nebular/rooms/room507.cpp
+++ b/engines/mads/nebular/rooms/room507.cpp
@@ -45,8 +45,8 @@ static void room_507_init() {
 
 	if ((game.difficulty != DIFFICULTY_EASY) && (object[OBJ_PENLIGHT].location == room_id)) {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
-		local._penlightHotspotId = _scene->_dynamicHotspots.add(words_penlight, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._penlightHotspotId, Common::Point(233, 152), FACING_SOUTHEAST);
+		local._penlightHotspotId = kernel_add_dynamic(words_penlight, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._penlightHotspotId, 233, 152, FACING_SOUTHEAST);
 	}
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
@@ -76,7 +76,7 @@ static void room_507_parser() {
 
 			case 1:
 				kernel_seq_delete(g_sequence_ids[1]);
-				_scene->_dynamicHotspots.remove(local._penlightHotspotId);
+				kernel_delete_dynamic(local._penlightHotspotId);
 				g_engine->_soundManager->command(27, 0);
 				inter_give_to_player(OBJ_PENLIGHT);
 				object_examine(OBJ_PENLIGHT, 50730, 0);
@@ -107,7 +107,7 @@ static void room_507_parser() {
 	else if (player_said_2(look, advertising_poster))
 		text_show(50715);
 	else if (player_said_2(look, sign)) {
-		if (_scene->_customDest.x < 100)
+		if (inter_point_x < 100)
 			text_show(50726);
 		else
 			text_show(50716);
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index 8643e03971f..2ee71cc0bf6 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -57,25 +57,25 @@ static void room_508_init() {
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
 		kernel_seq_depth(g_sequence_ids[3], 8);
 		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, -2);
-		int idx = _scene->_dynamicHotspots.add(words_spinach_patch_doll, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
-		_scene->_hotspots.activate(words_hole, false);
-		_scene->_hotspots.activate(words_laser_beam, false);
+		int idx = kernel_add_dynamic(words_spinach_patch_doll, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 57, 116, FACING_NORTHEAST);
+		kernel_flip_hotspot(words_hole, false);
+		kernel_flip_hotspot(words_laser_beam, false);
 	} else {
 		kernel_load_variant(1);
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
 		kernel_seq_depth(g_sequence_ids[3], 8);
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, -2);
 		kernel_seq_depth(g_sequence_ids[4], 11);
-		int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_laser_beam, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 57, 116, FACING_NORTHEAST);
 		g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 15, 0, 0, 0);
 		kernel_seq_range(g_sequence_ids[2], 6, 8);
 		kernel_seq_depth(g_sequence_ids[2], 6);
 		if (global[kLaserHoleIsThere]) {
 			g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, -2);
-			_scene->_hotspots.activate(words_hole, true);
-			_scene->_hotspots.activate(words_laser_beam, true);
+			kernel_flip_hotspot(words_hole, true);
+			kernel_flip_hotspot(words_laser_beam, true);
 		}
 		g_engine->_soundManager->command(21, 0);
 	}
@@ -136,8 +136,8 @@ static void handlePedestral() {
 
 		case 2:
 			g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, -2);
-			_scene->_hotspots.activate(words_hole, true);
-			_scene->_hotspots.activate(words_laser_beam, true);
+			kernel_flip_hotspot(words_hole, true);
+			kernel_flip_hotspot(words_laser_beam, true);
 			break;
 
 		case 3:
@@ -205,8 +205,8 @@ static void room_508_parser() {
 				g_engine->_soundManager->command(22, 0);
 				g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, -2);
 				kernel_seq_depth(g_sequence_ids[4], 11);
-				int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-				_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
+				int idx = kernel_add_dynamic(words_laser_beam, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+				kernel_dynamic_walk(idx, 57, 116, FACING_NORTHEAST);
 				kernel_message_purge();
 				kernel_load_variant(1);
 				kernel_timing_trigger(30, 7);
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index 2d54585af9f..ad052676401 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -57,8 +57,8 @@ static void room_511_init() {
 	if (global[kLineStatus] == 2 || global[kLineStatus] == 3) {
 		g_sprite_ids[7] = kernel_load_series(kernel_name('b', 4), 0);
 		g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, frame);
-		int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[7], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(26, 153), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_fishing_line, words_walkto, 0, g_sequence_ids[7], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 26, 153, FACING_NORTHEAST);
 		kernel_seq_depth(g_sequence_ids[7], 3);
 		if (global[kBoatRaised])
 			kernel_load_variant(2);
@@ -71,10 +71,10 @@ static void room_511_init() {
 		g_sprite_ids[2] = kernel_load_series(kernel_name('b', 0), 0);
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
 		kernel_seq_depth(g_sequence_ids[2], 3);
-		_scene->_hotspots.activate(words_boat, false);
-		int idx = _scene->_dynamicHotspots.add(words_boat, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(75, 124), FACING_NORTH);
-		_scene->_hotspots.activate(words_rope, false);
+		kernel_flip_hotspot(words_boat, false);
+		int idx = kernel_add_dynamic(words_boat, words_walkto, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 75, 124, FACING_NORTH);
+		kernel_flip_hotspot(words_rope, false);
 	} else {
 		g_sprite_ids[5] = kernel_load_series(kernel_name('b', 2), 0);
 		g_sprite_ids[6] = kernel_load_series(kernel_name('b', 3), 0);
@@ -89,8 +89,8 @@ static void room_511_init() {
 		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, 1);
 		kernel_seq_depth(g_sequence_ids[6], 5);
 
-		_scene->_hotspots.activate(words_rope, true);
-		_scene->_hotspots.activate(words_boat, true);
+		kernel_flip_hotspot(words_rope, true);
+		kernel_flip_hotspot(words_boat, true);
 		kernel_load_variant(1);
 	}
 
@@ -294,8 +294,8 @@ static void room_511_parser() {
 						player.walker_visible = true;
 						g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, -2);
 						kernel_seq_depth(g_sequence_ids[7], 4);
-						int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[7], Common::Rect(0, 0, 0, 0));
-						_scene->_dynamicHotspots.setPosition(idx, Common::Point(26, 153), FACING_NORTHEAST);
+						int idx = kernel_add_dynamic(words_fishing_line, words_walkto, 0, g_sequence_ids[7], 0, 0, 0, 0);
+						kernel_dynamic_walk(idx, 26, 153, FACING_NORTHEAST);
 						inter_take_from_player(OBJ_FISHING_LINE, 1);
 						local._handingLine = false;
 						local._lineMoving = true;
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index 60f50e6db4a..24341f3d6d7 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -51,38 +51,38 @@ static void room_512_init() {
 
 	if (object[OBJ_FISHING_ROD].location == room_id) {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
-		local._fishingRodHotspotId = _scene->_dynamicHotspots.add(words_fishing_rod, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._fishingRodHotspotId, Common::Point(199, 101), FACING_NORTHEAST);
+		local._fishingRodHotspotId = kernel_add_dynamic(words_fishing_rod, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._fishingRodHotspotId, 199, 101, FACING_NORTHEAST);
 	}
 
 	if (!player.been_here_before)
 		global[kRegisterOpen] = false;
 
-	_scene->_hotspots.activate(words_padlock_key, false);
+	kernel_flip_hotspot(words_padlock_key, false);
 	if (game.difficulty == DIFFICULTY_EASY) {
 		if (object[OBJ_PADLOCK_KEY].location == room_id) {
 			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 10, 0, 0, 0);
 			kernel_seq_depth(g_sequence_ids[6], 3);
-			local._keyHotspotId = _scene->_dynamicHotspots.add(words_padlock_key, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(local._keyHotspotId, Common::Point(218, 152), FACING_NORTHEAST);
+			local._keyHotspotId = kernel_add_dynamic(words_padlock_key, words_walkto, 0, g_sequence_ids[6], 0, 0, 0, 0);
+			kernel_dynamic_walk(local._keyHotspotId, 218, 152, FACING_NORTHEAST);
 		}
 		if (global[kRegisterOpen]) {
 			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
 			kernel_seq_depth(g_sequence_ids[3], 3);
-			_scene->_hotspots.activate(words_padlock_key, false);
+			kernel_flip_hotspot(words_padlock_key, false);
 		}
 	} else if (global[kRegisterOpen]) {
 		if (object[OBJ_PADLOCK_KEY].location == room_id) {
-			_scene->_hotspots.activate(words_padlock_key, true);
+			kernel_flip_hotspot(words_padlock_key, true);
 			g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, -2);
 			kernel_seq_depth(g_sequence_ids[5], 3);
 		} else {
-			_scene->_hotspots.activate(words_padlock_key, false);
+			kernel_flip_hotspot(words_padlock_key, false);
 			g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
 			kernel_seq_depth(g_sequence_ids[3], 3);
 		}
 	} else
-		_scene->_hotspots.activate(words_padlock_key, false);
+		kernel_flip_hotspot(words_padlock_key, false);
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
 		player.x = 144;
@@ -111,7 +111,7 @@ static void room_512_parser() {
 			case 1:
 				g_engine->_soundManager->command(9, 0);
 				kernel_seq_delete(g_sequence_ids[1]);
-				_scene->_dynamicHotspots.remove(local._fishingRodHotspotId);
+				kernel_delete_dynamic(local._fishingRodHotspotId);
 				inter_give_to_player(OBJ_FISHING_ROD);
 				object_examine(OBJ_FISHING_ROD, 51217, 0);
 				break;
@@ -173,7 +173,7 @@ static void room_512_parser() {
 			case 5:
 				g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], false, 14, 0, 0, 0);
 				kernel_seq_depth(g_sequence_ids[5], 3);
-				_scene->_hotspots.activate(words_padlock_key, true);
+				kernel_flip_hotspot(words_padlock_key, true);
 				kernel_timing_trigger(60, 6);
 				break;
 
@@ -210,7 +210,7 @@ static void room_512_parser() {
 				kernel_seq_delete(g_sequence_ids[5]);
 				g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 12, 0, 0, 1);
 				kernel_seq_depth(g_sequence_ids[4], 3);
-				_scene->_hotspots.activate(words_padlock_key, false);
+				kernel_flip_hotspot(words_padlock_key, false);
 				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
@@ -246,12 +246,12 @@ static void room_512_parser() {
 			case 1:
 				if (Common::Point(player.x, player.y) == Common::Point(218, 152)) {
 					kernel_seq_delete(g_sequence_ids[6]);
-					_scene->_dynamicHotspots.remove(local._keyHotspotId);
+					kernel_delete_dynamic(local._keyHotspotId);
 				} else {
 					kernel_seq_delete(g_sequence_ids[5]);
 					g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
 					kernel_seq_depth(g_sequence_ids[3], 3);
-					_scene->_hotspots.activate(words_padlock_key, false);
+					kernel_flip_hotspot(words_padlock_key, false);
 				}
 				g_engine->_soundManager->command(9, 0);
 				inter_give_to_player(OBJ_PADLOCK_KEY);
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index 59b63f07255..411df287cb4 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -38,7 +38,7 @@ static void room_601_init() {
 
 	if (global[kLaserHoleIsThere]) {
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, -2);
-		_scene->_dynamicHotspots.add(words_laser_beam, words_look_at, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
+		kernel_add_dynamic(words_laser_beam, words_look_at, 0, g_sequence_ids[1], 0, 0, 0, 0);
 	}
 
 	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index 106cffff03b..f45b17b925d 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -56,11 +56,11 @@ static void room_602_init() {
 		kernel_seq_depth(g_sequence_ids[1], 9);
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 		kernel_seq_depth(g_sequence_ids[4], 9);
-		int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(80, 134), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_laser_beam, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 80, 134, FACING_NORTHEAST);
 		kernel_load_variant(1);
 	} else
-		_scene->_hotspots.activate(words_hole, false);
+		kernel_flip_hotspot(words_hole, false);
 
 	if (global[kSafeStatus] == 0) {
 		local._lastSpriteIdx = g_sprite_ids[2];
@@ -78,17 +78,17 @@ static void room_602_init() {
 
 	local._lastSequenceIdx = kernel_seq_stamp(local._lastSpriteIdx, false, local._cycleIndex);
 	kernel_seq_depth(local._lastSequenceIdx, 14);
-	int idx = _scene->_dynamicHotspots.add(words_safe, words_walkto, local._lastSequenceIdx, Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(185, 113), FACING_NORTHWEST);
+	int idx = kernel_add_dynamic(words_safe, words_walkto, 0, local._lastSequenceIdx, 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 185, 113, FACING_NORTHWEST);
 
 	if (object_is_here(OBJ_DOOR_KEY)) {
 		g_sprite_ids[6] = kernel_load_series(kernel_name('k', -1), 0);
 		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, -1);
 		kernel_seq_depth(g_sequence_ids[6], 15);
 		if (global[kSafeStatus] == 0 || global[kSafeStatus] == 2)
-			_scene->_hotspots.activate(words_door_key, false);
+			kernel_flip_hotspot(words_door_key, false);
 	} else
-		_scene->_hotspots.activate(words_door_key, false);
+		kernel_flip_hotspot(words_door_key, false);
 
 	if (previous_room == 603) {
 		player.x = 228;
@@ -138,7 +138,7 @@ static void handleSafeActions() {
 				local._lastSequenceIdx = kernel_seq_forward(local._lastSpriteIdx, false, 12, 0, 0, 1);
 				kernel_seq_depth(local._lastSequenceIdx, 14);
 				if (object[OBJ_DOOR_KEY].location == room_id)
-					_scene->_hotspots.activate(words_door_key, true);
+					kernel_flip_hotspot(words_door_key, true);
 
 				kernel_seq_trigger(local._lastSequenceIdx,
 					SEQUENCE_TRIGGER_EXPIRE, 0, 2);
@@ -153,7 +153,7 @@ static void handleSafeActions() {
 			local._lastSequenceIdx = kernel_seq_pingpong(local._lastSpriteIdx, false, 12, 0, 0, 1);
 			kernel_seq_depth(local._lastSequenceIdx, 14);
 			if (object[OBJ_DOOR_KEY].location == room_id)
-				_scene->_hotspots.activate(words_door_key, false);
+				kernel_flip_hotspot(words_door_key, false);
 
 			kernel_seq_trigger(local._lastSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
 		}
@@ -165,8 +165,8 @@ static void handleSafeActions() {
 		local._lastSequenceIdx = kernel_seq_stamp(local._lastSpriteIdx, false, local._cycleIndex);
 		kernel_seq_depth(local._lastSequenceIdx, 14);
 		kernel_seq_timeout(synxIdx, local._lastSequenceIdx);
-		int idx = _scene->_dynamicHotspots.add(words_safe, words_walkto, local._lastSequenceIdx, Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(185, 113), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_safe, words_walkto, 0, local._lastSequenceIdx, 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 185, 113, FACING_NORTHWEST);
 		if (local._safeMode == 3) {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x2F3), 0, 0, 0x1110, 120, 0, 34);
@@ -239,12 +239,12 @@ static void room_602_parser() {
 			local._lastSpriteIdx = g_sprite_ids[3];
 			local._lastSequenceIdx = kernel_seq_stamp(local._lastSpriteIdx, false, -1);
 			kernel_seq_depth(local._lastSequenceIdx, 14);
-			int idx = _scene->_dynamicHotspots.add(words_safe, words_walkto, local._lastSequenceIdx, Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(185, 113), FACING_NORTHWEST);
+			int idx = kernel_add_dynamic(words_safe, words_walkto, 0, local._lastSequenceIdx, 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 185, 113, FACING_NORTHWEST);
 			g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 			kernel_seq_depth(g_sequence_ids[4], 9);
-			idx = _scene->_dynamicHotspots.add(words_laser_beam, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(80, 134), FACING_NORTHEAST);
+			idx = kernel_add_dynamic(words_laser_beam, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 80, 134, FACING_NORTHEAST);
 			kernel_timing_trigger(60, 2);
 		}
 		break;
@@ -273,7 +273,7 @@ static void room_602_parser() {
 
 		case 1:
 			kernel_seq_delete(g_sequence_ids[6]);
-			_scene->_hotspots.activate(words_door_key, false);
+			kernel_flip_hotspot(words_door_key, false);
 			g_engine->_soundManager->command(9, 0);
 			inter_give_to_player(OBJ_DOOR_KEY);
 			break;
diff --git a/engines/mads/nebular/rooms/room603.cpp b/engines/mads/nebular/rooms/room603.cpp
index b32fb4bc6a4..7c5b7038b7b 100644
--- a/engines/mads/nebular/rooms/room603.cpp
+++ b/engines/mads/nebular/rooms/room603.cpp
@@ -45,8 +45,8 @@ static void room_603_init() {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('c', -1), 0);
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, -1);
 		kernel_seq_depth(g_sequence_ids[1], 1);
-		local._compactCaseHotspotId = _scene->_dynamicHotspots.add(words_compact_case, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._compactCaseHotspotId, Common::Point(250, 152), FACING_SOUTHEAST);
+		local._compactCaseHotspotId = kernel_add_dynamic(words_compact_case, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._compactCaseHotspotId, 250, 152, FACING_SOUTHEAST);
 	}
 
 	if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_NOTE].location == room_id)) {
@@ -54,8 +54,8 @@ static void room_603_init() {
 		g_sprite_ids[2] = kernel_load_series(kernel_name('p', -1), 0);
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
 		kernel_seq_depth(g_sequence_ids[2], 14);
-		local._noteHotspotId = _scene->_dynamicHotspots.add(words_note, words_walkto, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._noteHotspotId, Common::Point(242, 118), FACING_NORTHEAST);
+		local._noteHotspotId = kernel_add_dynamic(words_note, words_walkto, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._noteHotspotId, 242, 118, FACING_NORTHEAST);
 	}
 
 	if (previous_room != RETURNING_FROM_DIALOG) {
@@ -85,7 +85,7 @@ static void room_603_parser() {
 			case 1:
 				g_engine->_soundManager->command(9, 0);
 				kernel_seq_delete(g_sequence_ids[1]);
-				_scene->_dynamicHotspots.remove(local._compactCaseHotspotId);
+				kernel_delete_dynamic(local._compactCaseHotspotId);
 				inter_give_to_player(OBJ_COMPACT_CASE);
 				object_examine(OBJ_COMPACT_CASE, 60330, 0);
 				break;
@@ -111,7 +111,7 @@ static void room_603_parser() {
 			} else if (kernel.trigger == 1) {
 				g_engine->_soundManager->command(9, 0);
 				kernel_seq_delete(g_sequence_ids[2]);
-				_scene->_dynamicHotspots.remove(local._noteHotspotId);
+				kernel_delete_dynamic(local._noteHotspotId);
 				inter_give_to_player(OBJ_NOTE);
 				kernel_seq_delete(g_sequence_ids[3]);
 				player.clock = kernel.clock - player.frame_delay;
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index 67a50eb535d..98766c2b280 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -52,8 +52,8 @@ static void room_604_init() {
 
 	if (global[kTimebombStatus] == 1) {
 		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, -1);
-		local._timebombHotspotId = _scene->_dynamicHotspots.add(words_timebomb, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._timebombHotspotId, Common::Point(166, 118), FACING_NORTHEAST);
+		local._timebombHotspotId = kernel_add_dynamic(words_timebomb, words_walkto, 0, g_sequence_ids[6], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._timebombHotspotId, 166, 118, FACING_NORTHEAST);
 	}
 
 	if (kernel.teleported_in)
@@ -186,14 +186,14 @@ static void handleBombActions() {
 
 	case 1:
 		g_sequence_ids[6] = kernel_seq_stamp(g_sprite_ids[6], false, -1);
-		local._timebombHotspotId = _scene->_dynamicHotspots.add(words_timebomb, words_walkto, g_sequence_ids[6], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._timebombHotspotId, Common::Point(166, 118), FACING_NORTHEAST);
+		local._timebombHotspotId = kernel_add_dynamic(words_timebomb, words_walkto, 0, g_sequence_ids[6], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._timebombHotspotId, 166, 118, FACING_NORTHEAST);
 		inter_move_object(OBJ_TIMEBOMB, room_id);
 		break;
 
 	case 2:
 		kernel_seq_delete(g_sequence_ids[6]);
-		_scene->_dynamicHotspots.remove(local._timebombHotspotId);
+		kernel_delete_dynamic(local._timebombHotspotId);
 		inter_give_to_player(OBJ_TIMEBOMB);
 		break;
 
diff --git a/engines/mads/nebular/rooms/room605.cpp b/engines/mads/nebular/rooms/room605.cpp
index 33001940bd6..b2a7502e3a0 100644
--- a/engines/mads/nebular/rooms/room605.cpp
+++ b/engines/mads/nebular/rooms/room605.cpp
@@ -49,7 +49,7 @@ static void room_605_init() {
 	player.walker_visible = false;
 	player.commands_allowed = false;
 	kernel_timing_trigger(600, 70);
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	section_6_music();
 	g_engine->_soundManager->command(22, 0);
 }
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index 403477d2b64..b900f6698db 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -72,7 +72,7 @@ static void room_607_init() {
 		local._dogEatsRex = false;
 		local._dogTimer = 0;
 	} else
-		_scene->_hotspots.activate(words_obnoxious_dog, false);
+		kernel_flip_hotspot(words_obnoxious_dog, false);
 
 	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -2);
 	kernel_seq_depth(g_sequence_ids[2], 4);
@@ -133,7 +133,7 @@ static void room_607_daemon() {
 		kernel_seq_depth(g_sequence_ids[1], 6);
 		local._dogBarking = false;
 		global[kDogStatus] = DOG_PRESENT;
-		_scene->_hotspots.activate(words_obnoxious_dog, true);
+		kernel_flip_hotspot(words_obnoxious_dog, true);
 	}
 
 	if (!local._dogEatsRex && (game.difficulty != DIFFICULTY_EASY) && !local._animationActive && (global[kDogStatus] == DOG_PRESENT)
@@ -187,10 +187,10 @@ static void room_607_daemon() {
 		}
 	}
 
-	if (player.walking && (game.difficulty != DIFFICULTY_EASY) && !local._shopAvailable && (global[kDogStatus] == DOG_PRESENT) && (_scene->_rails.getNext() > 0)) {
+	if (player.walking && (game.difficulty != DIFFICULTY_EASY) && !local._shopAvailable && (global[kDogStatus] == DOG_PRESENT) && (player.next_special_code > 0)) {
 		player_cancel_command();
 		player_start_walking(268, 72, FACING_NORTHEAST);
-		_scene->_rails.resetNext();
+		player.next_special_code = 0;
 	}
 
 	if ((player.special_code > 0) && (game.difficulty != DIFFICULTY_EASY) && (global[kDogStatus] == DOG_PRESENT) && player.commands_allowed)
@@ -307,7 +307,7 @@ static void handleThrowingBone() {
 		player.clock = kernel_anim[0].next_clock - player.frame_delay;
 
 		if (local._animationMode != 1)
-			_scene->_hotspots.activate(words_obnoxious_dog, false);
+			kernel_flip_hotspot(words_obnoxious_dog, false);
 		else {
 			g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 			kernel_seq_depth(g_sequence_ids[1], 6);
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index 56493daee2f..638e1fc7a51 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -68,8 +68,8 @@ static Scratch local;
 
 static void resetDogVariables() {
 	g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
-	int idx = _scene->_dynamicHotspots.add(words_obnoxious_dog, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-	_scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 142), FACING_EAST);
+	int idx = kernel_add_dynamic(words_obnoxious_dog, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+	kernel_dynamic_walk(idx, 194, 142, FACING_EAST);
 	kernel_seq_depth(g_sequence_ids[5], 4);
 	local._dogBarkingFl = false;
 	local._dogFirstEncounter = false;
@@ -181,16 +181,17 @@ static void room_608_init() {
 	if (object_is_here(OBJ_POLYCEMENT)) {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('g', -1), 0);
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_polycement, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		local._polycementHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(249, 129), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_polycement, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 249, 129, FACING_NORTHEAST);
+		local._polycementHotspotId = idx;
 		kernel_seq_depth(g_sequence_ids[1], 6);
 	}
 
 	if (object_is_here(OBJ_REARVIEW_MIRROR)) {
 		g_sprite_ids[12] = kernel_load_series(kernel_name('m', -1), 0);
 		g_sequence_ids[12] = kernel_seq_stamp(g_sprite_ids[12], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_rearview_mirror, words_walkto, g_sequence_ids[12], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(71, 113), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_rearview_mirror, words_walkto, 0, g_sequence_ids[12], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 71, 113, FACING_NORTHEAST);
 		kernel_seq_depth(g_sequence_ids[12], 15);
 	}
 
@@ -233,37 +234,42 @@ static void room_608_init() {
 		local._carMode = 0;
 		local._dogDeathMode = 0;
 		local._resetPositionsFl = false;
-		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
-		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_car, words_walkto, 0, -1, 99, 69, 82, 25);
+		kernel_dynamic_walk(idx, 96, 132, FACING_NORTHEAST);
+		local._carHotspotId = idx;
 		kernel_run_animation(kernel_name('A', -1), 0);
 	} else if (global[kCarStatus] == CAR_DOWN) {
 		local._carMode = 0;
 		local._dogDeathMode = 0;
 		local._resetPositionsFl = false;
-		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
-		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_car, words_walkto, 0, -1, 100, 100, 82, 25);
+		kernel_dynamic_walk(idx, 96, 132, FACING_NORTHEAST);
+		local._carHotspotId = idx;
 		kernel_run_animation(kernel_name('A', -1), 0);
 		kernel_reset_animation(0, 6);
 	} else if (global[kCarStatus] == CAR_SQUASHES_DOG) {
 		local._carMode = 2;
 		local._dogDeathMode = 0;
 		local._resetPositionsFl = false;
-		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
-		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_car, words_walkto, 0, -1, 99, 69, 82, 25);
+		kernel_dynamic_walk(idx, 96, 132, FACING_NORTHEAST);
+		local._carHotspotId = idx;
 		kernel_run_animation(kernel_name('C', -1), 0);
 	} else if (global[kCarStatus] == CAR_SQUASHES_DOG_AGAIN) {
 		local._carMode = 1;
 		local._dogDeathMode = 2;
 		local._resetPositionsFl = true;
-		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
-		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_car, words_walkto, 0, -1, 99, 69, 82, 25);
+		kernel_dynamic_walk(idx, 96, 132, FACING_NORTHEAST);
+		local._carHotspotId = idx;
 		kernel_run_animation(kernel_name('B', -1), 0);
 	} else {
 		local._carMode = 3;
 		local._dogDeathMode = 2;
 		local._resetPositionsFl = true;
-		int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
-		local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_car, words_walkto, 0, -1, 100, 100, 82, 25);
+		kernel_dynamic_walk(idx, 96, 132, FACING_NORTHEAST);
+		local._carHotspotId = idx;
 		kernel_run_animation(kernel_name('D', -1), 0);
 	}
 
@@ -328,8 +334,8 @@ static void room_608_daemon() {
 				kernel_seq_delete(g_sequence_ids[5]);
 				g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], false, 5, 0, 0, 8);
 				kernel_seq_depth(g_sequence_ids[5], 4);
-				int idx = _scene->_dynamicHotspots.add(words_obnoxious_dog, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-				_scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 142), FACING_EAST);
+				int idx = kernel_add_dynamic(words_obnoxious_dog, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+				kernel_dynamic_walk(idx, 194, 142, FACING_EAST);
 				local._barkCount = 0;
 				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_SPRITE, 2, 100);
 				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
@@ -392,7 +398,7 @@ static void room_608_daemon() {
 		local._dogRunTimer = 0;
 	} else {
 		local._dogSafeFl = false;
-		if (player.walking && (game.difficulty == DIFFICULTY_HARD) && local._dogActiveFl && (_scene->_rails.getNext() > 0) && local._dogUnderCar)
+		if (player.walking && (game.difficulty == DIFFICULTY_HARD) && local._dogActiveFl && (player.next_special_code > 0) && local._dogUnderCar)
 			local._dogSafeFl = true;
 	}
 
@@ -593,10 +599,10 @@ static void room_608_daemon() {
 		}
 	}
 
-	if (player.walking && (game.difficulty == DIFFICULTY_HARD) && local._dogActiveFl && (_scene->_rails.getNext() > 0)) {
+	if (player.walking && (game.difficulty == DIFFICULTY_HARD) && local._dogActiveFl && (player.next_special_code > 0)) {
 		player_cancel_command();
 		player_start_walking(194, 142, FACING_EAST);
-		_scene->_rails.resetNext();
+		player.next_special_code = 0;
 		if (local._dogUnderCar)
 			local._dogSafeFl = true;
 	}
@@ -754,9 +760,10 @@ static void room_608_parser() {
 			if (local._carMoveMode != 0)
 				kernel_timing_trigger(1, 2);
 			else {
-				_scene->_dynamicHotspots.remove(local._carHotspotId);
-				int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(100, 100, 100 + 82, 100 + 25));
-				local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+				kernel_delete_dynamic(local._carHotspotId);
+				int idx = kernel_add_dynamic(words_car, words_walkto, 0, -1, 100, 100, 82, 25);
+				kernel_dynamic_walk(idx, 96, 132, FACING_NORTHEAST);
+				local._carHotspotId = idx;
 				if (global[kCarStatus] == CAR_SQUASHES_DOG)
 					kernel_timing_trigger(120, 3);
 				else {
@@ -823,9 +830,10 @@ static void room_608_parser() {
 				local._carMode = 3;
 				local._dogDeathMode = 2;
 			}
-			_scene->_dynamicHotspots.remove(local._carHotspotId);
-			int idx = _scene->_dynamicHotspots.add(words_car, words_walkto, -1, Common::Rect(99, 69, 99 + 82, 69 + 25));
-			local._carHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(96, 132), FACING_NORTHEAST);
+			kernel_delete_dynamic(local._carHotspotId);
+			int idx = kernel_add_dynamic(words_car, words_walkto, 0, -1, 99, 69, 82, 25);
+			kernel_dynamic_walk(idx, 96, 132, FACING_NORTHEAST);
+			local._carHotspotId = idx;
 			player.commands_allowed = true;
 		}
 		break;
@@ -885,7 +893,7 @@ static void room_608_parser() {
 		case 1:
 			g_engine->_soundManager->command(9, 0);
 			kernel_seq_delete(g_sequence_ids[1]);
-			_scene->_dynamicHotspots.remove(local._polycementHotspotId);
+			kernel_delete_dynamic(local._polycementHotspotId);
 			break;
 
 		case 2:
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index 3302e69fb8c..88717ee56e9 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -96,7 +96,7 @@ static void room_609_daemon() {
 		break;
 
 	case 61:
-		_scene->_hotspots.activate(words_video_store_door, false);
+		kernel_flip_hotspot(words_video_store_door, false);
 		player_walk(101, 100, FACING_EAST);
 		kernel_timing_trigger(180, 62);
 		break;
@@ -104,7 +104,7 @@ static void room_609_daemon() {
 	case 62:
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 7, 0, 0, 1);
-		_scene->_hotspots.activate(words_video_store_door, true);
+		kernel_flip_hotspot(words_video_store_door, true);
 		kernel_seq_depth(g_sequence_ids[2], 9);
 		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 63);
 		break;
@@ -208,7 +208,7 @@ static void enterStore() {
 		break;
 
 	case 6:
-		_scene->_hotspots.activate(words_video_store_door, false);
+		kernel_flip_hotspot(words_video_store_door, false);
 		if (local._videoDoorMode == 1) {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x307), 0, 0, 0x1110, 180, 0, 34);
@@ -225,7 +225,7 @@ static void enterStore() {
 		break;
 
 	case 8:
-		_scene->_hotspots.activate(words_video_store_door, true);
+		kernel_flip_hotspot(words_video_store_door, true);
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
 		kernel_seq_depth(g_sequence_ids[2], 9);
 		global[kBeenInVideoStore] = true;
diff --git a/engines/mads/nebular/rooms/room610.cpp b/engines/mads/nebular/rooms/room610.cpp
index 13a205ba639..cdadf37041c 100644
--- a/engines/mads/nebular/rooms/room610.cpp
+++ b/engines/mads/nebular/rooms/room610.cpp
@@ -58,8 +58,8 @@ static void room_610_init() {
 
 	if (object[OBJ_PHONE_HANDSET].location == room_id) {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
-		local._handsetHotspotId = _scene->_dynamicHotspots.add(words_phone_handset, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(local._handsetHotspotId, Common::Point(132, 121), FACING_NORTHWEST);
+		local._handsetHotspotId = kernel_add_dynamic(words_phone_handset, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(local._handsetHotspotId, 132, 121, FACING_NORTHWEST);
 		if ((global[kHandsetCellStatus] == 2) && (game.difficulty == DIFFICULTY_HARD) && !global[kDurafailRecharged])
 			global[kHandsetCellStatus] = 1;
 	}
@@ -116,7 +116,7 @@ static void room_610_parser() {
 			case 1:
 				g_engine->_soundManager->command(9, 0);
 				kernel_seq_delete(g_sequence_ids[1]);
-				_scene->_dynamicHotspots.remove(local._handsetHotspotId);
+				kernel_delete_dynamic(local._handsetHotspotId);
 				inter_give_to_player(OBJ_PHONE_HANDSET);
 				object_examine(OBJ_PHONE_HANDSET, 61017, 0);
 				break;
@@ -145,8 +145,8 @@ static void room_610_parser() {
 
 		case 1:
 			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 0);
-			local._handsetHotspotId = _scene->_dynamicHotspots.add(words_phone_handset, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(local._handsetHotspotId, Common::Point(132, 121), FACING_NORTHWEST);
+			local._handsetHotspotId = kernel_add_dynamic(words_phone_handset, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+			kernel_dynamic_walk(local._handsetHotspotId, 132, 121, FACING_NORTHWEST);
 			inter_move_object(OBJ_PHONE_HANDSET, room_id);
 			break;
 
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index 9c750f3e680..610e490d759 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -69,7 +69,7 @@ static void handleRatMoves() {
 	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 12, 0, 0, 1);
 	kernel_seq_range(g_sequence_ids[1], 11, -2);
 	local._ratTimer = player.clock;
-	_scene->_dynamicHotspots.remove(local._ratHotspotId);
+	kernel_delete_dynamic(local._ratHotspotId);
 }
 
 static void handleTrading() {
@@ -90,7 +90,7 @@ static void setDialogNode(int node) {
 
 	switch (node) {
 	case 0:
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		local._duringDialogFl = false;
 		local._hermitDialogNode = 0;
 		break;
@@ -959,7 +959,7 @@ static void room_611_init() {
 		local._stickFingerFl = false;
 	} else {
 		local._hermitMode = 0;
-		_scene->_hotspots.activate(words_hermit, false);
+		kernel_flip_hotspot(words_hermit, false);
 	}
 
 	// WORKAROUND: Fix original adding 'give batteries' option even if you don't have them
@@ -975,7 +975,7 @@ static void room_611_init() {
 
 		switch (local._hermitDialogNode) {
 		case 0:
-			_scene->_userInterface.setup(kInputBuildingSentences);
+			kernel_set_interface_mode(kInputBuildingSentences);
 			local._hermitDialogNode = 1;
 			break;
 
@@ -1011,8 +1011,9 @@ static void room_611_daemon() {
 	} else if (kernel.trigger == 81) {
 		int syncId = g_sequence_ids[1];
 		g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 20, 0, 0, 0);
-		int idx = _scene->_dynamicHotspots.add(words_rat, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		local._ratHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(272, 154), FACING_SOUTHEAST);
+		int idx = kernel_add_dynamic(words_rat, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 272, 154, FACING_SOUTHEAST);
+		local._ratHotspotId = idx;
 		kernel_seq_range(g_sequence_ids[1], 9, 10);
 		kernel_seq_timeout(syncId, g_sequence_ids[1]);
 		kernel_seq_depth(g_sequence_ids[1], 1);
@@ -1320,7 +1321,7 @@ static void room_611_daemon() {
 			local._startTradingFl = false;
 			local._nextFrame = 52;
 			global[kHasTalkedToHermit] = true;
-			_scene->_hotspots.activate(words_hermit, false);
+			kernel_flip_hotspot(words_hermit, false);
 		} else {
 			player.commands_allowed = true;
 			local._hermitMode = 1;
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index 705f4d28bb9..cbd6b9a86d6 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -103,8 +103,8 @@ static void room_612_init() {
 		g_sprite_ids[5] = kernel_load_series(kernel_name('f', -1), 0);
 		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, -1);
 		kernel_seq_depth(g_sequence_ids[5], 1);
-		int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(34, 117), FACING_SOUTHEAST);
+		int idx = kernel_add_dynamic(words_fishing_line, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 34, 117, FACING_SOUTHEAST);
 	}
 
 	if (global[kBoatRaised])
diff --git a/engines/mads/nebular/rooms/room620.cpp b/engines/mads/nebular/rooms/room620.cpp
index 432c3c84372..19a77bc3bdb 100644
--- a/engines/mads/nebular/rooms/room620.cpp
+++ b/engines/mads/nebular/rooms/room620.cpp
@@ -37,7 +37,7 @@ static void room_620_init() {
 	player.commands_allowed = false;
 	player.walker_visible = false;
 	kernel_timing_trigger(30, 70);
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	section_6_music();
 }
 
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index 068a697310e..2c3fea8180a 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -88,12 +88,12 @@ static void room_701_init() {
 	{
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
 		kernel_seq_depth(g_sequence_ids[2], 9);
-		int idx = _scene->_dynamicHotspots.add(words_boat, words_climb_into, g_sequence_ids[2], Common::Rect());
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(231, 127), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_boat, words_climb_into, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 231, 127, FACING_NORTH);
 		break;
 	}
 	case BOAT_GONE:
-		_scene->_hotspots.activate(words_boat, false);
+		kernel_flip_hotspot(words_boat, false);
 		break;
 	default:
 		break;
@@ -102,8 +102,9 @@ static void room_701_init() {
 	if (global[kLineStatus] == LINE_DROPPED || global[kLineStatus] == LINE_TIED) {
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -1);
 		kernel_seq_depth(g_sequence_ids[3], 8);
-		int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		local._fishingLineId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(234, 129), FACING_NORTHEAST);
+		int idx = kernel_add_dynamic(words_fishing_line, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 234, 129, FACING_NORTHEAST);
+		local._fishingLineId = idx;
 	}
 
 	if (previous_room == 702) {
@@ -190,8 +191,8 @@ static void room_701_daemon() {
 		player.clock = kernel.clock - player.frame_delay;
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
 		kernel_seq_depth(g_sequence_ids[2], 9);
-		int idx = _scene->_dynamicHotspots.add(words_boat, words_climb_into, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(234, 129), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_boat, words_climb_into, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 234, 129, FACING_NORTH);
 		global[kBoatStatus] = BOAT_TIED;
 		player.commands_allowed = true;
 	}
@@ -289,8 +290,8 @@ static void room_701_parser() {
 				player.commands_allowed = false;
 				kernel_seq_delete(g_sequence_ids[4]);
 				kernel_seq_delete(g_sequence_ids[3]);
-				_scene->_dynamicHotspots.remove(local._fishingLineId);
-				_scene->_hotspots.activate(words_boat, false);
+				kernel_delete_dynamic(local._fishingLineId);
+				kernel_flip_hotspot(words_boat, false);
 				player.walker_visible = false;
 				kernel_run_animation(kernel_name('E', -1), 1);
 				break;
@@ -301,8 +302,8 @@ static void room_701_parser() {
 				player.clock = kernel_anim[0].next_clock - player.frame_delay;
 				g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
 				kernel_seq_depth(g_sequence_ids[2], 9);
-				int idx = _scene->_dynamicHotspots.add(words_boat, words_climb_into, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-				_scene->_dynamicHotspots.setPosition(idx, Common::Point(231, 127), FACING_NORTH);
+				int idx = kernel_add_dynamic(words_boat, words_climb_into, 0, g_sequence_ids[2], 0, 0, 0, 0);
+				kernel_dynamic_walk(idx, 231, 127, FACING_NORTH);
 				kernel_timing_trigger(15, 2);
 			}
 			break;
diff --git a/engines/mads/nebular/rooms/room703.cpp b/engines/mads/nebular/rooms/room703.cpp
index e9821c43049..348ad8948e8 100644
--- a/engines/mads/nebular/rooms/room703.cpp
+++ b/engines/mads/nebular/rooms/room703.cpp
@@ -92,7 +92,7 @@ static void handleBottleInterface() {
 }
 
 static void setBottleSequence() {
-	_scene->_userInterface.setup(kInputBuildingSentences);
+	kernel_set_interface_mode(kInputBuildingSentences);
 	player.commands_allowed = false;
 	if (local._boatDir == 2)
 		local._curSequence = 6;
@@ -123,7 +123,7 @@ static void handleFillBottle(int quote) {
 		break;
 
 	case 0x315:
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		break;
 
 	default:
@@ -149,7 +149,7 @@ static void room_703_init() {
 	local._boatFrame = -1;
 
 	if (!global[kMonsterAlive])
-		_scene->_hotspots.activate(words_sea_monster, false);
+		kernel_flip_hotspot(words_sea_monster, false);
 
 	if (previous_room == 704) {
 		player.commands_allowed = false;
@@ -463,7 +463,7 @@ static void room_703_daemon() {
 				break;
 
 			case 126:
-				_scene->_hotspots.activate(words_sea_monster, false);
+				kernel_flip_hotspot(words_sea_monster, false);
 				global[kMonsterAlive] = false;
 				kernel_abort_animation(0);
 				local._monsterMode = 0;
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index 11dc69c18d3..8daf58d8515 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -84,7 +84,7 @@ static void handleBottleInterface() {
 }
 
 static void setBottleSequence() {
-	_scene->_userInterface.setup(kInputBuildingSentences);
+	kernel_set_interface_mode(kInputBuildingSentences);
 	player.commands_allowed = false;
 	if (local._boatDirection == 2)
 		local._animationMode = 6;
@@ -115,7 +115,7 @@ static void handleFillBottle(int quote) {
 		break;
 
 	case 0x315:
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		break;
 
 	default:
@@ -135,8 +135,9 @@ static void room_704_init() {
 			kernel_seq_loc(g_sequence_ids[1], 190, 122);
 			kernel_seq_depth(g_sequence_ids[1], 2);
 		}
-		int idx = _scene->_dynamicHotspots.add(words_bottle, words_look_at, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		local._bottleHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(-2, 0), FACING_NONE);
+		int idx = kernel_add_dynamic(words_bottle, words_look_at, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, -2, 0, FACING_NONE);
+		local._bottleHotspotId = idx;
 	}
 
 	player.walker_visible = false;
@@ -247,7 +248,7 @@ static void room_704_daemon() {
 			case 90:
 				if (local._takeBottleFl) {
 					kernel_seq_delete(g_sequence_ids[1]);
-					_scene->_dynamicHotspots.remove(local._bottleHotspotId);
+					kernel_delete_dynamic(local._bottleHotspotId);
 					inter_give_to_player(OBJ_BOTTLE);
 					g_engine->_soundManager->command(15, 0);
 					object_examine(OBJ_BOTTLE, 70415, 0);
@@ -265,7 +266,7 @@ static void room_704_daemon() {
 			case 98:
 				if (local._takeBottleFl) {
 					kernel_seq_delete(g_sequence_ids[1]);
-					_scene->_dynamicHotspots.remove(local._bottleHotspotId);
+					kernel_delete_dynamic(local._bottleHotspotId);
 					inter_give_to_player(OBJ_BOTTLE);
 					g_engine->_soundManager->command(15, 0);
 					object_examine(OBJ_BOTTLE, 70415, 0);
diff --git a/engines/mads/nebular/rooms/room705.cpp b/engines/mads/nebular/rooms/room705.cpp
index 048801ecdc5..5b99c758763 100644
--- a/engines/mads/nebular/rooms/room705.cpp
+++ b/engines/mads/nebular/rooms/room705.cpp
@@ -79,7 +79,7 @@ static void handleBottleInterface() {
 }
 
 static void setBottleSequence() {
-	_scene->_userInterface.setup(kInputBuildingSentences);
+	kernel_set_interface_mode(kInputBuildingSentences);
 	player.commands_allowed = false;
 	kernel_seq_delete(g_sequence_ids[3]);
 	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
@@ -109,7 +109,7 @@ static void handleFillBottle(int quote) {
 		break;
 
 	case 0x315:
-		_scene->_userInterface.setup(kInputBuildingSentences);
+		kernel_set_interface_mode(kInputBuildingSentences);
 		break;
 
 	default:
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index 735544e106c..be854bebd7c 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -84,14 +84,14 @@ static void handleTakeVase() {
 	case 1:
 		g_engine->_soundManager->command(9, 0);
 		kernel_seq_delete(g_sequence_ids[1]);
-		_scene->_dynamicHotspots.remove(local._vaseHotspotId);
+		kernel_delete_dynamic(local._vaseHotspotId);
 		inter_give_to_player(OBJ_VASE);
 		if (local._vaseMode == 1) {
 			g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 			kernel_seq_depth(g_sequence_ids[4], 4);
 			kernel_seq_loc(g_sequence_ids[4], 195, 99);
-			int idx = _scene->_dynamicHotspots.add(words_bottle, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(175, 124), FACING_SOUTHEAST);
+			int idx = kernel_add_dynamic(words_bottle, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 175, 124, FACING_SOUTHEAST);
 			inter_move_object(OBJ_BOTTLE, room_id);
 		}
 		break;
@@ -119,14 +119,15 @@ static void room_706_init() {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('v', -1), 0);
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 		kernel_seq_depth(g_sequence_ids[1], 4);
-		int idx = _scene->_dynamicHotspots.add(words_vase, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		local._vaseHotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(175, 124), FACING_SOUTHEAST);
+		int idx = kernel_add_dynamic(words_vase, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 175, 124, FACING_SOUTHEAST);
+		local._vaseHotspotId = idx;
 	} else if (object_is_here(OBJ_BOTTLE)) {
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 		kernel_seq_depth(g_sequence_ids[4], 4);
 		kernel_seq_loc(g_sequence_ids[4], 195, 99);
-		int idx = _scene->_dynamicHotspots.add(words_bottle, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(175, 124), FACING_SOUTHEAST);
+		int idx = kernel_add_dynamic(words_bottle, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 175, 124, FACING_SOUTHEAST);
 	}
 
 	player.walker_visible = true;
@@ -201,8 +202,8 @@ static void room_706_daemon() {
 					g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 					kernel_seq_depth(g_sequence_ids[4], 4);
 					kernel_seq_loc(g_sequence_ids[4], 195, 99);
-					int idx = _scene->_dynamicHotspots.add(words_bottle, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-					_scene->_dynamicHotspots.setPosition(idx, Common::Point(175, 124), FACING_SOUTHEAST);
+					int idx = kernel_add_dynamic(words_bottle, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+					kernel_dynamic_walk(idx, 175, 124, FACING_SOUTHEAST);
 				}
 			}
 		}
diff --git a/engines/mads/nebular/rooms/room710.cpp b/engines/mads/nebular/rooms/room710.cpp
index 3cc8634a089..98d66e6f9c3 100644
--- a/engines/mads/nebular/rooms/room710.cpp
+++ b/engines/mads/nebular/rooms/room710.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_710_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 
 	if (object[OBJ_VASE].location == 706) {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('g', -1), 0);
diff --git a/engines/mads/nebular/rooms/room751.cpp b/engines/mads/nebular/rooms/room751.cpp
index 25466a9924f..776324ff7ca 100644
--- a/engines/mads/nebular/rooms/room751.cpp
+++ b/engines/mads/nebular/rooms/room751.cpp
@@ -50,8 +50,8 @@ static void room_751_init() {
 	if (global[kLineStatus] == 2 || global[kLineStatus] == 3) {
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -1);
 		kernel_seq_depth(g_sequence_ids[3], 7);
-		int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(268, 140), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_fishing_line, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 268, 140, FACING_NORTHWEST);
 	}
 
 	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
@@ -88,8 +88,8 @@ static void room_751_init() {
 	} else if (global[kLineStatus] == 2) {
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -1);
 		kernel_seq_depth(g_sequence_ids[3], 7);
-		int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(268, 140), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_fishing_line, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 268, 140, FACING_NORTHWEST);
 	}
 
 	if (kernel.teleported_in) {
@@ -315,8 +315,8 @@ static void room_751_parser() {
 				player.walker_visible = true;
 				g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -1);
 				kernel_seq_depth(g_sequence_ids[3], 7);
-				int idx = _scene->_dynamicHotspots.add(words_fishing_line, words_walkto, g_sequence_ids[3], Common::Rect(0, 0, 0, 0));
-				_scene->_dynamicHotspots.setPosition(idx, Common::Point(268, 140), FACING_NORTHWEST);
+				int idx = kernel_add_dynamic(words_fishing_line, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
+				kernel_dynamic_walk(idx, 268, 140, FACING_NORTHWEST);
 				kernel_message_purge();
 				inter_move_object(OBJ_FISHING_LINE, room_id);
 				local._rexHandingLine = false;
diff --git a/engines/mads/nebular/rooms/room752.cpp b/engines/mads/nebular/rooms/room752.cpp
index 3fe911c6264..a23aa35275d 100644
--- a/engines/mads/nebular/rooms/room752.cpp
+++ b/engines/mads/nebular/rooms/room752.cpp
@@ -58,15 +58,16 @@ static void room_752_init() {
 		g_sprite_ids[13] = kernel_load_series(kernel_name('i', -1), 0);
 		g_sequence_ids[13] = kernel_seq_stamp(g_sprite_ids[13], false, 1);
 		kernel_seq_depth(g_sequence_ids[13], 8);
-		int idx = _scene->_dynamicHotspots.add(words_id_card, words_walkto, g_sequence_ids[13], Common::Rect(0, 0, 0, 0));
-		local._cardId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(234, 135), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_id_card, words_walkto, 0, g_sequence_ids[13], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 234, 135, FACING_NORTH);
+		local._cardId = idx;
 	}
 
 	if (global[kLaserHoleIsThere]) {
 		g_sequence_ids[14] = kernel_seq_stamp(g_sprite_ids[14], false, 1);
 		kernel_seq_depth(g_sequence_ids[14], 13);
-		int idx = _scene->_dynamicHotspots.add(words_laser_beam, words_look_at, g_sequence_ids[14], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(215, 130), FACING_NORTHWEST);
+		int idx = kernel_add_dynamic(words_laser_beam, words_look_at, 0, g_sequence_ids[14], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 215, 130, FACING_NORTHWEST);
 	}
 
 	if (global[kTeleporterCommand]) {
@@ -131,7 +132,7 @@ static void room_752_parser() {
 			g_engine->_soundManager->command(15, 0);
 			kernel_seq_delete(g_sequence_ids[13]);
 			inter_give_to_player(OBJ_ID_CARD);
-			_scene->_dynamicHotspots.remove(local._cardId);
+			kernel_delete_dynamic(local._cardId);
 			object_examine(OBJ_ID_CARD, 830, 0);
 			break;
 		case 2:
diff --git a/engines/mads/nebular/rooms/room802.cpp b/engines/mads/nebular/rooms/room802.cpp
index ac825738996..fec9ae19ea2 100644
--- a/engines/mads/nebular/rooms/room802.cpp
+++ b/engines/mads/nebular/rooms/room802.cpp
@@ -77,15 +77,15 @@ static void room_802_init() {
 	if ((global[kRemoteOnGround]) && (!player_has(OBJ_REMOTE))) {
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 		kernel_seq_depth(g_sequence_ids[4], 8);
-		int idx = _scene->_dynamicHotspots.add(words_remote, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(107, 99), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_remote, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 107, 99, FACING_NORTH);
 	}
 
 	if (!player_has(OBJ_SHIELD_MODULATOR) && !global[kShieldModInstalled]) {
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 		kernel_seq_depth(g_sequence_ids[1], 8);
-		int idx = _scene->_dynamicHotspots.add(words_shield_modulator, words_walkto, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(93, 97), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_shield_modulator, words_walkto, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 93, 97, FACING_NORTH);
 	}
 	section_8_music();
 }
@@ -102,8 +102,8 @@ static void room_802_daemon() {
 	if (kernel.trigger == 71) {
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 		kernel_seq_depth(g_sequence_ids[4], 8);
-		int idx = _scene->_dynamicHotspots.add(words_remote, words_walkto, g_sequence_ids[4], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(107, 99), FACING_NORTH);
+		int idx = kernel_add_dynamic(words_remote, words_walkto, 0, g_sequence_ids[4], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 107, 99, FACING_NORTH);
 
 		global[kRemoteSequenceRan] = true;
 		global[kRemoteOnGround] = true;
diff --git a/engines/mads/nebular/rooms/room803.cpp b/engines/mads/nebular/rooms/room803.cpp
index f5a2a3ed497..86b2292867d 100644
--- a/engines/mads/nebular/rooms/room803.cpp
+++ b/engines/mads/nebular/rooms/room803.cpp
@@ -43,8 +43,8 @@ static void room_803_init() {
 	if (global[kHoppyDead]) {
 		g_sprite_ids[7] = kernel_load_series(kernel_name('e', 1), 0);
 		g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, 1);
-		int idx = _scene->_dynamicHotspots.add(words_guts, words_walkto, g_sequence_ids[7], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(66, 123), FACING_SOUTH);
+		int idx = kernel_add_dynamic(words_guts, words_walkto, 0, g_sequence_ids[7], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 66, 123, FACING_SOUTH);
 	}
 
 	if (!global[kBeamIsUp] && !global[kReturnFromCut] && (!global[kFromCockpit] || global[kExitShip])) {
@@ -137,8 +137,8 @@ static void room_803_daemon() {
 			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 101);
 		} else {
 			g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, -2);
-			int idx = _scene->_dynamicHotspots.add(words_guts, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-			_scene->_dynamicHotspots.setPosition(idx, Common::Point(66, 123), FACING_SOUTH);
+			int idx = kernel_add_dynamic(words_guts, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+			kernel_dynamic_walk(idx, 66, 123, FACING_SOUTH);
 			g_engine->_soundManager->command(16, 0);
 			global[kCameFromCut] = true;
 			global[kBeamIsUp] = false;
@@ -156,8 +156,8 @@ static void room_803_daemon() {
 
 	if (kernel.trigger == 101) {
 		g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, -2);
-		int idx = _scene->_dynamicHotspots.add(words_guts, words_walkto, g_sequence_ids[5], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(66, 123), FACING_SOUTH);
+		int idx = kernel_add_dynamic(words_guts, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 66, 123, FACING_SOUTH);
 		g_engine->_soundManager->command(16, 0);
 		global[kCameFromCut] = true;
 		global[kBeamIsUp] = false;
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index b2b4ced9df6..07b707adc83 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -102,7 +102,7 @@ static void room_804_init() {
 	section_8_music();
 
 	if (global[kInSpace] && !global[kWindowFixed]) {
-		_scene->_userInterface.setup(kInputLimitedSentences);
+		kernel_set_interface_mode(kInputLimitedSentences);
 		g_engine->_soundManager->command(19, 0);
 	}
 }
diff --git a/engines/mads/nebular/rooms/room805.cpp b/engines/mads/nebular/rooms/room805.cpp
index 3f88159bf08..2f8e56e36e7 100644
--- a/engines/mads/nebular/rooms/room805.cpp
+++ b/engines/mads/nebular/rooms/room805.cpp
@@ -33,64 +33,63 @@ namespace Rooms {
 
 static void room_805_init() {
 	player.walker_visible = false;
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 
 	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 1), 0);
 	g_sprite_ids[2] = kernel_load_series(kernel_name('a', 2), 0);
 
 	if (global[kShieldModInstalled]) {
-		_scene->_hotspots.activate(OBJ_SHIELD_MODULATOR, false);
+		kernel_flip_hotspot(OBJ_SHIELD_MODULATOR, false);
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 25);
-		int idx = _scene->_dynamicHotspots.add(words_shield_modulator, words_remove, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), 0);
+		int idx = kernel_add_dynamic(words_shield_modulator, words_remove, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 0, 0, 0);
 	}
 
 	if (global[kTargetModInstalled]) {
-		_scene->_hotspots.activate(OBJ_TARGET_MODULE, false);
+		kernel_flip_hotspot(OBJ_TARGET_MODULE, false);
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 12);
-		int idx = _scene->_dynamicHotspots.add(words_target_module, words_remove, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), 0);
+		int idx = kernel_add_dynamic(words_target_module, words_remove, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 0, 0, 0);
 	}
 
 	section_8_music();
 }
 
 static void room_805_daemon() {
-	auto &userInterface = _scene._userInterface;
 
 	if (kernel.trigger == 70) {
-		_scene->_hotspots.activate(OBJ_SHIELD_MODULATOR, false);
+		kernel_flip_hotspot(OBJ_SHIELD_MODULATOR, false);
 		g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 25);
-		int idx = _scene->_dynamicHotspots.add(words_shield_modulator, words_remove, g_sequence_ids[1], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), 0);
+		int idx = kernel_add_dynamic(words_shield_modulator, words_remove, 0, g_sequence_ids[1], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 0, 0, 0);
 		global[kShieldModInstalled] = true;
 		inter_move_object(OBJ_SHIELD_MODULATOR, NOWHERE);
-		userInterface._selectedInvIndex = -1;
+		active_inven = -1;
 		player.commands_allowed = true;
 		g_engine->_soundManager->command(24, 0);
 	}
 
 	if (kernel.trigger == 80) {
-		_scene->_hotspots.activate(OBJ_TARGET_MODULE, false);
+		kernel_flip_hotspot(OBJ_TARGET_MODULE, false);
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 12);
-		int idx = _scene->_dynamicHotspots.add(words_target_module, words_remove, g_sequence_ids[2], Common::Rect(0, 0, 0, 0));
-		_scene->_dynamicHotspots.setPosition(idx, Common::Point(0, 0), 0);
+		int idx = kernel_add_dynamic(words_target_module, words_remove, 0, g_sequence_ids[2], 0, 0, 0, 0);
+		kernel_dynamic_walk(idx, 0, 0, 0);
 		global[kTargetModInstalled] = true;
 		inter_move_object(OBJ_TARGET_MODULE, NOWHERE);
-		userInterface._selectedInvIndex = -1;
+		active_inven = -1;
 		player.commands_allowed = true;
 		g_engine->_soundManager->command(24, 0);
 	}
 
 	if (kernel.trigger == 71) {
-		_scene->_hotspots.activate(OBJ_SHIELD_MODULATOR, true);
+		kernel_flip_hotspot(OBJ_SHIELD_MODULATOR, true);
 		global[kShieldModInstalled] = false;
 		inter_give_to_player(OBJ_SHIELD_MODULATOR);
 		player.commands_allowed = true;
 	}
 
 	if (kernel.trigger == 81) {
-		_scene->_hotspots.activate(OBJ_TARGET_MODULE, true);
+		kernel_flip_hotspot(OBJ_TARGET_MODULE, true);
 		global[kTargetModInstalled] = false;
 		inter_give_to_player(OBJ_TARGET_MODULE);
 		player.commands_allowed = true;
diff --git a/engines/mads/nebular/rooms/room808.cpp b/engines/mads/nebular/rooms/room808.cpp
index 858ace6da23..4843fee5995 100644
--- a/engines/mads/nebular/rooms/room808.cpp
+++ b/engines/mads/nebular/rooms/room808.cpp
@@ -39,7 +39,7 @@ static Scratch local;
 
 
 static void room_808_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 
 	g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
diff --git a/engines/mads/nebular/rooms/room810.cpp b/engines/mads/nebular/rooms/room810.cpp
index 2b0bf44d64f..d528ff1d7a4 100644
--- a/engines/mads/nebular/rooms/room810.cpp
+++ b/engines/mads/nebular/rooms/room810.cpp
@@ -39,7 +39,7 @@ static Scratch local;
 
 
 static void room_810_init() {
-	_scene->_userInterface.setup(kInputLimitedSentences);
+	kernel_set_interface_mode(kInputLimitedSentences);
 	player.walker_visible = false;
 	player.commands_allowed = false;
 	kernel_run_animation(kernel_full_name(810, 'a', -1, "", EXT_AA), 0);
diff --git a/engines/mads/nebular/rooms/thunks.cpp b/engines/mads/nebular/rooms/thunks.cpp
index 90b1e6d212e..0c245a51578 100644
--- a/engines/mads/nebular/rooms/thunks.cpp
+++ b/engines/mads/nebular/rooms/thunks.cpp
@@ -19,76 +19,12 @@
  *
  */
 
-#include "common/textconsole.h"
-#include "mads/core/global.h"
-#include "mads/core/kernel.h"
-#include "mads/core/matte.h"
-#include "mads/core/player.h"
 #include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
 namespace Rooms {
 
-Scene _scene;
-
-int Scene::DynamicHotspots::add(int vocab_id, int verb_id, int auto_sequence, const Common::Rect &r) {
-	return kernel_add_dynamic(vocab_id, verb_id, 0, auto_sequence,
-		r.left, r.top, r.width(), r.height());
-}
-
-void Scene::DynamicHotspots::remove(int dyn_id) {
-	kernel_delete_dynamic(dyn_id);
-}
-
-int Scene::DynamicHotspots::setPosition(int id, const Common::Point &pt, int facing) {
-	kernel_dynamic_walk(id, pt.x, pt.y, facing);
-	return id;
-}
-
-int Scene::DynamicHotspots::setCursor(int id, int cursorNum) {
-	return kernel_dynamic_cursor(id, cursorNum);
-}
-
-Scene::DynamicHotspot Scene::DynamicHotspots::operator[](int idx) {
-	return Scene::DynamicHotspot(idx);
-}
-
-Scene::DynamicHotspot::DynamicHotspot(int index) : _articleNumber(kernel_dynamic_hot[index].prep) {
-}
-
-void Scene::Hotspots::activate(int hotspot, int active) {
-	kernel_flip_hotspot(hotspot, active);
-}
-
-int Scene::Rails::getNext() const {
-	return player.next_special_code;
-}
-
-void Scene::Rails::resetNext() {
-	player.next_special_code = 0;
-}
-
-void Scene::SpriteSlots::clear() {
-	image_marker = 0;
-}
-
-void Scene::SpriteSlots::fullRefresh() {
-	matte_refresh_work();
-}
-
-void Scene::UserInterface::emptyConversationList() {
-	inter_reset_dialog();
-}
-
-void Scene::UserInterface::selectObject(int item_id) {
-	inter_set_active_inven(item_id);
-}
-
-void Scene::UserInterface::setup(int inputMode) {
-	kernel_set_interface_mode(inputMode);
-}
-
 } // namespace Rooms
 } // namespace RexNebular
 } // namespace MADS
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
index a291e408f6f..fa6910cc207 100644
--- a/engines/mads/nebular/rooms/thunks.h
+++ b/engines/mads/nebular/rooms/thunks.h
@@ -22,11 +22,9 @@
 #ifndef MADS_NEBULAR_ROOMS_THUNKS_H
 #define MADS_NEBULAR_ROOMS_THUNKS_H
 
-#include "common/rect.h"
 #include "mads/core/config.h"
 #include "mads/core/inter.h"
 #include "mads/core/kernel.h"
-#include "mads/core/player.h"
 
 namespace MADS {
 namespace RexNebular {
@@ -120,69 +118,6 @@ enum StoryMode {
 #define kernel_animation_next_clock     kernel_anim[0].next_clock
 #endif
 
-struct Scene {
-	Scene *operator->() {
-		return this;
-	}
-	const Scene *operator->() const {
-		return this;
-	}
-
-	struct CustomDest {
-		int &x = inter_point_x;
-		int &y = inter_point_y;
-	};
-	CustomDest _customDest;
-
-	struct DynamicHotspot {
-		byte &_articleNumber;
-
-		DynamicHotspot(int index);
-	};
-
-	struct DynamicHotspots {
-		int add(int vocab_id, int verb_id, int auto_sequence, const Common::Rect &r);
-		void remove(int dyn_id);
-		int setPosition(int id, const Common::Point &pt, int facing);
-		int setCursor(int id, int cursor);
-
-		DynamicHotspot operator[](int idx);
-	};
-	DynamicHotspots _dynamicHotspots;
-
-	struct Hotspots {
-		void activate(int hotspot, int active);
-	};
-	Hotspots _hotspots;
-
-	struct PaletteCycles {
-		int size() const;
-
-	};
-	PaletteCycles _paletteCycles;
-
-	struct Rails {
-		int getNext() const;
-		void resetNext();
-	};
-	Rails _rails;
-
-	struct SpriteSlots {
-		void clear();
-		void fullRefresh();
-	};
-	SpriteSlots _spriteSlots;
-
-	struct UserInterface {
-		int &_selectedInvIndex = active_inven;
-		void emptyConversationList();
-		void setup(int inputMode);
-		void selectObject(int item_id);
-	};
-	UserInterface _userInterface;
-};
-extern Scene _scene;
-
 enum {
 	RETURNING_FROM_DIALOG = KERNEL_RESTORING_GAME,
 	RETURNING_FROM_LOADING = KERNEL_STARTING_GAME


Commit: 1d9ee3a89b88fc888faa3d994f757b3dd62c0576
    https://github.com/scummvm/scummvm/commit/1d9ee3a89b88fc888faa3d994f757b3dd62c0576
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:57+10:00

Commit Message:
MADS: NEBULAR: Refactoring thunk enums

Changed paths:
    engines/mads/core/game.h
    engines/mads/core/matte.h
    engines/mads/nebular/extra.cpp
    engines/mads/nebular/rooms/forcefield.cpp
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room212.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room216.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room310.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room321.cpp
    engines/mads/nebular/rooms/room322.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room354.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room366.cpp
    engines/mads/nebular/rooms/room387.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room390.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room502.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room707.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room711.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/room810.cpp
    engines/mads/nebular/rooms/section2.cpp
    engines/mads/nebular/rooms/teleporter.cpp
    engines/mads/nebular/rooms/thunks.h


diff --git a/engines/mads/core/game.h b/engines/mads/core/game.h
index 53d1a230c6b..514b00b0286 100644
--- a/engines/mads/core/game.h
+++ b/engines/mads/core/game.h
@@ -25,6 +25,7 @@
 #include "common/serializer.h"
 #include "mads/core/general.h"
 #include "mads/core/global.h"
+#include "mads/core/kernel.h"
 #include "mads/core/object.h"
 #include "mads/core/player.h"
 #include "mads/core/quote.h"
diff --git a/engines/mads/core/matte.h b/engines/mads/core/matte.h
index 863d0b92475..bf1fe21d2a2 100644
--- a/engines/mads/core/matte.h
+++ b/engines/mads/core/matte.h
@@ -42,6 +42,7 @@ namespace MADS {
 #define MATTE_LIST_SIZE         (IMAGE_LIST_SIZE + MESSAGE_LIST_SIZE)
 #define FIRST_MESSAGE_MATTE     IMAGE_LIST_SIZE
 
+#define MATTE_FX_NONE                 0
 #define MATTE_FX_FADE_FROM_BLACK      1
 #define MATTE_FX_FADE_THRU_BLACK      2
 #define MATTE_FX_CORNER_LOWER_LEFT    3
diff --git a/engines/mads/nebular/extra.cpp b/engines/mads/nebular/extra.cpp
index 2a6ab306390..833a183e1f7 100644
--- a/engines/mads/nebular/extra.cpp
+++ b/engines/mads/nebular/extra.cpp
@@ -72,7 +72,7 @@ struct RoomFileRex {
 };
 
 
-static int room_picture_load(Room *room, int room_id, Buffer *picture, int load_flags) {
+static int room_picture_load(Room *roomPtr, int id, Buffer *picture, int load_flags) {
 	int error_flag = true;
 	int xs, ys;
 	long picture_size;
@@ -83,7 +83,7 @@ static int room_picture_load(Room *room, int room_id, Buffer *picture, int load_
 
 	load_handle.open = false;
 
-	env_get_level_path(temp_buf, ROOM, ".ART", 0, room_id);
+	env_get_level_path(temp_buf, ROOM, ".ART", 0, id);
 
 	if (loader_open(&load_handle, temp_buf, "rb", true)) {
 		room_load_error = 1;
@@ -117,7 +117,7 @@ static int room_picture_load(Room *room, int room_id, Buffer *picture, int load_
 	picture_size = MAX((long)xs * ys, load_handle.pack.strategy[load_handle.pack_list_marker].size);
 
 	// Copy the cycle list
-	room->cycle_list = art.cycle_list;
+	roomPtr->cycle_list = art.cycle_list;
 
 	if (!(load_flags & ROOM_LOAD_TRANSLATE)) {
 		if (master_shadow) {
@@ -127,8 +127,8 @@ static int room_picture_load(Room *room, int room_id, Buffer *picture, int load_
 
 		int pal_flags = (load_flags & (PAL_MAP_RESERVED | PAL_MAP_ANY_TO_CLOSEST |
 			PAL_MAP_ALL_TO_CLOSEST | PAL_MAP_TOP_COLORS)) | PAL_MAP_BACKGROUND;
-		room->color_handle = pal_allocate(&art.color_list, master_shadow, pal_flags);
-		if (room->color_handle < 0) {
+		roomPtr->color_handle = pal_allocate(&art.color_list, master_shadow, pal_flags);
+		if (roomPtr->color_handle < 0) {
 			room_load_error = 4;
 			goto done;
 		}
@@ -140,9 +140,9 @@ static int room_picture_load(Room *room, int room_id, Buffer *picture, int load_
 			}
 		}
 
-		for (count = 0; count < room->cycle_list.num_cycles; ++count) {
-			int col = room->cycle_list.table[count].first_list_color;
-			room->cycle_list.table[count].first_palette_color = art.color_list.table[col].x16;
+		for (count = 0; count < roomPtr->cycle_list.num_cycles; ++count) {
+			int col = roomPtr->cycle_list.table[count].first_list_color;
+			roomPtr->cycle_list.table[count].first_palette_color = art.color_list.table[col].x16;
 		}
 	}
 
diff --git a/engines/mads/nebular/rooms/forcefield.cpp b/engines/mads/nebular/rooms/forcefield.cpp
index 4baf0b12e23..e94249df468 100644
--- a/engines/mads/nebular/rooms/forcefield.cpp
+++ b/engines/mads/nebular/rooms/forcefield.cpp
@@ -118,7 +118,7 @@ void handle_forcefield(Forcefield *force, int16 *sprites) {
 			kernel_seq_depth(force->_seqId[id], 8);
 			kernel_seq_loc(force->_seqId[id], posX, posY);
 			kernel_seq_motion(force->_seqId[id], 2, speedX, speedY);
-			kernel_seq_trigger(force->_seqId[id], SEQUENCE_TRIGGER_EXPIRE, 0, 150 + id);
+			kernel_seq_trigger(force->_seqId[id], KERNEL_TRIGGER_EXPIRE, 0, 150 + id);
 			if (spriteId == 2)
 				force->_horizontal++;
 			else
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index f9fd5916525..9e2aae64fff 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -45,7 +45,7 @@ static Scratch local;
 
 
 static void room_101_say_dang() {
-	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 	player.commands_allowed = false;
 
 	switch (kernel.trigger) {
@@ -53,7 +53,7 @@ static void room_101_say_dang() {
 		kernel_seq_delete(g_sequence_ids[11]);
 		g_sequence_ids[11] = kernel_seq_pingpong(g_sprite_ids[11], false, 3, 0, 0, 6);
 		kernel_seq_range(g_sequence_ids[11], 17, 21);
-		kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		g_engine->_soundManager->command(17, 0);
 		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 3, 0, 0, 2);
 		break;
@@ -94,7 +94,7 @@ static void room_101_init() {
 	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 25, 0, 0);
 	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 4, 0, 1, 0);
 	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 2, 0);
-	kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 7, 70);
+	kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 7, 70);
 	g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 10, 60, 0, 0);
 	g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 5, 0, 1, 0);
 	g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 10, 0, 2, 0);
@@ -105,15 +105,15 @@ static void room_101_init() {
 	kernel_flip_hotspot(words_shield_modulator, false);
 	local._panelOpened = false;
 
-	if (previous_room != RETURNING_FROM_LOADING)
+	if (previous_room != KERNEL_STARTING_GAME)
 		global[kNeedToStandUp] = false;
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 100;
 		player.y = 152;
 	}
 
-	if ((previous_room == 112) || ((previous_room == RETURNING_FROM_DIALOG) && local._sittingFl)) {
+	if ((previous_room == 112) || ((previous_room == KERNEL_RESTORING_GAME) && local._sittingFl)) {
 		player.walker_visible = false;
 		local._sittingFl = true;
 		player.x = 161;
@@ -133,7 +133,7 @@ static void room_101_init() {
 	kernel.quotes = quote_load(0x31, 0x32, 0x39, 0x36, 0x37, 0x38, 0);
 
 	if (global[kNeedToStandUp]) {
-		kernel_run_animation(kernel_full_name(101, 'S', -1, "", EXT_AA), 71);
+		kernel_run_animation(kernel_full_name(101, 'S', -1, "", KERNEL_AA), 71);
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		player.x = 68;
@@ -227,7 +227,7 @@ static void room_101_pre_parser() {
 				player.commands_allowed = false;
 				kernel_seq_delete(g_sequence_ids[11]);
 				g_sequence_ids[11] = kernel_seq_backward(g_sprite_ids[11], false, 3, 0, 0, 1);
-				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				kernel_seq_range(g_sequence_ids[11], 1, 17);
 				g_engine->_soundManager->command(16, 0);
 				break;
@@ -256,7 +256,7 @@ static void room_101_pre_parser() {
 				kernel_seq_delete(g_sequence_ids[13]);
 				local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
 				g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[local._shieldSpriteIdx], false, 6, 0, 0, 1);
-				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
 			}
@@ -294,8 +294,8 @@ static void room_101_parser() {
 				kernel_seq_delete(g_sequence_ids[12]);
 				g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[11], 1, 17);
-				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 10, 1);
-				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_SPRITE, 10, 1);
+				kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				player.commands_allowed = false;
 				player.walker_visible = false;
 				player.command_ready = false;
@@ -334,7 +334,7 @@ static void room_101_parser() {
 		case 0:
 			local._shieldSpriteIdx = object_is_here(OBJ_SHIELD_MODULATOR) ? 13 : 14;
 			g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[local._shieldSpriteIdx], false, 6, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
@@ -397,13 +397,13 @@ static void room_101_parser() {
 				kernel_seq_delete(g_sequence_ids[11]);
 				g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[11], 17, 21);
-				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				g_engine->_soundManager->command(17, 0);
 				break;
 
 			case 1:
 				g_sequence_ids[11] = kernel_seq_backward(g_sprite_ids[11], false, 3, 0, 0, 1);
-				kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				kernel_seq_range(g_sequence_ids[11], 17, 21);
 				break;
 
@@ -411,7 +411,7 @@ static void room_101_parser() {
 				g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 3, 0, 0, 0);
 				kernel_seq_range(g_sequence_ids[11], 17, 17);
 				g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 3, 0, 0, 1);
-				kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 			case 3:
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index 54f860b07a8..ac277eb560d 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -46,7 +47,7 @@ static Scratch local;
 
 static void addRandomMessage() {
 	kernel_message_purge();
-	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 	int quoteId = g_engine->getRandomNumber(65, 69);
 	kernel_message_add(quote_string(kernel.quotes, quoteId), 0, 0, 0x1110, 120, 73, 34);
 	local._activeMsgFl = true;
@@ -91,12 +92,12 @@ static void room_102_init() {
 		player.y = 109;
 		player.commands_allowed = false;
 		g_sequence_ids[6] = kernel_seq_backward(g_sprite_ids[6], false, 6, 0, 2, 1);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 70);
 	} else if (previous_room == 103) {
 		player.x = 47;
 		player.y = 152;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.facing = FACING_NORTHWEST;
 		player.x = 32;
 		player.y = 129;
@@ -112,7 +113,7 @@ static void room_102_init() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 6, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		kernel_seq_depth(g_sequence_ids[13], 5);
 		g_engine->_soundManager->command(24, 0);
 		g_engine->_soundManager->command(28, 0);
@@ -191,7 +192,7 @@ static void room_102_pre_parser() {
 			if (player.need_to_walk) {
 				kernel_seq_delete(g_sequence_ids[7]);
 				g_sequence_ids[7] = kernel_seq_backward(g_sprite_ids[7], false, 6, 0, 0, 1);
-				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				kernel_seq_depth(g_sequence_ids[7], 15);
 				player.commands_allowed = false;
 				g_engine->_soundManager->command(20, 0);
@@ -229,7 +230,7 @@ static void room_102_parser() {
 		case 0:
 			g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[7], 15);
-			kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			if (object_is_here(OBJ_BURGER)) {
 				g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 7, 0, 0, 0);
 				kernel_seq_depth(g_sequence_ids[10], 14);
@@ -284,7 +285,7 @@ static void room_102_parser() {
 		char *curQuote = quote_string(kernel.quotes, quoteId);
 		int width = font_string_width(kernel_message_font, curQuote, -1);
 		kernel_message_purge();
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_message_add(curQuote, 210, 60, 0x1110, 120, 73, 0);
 		kernel_message_add(quote_string(kernel.quotes, 64), 214 + width, 60, 0x1110, 120, 73, 0);
 		local._activeMsgFl = true;
@@ -308,7 +309,7 @@ static void room_102_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
@@ -519,7 +520,7 @@ static void room_102_parser() {
 		case 0:
 			kernel_seq_delete(g_sequence_ids[8]);
 			g_sequence_ids[8] = kernel_seq_backward(g_sprite_ids[8], false, 6, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
@@ -545,7 +546,7 @@ static void room_102_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(21, 0);
 			break;
@@ -579,7 +580,7 @@ static void room_102_parser() {
 		case 0:
 			g_sequence_ids[11] = kernel_seq_pingpong(g_sprite_ids[11], false, 3, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[11], false);
-			kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
@@ -639,7 +640,7 @@ static void room_102_parser() {
 		return;
 	}
 
-	if (player_said_2(look, burger) && (player.main_object_source == CAT_HOTSPOT)) {
+	if (player_said_2(look, burger) && (player.main_object_source == STROKE_INTERFACE)) {
 		text_show(801);
 		player.command_ready = false;
 	}
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 8ea84de175a..1365a30dbe8 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -62,10 +62,10 @@ static void room_103_init() {
 	kernel_seq_depth(g_sequence_ids[1], 0);
 
 	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 25, 0, 0);
-	kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 72);
+	kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 2, 72);
 
 	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 37, 1, 0);
-	kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 73);
+	kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 2, 73);
 
 	g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 0);
 	g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 6, 0, 0, 0);
@@ -88,7 +88,7 @@ static void room_103_init() {
 		kernel_flip_hotspot(362, false);
 	}
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 237;
 		player.y = 74;
 	}
@@ -96,7 +96,7 @@ static void room_103_init() {
 	if (previous_room == 102) {
 		player.commands_allowed = false;
 		g_sequence_ids[6] = kernel_seq_backward(g_sprite_ids[6], false, 6, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 70);
 	}
 
 	section_1_music();
@@ -170,7 +170,7 @@ static void room_103_parser() {
 		switch (kernel.trigger) {
 		case 0:
 			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 6, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			g_engine->_soundManager->command(20, 0);
 			break;
@@ -190,8 +190,8 @@ static void room_103_parser() {
 			kernel_load_variant(1);
 			g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 3, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[13], false);
-			kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_SPRITE, 7, 1);
-			kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_SPRITE, 7, 1);
+			kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
@@ -204,7 +204,7 @@ static void room_103_parser() {
 			g_engine->_soundManager->command(22, 0);
 			inter_give_to_player(OBJ_TIMER_MODULE);
 			kernel_load_variant(0);
-			matte_frame(kTransitionNone, false);
+			matte_frame(MATTE_FX_NONE, false);
 			kernel_flip_hotspot(371, false);
 			player.walker_visible = true;
 			player.commands_allowed = true;
@@ -219,8 +219,8 @@ static void room_103_parser() {
 		case 0:
 			g_sequence_ids[12] = kernel_seq_pingpong(g_sprite_ids[12], false, 3, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[12], false);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_SPRITE, 6, 1);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			player.walker_visible = false;
 			player.commands_allowed = false;
 			break;
@@ -260,7 +260,7 @@ static void room_103_parser() {
 				kernel_timing_trigger(120, kernel.trigger + 1);
 			} else {
 				// Initial turky explosion
-				kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			}
 		}
 
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index 4284f116cad..c4ab447fb94 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/quote.h"
 #include "mads/nebular/global.h"
@@ -47,7 +48,7 @@ static void room_104_init() {
 	if (previous_room == 105) {
 		player.x = 302;
 		player.y = 107;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 160;
 		player.y = 134;
 	}
@@ -57,7 +58,7 @@ static void room_104_init() {
 	local._kargShootingFl = false;
 
 	if (g_engine->getRandomNumber(1, 3) == 1) {
-		kernel_run_animation(kernel_full_name(104, 'B', -1, "", EXT_AA), 0);
+		kernel_run_animation(kernel_full_name(104, 'B', -1, "", KERNEL_AA), 0);
 		local._kargShootingFl = true;
 	}
 
@@ -94,7 +95,7 @@ static void room_104_daemon() {
 				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], mirrorFl, 7, 0, 0, 1);
 				kernel_seq_loc(g_sequence_ids[2], 198, 143);
 				kernel_seq_depth(g_sequence_ids[2], 4);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
@@ -128,7 +129,7 @@ static void room_104_daemon() {
 				kernel_seq_loc(g_sequence_ids[3], 198, 143);
 				kernel_seq_depth(g_sequence_ids[3], 4);
 				kernel_seq_range(g_sequence_ids[3], 1, 14);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
@@ -136,7 +137,7 @@ static void room_104_daemon() {
 				kernel_seq_loc(g_sequence_ids[3], 198, 143);
 				kernel_seq_depth(g_sequence_ids[3], 4);
 				kernel_seq_range(g_sequence_ids[3], 15, 32);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 2:
@@ -169,9 +170,9 @@ static void room_104_daemon() {
 				g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 8, 0, 0, 1);
 				kernel_seq_loc(g_sequence_ids[4], 198, 143);
 				kernel_seq_depth(g_sequence_ids[4], 4);
-				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				if (config_file.naughtiness >= STORYMODE_NICE)
-					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 15, 2);
+				kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 1);
+				if (config_file.naughtiness >= NICE)
+					kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_SPRITE, 15, 2);
 				break;
 
 			case 1:
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index 889bf92b8d8..0d55efd748e 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -55,7 +56,7 @@ static void room_105_init() {
 		player.x = 13;
 		player.y = 97;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 116;
 		player.y = 147;
 	}
@@ -85,10 +86,10 @@ static void room_105_daemon() {
 
 			g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[0], 8);
-			kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_EXPIRE, 0, 1);
 
-			if (config_file.naughtiness >= STORYMODE_NICE)
-				kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 8, 3);
+			if (config_file.naughtiness >= NICE)
+				kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_SPRITE, 8, 3);
 			break;
 
 		case 1:
@@ -99,7 +100,7 @@ static void room_105_daemon() {
 			kernel_seq_timeout(g_sequence_ids[0], g_sequence_ids[2]);
 			kernel_seq_depth(g_sequence_ids[2], 8);
 			kernel_seq_range(g_sequence_ids[2], 5, 7);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index b74041de85b..24d553bc7df 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -57,13 +57,13 @@ static void room_106_init() {
 
 	if (previous_room == 102) {
 		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 6, 0, 4, 1);
-		kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_EXPIRE, 0, 70);
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		player.facing = FACING_EAST;
 		player.x = 106;
 		player.y = 69;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		if (previous_room == 107) {
 			player.x = 319;
 			player.y = 84;
@@ -102,10 +102,10 @@ static void room_106_daemon() {
 		kernel_seq_depth(g_sequence_ids[0], 14);
 
 		if (!player_has(OBJ_REBREATHER) && !kernel.teleported_in) {
-			kernel_run_animation(kernel_full_name(106, 'A', -1, "", EXT_AA), 75);
+			kernel_run_animation(kernel_full_name(106, 'A', -1, "", KERNEL_AA), 75);
 		} else {
 			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 4, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 28, 71);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_SPRITE, 28, 71);
 		}
 	}
 
@@ -122,7 +122,7 @@ static void room_106_daemon() {
 		} else {
 			player.prepare_walk_facing = FACING_SOUTHWEST;
 			local._firstEmergingFl = true;
-			kernel_run_animation(kernel_full_name(106, 'B', -1, "", EXT_AA), 80);
+			kernel_run_animation(kernel_full_name(106, 'B', -1, "", KERNEL_AA), 80);
 		}
 	}
 
@@ -171,8 +171,8 @@ static void room_106_daemon() {
 			if (player.x < 204) {
 				local._shadowFl = true;
 				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 4, 0, 0, 1);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 44, 73);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 72);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 44, 73);
 			}
 		} else if (kernel.trigger == 73)
 			player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index 19cbaa01105..11b3da0b00c 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -42,7 +42,7 @@ static void room_107_init() {
 	for (int i = 0; i < 3; i++)
 		g_sprite_ids[i + 1] = kernel_load_series(kernel_name('G', i), 0);
 
-	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", EXT_SS), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", KERNEL_SS), 0);
 
 	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 14, 7, 0, 0);
 	g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 17, 13, 0, 0);
@@ -67,16 +67,16 @@ static void room_107_init() {
 		player.x = 20;
 		player.y = 91;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 223;
 		player.y = 151;
 	}
 
 	if (((previous_room == 105) || (previous_room == 106)) && (g_engine->getRandomNumber(1, 3) == 1)) {
-		g_sprite_ids[0] = kernel_load_series(kernel_full_name(105, 'R', 1, "", EXT_SS), 0);
+		g_sprite_ids[0] = kernel_load_series(kernel_full_name(105, 'R', 1, "", KERNEL_SS), 0);
 		g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], true, 4, 0, 0, 0);
 		kernel_seq_loc(g_sequence_ids[0], 270, 150);
-		kernel_seq_motion(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, -200, 0);
+		kernel_seq_motion(g_sequence_ids[0], KERNEL_TRIGGER_SPRITE, -200, 0);
 		kernel_seq_depth(g_sequence_ids[0], 2);
 		kernel_add_dynamic(words_manta_ray, words_swim_to, 0, g_sequence_ids[0], 0, 0, 0, 0);
 	}
@@ -85,7 +85,7 @@ static void room_107_init() {
 	local._shootingFl = false;
 
 	if (g_engine->getRandomNumber(1, 3) == 1) {
-		kernel_run_animation(kernel_full_name(107, 'B', -1, "", EXT_AA), 0);
+		kernel_run_animation(kernel_full_name(107, 'B', -1, "", KERNEL_AA), 0);
 		local._shootingFl = true;
 	}
 
@@ -125,7 +125,7 @@ static void room_107_parser() {
 		new_room = 105;
 	else if (player_said_2(look, northern_sea_cliff))
 		text_show(10701);
-	else if (player_said_2(look, dead_fish) && (player.main_object_source == CAT_HOTSPOT))
+	else if (player_said_2(look, dead_fish) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(10702);
 	else if (player_said_2(look, bush_like_formation))
 		text_show(10703);
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index a264282b553..ccc95d69565 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -39,7 +39,7 @@ static void room_108_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('X', 1), 0);
 	g_sprite_ids[2] = kernel_load_series(kernel_name('X', 2), 0);
 	g_sprite_ids[3] = kernel_load_series(kernel_name('X', 3), 0);
-	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", EXT_SS), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(105, 'f', 4, "", KERNEL_SS), 0);
 
 	g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 13, 7, 0, 0);
 	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 16, 9, 0, 0);
@@ -60,7 +60,7 @@ static void room_108_init() {
 		player.x = 138;
 		player.y = 58;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 305;
 		player.y = 98;
 	}
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index 1af37f72ac7..bf3e143fe1b 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/himem.h"
 #include "mads/core/matte.h"
@@ -68,7 +69,7 @@ static void room_109_init() {
 		player.x = 248;
 		player.y = 38;
 		global[kHoovicSated] = 2;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 20;
 		player.y = 68;
 		player.facing = FACING_EAST;
@@ -110,7 +111,7 @@ static void room_109_init() {
 	local._eatingFirstFish = (!player.been_here_before) && (previous_room < 110);
 
 	if (local._eatingFirstFish) {
-		g_sprite_ids[10] = kernel_load_series(kernel_full_name(105, 'F', 1, "", EXT_SS), 0);
+		g_sprite_ids[10] = kernel_load_series(kernel_full_name(105, 'F', 1, "", KERNEL_SS), 0);
 		g_sprite_ids[9] = kernel_load_series(kernel_name('H', 1), 0);
 
 		g_sequence_ids[10] = kernel_seq_pingpong(g_sprite_ids[10], true, 4, 0, 0, 0);
@@ -130,8 +131,8 @@ static void room_109_daemon() {
 			if (player.x > 205) {
 				g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 1);
 				kernel_seq_depth(g_sequence_ids[4], 4);
-				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 70);
-				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+				kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_SPRITE, 6, 70);
+				kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 71);
 
 				local._eatingRex = true;
 				g_engine->_soundManager->command(34, 0);
@@ -172,8 +173,8 @@ static void room_109_daemon() {
 	if (local._eatingFirstFish && (sequence_list[g_sequence_ids[10]].x >= 178)) {
 		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 4, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[9], 4);
-		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_SPRITE, 29, 72);
-		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 29, 73);
+		kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_SPRITE, 29, 72);
+		kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 29, 73);
 		kernel_seq_timeout(g_sequence_ids[9], g_sequence_ids[10]);
 		local._eatingFirstFish = false;
 		player.commands_allowed = true;
@@ -241,7 +242,7 @@ static void room_109_parser() {
 						inter_move_object(local._throwingObjectId, NOWHERE);
 						g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 4, 0, 0, 1);
 						kernel_seq_player(g_sequence_ids[0], false);
-						kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+						kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_EXPIRE, 0, 1);
 						player.walker_visible = false;
 						player.commands_allowed = false;
 
@@ -269,23 +270,23 @@ static void room_109_parser() {
 						switch (local._throwingObjectId) {
 						case OBJ_BURGER:
 							g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, (local._hoovicDifficultFl ? 4 : 6), 0, 0, 1);
-							kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 2, 2);
 							if (local._hoovicDifficultFl) {
 								kernel_seq_range(g_sequence_ids[3], 1, 30);
-								kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+								kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 5);
 							} else {
 								kernel_seq_range(g_sequence_ids[3], 1, 4);
-								kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+								kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 8);
 								local._hoovicTrigger = 3;
 							}
 							break;
 						case OBJ_DEAD_FISH:
 							g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 4, 0, 0, 1);
-							kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_SPRITE, 2, 2);
 							break;
 						case OBJ_STUFFED_FISH:
 							g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 4, 0, 0, 1);
-							kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 2);
+							kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 2, 2);
 							local._hoovicTrigger = 3;
 							break;
 						default:
@@ -300,12 +301,12 @@ static void room_109_parser() {
 							g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 4, 0, 0, 1);
 
 						kernel_seq_depth(g_sequence_ids[8], 4);
-						kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, local._hoovicTrigger);
+						kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, local._hoovicTrigger);
 						g_engine->_soundManager->command(34, 0);
 						break;
 
 					case 3:
-						kernel_run_animation(kernel_full_name(109, 'H', 2, "", EXT_AA), 4);
+						kernel_run_animation(kernel_full_name(109, 'H', 2, "", KERNEL_AA), 4);
 						g_engine->_soundManager->command(35, 0);
 						global[kHoovicAlive] = false;
 						break;
@@ -380,7 +381,7 @@ static void room_109_parser() {
 						kernel_seq_range(g_sequence_ids[3], 31, 46);
 						int idx = kernel_add_dynamic(words_burger, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
 						kernel_dynamic_walk(idx, -3, 0, FACING_NORTHEAST);
-						kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
+						kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 7);
 					}
 					break;
 
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 3f5021237b7..96b6796b9f2 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -66,13 +66,13 @@ static void room_110_init() {
 		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
 		idx = kernel_add_dynamic(words_crab, words_swim_to, 0, g_sequence_ids[3], 0, 0, 0, 0);
 		kernel_dynamic_walk(idx, -1, 0, FACING_NONE);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 194;
 		player.y = 23;
 		player.facing = FACING_SOUTH;
 		player.walker_visible = false;
 		player.commands_allowed = false;
-		kernel_run_animation(kernel_full_name(110, 'T', 1, "", EXT_AA), 70);
+		kernel_run_animation(kernel_full_name(110, 'T', 1, "", KERNEL_AA), 70);
 	}
 
 	section_1_music();
@@ -121,7 +121,7 @@ static void room_110_parser() {
 	if (player_said_2(swim_through, tunnel)) {
 		switch (kernel.trigger) {
 		case 0:
-			kernel_run_animation(kernel_full_name(110, 'T', 0, "", EXT_AA), 1);
+			kernel_run_animation(kernel_full_name(110, 'T', 0, "", KERNEL_AA), 1);
 			kernel_anim[0].next_clock = player.frame_delay + player.clock;
 			player.commands_allowed = false;
 			player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index cbe79d5a73e..3f4b7a2884d 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -51,11 +51,11 @@ static void room_111_init() {
 	g_sprite_ids[5] = kernel_load_series(kernel_name('B', 2), 0);
 
 	g_sequence_ids[0] = kernel_seq_forward(g_sprite_ids[0], false, 8, 0, 0, 0);
-	kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 9, 73);
-	kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_SPRITE, 13, 73);
+	kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_SPRITE, 9, 73);
+	kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_SPRITE, 13, 73);
 
 	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 0, 0, 0);
-	kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 71, 71);
+	kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_SPRITE, 71, 71);
 
 	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 0);
 	g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
@@ -72,10 +72,10 @@ static void room_111_init() {
 	local._launched2Fl = false;
 	local._stampedFl = false;
 
-	if ((previous_room < 201) && (previous_room != RETURNING_FROM_DIALOG)) {
+	if ((previous_room < 201) && (previous_room != KERNEL_RESTORING_GAME)) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		kernel_run_animation(kernel_full_name(111, 'A', 0, "", EXT_AA), 70);
+		kernel_run_animation(kernel_full_name(111, 'A', 0, "", KERNEL_AA), 70);
 		player.x = 234;
 		player.y = 116;
 		player.facing = FACING_EAST;
@@ -84,7 +84,7 @@ static void room_111_init() {
 		local._launched2Fl = true;
 
 		g_engine->_soundManager->command(36, 0);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 300;
 		player.y = 130;
 		player.facing = FACING_WEST;
@@ -106,7 +106,7 @@ static void room_111_daemon() {
 	if ((kernel.trigger == 71) && !local._stampedFl) {
 		local._stampedFl = true;
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 18, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 72);
 	}
 
 	if (kernel.trigger == 72) {
@@ -148,7 +148,7 @@ static void room_111_parser() {
 	if (player_said_2(dive_into, pool) && player_has(OBJ_REBREATHER)) {
 		switch (kernel.trigger) {
 		case 0:
-			kernel_run_animation(kernel_full_name(111, 'A', 1, "", EXT_AA), 1);
+			kernel_run_animation(kernel_full_name(111, 'A', 1, "", KERNEL_AA), 1);
 			local._rexDivingFl = true;
 			player.commands_allowed = false;
 			player.walker_visible = false;
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index c39219c7b1e..7554cddc84e 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -47,13 +48,13 @@ static void room_112_init() {
 	player.walker_visible = false;
 
 	inter_reset_dialog();
-	kernel_set_interface_mode(kInputConversation);
+	kernel_set_interface_mode(INTER_CONVERSATION);
 
-	kernel_run_animation(kernel_full_name(112, 'X', -1, "", EXT_AA), 70);
+	kernel_run_animation(kernel_full_name(112, 'X', -1, "", KERNEL_AA), 70);
 }
 
 static void room_112_daemon() {
-	if ((kernel_anim[0].anim != nullptr) && (config_file.naughtiness == STORYMODE_NICE)) {
+	if ((kernel_anim[0].anim != nullptr) && (config_file.naughtiness == NICE)) {
 		if (kernel_anim[0].frame >= 54) {
 			kernel_abort_animation(0);
 			kernel.trigger = 70;
@@ -63,7 +64,7 @@ static void room_112_daemon() {
 	if (kernel.trigger == 70) {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 11, 0, 3);
 		kernel_seq_depth(g_sequence_ids[3], 1);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (kernel.trigger == 71) {
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index 26568db1e4c..f8bb356aa54 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -55,7 +55,7 @@ static void room_201_init() {
 	int idx = kernel_add_dynamic(words_birds, words_look_at, 0, g_sequence_ids[4], 0, 0, 0, 0);
 	kernel_dynamic_walk(idx, 186, 81, FACING_NORTH);
 
-	if ((previous_room == 202) || (previous_room == RETURNING_FROM_LOADING)) {
+	if ((previous_room == 202) || (previous_room == KERNEL_STARTING_GAME)) {
 		player.x = 165;
 		player.y = 152;
 	} else {
@@ -105,7 +105,7 @@ static void room_201_init() {
 		player.commands_allowed = false;
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[6], -1, 12);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 12, 70);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_SPRITE, 12, 70);
 		kernel_seq_depth(g_sequence_ids[6], 1);
 		local._pterodactylFlag = false;
 		player_walk(157, 143, FACING_NORTH);
@@ -139,9 +139,9 @@ static void room_201_daemon() {
 		g_engine->_soundManager->command(42, 0);
 		kernel_seq_depth(g_sequence_ids[6], 1);
 		kernel_seq_depth(g_sequence_ids[7], 1);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 3, 81);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_SPRITE, 3, 81);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 73);
 	}
 
 	if (kernel.trigger == 81) {
@@ -157,7 +157,7 @@ static void room_201_daemon() {
 	if (kernel.trigger == 73) {
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 9, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[6], 17, -2);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 74);
 		kernel_seq_depth(g_sequence_ids[6], 1);
 	}
 
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index 1f238f60467..b6e3e830bbe 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -96,7 +96,7 @@ static void room_202_init() {
 		player.x = 190;
 		player.y = 91;
 		player.facing = FACING_SOUTH;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 178;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -113,7 +113,7 @@ static void room_202_init() {
 	kernel.quotes = quote_load(0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x62, 0x63, 0x64, 0x65, 0x66, 0x61, 0);
 	local._activeMsgFl = false;
 
-	if (previous_room == RETURNING_FROM_DIALOG) {
+	if (previous_room == KERNEL_RESTORING_GAME) {
 		if (local._waitingMeteoFl) {
 			g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], false, 1);
 			player.walker_visible = false;
@@ -174,7 +174,7 @@ static void room_202_init() {
 static void setRandomKernelMessage() {
 	int vocabId = g_engine->getRandomNumber(92, 96);
 	kernel_message_purge();
-	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 	kernel_message_add(quote_string(kernel.quotes, vocabId), 0, 0, 0x1110, 120, 70, 34);
 	local._activeMsgFl = true;
 }
@@ -262,7 +262,7 @@ static void room_202_daemon() {
 				player2.words[0] = words_look;
 				player2.words[1] = words_binoculars;
 				player2.words[2] = words_strange_device;
-				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_PARSER;
+				kernel.trigger_setup_mode = KERNEL_TRIGGER_PARSER;
 				kernel_timing_trigger(2 * 60, 2);
 				local._meteorologistSpecial = true;
 			} else if (global[kMeteorologistWatch] == METEOROLOGIST_TOWER) {
@@ -280,7 +280,7 @@ static void room_202_daemon() {
 		g_sequence_ids[9] = kernel_seq_backward(g_sprite_ids[9], true, 6, 0, 0, 1);
 		kernel_seq_loc(g_sequence_ids[9], 247, 82);
 		kernel_seq_depth(g_sequence_ids[9], 1);
-		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
+		kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 91);
 		break;
 	case 91:
 		g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], true, 1);
@@ -293,7 +293,7 @@ static void room_202_daemon() {
 		kernel_seq_delete(g_sequence_ids[9]);
 		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[11], 1);
-		kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
+		kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 93);
 		kernel_message_purge();
 		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 98), 0, -65, 0x1110, 60, 0, 32);
 		kernel_message_attach(msgIndex, g_sequence_ids[11]);
@@ -437,7 +437,7 @@ static void room_202_pre_parser() {
 			kernel_seq_delete(g_sequence_ids[9]);
 			g_sequence_ids[8] = kernel_seq_backward(g_sprite_ids[8], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[8], 1);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 1);
 		} else if (kernel.trigger == 1) {
 			kernel_seq_timeout(g_sequence_ids[8], -1);
 			kernel_delete_dynamic(local._ladderHotspotId);
@@ -488,8 +488,8 @@ static void room_202_parser() {
 				player.walker_visible = false;
 				g_sequence_ids[7] = kernel_seq_pingpong(g_sprite_ids[7], false, 3, 0, 0, 2);
 				kernel_seq_player(g_sequence_ids[7], false);
-				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_SPRITE, 6, 1);
+				kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 		case 1:
@@ -531,7 +531,7 @@ static void room_202_parser() {
 			kernel_dynamic_walk(local._ladderHotspotId, 246, 124, FACING_NORTH);
 			g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[8], 1);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 		case 1:
 		{
@@ -561,7 +561,7 @@ static void room_202_parser() {
 				kernel_seq_loc(g_sequence_ids[10], 172, 123);
 				kernel_seq_depth(g_sequence_ids[10], 1);
 				kernel_seq_timeout(g_sequence_ids[10], -1);
-				kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[10], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 			case 1:
 				g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[9], false, 6);
@@ -583,7 +583,7 @@ static void room_202_parser() {
 				kernel_seq_depth(g_sequence_ids[10], 1);
 				kernel_seq_range(g_sequence_ids[10], 1, 6);
 				kernel_seq_loc(g_sequence_ids[10], 172, 123);
-				kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(g_sequence_ids[10], KERNEL_TRIGGER_EXPIRE, 0, 3);
 				break;
 			case 3:
 				kernel_seq_timeout(g_sequence_ids[10], -1);
@@ -603,7 +603,7 @@ static void room_202_parser() {
 				g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], true, 6, 0, 0, 1);
 				kernel_seq_loc(g_sequence_ids[9], 247, 82);
 				kernel_seq_depth(g_sequence_ids[9], 1);
-				kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 			case 1:
 				g_sequence_ids[10] = kernel_seq_stamp(g_sprite_ids[9], true, -2);
@@ -636,7 +636,7 @@ static void room_202_parser() {
 				g_sequence_ids[9] = kernel_seq_backward(g_sprite_ids[9], false, 6, 0, 0, 1);
 				kernel_seq_loc(g_sequence_ids[9], 247, 82);
 				kernel_seq_depth(g_sequence_ids[9], 1);
-				kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 3);
 				break;
 			case 3:
 				g_sequence_ids[9] = kernel_seq_stamp(g_sprite_ids[9], true, 1);
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 5411f3a9208..73308407704 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -50,7 +50,7 @@ static void room_203_init() {
 		player.x = 308;
 		player.y = 117;
 		player.facing = FACING_WEST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 155;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -64,7 +64,7 @@ static void room_203_init() {
 		player_walk(158, 135, FACING_SOUTH);
 		int idx = kernel_add_dynamic(words_field_to_south, words_walk_towards, 0, 0, 0, 0, 320, 156);
 		kernel_dynamic_walk(idx, 155, 152, FACING_SOUTH);
-		kernel_dynamic_cursor(idx, CURSOR_GO_DOWN);
+		kernel_dynamic_cursor(idx, CURSOR_DOWN);
 	}
 
 	if (!local._rhotundaEatFl) {
@@ -106,7 +106,7 @@ static void room_203_daemon() {
 		kernel_dump_all();
 		cursor_id = CURSOR_WAIT;
 		mouse_cursor_sprite(cursor, CURSOR_WAIT);
-		kernel_run_animation(kernel_full_name(203, 'a', -1, "", EXT_AA), 81);
+		kernel_run_animation(kernel_full_name(203, 'a', -1, "", KERNEL_AA), 81);
 	} else if (kernel.trigger == 81) {
 		new_room = 208;
 		kernel.force_restart = true;
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index 6a950dd1a70..6d08ccdf23a 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -98,7 +98,7 @@ static void room_205_init() {
 	if (global[kSexOfRex] == SEX_FEMALE)
 		kernel_random_messages_init(3, 195, 264, 99, 134, 13, 2, 0xFDFC, 60, 108, 108, 109, 109, 110, 110, 111, 108, 0);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 99;
 		player.y = 152;
 	}
@@ -112,9 +112,9 @@ static void room_205_init() {
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		kernel_seq_depth(g_sequence_ids[8], 2);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 6, 73);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 11, 74);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_SPRITE, 6, 73);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_SPRITE, 11, 74);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	section_2_music();
@@ -165,7 +165,7 @@ static void handleWomanSpeech(int quote) {
 }
 
 static void room_205_parser() {
-	if (inter_input_mode == kInputConversation) {
+	if (inter_input_mode == INTER_CONVERSATION) {
 		if (local._kernelMessage >= 0)
 			kernel_message_delete(local._kernelMessage);
 		local._kernelMessage = -1;
@@ -210,7 +210,7 @@ static void room_205_parser() {
 
 			case 0x77:
 				kernel_message_add(quote_string(kernel.quotes, 0x7F), 186, 27, 0xFBFA, 120, 0, 0);
-				kernel_set_interface_mode(kInputBuildingSentences);
+				kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 				break;
 
 			default:
@@ -252,7 +252,7 @@ static void room_205_parser() {
 			g_sprite_ids[9] = kernel_load_series(kernel_name('a', 0), 0);
 			kernel_new_palette();
 			g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 6, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			kernel_seq_timeout(-1, g_sequence_ids[9]);
 			g_engine->_soundManager->command(27, 0);
 		} else if (kernel.trigger == 1) {
@@ -282,9 +282,9 @@ static void room_205_parser() {
 			text_show(20503);
 		else if (player_said_2(look, hut))
 			text_show(20504);
-		else if (player_said_2(look, chicken) && (player.main_object_source == CAT_HOTSPOT))
+		else if (player_said_2(look, chicken) && (player.main_object_source == STROKE_INTERFACE))
 			text_show(20505);
-		else if (player_said_2(take, chicken) && (player.main_object_source == CAT_HOTSPOT))
+		else if (player_said_2(take, chicken) && (player.main_object_source == STROKE_INTERFACE))
 			text_show(20506);
 		else if (player_said_2(look, chicken_on_spit))
 			text_show(20507);
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index d1c5e4c8932..d720d6f7991 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -91,7 +91,7 @@ static void room_207_init() {
 		player.x = 164;
 		player.y = 117;
 		player.facing = FACING_SOUTH;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 305;
 		player.y = 131;
 	}
@@ -101,7 +101,7 @@ static void room_207_init() {
 	g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 10, 0, 0, 1);
 	kernel_seq_range(g_sequence_ids[6], 1, 22);
 	kernel_seq_depth(g_sequence_ids[6], 6);
-	kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+	kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 70);
 }
 
 static void moveVulture() {
@@ -150,7 +150,7 @@ static void room_207_daemon() {
 		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[7], 6);
 		kernel_seq_depth(g_sequence_ids[8], 6);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		local._eyeFl = true;
 	}
 }
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index 4f5aead400b..f17ed3af136 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -101,7 +102,7 @@ static void room_208_init() {
 		player.x = 307;
 		player.y = 123;
 		player.facing = FACING_WEST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 162;
 		player.y = 149;
 		player.facing = FACING_NORTH;
@@ -186,7 +187,7 @@ static void subAction(int mode) {
 		else
 			endTrigger = 2;
 
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, endTrigger);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, endTrigger);
 	}
 	break;
 	case 1:
@@ -196,7 +197,7 @@ static void subAction(int mode) {
 		kernel_seq_range(g_sequence_ids[5], 3, 4);
 		kernel_seq_player(g_sequence_ids[5], false);
 		kernel_seq_timeout(oldSeq, g_sequence_ids[5]);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		g_engine->_soundManager->command(20, 0);
 	}
 	break;
@@ -242,7 +243,7 @@ static void subAction(int mode) {
 		kernel_seq_range(g_sequence_ids[5], 1, 3);
 		kernel_seq_player(g_sequence_ids[5], false);
 		kernel_seq_timeout(oldVal, g_sequence_ids[5]);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 214b3b97252..3af8b22b253 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -91,7 +91,7 @@ static void handlePeek() {
 		g_engine->_soundManager->command(18, 0);
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 51, 52);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 134);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 134);
 		break;
 
 	case 134:
@@ -119,7 +119,7 @@ static void handlePeek() {
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 51, 52);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 138);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 138);
 		break;
 
 	case 138:
@@ -138,7 +138,7 @@ static void handleVerticalMove() {
 	case 140:
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 1, 0, 8);
 		kernel_seq_range(g_sequence_ids[3], 1, 5);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 141);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 141);
 		break;
 
 	case 141:
@@ -155,7 +155,7 @@ static void handleVerticalMove() {
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 1, 5);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 143);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 143);
 		break;
 
 	case 143:
@@ -176,7 +176,7 @@ static void handleLookStay() {
 		local._monkeyPosition = 2;
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 51, 52);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 146);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 146);
 		break;
 
 	case 146:
@@ -221,7 +221,7 @@ static void handleLookRight() {
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[3], 8, 14);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 152);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 152);
 		break;
 
 	case 152:
@@ -283,11 +283,11 @@ static void handleGetBinoculars() {
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 8, 24);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 20, 165);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 20, 165);
 		if (!local._fallFl && !local._dodgeFl) {
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 162);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 162);
 		} else {
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 163);
 		}
 		break;
 
@@ -297,7 +297,7 @@ static void handleGetBinoculars() {
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 6);
 		kernel_seq_range(g_sequence_ids[3], 23, 25);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 163);
 	}
 	break;
 
@@ -335,7 +335,7 @@ static void handleBinocularBlink() {
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 8, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[3], 23, 25);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 168);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 168);
 	}
 	break;
 
@@ -369,7 +369,7 @@ static void handleBinocularScan() {
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[3], 43, 45);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 172);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 172);
 	}
 	break;
 
@@ -389,7 +389,7 @@ static void handleBinocularScan() {
 		}
 		kernel_seq_range(g_sequence_ids[3], 23, 25);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 173);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 173);
 	}
 	break;
 
@@ -399,7 +399,7 @@ static void handleBinocularScan() {
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[3], 26, 30);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 174);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 174);
 	}
 	break;
 
@@ -440,7 +440,7 @@ static void handleJumpInTree() {
 		if (!local._removeMonkeyFl)
 			kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
 
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 179);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 179);
 	}
 	break;
 
@@ -451,7 +451,7 @@ static void handleJumpInTree() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 53, 61);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 180);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 180);
 	}
 	break;
 
@@ -476,7 +476,7 @@ static void handleTongue() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 26, 30);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 183);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 183);
 	}
 	break;
 
@@ -486,7 +486,7 @@ static void handleTongue() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 31, 33);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 184);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 184);
 	}
 	break;
 
@@ -496,7 +496,7 @@ static void handleTongue() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 36, 37);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 185);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 185);
 	}
 	break;
 
@@ -507,7 +507,7 @@ static void handleTongue() {
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 6, 0, 0, 20);
 		kernel_seq_range(g_sequence_ids[3], 38, 39);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 186);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 186);
 	}
 	break;
 
@@ -517,7 +517,7 @@ static void handleTongue() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 40, 41);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 178);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 178);
 		local._removeMonkeyFl = false;
 	}
 	break;
@@ -546,7 +546,7 @@ static void handleStandFromPeek() {
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[6], 1, 5);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 192);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 192);
 		break;
 
 	case 192:
@@ -612,7 +612,7 @@ static void handleJumpAndHide() {
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[5], 1, 16);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 197);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 197);
 		break;
 
 	case 197:
@@ -633,7 +633,7 @@ static void handleMonkeyEating() {
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[4], 1, 14);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 200);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 200);
 		break;
 
 	case 200:
@@ -642,7 +642,7 @@ static void handleMonkeyEating() {
 		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 10);
 		kernel_seq_range(g_sequence_ids[4], 15, 16);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 201);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 201);
 	}
 	break;
 
@@ -671,7 +671,7 @@ static void handleMonkeyEating() {
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 8);
 		kernel_seq_range(g_sequence_ids[4], 18, 19);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 205);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 205);
 		break;
 
 	case 205:
@@ -680,7 +680,7 @@ static void handleMonkeyEating() {
 		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 8);
 		kernel_seq_range(g_sequence_ids[4], 20, 21);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 206);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 206);
 	}
 	break;
 
@@ -691,9 +691,9 @@ static void handleMonkeyEating() {
 		kernel_seq_range(g_sequence_ids[4], 22, 25);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
 		if (!local._dodgeFl && !local._fallFl)
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 207);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 207);
 		else
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 209);
 	}
 	break;
 
@@ -707,7 +707,7 @@ static void handleMonkeyEating() {
 		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 15, 0, 0, 4);
 		kernel_seq_range(g_sequence_ids[4], 26, 27);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 208);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 208);
 	}
 	break;
 
@@ -718,7 +718,7 @@ static void handleMonkeyEating() {
 		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 4);
 		kernel_seq_range(g_sequence_ids[4], 28, 29);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[4]);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 209);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 209);
 	}
 	break;
 
@@ -761,7 +761,7 @@ static void handleMonkeyFall() {
 		kernel_seq_range(g_sequence_ids[8], 1, 35);
 		kernel_seq_depth(g_sequence_ids[8], 6);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 220);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 220);
 	}
 	break;
 
@@ -777,7 +777,7 @@ static void handleMonkeyFall() {
 		kernel_seq_range(g_sequence_ids[8], 36, 42);
 		kernel_seq_depth(g_sequence_ids[8], 6);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 221);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 221);
 	}
 	break;
 
@@ -793,7 +793,7 @@ static void handleMonkeyFall() {
 		kernel_seq_depth(g_sequence_ids[9], 8);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[8]);
 		kernel_seq_range(g_sequence_ids[8], 43, 72);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 222);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 222);
 		int idx = kernel_add_dynamic(words_binoculars, words_walkto, 0, g_sequence_ids[9], 0, 0, 0, 0);
 		kernel_dynamic_walk(idx, 200, 133, FACING_NORTH);
 	}
@@ -806,12 +806,12 @@ static void handleMonkeyFall() {
 		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[8], 73, 78);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[8]);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 223);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 223);
 	}
 	break;
 
 	case 223:
-		kernel_run_animation(kernel_full_name(209, 'e', -1, "", EXT_AA), 224);
+		kernel_run_animation(kernel_full_name(209, 'e', -1, "", KERNEL_AA), 224);
 		g_engine->_soundManager->command(38, 0);
 		break;
 
@@ -835,7 +835,7 @@ static void handleMonkey1() {
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 9, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[4], 1, 13);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 213);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 213);
 		break;
 
 	case 213:
@@ -844,7 +844,7 @@ static void handleMonkey1() {
 		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[7], 1, 22);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[7]);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 214);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 214);
 	}
 	break;
 
@@ -854,7 +854,7 @@ static void handleMonkey1() {
 		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[7], 23, 26);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[7]);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 215);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 215);
 		int msgIndex = kernel_message_add(quote_string(kernel.quotes, 156), 170, 21, 0xFDFC, 90, 0, 0);
 		kernel_message_teletype(msgIndex, 3, true);
 	}
@@ -863,12 +863,12 @@ static void handleMonkey1() {
 	case 215:
 	{
 		g_engine->_soundManager->command(18, 0);
-		kernel_run_animation(kernel_full_name(209, 'a', -1, "", EXT_AA), 251);
+		kernel_run_animation(kernel_full_name(209, 'a', -1, "", KERNEL_AA), 251);
 		int oldIdx = g_sequence_ids[7];
 		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[7], 27, 35);
 		kernel_seq_timeout(oldIdx, g_sequence_ids[7]);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 216);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 216);
 	}
 	break;
 
@@ -902,7 +902,7 @@ static void handleMonkey2() {
 		kernel_seq_loc(g_sequence_ids[12], 111, 133);
 		kernel_seq_scale(g_sequence_ids[12], 79);
 		kernel_seq_range(g_sequence_ids[12], 1, 6);
-		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 252);
+		kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 252);
 		player.clock = kernel.clock - player.frame_delay;
 		player.walker_visible = false;
 		break;
@@ -998,7 +998,7 @@ static void room_209_init() {
 		player.x = 11;
 		player.y = 121;
 		player.facing = FACING_EAST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 28;
 		player.y = 121;
 		player.facing = FACING_SOUTH;
@@ -1270,7 +1270,7 @@ static void room_209_daemon() {
 			kernel_seq_range(g_sequence_ids[2], 1, 7);
 			kernel_seq_loc(g_sequence_ids[2], 116, 131);
 			kernel_seq_depth(g_sequence_ids[2], 4);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 229);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 229);
 			break;
 
 		case 229:
@@ -1290,7 +1290,7 @@ static void room_209_daemon() {
 			kernel_seq_range(g_sequence_ids[2], 1, 7);
 			kernel_seq_loc(g_sequence_ids[2], 116, 131);
 			kernel_seq_depth(g_sequence_ids[2], 4);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 231);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 231);
 			break;
 
 		case 231:
@@ -1301,7 +1301,7 @@ static void room_209_daemon() {
 			kernel_seq_loc(g_sequence_ids[2], 116, 131);
 			kernel_seq_depth(g_sequence_ids[2], 4);
 			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 232);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 232);
 			player.clock = kernel.clock - player.frame_delay;
 			kernel_seq_timeout(-1, g_sequence_ids[2]);
 			player.walker_visible = false;
@@ -1336,14 +1336,14 @@ static void room_209_daemon() {
 				kernel_seq_range(g_sequence_ids[2], 11, 12);
 				kernel_seq_loc(g_sequence_ids[2], 116, 131);
 				kernel_seq_depth(g_sequence_ids[2], 4);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 12, 239);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 12, 239);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 235);
 			} else if (player_said_3(shoot, blowgun, monkey)) {
 				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[2], 11, 12);
 				kernel_seq_loc(g_sequence_ids[2], 116, 131);
 				kernel_seq_depth(g_sequence_ids[2], 4);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 235);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 235);
 				g_engine->_soundManager->command(23, 0);
 			}
 			break;
@@ -1367,7 +1367,7 @@ static void room_209_daemon() {
 			kernel_seq_range(g_sequence_ids[2], 14, 16);
 			kernel_seq_loc(g_sequence_ids[2], 116, 131);
 			kernel_seq_depth(g_sequence_ids[2], 4);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 237);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 237);
 			break;
 
 		case 237:
@@ -1563,7 +1563,7 @@ static void room_209_parser() {
 		if ((player_said_1(shoot) || player_said_1(hose_down)) && player_said_1(monkey)
 			&& player_said_1(blowgun) && player_has(OBJ_BLOWGUN) && player_has(OBJ_POISON_DARTS)) {
 			if (player_said_3(shoot, blowgun, monkey) && !local._startShootingInTimerFl) {
-				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+				kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 				kernel_timing_trigger(1, 231);
 				local._startShootingInTimerFl = true;
 				player.commands_allowed = false;
@@ -1573,7 +1573,7 @@ static void room_209_parser() {
 			}
 
 			if (player_said_3(hose_down, blowgun, monkey) && !local._startShootingInTimerFl) {
-				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+				kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 				kernel_timing_trigger(1, 228);
 				player.commands_allowed = false;
 				local._fallFl = true;
@@ -1599,8 +1599,8 @@ static void room_209_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[11] = kernel_seq_pingpong(g_sprite_ids[11], false, 3, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[11], false);
-			kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -1633,8 +1633,8 @@ static void room_209_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[10] = kernel_seq_pingpong(g_sprite_ids[10], false, 3, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[10], false);
-			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[10], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[10], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index eefeb659049..8187ec91507 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -102,7 +103,7 @@ static void newNode(int node) {
 static void setDialogNode(int node) {
 	switch (node) {
 	case 0:
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		local._shouldFaceRex = false;
 		local._shouldTalk = false;
 		player.commands_allowed = true;
@@ -176,7 +177,7 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 
 			int quote;
-			if (config_file.naughtiness == STORYMODE_NAUGHTY)
+			if (config_file.naughtiness == NAUGHTY)
 				quote = g_engine->getRandomNumber(199, 201);
 			else
 				quote = g_engine->getRandomNumber(197, 198);
@@ -188,7 +189,7 @@ static void setDialogNode(int node) {
 				kernel_timing_trigger(6, 1);
 			}
 		} else {
-			kernel_set_interface_mode(kInputBuildingSentences);
+			kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 			local._shouldFaceRex = false;
 			local._shouldTalk = false;
 			player.commands_allowed = true;
@@ -321,7 +322,7 @@ static void setDialogNode(int node) {
 			player.commands_allowed = false;
 			if (local._twinklesTalking) {
 				inter_reset_dialog();
-				kernel_set_interface_mode(kInputConversation);
+				kernel_set_interface_mode(INTER_CONVERSATION);
 				handleTwinklesSpeech(0xE4, -1, 0);
 				kernel_timing_trigger(180, 2);
 			} else {
@@ -627,7 +628,7 @@ static void room_210_init() {
 		player.y = 128;
 		player.facing = FACING_SOUTH;
 		global[kCurtainOpen] = true;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 308;
 		player.y = 132;
 	}
@@ -639,7 +640,7 @@ static void room_210_init() {
 		int idx = kernel_add_dynamic(words_doorway, words_walk_through, 0, -1, 163, 87, 19, 36);
 		kernel_dynamic_walk(idx, 168, 127, FACING_NORTH);
 		local._doorway = idx;
-		kernel_dynamic_cursor(local._doorway, CURSOR_GO_UP);
+		kernel_dynamic_cursor(local._doorway, CURSOR_UP);
 	}
 
 	kernel.quotes = quote_load(0x5A, 0x73, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xB7,
@@ -667,7 +668,7 @@ static void room_210_init() {
 	local._twinkleAnimationType = 0;
 	local._twinklesCurrentFrame = 0;
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		local._shouldMoveHead = false;
 		local._shouldFaceRex = false;
 		local._shouldTalk = false;
@@ -911,7 +912,7 @@ static void room_210_pre_parser() {
 static void room_210_parser() {
 	if (player_said_3(look, binoculars, hut_to_north)) {
 		text_show(21017);
-	} else if (inter_input_mode == kInputConversation) {
+	} else if (inter_input_mode == INTER_CONVERSATION) {
 		handleConversations();
 	} else if (player_said_2(talkto, native_woman) ||
 		((Common::Point(player.x, player.y) == Common::Point(214, 150)) && (player.facing == FACING_NORTHWEST) && (local._twinkleAnimationType == 1) && local._stopWalking)) {
@@ -999,7 +1000,7 @@ static void room_210_parser() {
 			kernel_seq_delete(g_sequence_ids[1]);
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 12, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[1], 5);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -1007,7 +1008,7 @@ static void room_210_parser() {
 			global[kCurtainOpen] = true;
 			local._doorway = kernel_add_dynamic(words_doorway, words_walk_through, 0, -1, 163, 87, 19, 36);
 			kernel_dynamic_walk(local._doorway, 168, 127, FACING_NORTH);
-			kernel_dynamic_cursor(local._doorway, CURSOR_GO_UP);
+			kernel_dynamic_cursor(local._doorway, CURSOR_UP);
 			break;
 
 		default:
@@ -1021,7 +1022,7 @@ static void room_210_parser() {
 			player.facing = FACING_NORTH;
 			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 12, 1, 0, 0);
 			kernel_seq_depth(g_sequence_ids[1], 5);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			player.commands_allowed = false;
 			break;
 		case 1:
@@ -1039,7 +1040,7 @@ static void room_210_parser() {
 		}
 	} else if (player_said_2(look, hut)) {
 		if (global[kTwinklesStatus] == TWINKLES_GONE) {
-			if (config_file.naughtiness == STORYMODE_NAUGHTY)
+			if (config_file.naughtiness == NAUGHTY)
 				text_show(21003);
 			else
 				text_show(21002);
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index 4c5f53a3174..42326e1d787 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -60,7 +61,7 @@ static void room_211_init() {
 		player.walker_visible = false;
 		kernel_run_animation(kernel_name('A', -1), 100);
 		kernel_reset_animation(0, 169);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 310;
 		player.y = 31;
 		player.facing = FACING_SOUTHWEST;
@@ -70,7 +71,7 @@ static void room_211_init() {
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 0);
 		kernel_seq_loc(g_sequence_ids[2], 202, 126);
 		kernel_seq_depth(g_sequence_ids[2], 8);
-		kernel_seq_motion(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, -200, 0);
+		kernel_seq_motion(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, -200, 0);
 		kernel_add_dynamic(words_slithering_snake, words_walkto, 0, g_sequence_ids[2], 1, 1, 41, 10);
 	}
 
@@ -294,7 +295,7 @@ static void room_211_parser() {
 		text_show(21102);
 	else if (player_said_2(look, palm_tree)) {
 		if (global[kMonkeyStatus] == MONKEY_AMBUSH_READY) {
-			if (config_file.naughtiness == STORYMODE_NAUGHTY)
+			if (config_file.naughtiness == NAUGHTY)
 				text_show(21103);
 			else
 				text_show(21104);
@@ -302,7 +303,7 @@ static void room_211_parser() {
 			text_show(21105);
 		}
 	} else if (player_said_2(look, thick_undergrowth)) {
-		if (config_file.naughtiness == STORYMODE_NAUGHTY)
+		if (config_file.naughtiness == NAUGHTY)
 			text_show(21106);
 		else
 			text_show(21107);
diff --git a/engines/mads/nebular/rooms/room212.cpp b/engines/mads/nebular/rooms/room212.cpp
index f64f1b78617..fc4f32fe122 100644
--- a/engines/mads/nebular/rooms/room212.cpp
+++ b/engines/mads/nebular/rooms/room212.cpp
@@ -36,7 +36,7 @@ static void room_212_init() {
 		player.x = 195;
 		player.y = 85;
 		player.facing = FACING_SOUTH;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 67;
 		player.y = 117;
 		player.facing = FACING_NORTHEAST;
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index 826db8ebd7b..fed1e3376ad 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -64,7 +65,7 @@ static void room_214_init() {
 		kernel_flip_hotspot(words_blowgun, false);
 	}
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 191;
 		player.y = 152;
 	}
@@ -79,7 +80,7 @@ static void room_214_daemon() {
 		kernel_seq_range(g_sequence_ids[3], 1, 4);
 		kernel_seq_depth(g_sequence_ids[3], 2);
 		kernel_add_dynamic(words_captive_creature, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (local._devilRunningFl) {
@@ -92,7 +93,7 @@ static void room_214_daemon() {
 			kernel_add_dynamic(words_captive_creature, words_walkto, 0, g_sequence_ids[3], 0, 0, 0, 0);
 			kernel_seq_range(g_sequence_ids[3], 5, 8);
 			kernel_seq_depth(g_sequence_ids[3], 2);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		}
 		break;
 
@@ -127,13 +128,13 @@ static void room_214_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], true, 6, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
 			g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], true, 6, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			kernel_seq_delete(g_sequence_ids[1]);
 			inter_give_to_player(OBJ_POISON_DARTS);
 			kernel_flip_hotspot(words_poison_darts, false);
@@ -159,13 +160,13 @@ static void room_214_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
 			g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 6, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			kernel_seq_delete(g_sequence_ids[2]);
 			inter_give_to_player(OBJ_BLOWGUN);
 			kernel_flip_hotspot(words_blowgun, false);
@@ -195,7 +196,7 @@ static void room_214_parser() {
 	else if (player_said_2(look, trophy))
 		text_show(21405);
 	else if (player_said_2(look, large_bowl)) {
-		if (config_file.naughtiness == STORYMODE_NAUGHTY) {
+		if (config_file.naughtiness == NAUGHTY) {
 			text_show(21406);
 		} else {
 			text_show(21407);
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index 898ebe9f406..ec1cbd9b58f 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -52,7 +52,7 @@ static void room_215_init() {
 		player.commands_allowed = false;
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 		kernel_timing_trigger(120, 70);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 204;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -66,7 +66,7 @@ static void room_215_daemon() {
 	if (kernel.trigger == 70) {
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
 	}
 
 	if (kernel.trigger == 71) {
@@ -89,8 +89,8 @@ static void room_215_parser() {
 					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 6, 0, 0, 2);
 					kernel_seq_range(g_sequence_ids[2], 1, 4);
 					kernel_seq_player(g_sequence_ids[2], false);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_LOOP, 0, 1);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_LOOP, 0, 1);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					inter_give_to_player(OBJ_TWINKIFRUIT);
 					object_examine(OBJ_TWINKIFRUIT, 0x5404, 0);
diff --git a/engines/mads/nebular/rooms/room216.cpp b/engines/mads/nebular/rooms/room216.cpp
index c6e4ebf7c71..ab0da38b97b 100644
--- a/engines/mads/nebular/rooms/room216.cpp
+++ b/engines/mads/nebular/rooms/room216.cpp
@@ -36,7 +36,7 @@ void room_216_init() {
 	player.walker_visible = false;
 
 	inter_reset_dialog();
-	kernel_set_interface_mode(kInputConversation);
+	kernel_set_interface_mode(INTER_CONVERSATION);
 	kernel_run_animation(kernel_name('A', -1), 60);
 
 	section_2_music();
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index c46d88f1790..b8e79f05c67 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -96,8 +97,8 @@ static void room_304_daemon() {
 			int sprIdx = kernel_seq_forward(local._explosionSpriteId, false, 8, 0, 0, 1);
 			kernel_seq_range(sprIdx, -1, 4);
 			kernel_seq_depth(sprIdx, 1);
-			kernel_seq_trigger(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			kernel_seq_trigger(sprIdx, KERNEL_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 74);
 		}
 		break;
 
@@ -113,9 +114,9 @@ static void room_304_daemon() {
 			int sprIdx = kernel_seq_forward(local._explosionSpriteId, false, 8, 0, 0, 1);
 			kernel_seq_range(sprIdx, 5, -2);
 			kernel_seq_depth(sprIdx, 1);
-			kernel_seq_trigger(sprIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 73);
-			if (config_file.naughtiness == STORYMODE_NICE)
-				kernel_seq_trigger(sprIdx, SEQUENCE_TRIGGER_SPRITE, 8, 78);
+			kernel_seq_trigger(sprIdx, KERNEL_TRIGGER_EXPIRE, 0, 73);
+			if (config_file.naughtiness == NICE)
+				kernel_seq_trigger(sprIdx, KERNEL_TRIGGER_SPRITE, 8, 78);
 		}
 		break;
 
@@ -131,14 +132,14 @@ static void room_304_daemon() {
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], 5, -2);
 			kernel_seq_depth(g_sequence_ids[2], 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 75);
 			break;
 
 		case 75:
 			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], 2, -2);
 			kernel_seq_depth(g_sequence_ids[2], 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 76);
 			break;
 
 		case 76:
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index b50ed8f7983..466c7663306 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/matte.h"
 #include "mads/core/pal.h"
@@ -83,7 +84,7 @@ static void handlePrisonerSpeech(int firstQuoteId, int number, uint32 timeout) {
 
 	int quoteId = firstQuoteId;
 	for (int count = 0; count < number; count++) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_message_add(quote_string(kernel.quotes, quoteId), 5, posY, 0xFDFC, timeout, 81, 0);
 		posY += 14;
 		quoteId++;
@@ -94,7 +95,7 @@ static void setDialogNode(int node) {
 	switch (node) {
 	case 0:
 		handlePrisonerSpeech(0x153, 2, 120);
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		break;
 
 	case 1:
@@ -111,7 +112,7 @@ static void setDialogNode(int node) {
 
 	case 4:
 		handlePrisonerSpeech(0x116, 1, 120);
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		break;
 
 	case 5:
@@ -122,7 +123,7 @@ static void setDialogNode(int node) {
 
 	case 6:
 		handlePrisonerSpeech(0x123, 1, 120);
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		break;
 
 	case 7:
@@ -183,7 +184,7 @@ static void setDialogNode(int node) {
 
 	case 15:
 		handlePrisonerSpeech(0x152, 1, 120);
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		break;
 
 	case 16:
@@ -309,7 +310,7 @@ static void room_307_init() {
 		local._dialog2.write(0x11E, true);
 
 
-	if (previous_room == RETURNING_FROM_DIALOG) {
+	if (previous_room == KERNEL_RESTORING_GAME) {
 		if (local._grateOpenedFl)
 			g_engine->_soundManager->command(10, 0);
 		else
@@ -352,7 +353,7 @@ static void room_307_init() {
 		int idx = kernel_add_dynamic(words_air_vent, words_climb_into, 0, -1, 117, 67, 19, 13);
 		kernel_dynamic_walk(idx, 129, 104, FACING_NORTH);
 		int hotspotId = idx;
-		kernel_dynamic_cursor(hotspotId, CURSOR_GO_UP);
+		kernel_dynamic_cursor(hotspotId, CURSOR_UP);
 
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 2);
@@ -414,7 +415,7 @@ static void room_307_daemon() {
 		local._lastFrameTime = kernel.clock;
 
 		if ((local._guardTime > 3000) && !local._duringPeeingFl && (kernel_anim[0].anim == nullptr)
-			&& (inter_input_mode != kInputConversation) && global[kMetBuddyBeast] && !local._activePrisonerFl) {
+			&& (inter_input_mode != INTER_CONVERSATION) && global[kMetBuddyBeast] && !local._activePrisonerFl) {
 			if (!player_has(OBJ_SCALPEL) && !local._grateOpenedFl) {
 				player.commands_allowed = false;
 				player_walk(151, 119, FACING_SOUTHEAST);
@@ -423,7 +424,7 @@ static void room_307_daemon() {
 				kernel_run_animation(kernel_name('b', -1), 70);
 			}
 			local._guardTime = 0;
-		} else if ((local._prisonerTimer > 300) && (inter_input_mode != kInputConversation) && (kernel_anim[0].anim == nullptr) && !local._activePrisonerFl) {
+		} else if ((local._prisonerTimer > 300) && (inter_input_mode != INTER_CONVERSATION) && (kernel_anim[0].anim == nullptr) && !local._activePrisonerFl) {
 			if (!global[kMetBuddyBeast]) {
 				if (local._prisonerMessageId == -1)
 					local._prisonerMessageId = 0x104;
@@ -456,7 +457,7 @@ static void room_307_daemon() {
 static void room_307_parser() {
 	if (player.look_around)
 		text_show(30715);
-	else if (inter_input_mode == kInputConversation)
+	else if (inter_input_mode == INTER_CONVERSATION)
 		handleDialog();
 	else if (player_said_2(talkto, cell_wall) || player_said_2(talkto, wall) || player_said_2(talkto, toilet)) {
 		int node, say;
@@ -498,7 +499,7 @@ static void room_307_parser() {
 			g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[5], -1, 3);
 			kernel_seq_player(g_sequence_ids[5], false);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
@@ -508,7 +509,7 @@ static void room_307_parser() {
 			kernel_seq_player(g_sequence_ids[5], false);
 			kernel_seq_range(g_sequence_ids[5], 2, 3);
 			kernel_seq_timeout(oldIdx, g_sequence_ids[5]);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
@@ -548,7 +549,7 @@ static void room_307_parser() {
 			int idx = kernel_add_dynamic(words_air_vent, words_climb_into, 0, -1, 117, 67, 19, 13);
 			kernel_dynamic_walk(idx, 129, 104, FACING_NORTH);
 			int hotspotId = idx;
-			kernel_dynamic_cursor(hotspotId, CURSOR_GO_UP);
+			kernel_dynamic_cursor(hotspotId, CURSOR_UP);
 			inter_take_from_player(OBJ_SCALPEL, NOWHERE);
 			kernel_message_player(0xF2, 120, 7);
 		}
@@ -577,8 +578,8 @@ static void room_307_parser() {
 				g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 18, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[5], -1, 4);
 				kernel_seq_player(g_sequence_ids[5], false);
-				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
@@ -594,7 +595,7 @@ static void room_307_parser() {
 				kernel_seq_range(g_sequence_ids[5], 4, 10);
 				kernel_seq_player(g_sequence_ids[5], false);
 				kernel_seq_timeout(oldIdx, g_sequence_ids[5]);
-				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			}
 			break;
 
@@ -619,7 +620,7 @@ static void room_307_parser() {
 				kernel_seq_range(g_sequence_ids[5], 12, 14);
 				kernel_seq_player(g_sequence_ids[5], false);
 				kernel_seq_loc(g_sequence_ids[5], 129, 102);
-				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+				kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 5);
 				break;
 
 			case 5:
@@ -646,7 +647,7 @@ static void room_307_parser() {
 				break;
 			}
 		}
-	} else if (player_said_2(use, toilet) && (config_file.naughtiness != STORYMODE_NAUGHTY))
+	} else if (player_said_2(use, toilet) && (config_file.naughtiness != NAUGHTY))
 		text_show(30723);
 	else if (player_said_2(use, toilet)) {
 		if (!local._afterPeeingFl) {
@@ -660,14 +661,14 @@ static void room_307_parser() {
 				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[3], -1, 2);
 				kernel_seq_depth(g_sequence_ids[3], 9);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
 				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 5);
 				kernel_seq_range(g_sequence_ids[3], 3, -2);
 				kernel_seq_depth(g_sequence_ids[3], 9);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 2:
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index ec892da9bb7..85443d8a995 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -48,7 +48,7 @@ static void room_308_init() {
 	init_forcefield(&local._forcefield, true);
 
 	g_sprite_ids[3] = kernel_load_series(kernel_name('b', 0), 0);
-	g_sprite_ids[4] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 
 	pal_change_color(252, 63, 30, 20);
 	pal_change_color(253, 45, 15, 12);
@@ -87,7 +87,7 @@ static void room_308_daemon() {
 		kernel_message_purge();
 		int idx = kernel_message_add(quote_string(kernel.quotes, 244), 171, 21, 0xFDFC, 120, 0, 0);
 		kernel_message_teletype(idx, 2, true);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
 	}
 	break;
 
@@ -107,7 +107,7 @@ static void room_308_daemon() {
 		kernel_seq_range(g_sequence_ids[3], 3, 4);
 		kernel_seq_depth(g_sequence_ids[3], 9);
 		kernel_message_purge();
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 73);
 		break;
 
 	case 73:
@@ -129,7 +129,7 @@ static void room_308_daemon() {
 		kernel_message_purge();
 		int idx = kernel_message_add(quote_string(kernel.quotes, 245), 171, 21, 0xFDFC, 120, 0, 0);
 		kernel_message_teletype(idx, 2, true);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 75);
 	}
 	break;
 
@@ -140,7 +140,7 @@ static void room_308_daemon() {
 		kernel_seq_range(g_sequence_ids[3], 8, 10);
 		kernel_seq_depth(g_sequence_ids[3], 9);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[3]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 76);
 	}
 	break;
 
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index b6511aff4bc..e81cd585196 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -51,7 +51,7 @@ static void room_309_init() {
 	init_forcefield(&local._forcefield, true);
 
 	g_sprite_ids[3] = kernel_load_series(kernel_name('x', 0), 0);
-	g_sprite_ids[4] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[4] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 
 	g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, 1);
 	kernel_seq_loc(g_sequence_ids[4], 127, 78);
@@ -60,7 +60,7 @@ static void room_309_init() {
 	g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 0, 0, 1);
 	kernel_seq_range(g_sequence_ids[3], -1, 3);
 	kernel_seq_depth(g_sequence_ids[3], 11);
-	kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 3, 70);
+	kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 3, 70);
 
 	pal_change_color(252, 63, 37, 26);
 	pal_change_color(253, 45, 24, 17);
@@ -139,7 +139,7 @@ static void room_309_daemon() {
 			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 4);
 			kernel_seq_range(g_sequence_ids[3], 2, 3);
 			kernel_seq_depth(g_sequence_ids[3], 11);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		}
 		break;
 
@@ -152,7 +152,7 @@ static void room_309_daemon() {
 			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
 			int idx = kernel_message_add(quote_string(kernel.quotes, 248), 85, 37, 0xFDFC, 120, 0, 0);
 			kernel_message_teletype(idx, 2, true);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		}
 		break;
 
@@ -163,7 +163,7 @@ static void room_309_daemon() {
 			kernel_seq_range(g_sequence_ids[3], 8, 11);
 			kernel_seq_depth(g_sequence_ids[3], 11);
 			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 73);
 		}
 		break;
 
@@ -176,7 +176,7 @@ static void room_309_daemon() {
 			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
 			int idx = kernel_message_add(quote_string(kernel.quotes, 249), 170, 49, 0xFDFC, 120, 0, 0);
 			kernel_message_teletype(idx, 2, true);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 74);
 		}
 		break;
 
@@ -187,7 +187,7 @@ static void room_309_daemon() {
 			kernel_seq_range(g_sequence_ids[3], 21, 23);
 			kernel_seq_depth(g_sequence_ids[3], 11);
 			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 75);
 		}
 		break;
 
@@ -198,7 +198,7 @@ static void room_309_daemon() {
 			kernel_seq_range(g_sequence_ids[3], 24, 25);
 			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
 			kernel_seq_depth(g_sequence_ids[3], 11);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 76);
 		}
 		break;
 
@@ -209,7 +209,7 @@ static void room_309_daemon() {
 			kernel_seq_range(g_sequence_ids[3], 26, 28);
 			kernel_seq_timeout(_oldIdx, g_sequence_ids[3]);
 			kernel_seq_depth(g_sequence_ids[3], 11);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 77);
 		}
 		break;
 
diff --git a/engines/mads/nebular/rooms/room310.cpp b/engines/mads/nebular/rooms/room310.cpp
index 387737fdf92..a536e7fe9ed 100644
--- a/engines/mads/nebular/rooms/room310.cpp
+++ b/engines/mads/nebular/rooms/room310.cpp
@@ -46,7 +46,7 @@ static void room_310_init() {
 
 	init_forcefield(&local._forcefield, true);
 
-	g_sprite_ids[3] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 	kernel_seq_loc(g_sequence_ids[3], 127, 78);
 	kernel_seq_depth(g_sequence_ids[3], 15);
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index 1aee4c2a5b9..9bd92e85608 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -39,7 +39,7 @@ static Scratch local;
 
 
 static void room_311_init() {
-	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 	g_sprite_ids[2] = kernel_load_series("*RXCL_8", 0);
 	g_sprite_ids[3] = kernel_load_series("*RXCL_2", 0);
 
@@ -66,7 +66,7 @@ static void room_311_init() {
 		player.x = 129;
 		player.y = 113;
 		player.facing = FACING_SOUTH;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.walker_visible = false;
 		player.commands_allowed = false;
 		kernel_run_animation(kernel_name('a', -1), 70);
@@ -118,7 +118,7 @@ static void room_311_daemon() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 4, 5);
 		kernel_seq_player(g_sequence_ids[3], false);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 75);
 		break;
 
 	case 75:
@@ -165,7 +165,7 @@ static void room_311_daemon() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 10, -2);
 		kernel_seq_player(g_sequence_ids[3], false);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 80);
 		break;
 
 	case 80:
@@ -214,8 +214,8 @@ static void room_311_parser() {
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], -1, 4);
 			kernel_seq_player(g_sequence_ids[2], false);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -235,7 +235,7 @@ static void room_311_parser() {
 			kernel_seq_range(g_sequence_ids[2], 4, 10);
 			kernel_seq_player(g_sequence_ids[2], false);
 			kernel_seq_timeout(oldIdx, g_sequence_ids[2]);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
@@ -266,7 +266,7 @@ static void room_311_parser() {
 			kernel_seq_range(g_sequence_ids[2], 12, 14);
 			kernel_seq_player(g_sequence_ids[2], false);
 			kernel_seq_loc(g_sequence_ids[2], 167, 100);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 5);
 			break;
 
 		case 5:
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index c6c1ed0be7e..c9a5b5d0258 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -34,7 +34,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_313_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 
 	if ((previous_room == 366) || (previous_room == 316)) {
 		player.x = 30;
@@ -56,7 +56,7 @@ static void room_313_init() {
 		player.x = 199;
 		player.y = 70;
 		player.facing = FACING_WEST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 234;
 		player.y = 70;
 		player.facing = FACING_WEST;
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index dc2200f6170..dbcdb9bcddf 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -46,7 +47,7 @@ static void handleRexInGrate() {
 		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 12, 0, 0, 3);
 		kernel_seq_range(g_sequence_ids[4], 2, 3);
 		kernel_seq_player(g_sequence_ids[4], false);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 2:
@@ -61,8 +62,8 @@ static void handleRexInGrate() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 2, -2);
 		kernel_seq_depth(g_sequence_ids[3], 12);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 4);
 	}
 	break;
 
@@ -87,7 +88,7 @@ static void handleRexInGrate() {
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 5, -2);
 		kernel_seq_depth(g_sequence_ids[3], 3);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 5);
 	}
 	break;
 
@@ -116,8 +117,8 @@ static void handleRexInGrate() {
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 2, 3);
 		kernel_seq_depth(g_sequence_ids[3], 3);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 7);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 8);
 		break;
 
 	case 7:
@@ -171,7 +172,7 @@ static void handleRoxInGrate() {
 		g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], false, 17, 0, 0, 3);
 		kernel_seq_range(g_sequence_ids[5], 2, 3);
 		kernel_seq_player(g_sequence_ids[5], false);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 2:
@@ -185,8 +186,8 @@ static void handleRoxInGrate() {
 		kernel_seq_range(g_sequence_ids[5], 4, 8);
 		kernel_seq_player(g_sequence_ids[5], false);
 		kernel_seq_timeout(temp, g_sequence_ids[5]);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 4);
 		break;
 
 	case 3:
@@ -207,7 +208,7 @@ static void handleRoxInGrate() {
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 17, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 5, -2);
 		kernel_seq_depth(g_sequence_ids[3], 3);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 5);
 		break;
 
 	case 5:
@@ -233,8 +234,8 @@ static void handleRoxInGrate() {
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 17, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 2, 3);
 		kernel_seq_depth(g_sequence_ids[3], 3);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 7);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 7);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 8);
 		break;
 
 	case 7:
@@ -299,8 +300,8 @@ static void room_316_init() {
 		int spriteIdx = (global[kSexOfRex] == REX_MALE) ? 1 : 2;
 		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[spriteIdx], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[1], 2);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 60);
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 291;
 		player.y = 126;
 	}
@@ -327,8 +328,8 @@ static void room_316_daemon() {
 			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 12, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[6], 1, 5);
 			kernel_seq_player(g_sequence_ids[6], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 72);
 			break;
 
 		case 71:
@@ -347,7 +348,7 @@ static void room_316_daemon() {
 			kernel_seq_range(g_sequence_ids[6], 6, 9);
 			kernel_seq_player(g_sequence_ids[6], false);
 			kernel_seq_timeout(synxIdx, g_sequence_ids[6]);
-			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 73);
 		}
 		break;
 
@@ -361,8 +362,8 @@ static void room_316_daemon() {
 			g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 12, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[6], 10, -2);
 			kernel_seq_player(g_sequence_ids[6], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
-			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 74);
+			kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 75);
 			break;
 
 		case 74:
@@ -414,11 +415,11 @@ static void room_316_parser() {
 					g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 1);
 					kernel_seq_range(g_sequence_ids[1], -1, 7);
 					kernel_seq_depth(g_sequence_ids[1], 2);
-					kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+					kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				} else {
 					g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
 					kernel_seq_depth(g_sequence_ids[2], 2);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 3);
 				}
 			}
 			break;
@@ -431,7 +432,7 @@ static void room_316_parser() {
 			if (!player_has_been_in_room(321))
 				kernel_message_add(quote_string(kernel.quotes, 253), 0, 0, 0x1110, 120, 0, 34);
 
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index ec0669acdfa..93e7f083940 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -96,7 +96,7 @@ static void handleInternDialog(int quoteId, int quoteNum, uint32 timeout) {
 		kernel_seq_delete(seqIndex);
 
 	for (int i = 0; i < quoteNum; i++) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(180, 63);
 		kernel_message_add(quote_string(kernel.quotes, curQuoteId), posX, posY, 0xFDFC, timeout, 0, 0);
 		posY += 14;
@@ -115,7 +115,7 @@ static void handleDialog() {
 		kernel_seq_loc(g_sequence_ids[2], 142, 121);
 		kernel_seq_timeout(synxIdx, g_sequence_ids[2]);
 		g_engine->_soundManager->command(3, 0);
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		player.commands_allowed = true;
 	} else {
 		if (player2.words[0] < 0x19C)
@@ -185,7 +185,7 @@ static void handleDialog() {
 			kernel_seq_depth(g_sequence_ids[2], 1);
 			kernel_seq_loc(g_sequence_ids[2], 142, 121);
 			kernel_seq_range(g_sequence_ids[2], 6, 8);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 
 			local._dialogFl = false;
 			handleInternDialog(0x1D0, 1, 120);
@@ -230,7 +230,7 @@ static void room_318_init() {
 		player.x = 15;
 		player.y = 110;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 214;
 		player.y = 152;
 	}
@@ -253,7 +253,7 @@ static void room_318_init() {
 	local._lastFrame = 0;
 	kernel_flip_hotspot(words_intern, false);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		local._dialogFl = false;
 		local._internWalkingFl = false;
 		local._counter = 0;
@@ -270,8 +270,8 @@ static void room_318_init() {
 		0x1C8, 0x1C9, 0x1CA, 0x1CB, 0x1CC, 0x1CD, 0x1CE, 0x1CF, 0x1D0, 0x1D1, 0x1D2, 0x1D3,
 		0x190, 0x19D, 0);
 
-	if ((previous_room == RETURNING_FROM_DIALOG) || (((previous_room == 318) ||
-		(previous_room == RETURNING_FROM_LOADING)) && (!global[kAfterHavoc]))) {
+	if ((previous_room == KERNEL_RESTORING_GAME) || (((previous_room == 318) ||
+		(previous_room == KERNEL_STARTING_GAME)) && (!global[kAfterHavoc]))) {
 		if (!global[kAfterHavoc]) {
 			player.walker_visible = false;
 			g_sprite_ids[2] = kernel_load_series(kernel_name('g', -1), 0);
@@ -431,7 +431,7 @@ static void room_318_daemon() {
 			local._animMode = 3;
 		}
 	} else if ((local._animMode == 2) && local._explosionFl && local._internVisibleFl && !local._dialogFl
-		&& !local._internWalkingFl && (inter_input_mode != kInputConversation)) {
+		&& !local._internWalkingFl && (inter_input_mode != INTER_CONVERSATION)) {
 		if ((diffFrame >= 0) && (diffFrame <= 4))
 			local._internCounter += diffFrame;
 		else
@@ -461,7 +461,7 @@ static void room_318_pre_parser() {
 }
 
 static void room_318_parser() {
-	if (inter_input_mode == kInputConversation) {
+	if (inter_input_mode == INTER_CONVERSATION) {
 		handleDialog();
 		player.command_ready = false;
 		return;
@@ -481,7 +481,7 @@ static void room_318_parser() {
 			kernel_seq_depth(g_sequence_ids[2], 1);
 			kernel_seq_loc(g_sequence_ids[2], 142, 121);
 			kernel_seq_range(g_sequence_ids[2], 6, 8);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		}
 		break;
 
@@ -517,8 +517,8 @@ static void room_318_parser() {
 			kernel_seq_depth(g_sequence_ids[2], 1);
 			kernel_seq_loc(g_sequence_ids[2], 142, 121);
 			kernel_seq_range(g_sequence_ids[2], 2, 5);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 5, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index 05e4eb123c6..f68ab805076 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/magic.h"
 #include "mads/core/mcga.h"
@@ -106,7 +107,7 @@ static void room_319_init() {
 	local._dialog2.setup(0x44, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0);
 	local._dialog3.setup(0x45, 0x17D, 0x17E, 0x17F, 0x180, 0x181, 0x182, 0x183, 0);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		local._dialog1.set(0x165, 0x166, 0x167, 0x168, 0);
 		local._dialog2.set(0x171, 0x172, 0x173, 0x174, 0);
 		local._dialog3.set(0x17D, 0x17E, 0x17F, 0x180, 0);
@@ -129,7 +130,7 @@ static void room_319_init() {
 
 	kernel_run_animation(kernel_name('b', 0), 0);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		local._animMode = 1;
 		local._nextAction1 = 2;
 		local._nextAction2 = 2;
@@ -267,7 +268,7 @@ static void room_319_daemon() {
 						g_sequence_ids[i] = kernel_seq_forward(g_sprite_ids[i], false, 8, 0, 0, 1);
 						kernel_seq_range(g_sequence_ids[i], 1, 7);
 					}
-					kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+					kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_EXPIRE, 0, 73);
 				}
 			}
 		}
@@ -322,7 +323,7 @@ static void room_319_daemon() {
 			kernel_seq_range(g_sequence_ids[i], 8, 13);
 			kernel_seq_timeout(oldIdx, g_sequence_ids[i]);
 		}
-		kernel_seq_trigger(g_sequence_ids[0], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+		kernel_seq_trigger(g_sequence_ids[0], KERNEL_TRIGGER_EXPIRE, 0, 74);
 
 		// WORKAROUND: This fixes the game sometimes going into an endless waiting
 		// loop even after the doctor has finished hitting Rex. Note sure if it's due
@@ -442,7 +443,7 @@ static void room_319_parser() {
 				(player2.words[0] == 0x183));
 
 			int addVerbId = player2.words[0] + 1;
-			if ((addVerbId == 0x182) && (config_file.naughtiness != STORYMODE_NAUGHTY))
+			if ((addVerbId == 0x182) && (config_file.naughtiness != NAUGHTY))
 				addVerbId = 0x183;
 
 			if (local._slacheMode == 1) {
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index 9ff08b63a97..81dd4a9753f 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -253,8 +253,8 @@ static void room_320_parser() {
 			kernel_seq_scale(g_sequence_ids[18], 60);
 			kernel_seq_loc(g_sequence_ids[18], local._posX, 170);
 			kernel_seq_depth(g_sequence_ids[18], 0);
-			kernel_seq_trigger(g_sequence_ids[18], SEQUENCE_TRIGGER_LOOP, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[18], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[18], KERNEL_TRIGGER_LOOP, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[18], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -297,7 +297,7 @@ static void room_320_parser() {
 					local._blinkFl = false;
 					setLeftView(2);
 					kernel.quotes = quote_load(0xFE, 0);
-					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+					kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 					kernel_run_animation(kernel_name('a', -1), 70);
 					g_engine->_soundManager->command(17, 0);
 				}
diff --git a/engines/mads/nebular/rooms/room321.cpp b/engines/mads/nebular/rooms/room321.cpp
index 0b3ae3f9015..7132dea5f73 100644
--- a/engines/mads/nebular/rooms/room321.cpp
+++ b/engines/mads/nebular/rooms/room321.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -36,7 +37,7 @@ static void room_321_init() {
 	player.commands_allowed = false;
 
 	inter_reset_dialog();
-	kernel_set_interface_mode(kInputConversation);
+	kernel_set_interface_mode(INTER_CONVERSATION);
 
 	int suffixNum;
 	if (global[kSexOfRex] == REX_FEMALE) {
@@ -53,7 +54,7 @@ static void room_321_init() {
 
 static void room_321_daemon() {
 	if (kernel_anim[0].anim != nullptr) {
-		if ((kernel_anim[0].frame >= 260) && (global[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= STORYMODE_NICE))
+		if ((kernel_anim[0].frame >= 260) && (global[kSexOfRex] == REX_MALE) && (config_file.naughtiness >= NICE))
 			new_room = 316;
 	}
 
diff --git a/engines/mads/nebular/rooms/room322.cpp b/engines/mads/nebular/rooms/room322.cpp
index 6d87cae9902..470a472d194 100644
--- a/engines/mads/nebular/rooms/room322.cpp
+++ b/engines/mads/nebular/rooms/room322.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index d1629e772a0..073d27d5f29 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -49,7 +49,7 @@ static void room_351_init() {
 		player.x = 148;
 		player.y = 152;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 207;
 		player.y = 81;
 		player.facing = FACING_NORTH;
@@ -130,13 +130,13 @@ static void room_351_parser() {
 				if (global[kSexOfRex] == REX_FEMALE) {
 					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 5, 0, 0, 2);
 					kernel_seq_player(g_sequence_ids[2], false);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 5, 1);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 5, 0, 0, 2);
 					kernel_seq_player(g_sequence_ids[3], false);
-					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index 4afc0ec7fe5..98480b07bc4 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -59,13 +60,13 @@ static void putArmDown(bool corridorExit, bool doorwayExit) {
 		if (global[kSexOfRex] == REX_FEMALE) {
 			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 5, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 2);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 5, 2);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		} else {
 			g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 5, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_SPRITE, 6, 2);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		}
 		break;
 
@@ -159,7 +160,7 @@ static void room_352_init() {
 
 	local._vaultOpenFl = false;
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		local._mustPutArmDownFl = false;
 		if (!player.been_here_before)
 			global[kHaveYourStuff] = false;
@@ -176,7 +177,7 @@ static void room_352_init() {
 		player.x = 171;
 		player.y = 155;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 116;
 		player.y = 107;
 	}
@@ -208,7 +209,7 @@ static void room_352_pre_parser() {
 				kernel_seq_delete(local._commonSequenceIdx);
 				g_engine->_soundManager->command(20, 0);
 				local._commonSequenceIdx = kernel_seq_backward(local._commonSpriteIndex, false, 6, 0, 0, 1);
-				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(local._commonSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 1);
 				kernel_seq_depth(local._commonSequenceIdx, 15);
 			}
 			break;
@@ -261,7 +262,7 @@ static void room_352_parser() {
 
 				local._commonSequenceIdx = kernel_seq_forward(local._commonSpriteIndex, false, 8, 0, 0, 1);
 				kernel_seq_timeout(-1, local._commonSequenceIdx);
-				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(local._commonSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
@@ -272,7 +273,7 @@ static void room_352_parser() {
 				int oldIdx = local._commonSequenceIdx;
 				local._commonSequenceIdx = kernel_seq_stamp(local._commonSpriteIndex, false, -2);
 				kernel_seq_timeout(oldIdx, local._commonSequenceIdx);
-				kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -281,7 +282,7 @@ static void room_352_parser() {
 				kernel_seq_delete(local._commonSequenceIdx);
 				local._commonSequenceIdx = kernel_seq_pingpong(local._commonSpriteIndex, false, 8, 0, 0, 1);
 				kernel_seq_range(local._commonSequenceIdx, 1, 3);
-				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(local._commonSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 			case 3:
@@ -339,13 +340,13 @@ static void room_352_parser() {
 				if (global[kSexOfRex] == REX_FEMALE) {
 					g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 5, 0, 0, 2);
 					kernel_seq_player(g_sequence_ids[3], false);
-					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 5, 1);
+					kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 5, 0, 0, 2);
 					kernel_seq_player(g_sequence_ids[4], false);
-					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
@@ -382,7 +383,7 @@ static void room_352_parser() {
 
 				local._commonSequenceIdx = kernel_seq_forward(local._commonSpriteIndex, false, 8, 0, 0, 1);
 				kernel_seq_timeout(-1, local._commonSequenceIdx);
-				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(local._commonSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
@@ -393,7 +394,7 @@ static void room_352_parser() {
 				int oldIdx = local._commonSequenceIdx;
 				local._commonSequenceIdx = kernel_seq_stamp(local._commonSpriteIndex, false, -2);
 				kernel_seq_timeout(oldIdx, local._commonSequenceIdx);
-				kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -402,7 +403,7 @@ static void room_352_parser() {
 				kernel_seq_delete(local._commonSequenceIdx);
 				local._commonSequenceIdx = kernel_seq_backward(local._commonSpriteIndex, false, 8, 0, 0, 1);
 				kernel_seq_range(local._commonSequenceIdx, 1, 4);
-				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(local._commonSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 
@@ -417,7 +418,7 @@ static void room_352_parser() {
 				g_engine->_soundManager->command(20, 0);
 				local._commonSequenceIdx = kernel_seq_forward(local._commonSpriteIndex, false, 6, 0, 0, 1);
 				kernel_seq_depth(local._commonSequenceIdx, 15);
-				kernel_seq_trigger(local._commonSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+				kernel_seq_trigger(local._commonSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 4);
 				break;
 
 			case 4:
@@ -465,14 +466,14 @@ static void room_352_parser() {
 				g_sequence_ids[14] = kernel_seq_pingpong(g_sprite_ids[14], false, 8, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[14], 1, 2);
 				kernel_seq_player(g_sequence_ids[14], false);
-				kernel_seq_trigger(g_sequence_ids[14], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-				kernel_seq_trigger(g_sequence_ids[14], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[14], KERNEL_TRIGGER_SPRITE, 2, 1);
+				kernel_seq_trigger(g_sequence_ids[14], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			} else {
 				g_sequence_ids[15] = kernel_seq_pingpong(g_sprite_ids[15], false, 8, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[15], 1, 2);
 				kernel_seq_player(g_sequence_ids[15], false);
-				kernel_seq_trigger(g_sequence_ids[15], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-				kernel_seq_trigger(g_sequence_ids[15], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[15], KERNEL_TRIGGER_SPRITE, 2, 1);
+				kernel_seq_trigger(g_sequence_ids[15], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -511,13 +512,13 @@ static void room_352_parser() {
 			if (global[kSexOfRex] == REX_MALE) {
 				g_sequence_ids[6] = kernel_seq_pingpong(g_sprite_ids[6], true, 6, 0, 0, 2);
 				kernel_seq_player(g_sequence_ids[6], false);
-				kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_SPRITE, 6, 1);
+				kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			} else {
 				g_sequence_ids[7] = kernel_seq_pingpong(g_sprite_ids[7], true, 6, 0, 0, 2);
 				kernel_seq_player(g_sequence_ids[7], false);
-				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-				kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_SPRITE, 6, 1);
+				kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -544,7 +545,7 @@ static void room_352_parser() {
 	} else if (player_said_2(look, scanner))
 		text_show(35210);
 	else if (player_said_2(look, monitor)) {
-		if (config_file.naughtiness == STORYMODE_NAUGHTY)
+		if (config_file.naughtiness == NAUGHTY)
 			text_show(35211);
 		else
 			text_show(35212);
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index 4ef4c980fed..10bb2a27d7f 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -39,7 +39,7 @@ static Scratch local;
 
 
 static void room_353_init() {
-	g_sprite_ids[1] = kernel_load_series(kernel_full_name(303, 'B', 0, "", EXT_SS), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(303, 'B', 0, "", KERNEL_SS), 0);
 	g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 0, 5, 0);
 	kernel_seq_depth(g_sequence_ids[1], 1);
 
diff --git a/engines/mads/nebular/rooms/room354.cpp b/engines/mads/nebular/rooms/room354.cpp
index 30ecc4d295e..7d285818dea 100644
--- a/engines/mads/nebular/rooms/room354.cpp
+++ b/engines/mads/nebular/rooms/room354.cpp
@@ -53,7 +53,7 @@ static void room_354_init() {
 		player.x = 71;
 		player.y = 107;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 167;
 		player.y = 57;
 	}
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index b2f823b6276..167d074eaec 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_357_init() {
 	global[kAfterHavoc] = true;
-	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 	kernel_seq_loc(g_sequence_ids[1], 127, 78);
 	kernel_seq_depth(g_sequence_ids[1], 15);
@@ -46,7 +46,7 @@ static void room_357_init() {
 		player.x = 127;
 		player.y = 101;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 15;
 		player.y = 148;
 	}
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index 3682dfdb01d..39f77572888 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_358_init() {
-	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 	kernel_seq_loc(g_sequence_ids[1], 127, 78);
 	kernel_seq_depth(g_sequence_ids[1], 15);
@@ -41,7 +41,7 @@ static void room_358_init() {
 		player.x = 305;
 		player.y = 142;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 12;
 		player.y = 141;
 	}
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index ea130c28bdd..06e3646c8a5 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -40,7 +41,7 @@ static Scratch local;
 
 static void room_359_init() {
 	g_sprite_ids[1] = kernel_load_series(kernel_name('b', -1), 0);
-	g_sprite_ids[3] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[3] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 
 	if (global[kSexOfRex] == REX_MALE)
 		g_sprite_ids[2] = kernel_load_series("*RXMBD_2", 0);
@@ -61,7 +62,7 @@ static void room_359_init() {
 		player.x = 301;
 		player.y = 141;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 15;
 		player.y = 148;
 	}
@@ -93,14 +94,14 @@ static void room_359_parser() {
 				if (global[kSexOfRex] == REX_MALE) {
 					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 4, 0, 0, 2);
 					kernel_seq_player(g_sequence_ids[2], false);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], true, 7, 0, 0, 2);
 					kernel_seq_player(g_sequence_ids[4], false);
 					kernel_seq_loc(g_sequence_ids[4], 106, 110);
-					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 6, 1);
-					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_SPRITE, 6, 1);
+					kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
@@ -143,7 +144,7 @@ static void room_359_parser() {
 		text_show(35918);
 	else if (player_said_2(take, limb))
 		text_show(35919);
-	else if (player_said_2(look, security_card) && (player.main_object_source == CAT_HOTSPOT))
+	else if (player_said_2(look, security_card) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(35921);
 	else if (player_said_2(look, blood_stain)) {
 		if ((game.difficulty != DIFFICULTY_HARD) && (object[OBJ_SECURITY_CARD].location == 359))
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index 63bdccb3bec..6d6ee8a5c04 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_360_init() {
-	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 	g_sequence_ids[1] = kernel_seq_stamp(g_sprite_ids[1], false, 1);
 	kernel_seq_loc(g_sequence_ids[1], 127, 78);
 	kernel_seq_depth(g_sequence_ids[1], 15);
@@ -41,7 +41,7 @@ static void room_360_init() {
 		player.x = 304;
 		player.y = 143;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 13;
 		player.y = 141;
 	}
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 4dfe40ff77c..77c43851861 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -45,8 +45,8 @@ static void handleRexAction() {
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[2], -1, 4);
 		kernel_seq_player(g_sequence_ids[2], false);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
@@ -66,7 +66,7 @@ static void handleRexAction() {
 		kernel_seq_range(g_sequence_ids[2], 4, 10);
 		kernel_seq_player(g_sequence_ids[2], false);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[2]);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
@@ -97,7 +97,7 @@ static void handleRexAction() {
 		kernel_seq_range(g_sequence_ids[2], 12, 14);
 		kernel_seq_player(g_sequence_ids[2], false);
 		kernel_seq_loc(g_sequence_ids[2], 167, 100);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 5);
 		break;
 
 	case 5:
@@ -143,8 +143,8 @@ static void handleRoxAction() {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 18, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[4], -1, 3);
 		kernel_seq_player(g_sequence_ids[4], false);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
@@ -164,7 +164,7 @@ static void handleRoxAction() {
 		kernel_seq_range(g_sequence_ids[4], 4, 8);
 		kernel_seq_player(g_sequence_ids[4], false);
 		kernel_seq_timeout(tmpIdx, g_sequence_ids[4]);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 3);
 	}
 	break;
 
@@ -181,7 +181,7 @@ static void handleRoxAction() {
 		kernel_seq_player(g_sequence_ids[4], false);
 		kernel_seq_loc(g_sequence_ids[4], 167, 100);
 		kernel_seq_timeout(tmpIdx, g_sequence_ids[4]);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 4);
 	}
 	break;
 
@@ -198,7 +198,7 @@ static void handleRoxAction() {
 		kernel_seq_player(g_sequence_ids[4], false);
 		kernel_seq_loc(g_sequence_ids[4], 167, 100);
 		kernel_seq_timeout(tmpIdx, g_sequence_ids[4]);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 5);
 	}
 	break;
 
@@ -233,7 +233,7 @@ static void handleRoxAction() {
 }
 
 static void room_361_init() {
-	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", EXT_SS), 0);
+	g_sprite_ids[1] = kernel_load_series(kernel_full_name(307, 'X', 0, "", KERNEL_SS), 0);
 
 	if (global[kSexOfRex] == REX_MALE) {
 		g_sprite_ids[2] = kernel_load_series("*RXCL_8", 0);
@@ -261,7 +261,7 @@ static void room_361_init() {
 		player.x = 129;
 		player.y = 113;
 		player.facing = FACING_SOUTH;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 13;
 		player.y = 145;
 	}
@@ -312,7 +312,7 @@ static void room_361_daemon() {
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[3], 4, 5);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 74);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 74);
 			break;
 
 		case 74:
@@ -361,7 +361,7 @@ static void room_361_daemon() {
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[3], 10, -2);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 79);
 			break;
 
 		case 79:
diff --git a/engines/mads/nebular/rooms/room366.cpp b/engines/mads/nebular/rooms/room366.cpp
index d9755cb69df..c256843d79f 100644
--- a/engines/mads/nebular/rooms/room366.cpp
+++ b/engines/mads/nebular/rooms/room366.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_366_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	player.walker_visible = false;
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room387.cpp b/engines/mads/nebular/rooms/room387.cpp
index ecc5d89c752..bb010d36b1f 100644
--- a/engines/mads/nebular/rooms/room387.cpp
+++ b/engines/mads/nebular/rooms/room387.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_387_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	player.walker_visible = false;
 
 	section_3_music();
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 7e217a44132..48fb506a4d5 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -33,7 +33,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_388_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 
 	if (global[kAfterHavoc])
 		kernel_flip_hotspot(words_sauropod, false);
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index 74b14891e46..c9ca7ad0e8f 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -42,7 +43,7 @@ static Scratch local;
 
 
 static void room_389_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	local._monsterTime = 0;
 	local._circularQuoteId = 0x159;
 
diff --git a/engines/mads/nebular/rooms/room390.cpp b/engines/mads/nebular/rooms/room390.cpp
index 7601b9f480f..7848e1cee13 100644
--- a/engines/mads/nebular/rooms/room390.cpp
+++ b/engines/mads/nebular/rooms/room390.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_390_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	player.walker_visible = false;
 
 	section_3_music();
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index 2d39bd015dc..e36d3661565 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_391_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	player.walker_visible = false;
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index c68bd63b80f..d42ae488a23 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -32,7 +33,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_399_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	player.walker_visible = false;
 	section_3_music();
 }
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index 03939b85257..a1c2033fff2 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -43,7 +43,7 @@ static Scratch local;
 
 
 static void room_401_init() {
-	if (previous_room != RETURNING_FROM_DIALOG)
+	if (previous_room != KERNEL_RESTORING_GAME)
 		local._northFl = false;
 
 	local._timer = 0;
@@ -57,7 +57,7 @@ static void room_401_init() {
 		player.y = 90;
 		player.facing = FACING_SOUTH;
 		local._northFl = true;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 142;
 		player.y = 131;
 		player.facing = FACING_NORTH;
@@ -123,7 +123,7 @@ static void room_401_pre_parser() {
 static void room_401_parser() {
 	if (player.x == local._dest_x && player.y && local._northFl) {
 		if (global[kSexOfRex] == REX_MALE) {
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
@@ -135,7 +135,7 @@ static void room_401_parser() {
 		}
 
 		if (global[kSexOfRex] == REX_FEMALE) {
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index 257691b7810..f5b8cd77486 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -87,7 +87,7 @@ static void setDialogNode(int node) {
 
 	switch (node) {
 	case 0:
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		local._conversationFl = false;
 		local._bartenderDialogNode = 0;
 		break;
@@ -147,7 +147,7 @@ static void handleConversation1() {
 		}
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, quoteId), quotePosX, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 120;
 		setDialogNode(2);
@@ -157,7 +157,7 @@ static void handleConversation1() {
 	case 0x215:
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1EC), 260, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 120;
 		local._bartenderCurrentQuestion = 1;
@@ -168,7 +168,7 @@ static void handleConversation1() {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
 		setDialogNode(0);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1120;
 		break;
@@ -248,7 +248,7 @@ static void handleConversation2() {
 	if (player2.words[0] != 0x21C) {
 		switch (g_engine->getRandomNumber(1, 3)) {
 		case 1:
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			kernel_timing_trigger(1, 100);
 			local._talkTimer = 180;
 			kernel_message_purge();
@@ -258,7 +258,7 @@ static void handleConversation2() {
 			break;
 
 		case 2:
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			kernel_timing_trigger(1, 100);
 			local._talkTimer = 180;
 			kernel_message_purge();
@@ -268,7 +268,7 @@ static void handleConversation2() {
 			break;
 
 		case 3:
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			kernel_timing_trigger(1, 100);
 			local._talkTimer = 150;
 			kernel_message_purge();
@@ -283,7 +283,7 @@ static void handleConversation2() {
 	} else {
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1120;
 	}
@@ -295,7 +295,7 @@ static void handleConversation3() {
 	case 0x234:
 	case 0x235:
 	case 0x236:
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 86);
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1ED), 188, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
@@ -307,7 +307,7 @@ static void handleConversation3() {
 	case 0x237:
 		kernel_message_purge();
 		kernel_message_add(quote_string(kernel.quotes, 0x1FD), 208, 41, 0xFDFC, 100, 0, 0);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1120;
 		setDialogNode(0);
@@ -327,12 +327,12 @@ static void handleConversation4() {
 		kernel_message_add(quote_string(kernel.quotes, 0x1F0), 196, 13, 0xFDFC, 180, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x1F1), 184, 27, 0xFDFC, 180, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x1F2), 200, 41, 0xFDFC, 180, 0, 0);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1100;
 		local._dialog4.write(0x238, false);
 		local._bartenderMode = 22;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
@@ -340,9 +340,9 @@ static void handleConversation4() {
 	case 0x239:
 		player.commands_allowed = false;
 		local._roxMode = 21;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 92);
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		local._conversationFl = false;
 		break;
 
@@ -353,11 +353,11 @@ static void handleConversation4() {
 		kernel_message_add(quote_string(kernel.quotes, 0x1F5), 230, 41, 0xFDFC, 150, 0, 0);
 		local._dialog4.write(0x23A, false);
 		global[kHasSaidTimer] = true;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1100;
 		local._bartenderMode = 22;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
@@ -369,11 +369,11 @@ static void handleConversation4() {
 		kernel_message_add(quote_string(kernel.quotes, 0x1F7), 230, 41, 0xFDFC, 150, 0, 0);
 		local._dialog4.write(0x23D, false);
 		global[kHasSaidBinocs] = true;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1100;
 		local._bartenderMode = 22;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(100, 95);
 		local._refuseAlienLiquor = true;
 		break;
@@ -384,10 +384,10 @@ static void handleConversation4() {
 		player.commands_allowed = false;
 		kernel_message_add(quote_string(kernel.quotes, 0x1F8), 205, 41, 0xFDFC, 100, 0, 0);
 		local._bartenderMode = 22;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 100);
 		local._talkTimer = 1050;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(50, 95);
 		local._refuseAlienLiquor = true;
 		break;
@@ -469,7 +469,7 @@ static void room_402_init() {
 		local._roxOnStool = false;
 		local._bartenderDialogNode = 1;
 		local._conversationFl = false;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 160;
 		player.y = 150;
 		player.facing = FACING_NORTH;
@@ -525,7 +525,7 @@ static void room_402_init() {
 	if (local._conversationFl) {
 		switch (local._bartenderDialogNode) {
 		case 0:
-			kernel_set_interface_mode(kInputBuildingSentences);
+			kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 			local._bartenderDialogNode = 1;
 			break;
 
@@ -627,7 +627,7 @@ static void room_402_init() {
 	local._rexMode = 0;
 	local._refuseAlienLiquor = false;
 
-	kernel_run_animation(kernel_full_name(402, 'd', 1, "", EXT_AA), 0);
+	kernel_run_animation(kernel_full_name(402, 'd', 1, "", KERNEL_AA), 0);
 	kernel_anim[0].repeat = true;
 
 	g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, 1);
@@ -692,7 +692,7 @@ static void room_402_daemon() {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 13, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[4], 1, 11);
 		kernel_seq_depth(g_sequence_ids[4], 14);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 48);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 48);
 		local._activeTeleporter = true;
 		global[kSomeoneHasExploded] = true;
 	}
@@ -749,7 +749,7 @@ static void room_402_daemon() {
 		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[7], 1, 2);
 		kernel_seq_depth(g_sequence_ids[7], 5);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 93);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 93);
 		break;
 
 	case 93:
@@ -784,7 +784,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[7], 1, 3);
 		kernel_seq_depth(g_sequence_ids[7], 5);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[7]);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 94);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 94);
 
 		if (local._roxMode == 21) {
 			if (player_has(OBJ_CREDIT_CHIP))
@@ -840,7 +840,7 @@ static void room_402_daemon() {
 		g_sequence_ids[12] = kernel_seq_forward(g_sprite_ids[12], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[12], 1, 4);
 		kernel_seq_depth(g_sequence_ids[12], 8);
-		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 96);
+		kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 96);
 		break;
 
 	case 96:
@@ -850,7 +850,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[12], 6, 7);
 		kernel_seq_depth(g_sequence_ids[12], 8);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[12]);
-		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 97);
+		kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 97);
 	}
 	break;
 
@@ -893,7 +893,7 @@ static void room_402_daemon() {
 		g_sequence_ids[12] = kernel_seq_backward(g_sprite_ids[12], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[12], 1, 4);
 		kernel_seq_depth(g_sequence_ids[12], 8);
-		kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 99);
+		kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 99);
 		break;
 
 	case 99:
@@ -942,7 +942,7 @@ static void room_402_daemon() {
 		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[9], 1, 9);
 		kernel_seq_depth(g_sequence_ids[9], 8);
-		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 87);
+		kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 87);
 		break;
 
 	case 87:
@@ -956,7 +956,7 @@ static void room_402_daemon() {
 		g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[8], 1, 4);
 		kernel_seq_depth(g_sequence_ids[8], 7);
-		kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 88);
+		kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 88);
 	}
 	break;
 
@@ -1136,7 +1136,7 @@ static void room_402_daemon() {
 		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[7], 10, 12);
 		kernel_seq_depth(g_sequence_ids[7], 5);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 78);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 78);
 		break;
 
 	case 78:
@@ -1149,7 +1149,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[7], 10, 12);
 		kernel_seq_depth(g_sequence_ids[7], 5);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[7]);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 79);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 79);
 	}
 	break;
 
@@ -1193,7 +1193,7 @@ static void room_402_daemon() {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[1], 1, 14);
 		kernel_seq_depth(g_sequence_ids[1], 14);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 30);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 30);
 		local._blowingSmoke = true;
 	}
 
@@ -1202,7 +1202,7 @@ static void room_402_daemon() {
 		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[1], 1, 5);
 		kernel_seq_depth(g_sequence_ids[1], 14);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 31);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 31);
 		break;
 
 	case 31:
@@ -1219,7 +1219,7 @@ static void room_402_daemon() {
 			case 1:
 				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 12, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[2], 1, 8);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 33);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 33);
 				local._leftWomanMoving = true;
 				break;
 
@@ -1249,7 +1249,7 @@ static void room_402_daemon() {
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[2], 1, 8);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 38);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 38);
 		break;
 
 	case 35:
@@ -1283,28 +1283,28 @@ static void room_402_daemon() {
 			case 1:
 				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[3], 1, 4);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 2:
 				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 2);
 				kernel_seq_range(g_sequence_ids[3], 4, 5);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 3:
 				g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 2);
 				kernel_seq_range(g_sequence_ids[3], 4, 5);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
 			case 4:
 				g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 2);
 				kernel_seq_range(g_sequence_ids[3], 3, 4);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 32);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 32);
 				local._rightWomanMoving = true;
 				break;
 
@@ -1426,7 +1426,7 @@ static void room_402_daemon() {
 		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[13], 2, 5);
 		kernel_seq_depth(g_sequence_ids[13], 8);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 57);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 57);
 		break;
 
 	case 57:
@@ -1437,7 +1437,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[13], 6, 9);
 		kernel_seq_depth(g_sequence_ids[13], 8);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 58);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 58);
 	}
 	break;
 
@@ -1448,7 +1448,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[13], 5, 9);
 		kernel_seq_depth(g_sequence_ids[13], 8);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 59);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 59);
 	}
 	break;
 
@@ -1459,7 +1459,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[13], 1, 4);
 		kernel_seq_depth(g_sequence_ids[13], 8);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 60);
 		g_sequence_ids[20] = kernel_seq_stamp(g_sprite_ids[20], false, 1);
 		kernel_seq_depth(g_sequence_ids[20], 8);
 		kernel_seq_loc(g_sequence_ids[20], 234, 72);
@@ -1485,7 +1485,7 @@ static void room_402_daemon() {
 		g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 30, 0, 0, 4);
 		kernel_seq_range(g_sequence_ids[13], 10, 11);
 		kernel_seq_depth(g_sequence_ids[13], 8);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 62);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 62);
 		break;
 
 	case 62:
@@ -1518,7 +1518,7 @@ static void room_402_daemon() {
 		g_sequence_ids[16] = kernel_seq_forward(g_sprite_ids[16], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[16], 1, 6);
 		kernel_seq_depth(g_sequence_ids[16], 9);
-		kernel_seq_trigger(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 66);
+		kernel_seq_trigger(g_sequence_ids[16], KERNEL_TRIGGER_EXPIRE, 0, 66);
 		break;
 
 	case 66:
@@ -1528,13 +1528,13 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[16], 7, 37);
 		kernel_seq_depth(g_sequence_ids[16], 9);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[16]);
-		kernel_seq_trigger(g_sequence_ids[16], SEQUENCE_TRIGGER_EXPIRE, 0, 68);
+		kernel_seq_trigger(g_sequence_ids[16], KERNEL_TRIGGER_EXPIRE, 0, 68);
 
 		kernel_seq_delete(g_sequence_ids[13]);
 		g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[13], 12, 13);
 		kernel_seq_depth(g_sequence_ids[13], 8);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 67);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 67);
 	}
 	break;
 
@@ -1552,7 +1552,7 @@ static void room_402_daemon() {
 		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[13], 12, 13);
 		kernel_seq_depth(g_sequence_ids[13], 8);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 69);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 69);
 		break;
 
 	case 69:
@@ -1567,7 +1567,7 @@ static void room_402_daemon() {
 		kernel_message_add(quote_string(kernel.quotes, 0x203), 179, 33, 0xFBFA, 130, 0, 0);
 		kernel_message_add(quote_string(kernel.quotes, 0x204), 167, 47, 0xFBFA, 130, 0, 0);
 		kernel_timing_trigger(150, 71);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 70);
 	}
 	break;
 
@@ -1575,7 +1575,7 @@ static void room_402_daemon() {
 		g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 25, 0, 0, 4);
 		kernel_seq_range(g_sequence_ids[13], 10, 12);
 		kernel_seq_depth(g_sequence_ids[13], 8);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 71:
@@ -1623,7 +1623,7 @@ static void room_402_daemon() {
 				g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[13], 2, 5);
 				kernel_seq_depth(g_sequence_ids[13], 8);
-				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
+				kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 82);
 				break;
 
 			case 2:
@@ -1633,7 +1633,7 @@ static void room_402_daemon() {
 				g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 15, 0, 0, 2);
 				kernel_seq_range(g_sequence_ids[13], 11, 13);
 				kernel_seq_depth(g_sequence_ids[13], 8);
-				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 3:
@@ -1643,7 +1643,7 @@ static void room_402_daemon() {
 				g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[13], 10, 11);
 				kernel_seq_depth(g_sequence_ids[13], 8);
-				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 4:
@@ -1653,7 +1653,7 @@ static void room_402_daemon() {
 				g_sequence_ids[13] = kernel_seq_pingpong(g_sprite_ids[13], false, 15, 0, 0, 2);
 				kernel_seq_range(g_sequence_ids[13], 14, 15);
 				kernel_seq_depth(g_sequence_ids[13], 8);
-				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+				kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 26);
 				break;
 
 			case 5:
@@ -1663,7 +1663,7 @@ static void room_402_daemon() {
 				g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 10, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[13], 16, 19);
 				kernel_seq_depth(g_sequence_ids[13], 8);
-				kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+				kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 80);
 				break;
 
 			default:
@@ -1684,7 +1684,7 @@ static void room_402_daemon() {
 		g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[13], 16, 19);
 		kernel_seq_depth(g_sequence_ids[13], 8);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 26);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 26);
 	}
 
 	if (kernel.trigger == 26) {
@@ -1705,7 +1705,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[13], 6, 9);
 		kernel_seq_depth(g_sequence_ids[13], 8);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 83);
 	}
 
 	if (kernel.trigger == 83) {
@@ -1714,7 +1714,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[13], 5, 9);
 		kernel_seq_depth(g_sequence_ids[13], 8);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 84);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 84);
 	}
 
 	if (kernel.trigger == 84) {
@@ -1723,7 +1723,7 @@ static void room_402_daemon() {
 		kernel_seq_range(g_sequence_ids[13], 1, 4);
 		kernel_seq_depth(g_sequence_ids[13], 8);
 		kernel_seq_timeout(seqIdx, g_sequence_ids[13]);
-		kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 85);
+		kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 85);
 
 		g_sequence_ids[20] = kernel_seq_stamp(g_sprite_ids[20], false, 1);
 		kernel_seq_depth(g_sequence_ids[20], 8);
@@ -1746,7 +1746,7 @@ static void room_402_daemon() {
 		g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[7], 14, 18);
 		kernel_seq_depth(g_sequence_ids[7], 5);
-		kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 103);
+		kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 103);
 	} else if (kernel.trigger == 103) {
 		player.clock = kernel.clock + player.frame_delay;
 		local._roxOnStool = false;
@@ -1835,7 +1835,7 @@ static void room_402_pre_parser() {
 			player.facing = FACING_SOUTH;
 			player.ready_to_walk = false;
 			player.commands_allowed = false;
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			kernel_timing_trigger(1, 102);
 		}
 	}
@@ -1852,7 +1852,7 @@ static void room_402_pre_parser() {
 
 static void room_402_parser() {
 	if (player_said_2(take, repair_list) && object_is_here(OBJ_REPAIR_LIST) && local._roxOnStool) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 77);
 		player.need_to_walk = false;
 	} else if (player_said_2(take, repair_list) && object_is_here(OBJ_REPAIR_LIST) && !local._roxOnStool) {
@@ -1862,8 +1862,8 @@ static void room_402_parser() {
 			g_sequence_ids[21] = kernel_seq_pingpong(g_sprite_ids[21], false, 7, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[21], 1, 2);
 			kernel_seq_player(g_sequence_ids[21], false);
-			kernel_seq_trigger(g_sequence_ids[21], SEQUENCE_TRIGGER_SPRITE, 2, 165);
-			kernel_seq_trigger(g_sequence_ids[21], SEQUENCE_TRIGGER_EXPIRE, 0, 166);
+			kernel_seq_trigger(g_sequence_ids[21], KERNEL_TRIGGER_SPRITE, 2, 165);
+			kernel_seq_trigger(g_sequence_ids[21], KERNEL_TRIGGER_EXPIRE, 0, 166);
 		} else if (kernel.trigger == 165) {
 			kernel_seq_delete(g_sequence_ids[14]);
 			inter_give_to_player(OBJ_REPAIR_LIST);
@@ -1875,7 +1875,7 @@ static void room_402_parser() {
 	} else if (kernel.trigger == 167) {
 		object_examine(OBJ_REPAIR_LIST, 40240, 0);
 		player.commands_allowed = true;
-	} else if (inter_input_mode == kInputConversation)
+	} else if (inter_input_mode == INTER_CONVERSATION)
 		handleDialogs();
 	else if (player_said_2(walk_into, corridor_to_south))
 		new_room = 401;
@@ -1929,7 +1929,7 @@ static void room_402_parser() {
 				local._helgaTalkMode = 1;
 				kernel_message_add(quote_string(kernel.quotes, 0x209), 177, 33, 0xFBFA, 130, 0, 0);
 				kernel_message_add(quote_string(kernel.quotes, 0x20A), 182, 47, 0xFBFA, 130, 0, 0);
-				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+				kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 				kernel_timing_trigger(130, 28);
 				break;
 
@@ -1937,7 +1937,7 @@ static void room_402_parser() {
 				player.commands_allowed = false;
 				local._helgaTalkMode = 2;
 				kernel_message_add(quote_string(kernel.quotes, 0x20B), 157, 47, 0xFBFA, 100, 0, 0);
-				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+				kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 				kernel_timing_trigger(100, 28);
 				break;
 
@@ -1945,7 +1945,7 @@ static void room_402_parser() {
 				player.commands_allowed = false;
 				local._helgaTalkMode = 3;
 				kernel_message_add(quote_string(kernel.quotes, 0x20C), 172, 47, 0xFBFA, 100, 0, 0);
-				kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+				kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 				kernel_timing_trigger(100, 28);
 				break;
 
@@ -1963,18 +1963,18 @@ static void room_402_parser() {
 		}
 	} else if (player_said_2(talkto, woman_in_chair) && !local._firstTalkToGirlInChair) {
 		kernel_message_add(quote_string(kernel.quotes, 0x1D7), 0, 0, 0x1110, 120, 0, 34);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(150, 39);
 		player.commands_allowed = false;
 		local._firstTalkToGirlInChair = true;
 	} else if (player_said_2(talkto, woman_in_chair) && local._firstTalkToGirlInChair) {
 		kernel_message_add(quote_string(kernel.quotes, 0x1DB), 0, 0, 0x1110, 120, 0, 34);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(150, 42);
 		player.commands_allowed = false;
 	} else if (player_said_2(talkto, woman_in_alcove) || player_said_2(walkto, woman_in_alcove)) {
 		kernel_message_add(quote_string(kernel.quotes, 0x1DE), 102, 48, 0xFBFA, 120, 0, 0);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(120, 44);
 		player.commands_allowed = false;
 	} else if (player_said_2(sit_on, bar_stool) && (player.target_x == 248)) {
@@ -1982,18 +1982,18 @@ static void room_402_parser() {
 		kernel_message_add(quote_string(kernel.quotes, 0x20E), 0, 0, 0x1110, 120, 0, 34);
 	} else if (player_said_2(sit_on, bar_stool) && !local._roxOnStool && (player.target_x != 248)) {
 		player.walker_visible = false;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[6], 1, 11);
 		kernel_seq_depth(g_sequence_ids[6], 5);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 76);
 		player.commands_allowed = false;
 	} else if (player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP) && local._roxOnStool) {
 		local._roxMode = 20;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(1, 92);
 	} else if (player_said_2(take, credit_chip) && !player_has(OBJ_CREDIT_CHIP) && !local._roxOnStool) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		g_sequence_ids[22] = kernel_seq_pingpong(g_sprite_ids[22], false, 7, 0, 0, 2);
@@ -2001,8 +2001,8 @@ static void room_402_parser() {
 		kernel_seq_loc(g_sequence_ids[22], player.x, player.y + 1);
 		kernel_seq_depth(g_sequence_ids[22], 5);
 		kernel_seq_scale(g_sequence_ids[22], 88);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-		kernel_seq_trigger(g_sequence_ids[22], SEQUENCE_TRIGGER_EXPIRE, 0, 104);
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
+		kernel_seq_trigger(g_sequence_ids[22], KERNEL_TRIGGER_EXPIRE, 0, 104);
 	} else if (player_said_2(talkto, bartender)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -2028,7 +2028,7 @@ static void room_402_parser() {
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, quoteId), centerPos.x, centerPos.y, 0x1110, 90, 0, 32 | centerFlag);
 			kernel_timing_trigger(110, 29);
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			kernel_timing_trigger(90, 28);
 		}
 		break;
@@ -2038,21 +2038,21 @@ static void room_402_parser() {
 			if (!local._roxOnStool) {
 				if (object_is_here(OBJ_ALIEN_LIQUOR)) {
 					kernel_message_add(quote_string(kernel.quotes, 0x1DF), 177, 41, 0xFDFC, 120, 0, 0);
-					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+					kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 					kernel_timing_trigger(1, 100);
 					local._talkTimer = 120;
 				} else if (local._rexMode == 0) {
 					kernel_message_add(quote_string(kernel.quotes, 0x1F9), 175, 13, 0xFDFC, 180, 0, 0);
 					kernel_message_add(quote_string(kernel.quotes, 0x1FA), 184, 27, 0xFDFC, 180, 0, 0);
 					kernel_message_add(quote_string(kernel.quotes, 0x1FB), 200, 41, 0xFDFC, 180, 0, 0);
-					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+					kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 					kernel_timing_trigger(1, 100);
 					local._talkTimer = 180;
 					local._rexMode = 1;
 				} else if (local._rexMode == 1) {
 					kernel_message_add(quote_string(kernel.quotes, 0x1FC), 205, 41, 0xFDFC, 120, 0, 0);
 					player.commands_allowed = true;
-					kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+					kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 					kernel_timing_trigger(1, 100);
 					local._talkTimer = 120;
 					local._rexMode = 3;
@@ -2066,7 +2066,7 @@ static void room_402_parser() {
 						kernel_message_add(quote_string(kernel.quotes, 0x1E2), 198, 27, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 						kernel_message_add(quote_string(kernel.quotes, 0x1E3), 199, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
 						local._bartenderCurrentQuestion = 10;
-						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+						kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 						kernel_timing_trigger(1, 100);
 						local._talkTimer = 120;
 						local._conversationFl = true;
@@ -2077,7 +2077,7 @@ static void room_402_parser() {
 						local._dialog1.start();
 					} else {
 						kernel_message_add(quote_string(kernel.quotes, 0x1EF), 177, 41, 0xFDFC, INDEFINITE_TIMEOUT, 0, 0);
-						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+						kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 						kernel_timing_trigger(1, 100);
 						local._talkTimer = 120;
 						local._bartenderCurrentQuestion = 3;
@@ -2094,14 +2094,14 @@ static void room_402_parser() {
 						kernel_message_add(quote_string(kernel.quotes, 0x1F9), 175, 13, 0xFDFC, 180, 0, 0);
 						kernel_message_add(quote_string(kernel.quotes, 0x1FA), 184, 27, 0xFDFC, 180, 0, 0);
 						kernel_message_add(quote_string(kernel.quotes, 0x1FB), 200, 41, 0xFDFC, 180, 0, 0);
-						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+						kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 						kernel_timing_trigger(1, 100);
 						local._talkTimer = 180;
 						local._rexMode = 1;
 					} else if (local._rexMode == 1) {
 						kernel_message_add(quote_string(kernel.quotes, 0x1FC), 205, 41, 0xFDFC, 120, 0, 0);
 						player.commands_allowed = true;
-						kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+						kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 						kernel_timing_trigger(1, 100);
 						local._talkTimer = 120;
 						local._rexMode = 3;
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index 896a31bb0f1..ee8f11b2b9e 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -52,7 +52,7 @@ static void room_405_init() {
 		player.x = 284;
 		player.y = 109;
 		player.facing = FACING_SOUTH;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 23;
 		player.y = 123;
 		player.facing = FACING_EAST;
@@ -88,7 +88,7 @@ static void room_405_daemon() {
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 6, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		g_engine->_soundManager->command(19, 0);
 	}
 
@@ -136,29 +136,29 @@ static void room_405_parser() {
 	else if (player_said_3(put, security_card, card_slot) && !global[kArmoryDoorOpen]) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[3], 1, 2);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 75);
 		Common::Point msgPos = Common::Point(player.x, player.y + 1);
 		kernel_seq_loc(g_sequence_ids[3], msgPos.x, msgPos.y);
 		kernel_seq_scale(g_sequence_ids[3], 87);
 	} else if ((player_said_3(put, security_card, card_slot) || player_said_2(close, wide_door)) && global[kArmoryDoorOpen]) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[3], 1, 2);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 70);
 		kernel_seq_loc(g_sequence_ids[3], player.x, player.y);
 		kernel_seq_scale(g_sequence_ids[3], 87);
 	} else if (player_said_2(put, card_slot)) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[3], 1, 2);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 80);
 		kernel_seq_loc(g_sequence_ids[3], player.x, player.y);
 		kernel_seq_scale(g_sequence_ids[3], 87);
 	} else if (player_said_2(look, cannon_balls))
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index fba15de6ae0..a55f46a05d9 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -56,7 +56,7 @@ static void room_406_init() {
 		player.x = 153;
 		player.y = 108;
 		player.facing = FACING_SOUTH;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 15;
 		player.y = 129;
 		player.facing = FACING_EAST;
@@ -78,9 +78,9 @@ static void room_406_init() {
 		g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, 1);
 	else {
 		player.commands_allowed = false;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 3, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 90);
 		g_engine->_soundManager->command(19, 0);
 	}
 
@@ -118,7 +118,7 @@ static void room_406_daemon() {
 		player.clock = kernel.clock + player.frame_delay;
 		player.walker_visible = true;
 		g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 4, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		g_engine->_soundManager->command(19, 0);
 	}
 
@@ -156,46 +156,46 @@ static void room_406_pre_parser() {
 static void room_406_parser() {
 	if (player_said_2(walk_through, door) && (player.target_x > 100)) {
 		player.commands_allowed = false;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_seq_delete(g_sequence_ids[3]);
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 3, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 80);
 		g_engine->_soundManager->command(19, 0);
 	} else if (player_said_2(walk_through, door) && global[kStorageDoorOpen] && (player.target_x < 100))
 		new_room = 410;
 	else if (player_said_2(walk_through, door) && !global[kStorageDoorOpen] && (player.target_x < 100)) {
 		kernel_message_add(quote_string(kernel.quotes, 0x24F), 0, 0, 0x1110, 60, 0, 34);
 		if (!local._hitStorageDoor) {
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			kernel_timing_trigger(80, 100);
 		}
 	} else if (player_said_3(put, security_card, card_slot) && !global[kStorageDoorOpen]) {
 		player.commands_allowed = false;
 		player.walker_visible = false;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[2], 1, 2);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 75);
 		Common::Point msgPos = Common::Point(player.x, player.y + 1);
 		kernel_seq_loc(g_sequence_ids[2], msgPos.x, msgPos.y);
 		kernel_seq_scale(g_sequence_ids[2], 87);
 	} else if (player_said_3(put, security_card, card_slot) && global[kStorageDoorOpen]) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[2], 1, 2);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 70);
 		Common::Point msgPos = Common::Point(player.x, player.y + 1);
 		kernel_seq_loc(g_sequence_ids[2], msgPos.x, msgPos.y);
 		kernel_seq_scale(g_sequence_ids[2], 87);
 	} else if (player_said_2(put, card_slot)) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[2], 1, 2);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 110);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 110);
 		kernel_seq_loc(g_sequence_ids[2], player.x, player.y);
 		kernel_seq_scale(g_sequence_ids[2], 87);
 	} else if (player_said_2(look, trash))
diff --git a/engines/mads/nebular/rooms/room407.cpp b/engines/mads/nebular/rooms/room407.cpp
index 65c64f04cb3..3844060912c 100644
--- a/engines/mads/nebular/rooms/room407.cpp
+++ b/engines/mads/nebular/rooms/room407.cpp
@@ -41,7 +41,7 @@ static Scratch local;
 
 
 static void room_407_init() {
-	if (previous_room != RETURNING_FROM_DIALOG)
+	if (previous_room != KERNEL_RESTORING_GAME)
 		local._fromNorth = false;
 
 	if (previous_room == 318) {
@@ -49,7 +49,7 @@ static void room_407_init() {
 		player.y = 92;
 		player.facing = FACING_SOUTH;
 		local._fromNorth = true;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 172;
 		player.y = 132;
 		player.facing = FACING_NORTH;
@@ -101,7 +101,7 @@ static void room_407_pre_parser() {
 static void room_407_parser() {
 	if (player.x == local._dest_x && player.y == local._dest_y && local._fromNorth) {
 		if (global[kSexOfRex] == REX_MALE) {
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
@@ -112,7 +112,7 @@ static void room_407_parser() {
 		}
 
 		if (global[kSexOfRex] == REX_FEMALE) {
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_engine->_soundManager->command(21, 0);
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index f7687f24156..28929fbe44c 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -69,8 +69,8 @@ static void room_408_parser() {
 			g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], true, 7, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[1], 1, 2);
 			kernel_seq_player(g_sequence_ids[1], false);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index 112bb7c76b7..ff67e9b073f 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -40,7 +40,7 @@ static void room_410_init() {
 	else
 		kernel_flip_hotspot(words_charge_cases, false);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 155;
 		player.y = 150;
 		player.facing = FACING_NORTH;
@@ -48,7 +48,7 @@ static void room_410_init() {
 
 	section_4_music();
 
-	kernel_run_animation(kernel_full_name(410, 'r', -1, "", EXT_AA), 0);
+	kernel_run_animation(kernel_full_name(410, 'r', -1, "", KERNEL_AA), 0);
 	kernel_anim[0].repeat = true;
 }
 
@@ -108,8 +108,8 @@ static void room_410_parser() {
 			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 7, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[2], 1, 3);
 			kernel_seq_player(g_sequence_ids[2], false);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 3, 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 3, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index cf8df5a2022..eb74b223eba 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -263,9 +263,9 @@ static void handleDialog() {
 		} else
 			local._killRox = true;
 
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 	} else if (player2.words[0] == 0x262)
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 }
 
 static void giveToRex(int object_id) {
@@ -395,7 +395,7 @@ static void room_411_init() {
 		kernel_dynamic_walk(idx, 220, 121, FACING_NORTHEAST);
 	}
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 60;
 		player.y = 146;
 		player.facing = FACING_NORTHEAST;
@@ -519,7 +519,7 @@ static void room_411_pre_parser() {
 }
 
 static void room_411_parser() {
-	if (inter_input_mode == kInputConversation) {
+	if (inter_input_mode == INTER_CONVERSATION) {
 		handleDialog();
 		player.command_ready = false;
 		return;
@@ -544,7 +544,7 @@ static void room_411_parser() {
 			g_sequence_ids[10] = kernel_seq_forward(g_sprite_ids[10], false, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[10], 1, 6);
 			kernel_seq_depth(g_sequence_ids[10], 3);
-			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 110);
+			kernel_seq_trigger(g_sequence_ids[10], KERNEL_TRIGGER_EXPIRE, 0, 110);
 			break;
 
 		case 110:
@@ -569,7 +569,7 @@ static void room_411_parser() {
 			g_sequence_ids[10] = kernel_seq_backward(g_sprite_ids[10], false, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[10], 1, 6);
 			kernel_seq_depth(g_sequence_ids[10], 3);
-			kernel_seq_trigger(g_sequence_ids[10], SEQUENCE_TRIGGER_EXPIRE, 0, 112);
+			kernel_seq_trigger(g_sequence_ids[10], KERNEL_TRIGGER_EXPIRE, 0, 112);
 			// fall through
 		case 112:
 			player.clock = kernel.clock - player.frame_delay;
@@ -599,8 +599,8 @@ static void room_411_parser() {
 			g_sequence_ids[8] = kernel_seq_pingpong(g_sprite_ids[8], false, 7, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[8], 1, 2);
 			kernel_seq_player(g_sequence_ids[8], false);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -636,8 +636,8 @@ static void room_411_parser() {
 			g_sequence_ids[8] = kernel_seq_pingpong(g_sprite_ids[8], false, 7, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[8], 1, 2);
 			kernel_seq_player(g_sequence_ids[8], false);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index 450c4729ccc..f22609f5d15 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -48,9 +48,9 @@ static void room_413_init() {
 		player.y = 146;
 		player.facing = FACING_NORTH;
 		player.walker_visible = true;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		if (global[kSexOfRex] == REX_MALE) {
-			kernel_run_animation(kernel_full_name(413, 'd', 1, "", EXT_AA), 78);
+			kernel_run_animation(kernel_full_name(413, 'd', 1, "", KERNEL_AA), 78);
 			g_engine->_soundManager->command(30, 0);
 			player.walker_visible = false;
 			player.commands_allowed = false;
@@ -72,7 +72,7 @@ static void room_413_init() {
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 7, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[1], 1, 19);
 			kernel_seq_depth(g_sequence_ids[1], 8);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 76);
 			break;
 
 		case 2:
@@ -81,7 +81,7 @@ static void room_413_init() {
 			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[1], 1, 20);
 			kernel_seq_depth(g_sequence_ids[1], 8);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 77);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 77);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 4add35d8a15..032bb30ed7e 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -61,8 +61,8 @@ static void handleSlotActions() {
 		kernel_seq_range(local._mainSequenceId, 1, frameIndex);
 		kernel_seq_player(local._mainSequenceId, false);
 		g_engine->_soundManager->command(10, 0);
-		kernel_seq_trigger(local._mainSequenceId, SEQUENCE_TRIGGER_SPRITE, frameIndex, 1);
-		kernel_seq_trigger(local._mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(local._mainSequenceId, KERNEL_TRIGGER_SPRITE, frameIndex, 1);
+		kernel_seq_trigger(local._mainSequenceId, KERNEL_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
@@ -102,7 +102,7 @@ static void room_501_init() {
 	int idx = kernel_add_dynamic(words_door, words_walk_through, 0, g_sequence_ids[3], 0, 0, 0, 0);
 	kernel_dynamic_walk(idx, 282, 110, FACING_NORTH);
 	local._doorHotspotid = idx;
-	kernel_dynamic_cursor(local._doorHotspotid, CURSOR_GO_UP);
+	kernel_dynamic_cursor(local._doorHotspotid, CURSOR_UP);
 	kernel_seq_depth(g_sequence_ids[3], 7);
 	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -1);
 	kernel_seq_depth(g_sequence_ids[2], 4);
@@ -127,7 +127,7 @@ static void room_501_init() {
 		player.y = 102;
 		player.facing = FACING_SOUTHWEST;
 		kernel_timing_trigger(15, 80);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 299;
 		player.y = 131;
 	}
@@ -158,7 +158,7 @@ static void room_501_daemon() {
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 7);
 			g_engine->_soundManager->command(11, 0);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 81);
 			break;
 
 		case 81:
@@ -173,8 +173,8 @@ static void room_501_daemon() {
 			g_engine->_soundManager->command(12, 0);
 			local._doorHotspotid = kernel_add_dynamic(words_door, words_walk_through, 0, g_sequence_ids[3], 0, 0, 0, 0);
 			kernel_dynamic_walk(g_sequence_ids[3], 282, 110, FACING_NORTH);
-			kernel_dynamic_cursor(local._doorHotspotid, CURSOR_GO_UP);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+			kernel_dynamic_cursor(local._doorHotspotid, CURSOR_UP);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 83);
 			break;
 
 		case 83:
@@ -205,7 +205,7 @@ static void room_501_daemon() {
 			kernel_seq_delete(g_sequence_ids[2]);
 			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 4);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 73);
 			break;
 
 		case 73:
@@ -233,7 +233,7 @@ static void room_501_parser() {
 			kernel_seq_delete(g_sequence_ids[2]);
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 4);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -255,7 +255,7 @@ static void room_501_parser() {
 
 			local._mainSequenceId = kernel_seq_forward(local._mainSpriteId, false, 8, 0, 0, 1);
 			kernel_seq_player(local._mainSequenceId, false);
-			kernel_seq_trigger(local._mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(local._mainSequenceId, KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
@@ -336,7 +336,7 @@ static void room_501_parser() {
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 9, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 7);
 			g_engine->_soundManager->command(11, 0);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 6);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 6);
 			break;
 
 		case 6:
@@ -352,7 +352,7 @@ static void room_501_parser() {
 			kernel_seq_depth(g_sequence_ids[3], 7);
 			kernel_seq_timeout(syncIdx, g_sequence_ids[3]);
 			g_engine->_soundManager->command(12, 0);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 8);
 		}
 		break;
 
diff --git a/engines/mads/nebular/rooms/room502.cpp b/engines/mads/nebular/rooms/room502.cpp
index e3f38b1fb25..54732c46c0f 100644
--- a/engines/mads/nebular/rooms/room502.cpp
+++ b/engines/mads/nebular/rooms/room502.cpp
@@ -19,7 +19,7 @@
  *
  */
 
-#include "math/utils.h"
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index 0d97298152c..8654f039ccd 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -53,7 +53,7 @@ static void room_503_init() {
 		kernel_dynamic_walk(local._detonatorHotspotId, 254, 135, FACING_SOUTH);
 	}
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 191;
 		player.y = 152;
 		player.facing = FACING_NORTHWEST;
@@ -75,14 +75,14 @@ static void room_503_parser() {
 					g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 8, 0, 0, 1);
 					kernel_seq_range(g_sequence_ids[2], 1, 3);
 					kernel_seq_player(g_sequence_ids[2], false);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 3, 1);
-					kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 3, 1);
+					kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				} else {
 					g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], true, 8, 0, 0, 1);
 					kernel_seq_range(g_sequence_ids[3], 1, 4);
 					kernel_seq_player(g_sequence_ids[3], false);
-					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 4, 1);
+					kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				}
 				break;
 
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index 55e1441dd24..0c4c68652d6 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -68,7 +68,7 @@ static void room_504_init() {
 		g_sprite_ids[3] = kernel_load_series(kernel_name('a', 3), 0);
 		local._carAnimationMode = 1;
 		kernel_run_animation(kernel_name('A', -1), 0);
-		if ((previous_room != RETURNING_FROM_DIALOG) && (previous_room != 505))
+		if ((previous_room != KERNEL_RESTORING_GAME) && (previous_room != 505))
 			global[kHoverCarLocation] = previous_room;
 
 		g_sequence_ids[7] = kernel_seq_stamp(g_sprite_ids[7], false, 1);
@@ -151,7 +151,7 @@ static void room_504_parser() {
 			g_engine->_soundManager->command(39, 0);
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 13);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			kernel_seq_delete(g_sequence_ids[7]);
 			g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 18, 0, 0, 0);
 			kernel_seq_depth(g_sequence_ids[5], 14);
@@ -163,7 +163,7 @@ static void room_504_parser() {
 			g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 13);
 			kernel_seq_range(g_sequence_ids[3], 1, 6);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			kernel_seq_timeout(syncIdx, g_sequence_ids[3]);
 		}
 		break;
diff --git a/engines/mads/nebular/rooms/room505.cpp b/engines/mads/nebular/rooms/room505.cpp
index c41eb6dd247..4df2a1e9046 100644
--- a/engines/mads/nebular/rooms/room505.cpp
+++ b/engines/mads/nebular/rooms/room505.cpp
@@ -54,11 +54,11 @@ static void room_505_init() {
 	g_sprite_ids[11] = kernel_load_series(kernel_name('t', -1), 0);
 	g_sprite_ids[12] = kernel_load_series(kernel_name('e', -1), 0);
 
-	if (previous_room != RETURNING_FROM_DIALOG)
+	if (previous_room != KERNEL_RESTORING_GAME)
 		g_sequence_ids[12] = kernel_seq_backward(g_sprite_ids[12], false, 6, 0, 0, 1);
 
 	g_sequence_ids[13] = kernel_seq_forward(g_sprite_ids[13], false, 6, 0, 120, 1);
-	kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+	kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 60);
 	kernel_timing_trigger(30, 62);
 
 	local._carLocations[0] = 501;
@@ -76,7 +76,7 @@ static void room_505_init() {
 	for (int i = 0; i < 9; i++) {
 		if (global[kHoverCarLocation] == local._carLocations[i]) {
 			local._homeSelectedId = i;
-			if (previous_room != RETURNING_FROM_DIALOG)
+			if (previous_room != KERNEL_RESTORING_GAME)
 				local._selectedId = i;
 		}
 	}
@@ -140,7 +140,7 @@ static void room_505_daemon() {
 					kernel_seq_delete(g_sequence_ids[0]);
 					kernel_seq_delete(g_sequence_ids[13]);
 					g_sequence_ids[13] = kernel_seq_backward(g_sprite_ids[13], false, 6, 0, 0, 1);
-					kernel_seq_trigger(g_sequence_ids[13], SEQUENCE_TRIGGER_EXPIRE, 0, 63);
+					kernel_seq_trigger(g_sequence_ids[13], KERNEL_TRIGGER_EXPIRE, 0, 63);
 					g_engine->_soundManager->command(18, 0);
 				}
 			}
@@ -265,7 +265,7 @@ static void room_505_daemon() {
 	case 62:
 		g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 8, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[9], 8);
-		kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
+		kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 61);
 		break;
 
 	case 63:
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index bc686bd6432..69cda9f396f 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -49,7 +49,7 @@ static Scratch local;
 
 
 static void handleDoorSequences() {
-	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 
 	if (local._firstDoorFl) {
 		if (player_said_2(walk_into, software_store) || ((previous_room == 507) && !local._actionFl)) {
@@ -74,7 +74,7 @@ static void handleDoorSequences() {
 		local._doorSequenceIdx = kernel_seq_forward(local._doorSpriteIdx, false, 7, 0, 0, 1);
 		kernel_seq_depth(local._doorSequenceIdx, local._doorDepth);
 		kernel_load_variant(1);
-		kernel_seq_trigger(local._doorSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+		kernel_seq_trigger(local._doorSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 81);
 		break;
 
 
@@ -91,9 +91,9 @@ static void handleDoorSequences() {
 		local._doorSequenceIdx = kernel_seq_backward(local._doorSpriteIdx, false, 7, 0, 0, 1);
 		kernel_seq_depth(local._doorSequenceIdx, local._doorDepth);
 		if (local._actionFl)
-			kernel_seq_trigger(local._doorSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 84);
+			kernel_seq_trigger(local._doorSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 84);
 		else
-			kernel_seq_trigger(local._doorSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+			kernel_seq_trigger(local._doorSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 83);
 
 		break;
 
@@ -103,7 +103,7 @@ static void handleDoorSequences() {
 		int idx = kernel_add_dynamic(local._doorWord, words_walk_into, 0, local._doorSequenceIdx, 0, 0, 0, 0);
 		kernel_dynamic_walk(idx, local._doorPos_x, local._doorPos_y, FACING_NORTHWEST);
 		int hotspotId = idx;
-		kernel_dynamic_cursor(hotspotId, CURSOR_GO_LEFT);
+		kernel_dynamic_cursor(hotspotId, CURSOR_LEFT);
 		kernel_seq_depth(local._doorSequenceIdx, local._doorDepth);
 		local._firstDoorFl = true;
 		if (local._labDoorFl) {
@@ -152,13 +152,13 @@ static void room_506_init() {
 	int idx = kernel_add_dynamic(words_laboratory, words_walk_into, 0, g_sequence_ids[1], 0, 0, 0, 0);
 	kernel_dynamic_walk(idx, 65, 125, FACING_NORTHWEST);
 	int hotspotId = idx;
-	kernel_dynamic_cursor(hotspotId, CURSOR_GO_LEFT);
+	kernel_dynamic_cursor(hotspotId, CURSOR_LEFT);
 	kernel_seq_depth(g_sequence_ids[1], 10);
 	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, 1);
 	idx = kernel_add_dynamic(words_software_store, words_walk_into, 0, g_sequence_ids[2], 0, 0, 0, 0);
 	kernel_dynamic_walk(idx, 112, 102, FACING_NORTHWEST);
 	hotspotId = idx;
-	kernel_dynamic_cursor(hotspotId, CURSOR_GO_LEFT);
+	kernel_dynamic_cursor(hotspotId, CURSOR_LEFT);
 	kernel_seq_depth(g_sequence_ids[2], 13);
 
 	g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -1);
@@ -178,7 +178,7 @@ static void room_506_init() {
 		player.facing = FACING_SOUTHEAST;
 		kernel_timing_trigger(60, 80);
 		player.commands_allowed = false;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 138;
 		player.y = 116;
 		player.facing = FACING_NORTHEAST;
@@ -219,7 +219,7 @@ static void room_506_daemon() {
 			kernel_seq_delete(g_sequence_ids[3]);
 			g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 5);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 72);
 			break;
 
 		case 72:
@@ -258,7 +258,7 @@ static void room_506_parser() {
 			kernel_seq_delete(g_sequence_ids[3]);
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 5);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -274,7 +274,7 @@ static void room_506_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 10, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room507.cpp b/engines/mads/nebular/rooms/room507.cpp
index df9fe22eef0..2e63be902ff 100644
--- a/engines/mads/nebular/rooms/room507.cpp
+++ b/engines/mads/nebular/rooms/room507.cpp
@@ -19,7 +19,7 @@
  *
  */
 
-#include "math/utils.h"
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -49,7 +49,7 @@ static void room_507_init() {
 		kernel_dynamic_walk(local._penlightHotspotId, 233, 152, FACING_SOUTHEAST);
 	}
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 121;
 		player.y = 147;
 		player.facing = FACING_NORTH;
@@ -70,8 +70,8 @@ static void room_507_parser() {
 				g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 6, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[2], 1, 5);
 				kernel_seq_player(g_sequence_ids[2], false);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 5, 1);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index 2ee71cc0bf6..9426974b8b6 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -85,7 +85,7 @@ static void room_508_init() {
 		player.x = 57;
 		player.y = 116;
 		player.facing = FACING_NORTHEAST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 289;
 		player.y = 139;
 		player.facing = FACING_WEST;
@@ -120,8 +120,8 @@ static void handlePedestral() {
 			g_sequence_ids[6] = kernel_seq_pingpong(g_sprite_ids[6], false, 9, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[6], 1, 4);
 			kernel_seq_player(g_sequence_ids[6], false);
-			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 1:
@@ -131,7 +131,7 @@ static void handlePedestral() {
 				inter_take_from_player(OBJ_REARVIEW_MIRROR, 1);
 
 			g_sequence_ids[7] = kernel_seq_forward(g_sprite_ids[7], false, 6, 0, 0, 1);
-			kernel_seq_trigger(g_sequence_ids[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[7], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
@@ -174,14 +174,14 @@ static void room_508_parser() {
 				g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 10, 0, 0, 1);
 				kernel_seq_depth(g_sequence_ids[1], 7);
 				kernel_seq_timeout(-1, g_sequence_ids[1]);
-				kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 			case 3:
 				g_engine->_soundManager->command(19, 0);
 				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 15, 0, 0, 1);
 				kernel_seq_depth(g_sequence_ids[2], 6);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 4);
 				g_sequence_ids[3] = kernel_seq_stamp(g_sprite_ids[3], false, -2);
 				kernel_seq_depth(g_sequence_ids[3], 8);
 				kernel_seq_timeout(g_sequence_ids[1], -1);
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index ad052676401..59b6f5b6a98 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -64,7 +64,7 @@ static void room_511_init() {
 			kernel_load_variant(2);
 	}
 
-	if (previous_room != RETURNING_FROM_DIALOG)
+	if (previous_room != KERNEL_RESTORING_GAME)
 		local._handingLine = false;
 
 	if (global[kBoatRaised]) {
@@ -104,7 +104,7 @@ static void room_511_init() {
 		player.x = 60;
 		player.y = 112;
 		player.facing = FACING_SOUTHEAST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 55;
 		player.y = 152;
 		player.facing = FACING_NORTHWEST;
@@ -161,7 +161,7 @@ static void room_511_daemon() {
 		kernel_seq_delete(g_sequence_ids[1]);
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[1], 1);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 72:
@@ -210,7 +210,7 @@ static void room_511_parser() {
 			kernel_seq_delete(g_sequence_ids[1]);
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[1], 1);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -227,7 +227,7 @@ static void room_511_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 8, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
@@ -339,9 +339,9 @@ static void room_511_parser() {
 			text_show(51128);
 	} else if (player_said_2(look, porthole))
 		text_show(51122);
-	else if (player_said_2(look, fishing_line) && (player.main_object_source == CAT_HOTSPOT) && (global[kLineStatus] == 2))
+	else if (player_said_2(look, fishing_line) && (player.main_object_source == STROKE_INTERFACE) && (global[kLineStatus] == 2))
 		text_show(51126);
-	else if (player_said_2(look, fishing_line) && (player.main_object_source == CAT_HOTSPOT) && (global[kLineStatus] == 3))
+	else if (player_said_2(look, fishing_line) && (player.main_object_source == STROKE_INTERFACE) && (global[kLineStatus] == 3))
 		text_show(51133);
 	else if (player_said_2(look, statue))
 		text_show(51127);
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index 24341f3d6d7..d18f12596cd 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -19,7 +19,7 @@
  *
  */
 
-#include "math/utils.h"
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -84,7 +84,7 @@ static void room_512_init() {
 	} else
 		kernel_flip_hotspot(words_padlock_key, false);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 144;
 		player.y = 152;
 		player.facing = FACING_NORTHEAST;
@@ -104,8 +104,8 @@ static void room_512_parser() {
 				player.walker_visible = false;
 				g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 8, 0, 0, 1);
 				kernel_seq_player(g_sequence_ids[2], false);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 5, 1);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
@@ -141,7 +141,7 @@ static void room_512_parser() {
 				g_sequence_ids[8] = kernel_seq_pingpong(g_sprite_ids[8], false, 9, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[8], 1, 3);
 				kernel_seq_player(g_sequence_ids[8], false);
-				kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 2:
@@ -155,11 +155,11 @@ static void room_512_parser() {
 				if (!object_is_here(OBJ_PADLOCK_KEY) || (game.difficulty == DIFFICULTY_EASY)) {
 					g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 12, 0, 0, 1);
 					kernel_seq_depth(g_sequence_ids[3], 3);
-					kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+					kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 4);
 				} else {
 					g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
 					kernel_seq_depth(g_sequence_ids[4], 3);
-					kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
+					kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 5);
 				}
 				g_engine->_soundManager->command(23, 0);
 				break;
@@ -195,7 +195,7 @@ static void room_512_parser() {
 			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 10, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], 1, 2);
 			kernel_seq_player(g_sequence_ids[2], false);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -205,13 +205,13 @@ static void room_512_parser() {
 				kernel_seq_delete(g_sequence_ids[3]);
 				g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 12, 0, 0, 1);
 				kernel_seq_depth(g_sequence_ids[3], 3);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			} else {
 				kernel_seq_delete(g_sequence_ids[5]);
 				g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 12, 0, 0, 1);
 				kernel_seq_depth(g_sequence_ids[4], 3);
 				kernel_flip_hotspot(words_padlock_key, false);
-				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			}
 			break;
 
@@ -239,8 +239,8 @@ static void room_512_parser() {
 				g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 10, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[2], 1, endVal);
 				kernel_seq_player(g_sequence_ids[2], false);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, endVal, 1);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, endVal, 1);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index c879b134b1e..5081bbf5277 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -50,7 +50,7 @@ static void room_513_init() {
 		player.facing = FACING_WEST;
 		player.commands_allowed = false;
 		kernel_timing_trigger(15, 80);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 63;
 		player.y = 149;
 		player.facing = FACING_NORTHEAST;
@@ -78,7 +78,7 @@ static void room_513_daemon() {
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 2);
 		g_engine->_soundManager->command(24, 0);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 81);
 		break;
 
 	case 81:
@@ -90,7 +90,7 @@ static void room_513_daemon() {
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 2);
 		g_engine->_soundManager->command(25, 0);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 83);
 		break;
 
 	case 83:
@@ -114,7 +114,7 @@ static void room_513_daemon() {
 		kernel_seq_delete(g_sequence_ids[1]);
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[1], 1);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 72:
@@ -136,7 +136,7 @@ static void room_513_parser() {
 			kernel_seq_delete(g_sequence_ids[1]);
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[1], 1);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -153,7 +153,7 @@ static void room_513_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 10, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
@@ -177,7 +177,7 @@ static void room_513_parser() {
 			g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 7, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[4], 1, 2);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -189,7 +189,7 @@ static void room_513_parser() {
 			g_engine->_soundManager->command(24, 0);
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x278), 0, 0, 0x1110, 120, 0, 34);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 2:
@@ -201,7 +201,7 @@ static void room_513_parser() {
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 2);
 			g_engine->_soundManager->command(25, 0);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 4);
 			break;
 
 		case 4:
diff --git a/engines/mads/nebular/rooms/room551.cpp b/engines/mads/nebular/rooms/room551.cpp
index 472cbae6cc9..98083da589a 100644
--- a/engines/mads/nebular/rooms/room551.cpp
+++ b/engines/mads/nebular/rooms/room551.cpp
@@ -42,7 +42,7 @@ static void room_551_init() {
 		player.x = 18;
 		player.y = 130;
 	}
-	else if (previous_room != RETURNING_FROM_DIALOG) {
+	else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 124;
 		player.y = 119;
 		player.facing = FACING_NORTH;
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index 411df287cb4..134ae3286af 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -54,7 +54,7 @@ static void room_601_init() {
 		g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, -2);
 		kernel_seq_depth(g_sequence_ids[2], 3);
 		kernel_run_animation(kernel_name('R', 1), 70);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 229;
 		player.y = 129;
 		player.facing = FACING_SOUTHWEST;
@@ -75,7 +75,7 @@ static void room_601_daemon() {
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 3);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 72:
@@ -99,7 +99,7 @@ static void room_601_parser() {
 			kernel_seq_delete(g_sequence_ids[2]);
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 3);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -115,7 +115,7 @@ static void room_601_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 10, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index f45b17b925d..3c02c7635d8 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -94,7 +95,7 @@ static void room_602_init() {
 		player.x = 228;
 		player.y = 126;
 		player.facing = FACING_WEST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 50;
 		player.y = 127;
 		player.facing = FACING_EAST;
@@ -118,8 +119,8 @@ static void handleSafeActions() {
 		g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], true, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[5], 1, 3);
 		kernel_seq_player(g_sequence_ids[5], false);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_SPRITE, 3, 1);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_SPRITE, 3, 1);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		break;
 
 	case 1:
@@ -141,7 +142,7 @@ static void handleSafeActions() {
 					kernel_flip_hotspot(words_door_key, true);
 
 				kernel_seq_trigger(local._lastSequenceIdx,
-					SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+					KERNEL_TRIGGER_EXPIRE, 0, 2);
 			}
 		} else {
 			kernel_seq_delete(local._lastSequenceIdx);
@@ -155,7 +156,7 @@ static void handleSafeActions() {
 			if (object[OBJ_DOOR_KEY].location == room_id)
 				kernel_flip_hotspot(words_door_key, false);
 
-			kernel_seq_trigger(local._lastSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(local._lastSequenceIdx, KERNEL_TRIGGER_EXPIRE, 0, 2);
 		}
 		break;
 
@@ -267,8 +268,8 @@ static void room_602_parser() {
 			g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], true, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[5], 1, 3);
 			kernel_seq_player(g_sequence_ids[5], false);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_SPRITE, 3, 1);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_SPRITE, 3, 1);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room603.cpp b/engines/mads/nebular/rooms/room603.cpp
index 7c5b7038b7b..924c8c134d3 100644
--- a/engines/mads/nebular/rooms/room603.cpp
+++ b/engines/mads/nebular/rooms/room603.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -58,7 +59,7 @@ static void room_603_init() {
 		kernel_dynamic_walk(local._noteHotspotId, 242, 118, FACING_NORTHEAST);
 	}
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 113;
 		player.y = 134;
 	}
@@ -78,8 +79,8 @@ static void room_603_parser() {
 				g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 8, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[4], 1, 5);
 				kernel_seq_player(g_sequence_ids[4], false);
-				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-				kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_SPRITE, 5, 1);
+				kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
@@ -159,7 +160,7 @@ static void room_603_parser() {
 			text_show(60327);
 		else
 			text_show(60328);
-	} else if (player_said_2(look, compact_case) && (player.main_object_source == CAT_HOTSPOT))
+	} else if (player_said_2(look, compact_case) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(60329);
 	// For the next two checks, the second part of the check wasn't surrounded par parenthesis, which was obviously wrong
 	else if (player_said_1(look) && (player_said_1(bra) || player_said_1(boa) || player_said_1(slip)))
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index 98766c2b280..bd38e2b4dfd 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -47,7 +48,7 @@ static Scratch local;
 static void room_604_init() {
 	g_sprite_ids[2] = kernel_load_series(kernel_name('c', 0), 0);
 	g_sprite_ids[4] = kernel_load_series("*RXCD_9", 0);
-	g_sprite_ids[6] = kernel_load_series(kernel_full_name(620, 'b', 0, "", EXT_SS), 0);
+	g_sprite_ids[6] = kernel_load_series(kernel_full_name(620, 'b', 0, "", KERNEL_SS), 0);
 	g_sprite_ids[5] = kernel_load_series("*RXMRC_9", 0);
 
 	if (global[kTimebombStatus] == 1) {
@@ -63,7 +64,7 @@ static void room_604_init() {
 	pal_change_color(253, 45, 24, 17);
 	local._animationActiveFl = false;
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 72;
 		player.y = 149;
 		player.facing = FACING_NORTHEAST;
@@ -97,7 +98,7 @@ static void room_604_daemon() {
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 1);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 72:
@@ -177,11 +178,11 @@ static void handleBombActions() {
 		kernel_seq_range(g_sequence_ids[5], 1, 3);
 		kernel_seq_player(g_sequence_ids[5], false);
 		if (local._bombMode == 1)
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_SPRITE, 3, 1);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_SPRITE, 3, 1);
 		else
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_SPRITE, 3, 2);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_SPRITE, 3, 2);
 
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		break;
 
 	case 1:
@@ -225,7 +226,7 @@ static void room_604_parser() {
 			kernel_seq_delete(g_sequence_ids[2]);
 			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -242,7 +243,7 @@ static void room_604_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 10, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room605.cpp b/engines/mads/nebular/rooms/room605.cpp
index b2a7502e3a0..d14297af7aa 100644
--- a/engines/mads/nebular/rooms/room605.cpp
+++ b/engines/mads/nebular/rooms/room605.cpp
@@ -49,7 +49,7 @@ static void room_605_init() {
 	player.walker_visible = false;
 	player.commands_allowed = false;
 	kernel_timing_trigger(600, 70);
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	section_6_music();
 	g_engine->_soundManager->command(22, 0);
 }
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index b900f6698db..7267347dd61 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -81,7 +82,7 @@ static void room_607_init() {
 		player.x = 297;
 		player.y = 50;
 		player.facing = FACING_SOUTHEAST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 40;
 		player.y = 104;
 		player.facing = FACING_SOUTHEAST;
@@ -123,7 +124,7 @@ static void room_607_daemon() {
 		local._dogLoop = true;
 		g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 10, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[5], 1);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 91);
 		local._dogLoop = false;
 		local._dogTimer = 0;
 	}
@@ -143,8 +144,8 @@ static void room_607_daemon() {
 		g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 5, 0, 0, 8);
 		kernel_seq_depth(g_sequence_ids[1], 6);
 		kernel_message_purge();
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_SPRITE, 2, 100);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_SPRITE, 2, 100);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 70);
 		local._counter = 0;
 	}
 
@@ -210,7 +211,7 @@ static void room_607_daemon() {
 			kernel_seq_depth(g_sequence_ids[4], 1);
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x2FA), 0, 0, 0x1110, 120, 0, 34);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 60);
 			kernel_timing_trigger(10, 64);
 			break;
 
@@ -221,7 +222,7 @@ static void room_607_daemon() {
 			kernel_seq_range(g_sequence_ids[4], 8, 45);
 			kernel_seq_depth(g_sequence_ids[4], 1);
 			kernel_seq_timeout(syncIdx, g_sequence_ids[4]);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 61);
 		}
 		break;
 
@@ -232,7 +233,7 @@ static void room_607_daemon() {
 			kernel_seq_range(g_sequence_ids[4], 46, -2);
 			kernel_seq_depth(g_sequence_ids[4], 1);
 			kernel_seq_timeout(syncIdx, g_sequence_ids[4]);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 62);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 62);
 		}
 		break;
 
@@ -278,7 +279,7 @@ static void room_607_daemon() {
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 4);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 82);
 		break;
 
 	case 82:
@@ -379,7 +380,7 @@ static void room_607_parser() {
 			kernel_seq_delete(g_sequence_ids[2]);
 			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 4);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -395,7 +396,7 @@ static void room_607_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 10, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index 638e1fc7a51..a9050b96879 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -276,7 +277,7 @@ static void room_608_init() {
 	pal_change_color(252, 63, 44, 30);
 	pal_change_color(253, 63, 20, 22);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 46;
 		player.y = 132;
 		player.facing = FACING_EAST;
@@ -320,7 +321,7 @@ static void room_608_daemon() {
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 11, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[4], 1);
 		g_engine->_soundManager->command(14, 0);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 70);
 		local._dogWindowTimer = 0;
 	}
 
@@ -337,8 +338,8 @@ static void room_608_daemon() {
 				int idx = kernel_add_dynamic(words_obnoxious_dog, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
 				kernel_dynamic_walk(idx, 194, 142, FACING_EAST);
 				local._barkCount = 0;
-				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_SPRITE, 2, 100);
-				kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
+				kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_SPRITE, 2, 100);
+				kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 60);
 			}
 		} else if (kernel.trigger == 60) {
 			int syncIdx = g_sequence_ids[5];
@@ -411,7 +412,7 @@ static void room_608_daemon() {
 		local._dogYelping = false;
 		kernel_message_purge();
 		g_sequence_ids[11] = kernel_seq_forward(g_sprite_ids[11], false, 6, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[11], SEQUENCE_TRIGGER_EXPIRE, 0, 92);
+		kernel_seq_trigger(g_sequence_ids[11], KERNEL_TRIGGER_EXPIRE, 0, 92);
 		kernel_message_add(quote_string(kernel.quotes, 0x2FF), 0, 0, 0x1110, 120, 0, 34);
 	}
 
@@ -620,7 +621,7 @@ static void room_608_daemon() {
 			g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], false, 10, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[9], 1, 2);
 			kernel_seq_depth(g_sequence_ids[9], 5);
-			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+			kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 80);
 			kernel_timing_trigger(10, 85);
 			break;
 
@@ -632,7 +633,7 @@ static void room_608_daemon() {
 			kernel_seq_timeout(-1, g_sequence_ids[9]);
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x2FC), 0, 0, 0x1110, 120, 0, 34);
-			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+			kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 81);
 			break;
 
 		case 81:
@@ -642,7 +643,7 @@ static void room_608_daemon() {
 			kernel_seq_range(g_sequence_ids[9], 6, 38);
 			kernel_seq_depth(g_sequence_ids[9], 5);
 			kernel_seq_timeout(syncIdx, g_sequence_ids[9]);
-			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 82);
+			kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 82);
 		}
 		break;
 
@@ -653,7 +654,7 @@ static void room_608_daemon() {
 			kernel_seq_range(g_sequence_ids[9], 39, 40);
 			kernel_seq_depth(g_sequence_ids[9], 5);
 			kernel_seq_timeout(syncIdx, g_sequence_ids[9]);
-			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
+			kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 83);
 		}
 		break;
 
@@ -689,7 +690,7 @@ static void room_608_daemon() {
 }
 
 static void room_608_pre_parser() {
-	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 
 	if ((player_said_3(throw, bone, rear_of_garage) || player_said_3(throw, bones, rear_of_garage)
 		|| player_said_3(throw, bone, front_of_garage) || player_said_3(throw, bones, front_of_garage)
@@ -724,7 +725,7 @@ static void room_608_parser() {
 				g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], true, 6, 0, 0, 2);
 				kernel_seq_range(g_sequence_ids[3], 1, 2);
 				kernel_seq_player(g_sequence_ids[3], false);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			} else
 				text_show(60839);
 			break;
@@ -799,7 +800,7 @@ static void room_608_parser() {
 				g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], true, 6, 0, 0, 2);
 				kernel_seq_range(g_sequence_ids[3], 1, 3);
 				kernel_seq_player(g_sequence_ids[3], false);
-				kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			} else
 				text_show(60840);
 			break;
@@ -886,8 +887,8 @@ static void room_608_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], true, 6, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[2], false);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -915,8 +916,8 @@ static void room_608_parser() {
 			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], true, 6, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[2], 1, 2);
 			kernel_seq_player(g_sequence_ids[2], false);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -975,7 +976,7 @@ static void room_608_parser() {
 			text_show(60824);
 	} else if (player_said_2(open, storage_box))
 		text_show(60826);
-	else if (player_said_2(look, rearview_mirror) && (player.main_object_source == CAT_HOTSPOT))
+	else if (player_said_2(look, rearview_mirror) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(60828);
 	else if (player_said_2(look, tool_box)) {
 		if (object[OBJ_POLYCEMENT].location == room_id)
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index 88717ee56e9..93991fff45c 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -63,7 +64,7 @@ static void room_609_init() {
 		player.facing = FACING_EAST;
 		kernel_timing_trigger(60, 60);
 		player.commands_allowed = false;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 86;
 		player.y = 136;
 		player.facing = FACING_NORTHEAST;
@@ -92,7 +93,7 @@ static void room_609_daemon() {
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 9);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 61);
 		break;
 
 	case 61:
@@ -106,7 +107,7 @@ static void room_609_daemon() {
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_flip_hotspot(words_video_store_door, true);
 		kernel_seq_depth(g_sequence_ids[2], 9);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 63);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 63);
 		break;
 
 	case 63:
@@ -142,7 +143,7 @@ static void room_609_daemon() {
 		kernel_seq_delete(g_sequence_ids[1]);
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[1], 5);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 72:
@@ -180,7 +181,7 @@ static void enterStore() {
 		g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], true, 11, 0, 0, 2);
 		kernel_seq_range(g_sequence_ids[5], 1, 2);
 		kernel_seq_player(g_sequence_ids[5], false);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		break;
 
 	case 3:
@@ -204,7 +205,7 @@ static void enterStore() {
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 9);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 6);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 6);
 		break;
 
 	case 6:
@@ -221,7 +222,7 @@ static void enterStore() {
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[2], 9);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 8);
 		break;
 
 	case 8:
@@ -297,7 +298,7 @@ static void room_609_parser() {
 			kernel_seq_delete(g_sequence_ids[1]);
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[1], 5);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -314,7 +315,7 @@ static void room_609_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 10, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[4], false);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room610.cpp b/engines/mads/nebular/rooms/room610.cpp
index cdadf37041c..61af8ec5979 100644
--- a/engines/mads/nebular/rooms/room610.cpp
+++ b/engines/mads/nebular/rooms/room610.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -67,7 +68,7 @@ static void room_610_init() {
 	if (kernel.teleported_in && game.difficulty != DIFFICULTY_EASY)
 		inter_give_to_player(OBJ_PENLIGHT);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 175;
 		player.y = 152;
 		player.facing = FACING_NORTHWEST;
@@ -109,8 +110,8 @@ static void room_610_parser() {
 				g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], true, 8, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[2], 1, 2);
 				kernel_seq_player(g_sequence_ids[2], false);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 2, 1);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 				break;
 
 			case 1:
@@ -139,8 +140,8 @@ static void room_610_parser() {
 			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], true, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], 1, 2);
 			kernel_seq_player(g_sequence_ids[2], false);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -192,7 +193,7 @@ static void room_610_parser() {
 		text_show(61024);
 	else if (player_said_2(look, spotlight))
 		text_show(61025);
-	else if (player_said_2(look, phone_handset) && (player.main_object_source == CAT_HOTSPOT))
+	else if (player_said_2(look, phone_handset) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(61026);
 	else if (player_said_2(look, phone_cradle))
 		text_show(61027);
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index 610e490d759..459e4bf42c2 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/global.h"
@@ -90,7 +91,7 @@ static void setDialogNode(int node) {
 
 	switch (node) {
 	case 0:
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		local._duringDialogFl = false;
 		local._hermitDialogNode = 0;
 		break;
@@ -133,7 +134,7 @@ static void handleTalking(int delay) {
 		local._alreadyTalkingFl = true;
 
 	local._hermitTalkingFl = true;
-	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 	kernel_timing_trigger(delay, 100);
 }
 
@@ -942,7 +943,7 @@ static void room_611_init() {
 	local._alreadyTalkingFl = false;
 	local._startTradingFl = false;
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 22;
 		player.y = 132;
 		player.facing = FACING_EAST;
@@ -950,7 +951,7 @@ static void room_611_init() {
 	}
 
 	if (!global[kHasTalkedToHermit]) {
-		kernel_run_animation(kernel_full_name(611, 'h', -1, "", EXT_AA), 0);
+		kernel_run_animation(kernel_full_name(611, 'h', -1, "", KERNEL_AA), 0);
 		local._nextFrame = 47;
 		local._hermitMode = 1;
 		local._hermitTalkingFl = false;
@@ -975,7 +976,7 @@ static void room_611_init() {
 
 		switch (local._hermitDialogNode) {
 		case 0:
-			kernel_set_interface_mode(kInputBuildingSentences);
+			kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 			local._hermitDialogNode = 1;
 			break;
 
@@ -1007,7 +1008,7 @@ static void room_611_daemon() {
 		kernel_seq_range(g_sequence_ids[1], 1, 8);
 		kernel_seq_depth(g_sequence_ids[1], 1);
 		local._ratPresentFl = true;
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 81);
 	} else if (kernel.trigger == 81) {
 		int syncId = g_sequence_ids[1];
 		g_sequence_ids[1] = kernel_seq_pingpong(g_sprite_ids[1], false, 20, 0, 0, 0);
@@ -1042,7 +1043,7 @@ static void room_611_daemon() {
 			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], false, 12, 0, 0, 3);
 			kernel_seq_range(g_sequence_ids[2], 2, 4);
 			kernel_seq_depth(g_sequence_ids[2], 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 71);
 			break;
 
 		case 7:
@@ -1077,14 +1078,14 @@ static void room_611_daemon() {
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 24, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], 5, 8);
 			kernel_seq_depth(g_sequence_ids[2], 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 71);
 			break;
 
 		case 17:
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 20, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], 9, 11);
 			kernel_seq_depth(g_sequence_ids[2], 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 71);
 			break;
 
 		case 21:
@@ -1111,7 +1112,7 @@ static void room_611_daemon() {
 		case 29:
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 20, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 71);
 			break;
 
 		default:
@@ -1240,7 +1241,7 @@ static void room_611_daemon() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 1, 2);
 		kernel_seq_player(g_sequence_ids[3], false);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 111);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 111);
 	}
 
 	if (kernel.trigger == 111) {
@@ -1262,7 +1263,7 @@ static void room_611_daemon() {
 			g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 7, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[3], 1, 2);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 112);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 112);
 			local._check1Fl = false;
 		}
 
@@ -1292,7 +1293,7 @@ static void room_611_daemon() {
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 1, 2);
 		kernel_seq_player(g_sequence_ids[3], false);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 114);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 114);
 	}
 
 	if (kernel.trigger == 114) {
@@ -1303,7 +1304,7 @@ static void room_611_daemon() {
 		kernel_seq_range(g_sequence_ids[3], 1, 2);
 		kernel_seq_timeout(syncIdx, g_sequence_ids[3]);
 		kernel_seq_player(g_sequence_ids[3], false);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 115);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 115);
 	}
 
 	if ((local._nextFrame >= 0) && (local._nextFrame != kernel_anim[0].frame)) {
@@ -1342,7 +1343,7 @@ static void room_611_pre_parser() {
 }
 
 static void room_611_parser() {
-	if (inter_input_mode == kInputConversation)
+	if (inter_input_mode == INTER_CONVERSATION)
 		handleDialog();
 	else if ((player_said_3(give, phone_cells, hermit)) || (player_said_3(give, durafail_cells, hermit))) {
 		player2.words[0] = 0x294;
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index cbd6b9a86d6..d95451f19d6 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -47,8 +47,8 @@ static void handleWinchMovement() {
 		g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 10, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[4], 1, 5);
 		kernel_seq_player(g_sequence_ids[4], false);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_SPRITE, 5, 1);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_SPRITE, 5, 1);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
@@ -66,7 +66,7 @@ static void handleWinchMovement() {
 			g_engine->_soundManager->command(18, 0);
 		}
 		kernel_seq_depth(g_sequence_ids[2], 1);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 3);
 		break;
 
 	case 2:
@@ -115,7 +115,7 @@ static void room_612_init() {
 	g_sequence_ids[2] = kernel_seq_stamp(g_sprite_ids[2], false, local._cycleIndex);
 	kernel_seq_depth(g_sequence_ids[2], 1);
 
-	if (previous_room != RETURNING_FROM_DIALOG) {
+	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 280;
 		player.y = 75;
 		player.facing = FACING_SOUTHWEST;
@@ -146,7 +146,7 @@ static void room_612_daemon() {
 		kernel_seq_delete(g_sequence_ids[1]);
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 6, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[1], 2);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 72);
 		break;
 
 	case 72:
@@ -168,7 +168,7 @@ static void room_612_parser() {
 			kernel_seq_delete(g_sequence_ids[1]);
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[1], 2);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -185,7 +185,7 @@ static void room_612_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], true, 10, 0, 0, 1);
 			kernel_seq_player(g_sequence_ids[3], false);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 3);
 			break;
 
 		case 3:
diff --git a/engines/mads/nebular/rooms/room620.cpp b/engines/mads/nebular/rooms/room620.cpp
index 19a77bc3bdb..e61720ebc2d 100644
--- a/engines/mads/nebular/rooms/room620.cpp
+++ b/engines/mads/nebular/rooms/room620.cpp
@@ -37,7 +37,7 @@ static void room_620_init() {
 	player.commands_allowed = false;
 	player.walker_visible = false;
 	kernel_timing_trigger(30, 70);
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	section_6_music();
 }
 
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index 2c3fea8180a..a687c6def6f 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -128,7 +129,7 @@ static void room_701_init() {
 		player.commands_allowed = false;
 		kernel_run_animation(kernel_name('B', 1), 80);
 		g_engine->_soundManager->command(28, 0);
-	} else if (previous_room != RETURNING_FROM_DIALOG && previous_room != 620) {
+	} else if (previous_room != KERNEL_RESTORING_GAME && previous_room != 620) {
 		player.x = 22;
 		player.y = 131;
 		player.facing = FACING_EAST;
@@ -146,7 +147,7 @@ static void room_701_daemon() {
 		kernel_seq_delete(g_sequence_ids[5]);
 		g_sequence_ids[5] = kernel_seq_backward(g_sprite_ids[5], false, 6, 0, 0, 1);
 		kernel_seq_loc(g_sequence_ids[5], 155, 129);
-		kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
+		kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 61);
 		break;
 
 	case 61:
@@ -161,7 +162,7 @@ static void room_701_daemon() {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 0, 0, 1);
 		kernel_seq_loc(g_sequence_ids[1], 48, 136);
 		kernel_seq_depth(g_sequence_ids[1], 10);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		break;
 
 	case 71:
@@ -174,7 +175,7 @@ static void room_701_daemon() {
 		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 5, 0, 0, 1);
 		kernel_seq_loc(g_sequence_ids[1], 48, 136);
 		kernel_seq_depth(g_sequence_ids[1], 10);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 73);
 		break;
 
 	case 73:
@@ -223,7 +224,7 @@ static void room_701_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 6, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[5], 155, 129);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -254,7 +255,7 @@ static void room_701_parser() {
 			kernel_seq_depth(g_sequence_ids[1], 10);
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x30D), 0, 0, 0x310, 120, 0, 34);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -267,7 +268,7 @@ static void room_701_parser() {
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 5, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[1], 48, 136);
 			kernel_seq_depth(g_sequence_ids[1], 10);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 4);
 			break;
 
 		case 4:
diff --git a/engines/mads/nebular/rooms/room702.cpp b/engines/mads/nebular/rooms/room702.cpp
index d267fec8c9a..8af55534fcd 100644
--- a/engines/mads/nebular/rooms/room702.cpp
+++ b/engines/mads/nebular/rooms/room702.cpp
@@ -38,7 +38,7 @@ static void room_702_init() {
 		player.x = 13;
 		player.y = 145;
 		player.facing = FACING_EAST;
-	} else if (previous_room != RETURNING_FROM_DIALOG && previous_room != 620) {
+	} else if (previous_room != KERNEL_RESTORING_GAME && previous_room != 620) {
 		player.x = 289;
 		player.y = 138;
 		player_walk(262, 148, FACING_WEST);
@@ -76,15 +76,15 @@ static void room_702_parser() {
 		player.commands_allowed = false;
 		player.walker_visible = false;
 		new_room = 711;
-	} else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT) && (!player_has(OBJ_BONES) || kernel.trigger)) {
+	} else if (player_said_2(take, bones) && (player.main_object_source == STROKE_INTERFACE) && (!player_has(OBJ_BONES) || kernel.trigger)) {
 		switch (kernel.trigger) {
 		case 0:
 			player.commands_allowed = false;
 			player.walker_visible = false;
 			g_sequence_ids[12] = kernel_seq_pingpong(g_sprite_ids[12], false, 5, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[12], false);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 		case 1:
 			g_engine->_soundManager->command(0xF, 0);
@@ -115,9 +115,9 @@ static void room_702_parser() {
 		text_show(70215);
 	else if (player_said_2(look, teleporter))
 		text_show(70216);
-	else if (player_said_2(look, bones) && (player.main_object_source == CAT_HOTSPOT))
+	else if (player_said_2(look, bones) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(70217);
-	else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT)) {
+	else if (player_said_2(take, bones) && (player.main_object_source == STROKE_INTERFACE)) {
 		if (player_has(OBJ_BONES))
 			text_show(70219);
 	} else if (player_said_2(look, submerged_city))
diff --git a/engines/mads/nebular/rooms/room703.cpp b/engines/mads/nebular/rooms/room703.cpp
index 348ad8948e8..9c75d689927 100644
--- a/engines/mads/nebular/rooms/room703.cpp
+++ b/engines/mads/nebular/rooms/room703.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -92,7 +93,7 @@ static void handleBottleInterface() {
 }
 
 static void setBottleSequence() {
-	kernel_set_interface_mode(kInputBuildingSentences);
+	kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 	player.commands_allowed = false;
 	if (local._boatDir == 2)
 		local._curSequence = 6;
@@ -123,7 +124,7 @@ static void handleFillBottle(int quote) {
 		break;
 
 	case 0x315:
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		break;
 
 	default:
@@ -158,7 +159,7 @@ static void room_703_init() {
 		local._monsterMode = 0;
 		kernel_run_animation(kernel_name('A', -1), 0);
 		kernel_reset_animation(0, 34);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.commands_allowed = false;
 		local._boatDir = 1;
 		if (global[kMonsterAlive]) {
@@ -470,7 +471,7 @@ static void room_703_daemon() {
 				kernel_run_animation(kernel_name('A', -1), 0);
 				kernel_reset_animation(0, 9);
 				player.commands_allowed = true;
-				if (config_file.naughtiness == STORYMODE_NAUGHTY)
+				if (config_file.naughtiness == NAUGHTY)
 					text_show(70321);
 				else
 					text_show(70322);
@@ -490,7 +491,7 @@ static void room_703_daemon() {
 }
 
 static void room_703_parser() {
-	if (inter_input_mode == kInputConversation)
+	if (inter_input_mode == INTER_CONVERSATION)
 		handleFillBottle(player2.words[0]);
 	else if (player_said_2(steer_towards, dock_to_south)) {
 		player.commands_allowed = false;
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index 8daf58d8515..8d8f963d3d9 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -84,7 +84,7 @@ static void handleBottleInterface() {
 }
 
 static void setBottleSequence() {
-	kernel_set_interface_mode(kInputBuildingSentences);
+	kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 	player.commands_allowed = false;
 	if (local._boatDirection == 2)
 		local._animationMode = 6;
@@ -115,7 +115,7 @@ static void handleFillBottle(int quote) {
 		break;
 
 	case 0x315:
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		break;
 
 	default:
@@ -150,7 +150,7 @@ static void room_704_init() {
 		local._boatDirection = 2;
 		kernel_run_animation(kernel_name('A', -1), 0);
 		kernel_reset_animation(0, 36);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.commands_allowed = false;
 		local._boatDirection = 1;
 		kernel_run_animation(kernel_name('A', -1), 0);
@@ -321,7 +321,7 @@ static void room_704_daemon() {
 }
 
 static void room_704_parser() {
-	if (inter_input_mode == kInputConversation)
+	if (inter_input_mode == INTER_CONVERSATION)
 		handleFillBottle(player2.words[0]);
 	else if (player_said_2(steer_towards, open_water_to_south)) {
 		player.commands_allowed = false;
@@ -363,7 +363,7 @@ static void room_704_parser() {
 			text_show(70412);
 	} else if (player_said_2(look, volcano_rim))
 		text_show(70413);
-	else if (player_said_2(look, bottle) && (player.main_object_source == CAT_HOTSPOT))
+	else if (player_said_2(look, bottle) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(70414);
 	else if (player_said_2(look, open_water_to_south))
 		text_show(70416);
diff --git a/engines/mads/nebular/rooms/room705.cpp b/engines/mads/nebular/rooms/room705.cpp
index 5b99c758763..16c185d4382 100644
--- a/engines/mads/nebular/rooms/room705.cpp
+++ b/engines/mads/nebular/rooms/room705.cpp
@@ -79,10 +79,10 @@ static void handleBottleInterface() {
 }
 
 static void setBottleSequence() {
-	kernel_set_interface_mode(kInputBuildingSentences);
+	kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 	player.commands_allowed = false;
 	kernel_seq_delete(g_sequence_ids[3]);
-	kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+	kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 	kernel_run_animation(kernel_name('F', -1), 90);
 }
 
@@ -109,7 +109,7 @@ static void handleFillBottle(int quote) {
 		break;
 
 	case 0x315:
-		kernel_set_interface_mode(kInputBuildingSentences);
+		kernel_set_interface_mode(INTER_BUILDING_SENTENCES);
 		break;
 
 	default:
@@ -128,8 +128,8 @@ static void room_705_init() {
 		player.commands_allowed = false;
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 9, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 1, 4);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.commands_allowed = false;
 		kernel_timing_trigger(1, 80);
 		g_engine->_soundManager->command(28, 0);
@@ -149,7 +149,7 @@ static void room_705_daemon() {
 	case 70:
 		g_sequence_ids[3] = kernel_seq_backward(g_sprite_ids[3], false, 9, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 1, 4);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		break;
 
 	case 71:
@@ -169,7 +169,7 @@ static void room_705_daemon() {
 	case 80:
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 9, 0, 0, 1);
 		kernel_seq_depth(g_sequence_ids[1], 2);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 81);
 		break;
 
 	case 81:
@@ -226,7 +226,7 @@ static void room_705_daemon() {
 }
 
 static void room_705_parser() {
-	if (inter_input_mode == kInputConversation)
+	if (inter_input_mode == INTER_CONVERSATION)
 		handleFillBottle(player2.words[0]);
 	else if (player_said_2(steer_towards, open_water_to_south)) {
 		switch (kernel.trigger) {
@@ -235,7 +235,7 @@ static void room_705_parser() {
 			kernel_seq_delete(g_sequence_ids[3]);
 			g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 6, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[2], 2);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			g_engine->_soundManager->command(18, 0);
 			break;
 
@@ -260,7 +260,7 @@ static void room_705_parser() {
 			kernel_seq_delete(g_sequence_ids[3]);
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 6, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[3], 1, 16);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index be854bebd7c..90bab481912 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -77,8 +78,8 @@ static void handleTakeVase() {
 		player.walker_visible = false;
 		g_sequence_ids[3] = kernel_seq_pingpong(g_sprite_ids[3], false, 4, 0, 0, 2);
 		kernel_seq_player(g_sequence_ids[3], false);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 7, 1);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 7, 1);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 2);
 		break;
 
 	case 1:
@@ -136,7 +137,7 @@ static void room_706_init() {
 		player.x = 277;
 		player.y = 103;
 		player.facing = FACING_SOUTHWEST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 167;
 		player.y = 152;
 		player.facing = FACING_NORTH;
@@ -299,7 +300,7 @@ static void room_706_parser() {
 		text_show(70623);
 	else if (player_said_2(look, vase) && (object[OBJ_VASE].location == room_id))
 		text_show(70624);
-	else if (player_said_2(look, bottle) && (player.main_object_source == CAT_HOTSPOT))
+	else if (player_said_2(look, bottle) && (player.main_object_source == STROKE_INTERFACE))
 		text_show(70632);
 	else
 		return;
diff --git a/engines/mads/nebular/rooms/room707.cpp b/engines/mads/nebular/rooms/room707.cpp
index 0a7364b09c3..c8706370932 100644
--- a/engines/mads/nebular/rooms/room707.cpp
+++ b/engines/mads/nebular/rooms/room707.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
diff --git a/engines/mads/nebular/rooms/room710.cpp b/engines/mads/nebular/rooms/room710.cpp
index 98d66e6f9c3..0bc48ee31e1 100644
--- a/engines/mads/nebular/rooms/room710.cpp
+++ b/engines/mads/nebular/rooms/room710.cpp
@@ -32,7 +32,7 @@ namespace RexNebular {
 namespace Rooms {
 
 static void room_710_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 
 	if (object[OBJ_VASE].location == 706) {
 		g_sprite_ids[1] = kernel_load_series(kernel_name('g', -1), 0);
diff --git a/engines/mads/nebular/rooms/room711.cpp b/engines/mads/nebular/rooms/room711.cpp
index b14f77f1bc9..e23c9b00c89 100644
--- a/engines/mads/nebular/rooms/room711.cpp
+++ b/engines/mads/nebular/rooms/room711.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
diff --git a/engines/mads/nebular/rooms/room751.cpp b/engines/mads/nebular/rooms/room751.cpp
index 776324ff7ca..1424e6f2bbd 100644
--- a/engines/mads/nebular/rooms/room751.cpp
+++ b/engines/mads/nebular/rooms/room751.cpp
@@ -71,7 +71,7 @@ static void room_751_init() {
 		g_sequence_ids[4] = kernel_seq_stamp(g_sprite_ids[4], false, -2);
 		kernel_seq_loc(g_sequence_ids[4], 155, 129);
 		kernel_timing_trigger(15, 70);
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 22;
 		player.y = 131;
 		player.facing = FACING_EAST;
@@ -110,7 +110,7 @@ static void room_751_daemon() {
 		kernel_seq_delete(g_sequence_ids[4]);
 		g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 6, 0, 0, 1);
 		kernel_seq_loc(g_sequence_ids[4], 155, 129);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		break;
 
 	case 71:
@@ -137,7 +137,7 @@ static void room_751_daemon() {
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 5, 0, 0, 1);
 		kernel_seq_loc(g_sequence_ids[1], 48, 136);
 		kernel_seq_depth(g_sequence_ids[1], 10);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 61);
 		break;
 
 	case 61:
@@ -150,7 +150,7 @@ static void room_751_daemon() {
 		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 5, 0, 0, 1);
 		kernel_seq_loc(g_sequence_ids[1], 48, 136);
 		kernel_seq_depth(g_sequence_ids[1], 10);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 63);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 63);
 		break;
 
 	case 63:
@@ -191,7 +191,7 @@ static void room_751_pre_parser() {
 			kernel_seq_delete(g_sequence_ids[2]);
 			g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 11, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[2], -1, 7);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -218,7 +218,7 @@ static void room_751_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 6, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[4], 155, 129);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -249,7 +249,7 @@ static void room_751_parser() {
 			kernel_seq_depth(g_sequence_ids[1], 10);
 			kernel_message_purge();
 			kernel_message_add(quote_string(kernel.quotes, 0x30D), 0, 0, 0x1110, 120, 0, 34);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 1);
 			break;
 
 		case 1:
@@ -262,7 +262,7 @@ static void room_751_parser() {
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 5, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[1], 48, 136);
 			kernel_seq_depth(g_sequence_ids[1], 10);
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 4);
 			break;
 
 		case 4:
@@ -289,7 +289,7 @@ static void room_751_parser() {
 				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[2], -1, 6);
 				kernel_seq_timeout(-1, g_sequence_ids[2]);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 1);
 				break;
 
 			case 1:
@@ -306,7 +306,7 @@ static void room_751_parser() {
 				kernel_seq_delete(g_sequence_ids[2]);
 				g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
 				kernel_seq_range(g_sequence_ids[2], 8, -2);
-				kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
+				kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 3);
 				break;
 
 			case 3:
diff --git a/engines/mads/nebular/rooms/room752.cpp b/engines/mads/nebular/rooms/room752.cpp
index a23aa35275d..3a7de3a9aba 100644
--- a/engines/mads/nebular/rooms/room752.cpp
+++ b/engines/mads/nebular/rooms/room752.cpp
@@ -46,7 +46,7 @@ static void room_752_init() {
 		player.x = 13;
 		player.y = 145;
 		player.facing = FACING_EAST;
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 289;
 		player.y = 138;
 		player_walk(262, 148, FACING_WEST);
@@ -125,8 +125,8 @@ static void room_752_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[12] = kernel_seq_pingpong(g_sprite_ids[12], false, 5, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[12], false);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 		case 1:
 			g_engine->_soundManager->command(15, 0);
@@ -142,7 +142,7 @@ static void room_752_parser() {
 		default:
 			break;
 		}
-	} else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT) &&
+	} else if (player_said_2(take, bones) && (player.main_object_source == STROKE_INTERFACE) &&
 		(!player_has(OBJ_BONES) || kernel.trigger)) {
 		switch (kernel.trigger) {
 		case 0:
@@ -150,8 +150,8 @@ static void room_752_parser() {
 			player.walker_visible = false;
 			g_sequence_ids[12] = kernel_seq_pingpong(g_sprite_ids[12], false, 5, 0, 0, 2);
 			kernel_seq_player(g_sequence_ids[12], false);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[12], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[12], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 		case 1:
 			g_engine->_soundManager->command(15, 0);
@@ -185,12 +185,12 @@ static void room_752_parser() {
 		text_show(75217);
 	else if (player_said_2(look, teleporter))
 		text_show(75218);
-	else if ((player_said_2(look, bones) || player_said_2(look, id_card)) && (player.main_object_source == CAT_HOTSPOT)) {
+	else if ((player_said_2(look, bones) || player_said_2(look, id_card)) && (player.main_object_source == STROKE_INTERFACE)) {
 		if (object[OBJ_ID_CARD].location == 752)
 			text_show(75219);
 		else
 			text_show(75220);
-	} else if (player_said_2(take, bones) && (player.main_object_source == CAT_HOTSPOT)) {
+	} else if (player_said_2(take, bones) && (player.main_object_source == STROKE_INTERFACE)) {
 		if (player_has(OBJ_BONES))
 			text_show(75222);
 	} else
diff --git a/engines/mads/nebular/rooms/room801.cpp b/engines/mads/nebular/rooms/room801.cpp
index 4c6d062a49f..e7b65d3af3e 100644
--- a/engines/mads/nebular/rooms/room801.cpp
+++ b/engines/mads/nebular/rooms/room801.cpp
@@ -69,7 +69,7 @@ static void room_801_init() {
 		player.y = 111;
 		player_walk(270, 118, FACING_WEST);
 		player.walker_visible = true;
-	} else if ((previous_room != RETURNING_FROM_DIALOG) && !global[kTeleporterCommand]) {
+	} else if ((previous_room != KERNEL_RESTORING_GAME) && !global[kTeleporterCommand]) {
 		player.x = 8;
 		player.y = 117;
 		player_walk(41, 115, FACING_EAST);
@@ -87,8 +87,8 @@ static void room_801_init() {
 			global[kTeleporterUnderstood] = true;
 			g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[1], 1, 13);
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 75);
 			g_engine->_soundManager->command(30, 0);
 			break;
 
@@ -98,8 +98,8 @@ static void room_801_init() {
 			global[kTeleporterUnderstood] = true;
 			g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[1], 1, 13);
-			kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
-			kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
+			kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 80);
 			g_engine->_soundManager->command(30, 0);
 			break;
 
@@ -140,7 +140,7 @@ static void room_801_daemon() {
 		if (global[kSexOfRex] == REX_FEMALE) {
 			g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 8, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[5], 1, 8);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 140);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 140);
 		} else {
 			player.commands_allowed = true;
 			player.walker_visible = true;
@@ -174,7 +174,7 @@ static void room_801_daemon() {
 		kernel_seq_range(g_sequence_ids[2], 1, 5);
 		kernel_seq_depth(g_sequence_ids[2], 10);
 		local._walkThroughDoor = false;
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 120);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 120);
 	}
 
 	if (kernel.trigger == 120) {
@@ -195,7 +195,7 @@ static void room_801_daemon() {
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 4, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[2], 1, 5);
 		kernel_seq_depth(g_sequence_ids[2], 10);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 110);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 110);
 	}
 
 	if (kernel.trigger == 110) {
@@ -234,10 +234,10 @@ static void room_801_parser() {
 		player.facing = FACING_EAST;
 		player_select_series();
 		global[kBetweenRooms] = true;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_seq_delete(g_sequence_ids[2]);
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 4, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 90);
 		kernel_seq_range(g_sequence_ids[2], 1, 5);
 		kernel_seq_depth(g_sequence_ids[2], 13);
 		g_engine->_soundManager->command(11, 0);
diff --git a/engines/mads/nebular/rooms/room802.cpp b/engines/mads/nebular/rooms/room802.cpp
index fec9ae19ea2..3a50577156f 100644
--- a/engines/mads/nebular/rooms/room802.cpp
+++ b/engines/mads/nebular/rooms/room802.cpp
@@ -59,7 +59,7 @@ static void room_802_init() {
 		player.y = 119;
 		player.facing = FACING_WEST;
 
-	} else if (previous_room != RETURNING_FROM_DIALOG) {
+	} else if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 15;
 		player.y = 129;
 		player.facing = FACING_EAST;
@@ -70,7 +70,7 @@ static void room_802_init() {
 
 
 	if (global[kHasWatchedAntigrav] && !global[kRemoteSequenceRan]) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(200, 70);
 	}
 
@@ -95,8 +95,8 @@ static void room_802_daemon() {
 		player.commands_allowed = false;
 		g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[3], 1, 19);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
-		kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_SPRITE, 4, 72);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_SPRITE, 4, 72);
 	}
 
 	if (kernel.trigger == 71) {
@@ -136,8 +136,8 @@ static void room_802_parser() {
 			g_sequence_ids[2] = kernel_seq_pingpong(g_sprite_ids[2], true, 7, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[2], 1, 2);
 			kernel_seq_player(g_sequence_ids[2], false);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_SPRITE, 2, 1);
-			kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_SPRITE, 2, 1);
+			kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
@@ -168,8 +168,8 @@ static void room_802_parser() {
 			g_sequence_ids[5] = kernel_seq_pingpong(g_sprite_ids[5], true, 7, 0, 0, 2);
 			kernel_seq_range(g_sequence_ids[5], 1, 4);
 			kernel_seq_player(g_sequence_ids[5], false);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_SPRITE, 4, 1);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_SPRITE, 4, 1);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 2);
 			break;
 
 		case 1:
diff --git a/engines/mads/nebular/rooms/room803.cpp b/engines/mads/nebular/rooms/room803.cpp
index 86b2292867d..089e15eda7f 100644
--- a/engines/mads/nebular/rooms/room803.cpp
+++ b/engines/mads/nebular/rooms/room803.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -55,7 +56,7 @@ static void room_803_init() {
 
 	if (!global[kFromCockpit]) {
 		if (!global[kReturnFromCut]) {
-			if (previous_room != RETURNING_FROM_DIALOG) {
+			if (previous_room != KERNEL_RESTORING_GAME) {
 				player.x = 15;
 				player.y = 130;
 				player.facing = FACING_EAST;
@@ -71,7 +72,7 @@ static void room_803_init() {
 			kernel_seq_depth(g_sequence_ids[3], 15);
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 1);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 80);
 			g_engine->_soundManager->command(14, 0);
 		}
 
@@ -87,7 +88,7 @@ static void room_803_init() {
 			g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 12, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[5], 1, 6);
 			kernel_seq_depth(g_sequence_ids[5], 1);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 100);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 100);
 		}
 	} else if (!global[kExitShip]) {
 		if (!global[kBeamIsUp]) {
@@ -96,7 +97,7 @@ static void room_803_init() {
 			player.commands_allowed = false;
 			g_sequence_ids[3] = kernel_seq_forward(g_sprite_ids[3], false, 8, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[3], 1);
-			kernel_seq_trigger(g_sequence_ids[3], SEQUENCE_TRIGGER_EXPIRE, 0, 130);
+			kernel_seq_trigger(g_sequence_ids[3], KERNEL_TRIGGER_EXPIRE, 0, 130);
 			g_engine->_soundManager->command(14, 0);
 		} else {
 			g_sprite_ids[8] = kernel_load_series(kernel_name('c', 1), 0);
@@ -105,7 +106,7 @@ static void room_803_init() {
 			g_sequence_ids[8] = kernel_seq_stamp(g_sprite_ids[8], false, 1);
 			g_sequence_ids[8] = kernel_seq_forward(g_sprite_ids[8], false, 8, 0, 0, 1);
 			kernel_seq_depth(g_sequence_ids[8], 1);
-			kernel_seq_trigger(g_sequence_ids[8], SEQUENCE_TRIGGER_EXPIRE, 0, 140);
+			kernel_seq_trigger(g_sequence_ids[8], KERNEL_TRIGGER_EXPIRE, 0, 140);
 		}
 	} else {
 		player.commands_allowed = false;
@@ -134,7 +135,7 @@ static void room_803_daemon() {
 		if (!global[kHoppyDead]) {
 			g_sequence_ids[5] = kernel_seq_forward(g_sprite_ids[5], false, 7, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[5], 7, 12);
-			kernel_seq_trigger(g_sequence_ids[5], SEQUENCE_TRIGGER_EXPIRE, 0, 101);
+			kernel_seq_trigger(g_sequence_ids[5], KERNEL_TRIGGER_EXPIRE, 0, 101);
 		} else {
 			g_sequence_ids[5] = kernel_seq_stamp(g_sprite_ids[5], false, -2);
 			int idx = kernel_add_dynamic(words_guts, words_walkto, 0, g_sequence_ids[5], 0, 0, 0, 0);
@@ -178,12 +179,12 @@ static void room_803_daemon() {
 
 		g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 12, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[4], 1, 3);
-		kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
+		kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 90);
 	}
 
 	if (kernel.trigger == 70) {
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 8, 0, 0, 1);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		g_engine->_soundManager->command(31, 0);
 	}
 
@@ -230,7 +231,7 @@ static void room_803_daemon() {
 		g_sequence_ids[6] = kernel_seq_backward(g_sprite_ids[6], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[6], 1, 19);
 		kernel_seq_depth(g_sequence_ids[6], 4);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 151);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 151);
 	}
 
 	if (kernel.trigger == 151) {
@@ -258,7 +259,7 @@ static void room_803_parser() {
 			g_sequence_ids[9] = kernel_seq_forward(g_sprite_ids[9], true, 6, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[9], 1, 4);
 			kernel_seq_player(g_sequence_ids[9], false);
-			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 160);
+			kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 160);
 			break;
 
 		case 160:
@@ -284,7 +285,7 @@ static void room_803_parser() {
 			g_sequence_ids[9] = kernel_seq_backward(g_sprite_ids[9], true, 6, 0, 0, 1);
 			kernel_seq_range(g_sequence_ids[9], 1, 4);
 			kernel_seq_player(g_sequence_ids[9], false);
-			kernel_seq_trigger(g_sequence_ids[9], SEQUENCE_TRIGGER_EXPIRE, 0, 163);
+			kernel_seq_trigger(g_sequence_ids[9], KERNEL_TRIGGER_EXPIRE, 0, 163);
 			break;
 
 		case 163:
@@ -299,11 +300,11 @@ static void room_803_parser() {
 	} else if (player_said_2(enter, ship)) {
 		g_engine->_soundManager->command(17, 0);
 		player.commands_allowed = false;
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[6] = kernel_seq_forward(g_sprite_ids[6], false, 8, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[6], 1, 19);
 		kernel_seq_depth(g_sequence_ids[6], 4);
-		kernel_seq_trigger(g_sequence_ids[6], SEQUENCE_TRIGGER_EXPIRE, 0, 120);
+		kernel_seq_trigger(g_sequence_ids[6], KERNEL_TRIGGER_EXPIRE, 0, 120);
 		global[kBeamIsUp] = false;
 	} else if (player_said_2(look, launch_pad))
 		text_show(80310);
@@ -312,7 +313,7 @@ static void room_803_parser() {
 	else if (player_said_2(look, pad_to_west))
 		text_show(80311);
 	else if (player_said_2(look, guts)) {
-		if (config_file.naughtiness == STORYMODE_NICE)
+		if (config_file.naughtiness == NICE)
 			text_show(80312);
 		else
 			text_show(80313);
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index 07b707adc83..27f53fd357a 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -19,6 +19,7 @@
  *
  */
 
+#include "mads/core/config.h"
 #include "mads/core/game.h"
 #include "mads/nebular/global.h"
 #include "mads/nebular/nebular.h"
@@ -97,12 +98,12 @@ static void room_804_init() {
 		kernel_seq_depth(g_sequence_ids[1], 8);
 	}
 
-	kernel_run_animation(kernel_full_name(804, 'r', 1, "", EXT_AA), 0);
+	kernel_run_animation(kernel_full_name(804, 'r', 1, "", KERNEL_AA), 0);
 
 	section_8_music();
 
 	if (global[kInSpace] && !global[kWindowFixed]) {
-		kernel_set_interface_mode(kInputLimitedSentences);
+		kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 		g_engine->_soundManager->command(19, 0);
 	}
 }
@@ -130,7 +131,7 @@ static void room_804_daemon() {
 			kernel_seq_delete(g_sequence_ids[7]);
 
 		switch (config_file.naughtiness) {
-		case STORYMODE_NAUGHTY:
+		case NAUGHTY:
 		default:
 			if (kernel_anim[0].frame == 81) {
 				local._resetFrame = 80;
@@ -143,7 +144,7 @@ static void room_804_daemon() {
 			}
 			break;
 
-		case STORYMODE_NICE:
+		case NICE:
 			if (kernel_anim[0].frame == 68) {
 				local._resetFrame = 66;
 				global[kInSpace] = false;
@@ -329,7 +330,7 @@ static void room_804_parser() {
 			g_engine->_soundManager->command(15, 0);
 			global[kBeamIsUp] = false;
 		}
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		kernel_timing_trigger(2, 90);
 	} else  if (player.look_around) {
 		text_show(80410);
diff --git a/engines/mads/nebular/rooms/room805.cpp b/engines/mads/nebular/rooms/room805.cpp
index 2f8e56e36e7..283c3ba575a 100644
--- a/engines/mads/nebular/rooms/room805.cpp
+++ b/engines/mads/nebular/rooms/room805.cpp
@@ -33,7 +33,7 @@ namespace Rooms {
 
 static void room_805_init() {
 	player.walker_visible = false;
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 
 	g_sprite_ids[1] = kernel_load_series(kernel_name('a', 1), 0);
 	g_sprite_ids[2] = kernel_load_series(kernel_name('a', 2), 0);
@@ -104,30 +104,30 @@ static void room_805_parser() {
 	if (player_said_2(exit, service_panel))
 		new_room = 804;
 	else if (player_said_2(install, shield_modulator) && player_has(OBJ_SHIELD_MODULATOR)) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[1] = kernel_seq_forward(g_sprite_ids[1], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[1], -1, -2);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 70);
 		player.commands_allowed = false;
 	} else if (player_said_2(install, target_module) && player_has(OBJ_TARGET_MODULE)) {
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[2] = kernel_seq_forward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[2], -1, -2);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 80);
 		player.commands_allowed = false;
 	} else if (player_said_2(remove, shield_modulator) && global[kShieldModInstalled]) {
 		kernel_seq_delete(g_sequence_ids[1]);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[1] = kernel_seq_backward(g_sprite_ids[1], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[1], -1, -2);
-		kernel_seq_trigger(g_sequence_ids[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+		kernel_seq_trigger(g_sequence_ids[1], KERNEL_TRIGGER_EXPIRE, 0, 71);
 		player.commands_allowed = false;
 	} else if (player_said_2(remove, target_module) && global[kTargetModInstalled]) {
 		kernel_seq_delete(g_sequence_ids[2]);
-		kernel.trigger_setup_mode = SEQUENCE_TRIGGER_DAEMON;
+		kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 		g_sequence_ids[2] = kernel_seq_backward(g_sprite_ids[2], false, 7, 0, 0, 1);
 		kernel_seq_range(g_sequence_ids[2], -1, -2);
-		kernel_seq_trigger(g_sequence_ids[2], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+		kernel_seq_trigger(g_sequence_ids[2], KERNEL_TRIGGER_EXPIRE, 0, 81);
 		player.commands_allowed = false;
 	} else if (player_said_2(install, shield_modulator) && !player_has(OBJ_SHIELD_MODULATOR))
 		text_show(80511);
diff --git a/engines/mads/nebular/rooms/room808.cpp b/engines/mads/nebular/rooms/room808.cpp
index 4843fee5995..32ac1bad436 100644
--- a/engines/mads/nebular/rooms/room808.cpp
+++ b/engines/mads/nebular/rooms/room808.cpp
@@ -39,7 +39,7 @@ static Scratch local;
 
 
 static void room_808_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 
 	g_sprite_ids[4] = kernel_load_series("*REXHAND", 0);
 	g_sprite_ids[1] = kernel_load_series(kernel_name('b', 0), 0);
@@ -87,7 +87,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 4, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[4], 248, 211);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 70);
 			break;
 
 		case 70:
@@ -101,7 +101,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 4, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[4], 248, 211);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 71);
 			break;
 
 		case 71:
@@ -123,7 +123,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 4, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[4], 248, 186);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 90);
 			break;
 		case 90:
 			if (global[kTopButtonPushed]) {
@@ -136,7 +136,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 4, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[4], 248, 186);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 91);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 91);
 			break;
 
 		case 91:
@@ -153,7 +153,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_forward(g_sprite_ids[4], false, 4, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[4], 248, 163);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 80);
 			break;
 
 		case 80:
@@ -167,7 +167,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_backward(g_sprite_ids[4], false, 4, 0, 0, 1);
 			kernel_seq_loc(g_sequence_ids[4], 248, 163);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 81);
 			break;
 
 		case 81:
@@ -184,7 +184,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 4, 0, 0, 2);
 			kernel_seq_loc(g_sequence_ids[4], 168, 211);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 70);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 70);
 			break;
 
 		case 70:
@@ -201,7 +201,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 4, 0, 0, 2);
 			kernel_seq_loc(g_sequence_ids[4], 172, 163);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 80);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 80);
 			break;
 
 		case 80:
@@ -218,7 +218,7 @@ static void room_808_parser() {
 			g_sequence_ids[4] = kernel_seq_pingpong(g_sprite_ids[4], false, 4, 0, 0, 2);
 			kernel_seq_loc(g_sequence_ids[4], 172, 186);
 			kernel_seq_depth(g_sequence_ids[4], 2);
-			kernel_seq_trigger(g_sequence_ids[4], SEQUENCE_TRIGGER_EXPIRE, 0, 90);
+			kernel_seq_trigger(g_sequence_ids[4], KERNEL_TRIGGER_EXPIRE, 0, 90);
 			break;
 
 		case 90:
diff --git a/engines/mads/nebular/rooms/room810.cpp b/engines/mads/nebular/rooms/room810.cpp
index d528ff1d7a4..fe730afacfb 100644
--- a/engines/mads/nebular/rooms/room810.cpp
+++ b/engines/mads/nebular/rooms/room810.cpp
@@ -39,10 +39,10 @@ static Scratch local;
 
 
 static void room_810_init() {
-	kernel_set_interface_mode(kInputLimitedSentences);
+	kernel_set_interface_mode(INTER_LIMITED_SENTENCES);
 	player.walker_visible = false;
 	player.commands_allowed = false;
-	kernel_run_animation(kernel_full_name(810, 'a', -1, "", EXT_AA), 0);
+	kernel_run_animation(kernel_full_name(810, 'a', -1, "", KERNEL_AA), 0);
 	local._moveAllowed = true;
 
 	section_8_music();
diff --git a/engines/mads/nebular/rooms/section2.cpp b/engines/mads/nebular/rooms/section2.cpp
index 4bfe7c86cec..2e62c1245b3 100644
--- a/engines/mads/nebular/rooms/section2.cpp
+++ b/engines/mads/nebular/rooms/section2.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/mads.h"
+#include "mads/core/config.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/rooms/section2.h"
 #include "mads/nebular/rooms/thunks.h"
diff --git a/engines/mads/nebular/rooms/teleporter.cpp b/engines/mads/nebular/rooms/teleporter.cpp
index 755416434f0..8f5efb5d8b8 100644
--- a/engines/mads/nebular/rooms/teleporter.cpp
+++ b/engines/mads/nebular/rooms/teleporter.cpp
@@ -64,7 +64,7 @@ void teleporter_init() {
 	_curMessageId = -1;
 	Common::strcpy_s(_msgText2, "_");
 
-	if (previous_room == RETURNING_FROM_DIALOG)
+	if (previous_room == KERNEL_RESTORING_GAME)
 		previous_room = global[kTeleporterDestination];
 
 	if (previous_room < 101)
@@ -179,8 +179,8 @@ void teleporter_handle_key() {
 		_handSequenceId = kernel_seq_pingpong(g_sprite_ids[4], false, 4, 0, 0, 2);
 		kernel_seq_loc(_handSequenceId, msgPos.x, msgPos.y);
 		kernel_seq_depth(_handSequenceId, 2);
-		kernel_seq_trigger(_handSequenceId, SEQUENCE_TRIGGER_LOOP, 0, 1);
-		kernel_seq_trigger(_handSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
+		kernel_seq_trigger(_handSequenceId, KERNEL_TRIGGER_LOOP, 0, 1);
+		kernel_seq_trigger(_handSequenceId, KERNEL_TRIGGER_EXPIRE, 0, 2);
 
 		if (global[kMeteorologistWatch] == METEOROLOGIST_NORMAL)
 			mouse_hide();
@@ -188,7 +188,7 @@ void teleporter_handle_key() {
 	}
 
 	case 1:
-		kernel_seq_trigger(_handSequenceId, SEQUENCE_TRIGGER_SPRITE, 3, 3);
+		kernel_seq_trigger(_handSequenceId, KERNEL_TRIGGER_SPRITE, 3, 3);
 		if (_buttonTyped <= 9) {
 			if (_digitCount < 4) {
 				_curCode *= 10;
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
index fa6910cc207..df2f804bb36 100644
--- a/engines/mads/nebular/rooms/thunks.h
+++ b/engines/mads/nebular/rooms/thunks.h
@@ -22,107 +22,10 @@
 #ifndef MADS_NEBULAR_ROOMS_THUNKS_H
 #define MADS_NEBULAR_ROOMS_THUNKS_H
 
-#include "mads/core/config.h"
-#include "mads/core/inter.h"
-#include "mads/core/kernel.h"
-
 namespace MADS {
 namespace RexNebular {
 namespace Rooms {
 
-#define CURSOR_ARROW CURSOR_NORMAL
-#define CURSOR_GO_DOWN CURSOR_DOWN
-#define CURSOR_GO_UP CURSOR_UP
-#define CURSOR_GO_LEFT CURSOR_LEFT
-#define CURSOR_GO_RIGHT CURSOR_RIGHT
-
-enum EXTTYPE {
-	EXT_NONE = -1, EXT_SS = 1, EXT_AA = 2, EXT_DAT = 3, EXT_HH = 4,
-	EXT_ART = 5, EXT_INT = 6
-};
-
-enum InputMode {
-	kInputBuildingSentences = INTER_BUILDING_SENTENCES,
-	kInputConversation = INTER_CONVERSATION,
-	kInputLimitedSentences = INTER_LIMITED_SENTENCES
-};
-
-enum SequenceTrigger {
-	SEQUENCE_TRIGGER_EXPIRE = KERNEL_TRIGGER_EXPIRE,	// Trigger when the sequence finishes
-	SEQUENCE_TRIGGER_LOOP = KERNEL_TRIGGER_LOOP,		// Trigger when the sequence loops
-	SEQUENCE_TRIGGER_SPRITE = KERNEL_TRIGGER_SPRITE		// Trigger when sequence reaches specific sprite
-};
-
-enum TriggerMode {
-	SEQUENCE_TRIGGER_NONE = -1,
-	SEQUENCE_TRIGGER_PARSER = KERNEL_TRIGGER_PARSER,		// Triggers parser
-	SEQUENCE_TRIGGER_DAEMON = KERNEL_TRIGGER_DAEMON,		// Triggers step/daemon code
-	SEQUENCE_TRIGGER_PREPARE = KERNEL_TRIGGER_PREPARSE		// Triggers preparser
-};
-
-enum SpriteAnimType {
-	ANIMTYPE_NONE = 0,
-	ANIMTYPE_CYCLED = AA_LINEAR,
-	ANIMTYPE_PING_PONG = AA_PINGPONG,
-	ANIMTYPE_STAMP = AA_STAMP
-};
-
-enum ScrCategory {
-	CAT_NONE = 0, CAT_COMMAND = 1, CAT_INV_LIST = 2, CAT_INV_VOCAB = 3,
-	CAT_HOTSPOT = 4, CAT_INV_ANIM = 5, CAT_TALK_ENTRY = 6, CAT_INV_SCROLLER = 7,
-	CAT_12 = 12
-};
-
-enum ScreenTransition {
-	kTransitionNone = 0,
-	kTransitionFadeIn,
-	kTransitionFadeOutIn,
-	kTransitionBoxInBottomLeft,
-	kTransitionBoxInBottomRight,
-	kTransitionBoxInTopLeft,
-	kTransitionBoxInTopRight,
-	kTransitionPanLeftToRight,
-	kTransitionPanRightToLeft,
-	kTransitionCircleIn1,
-	kTransitionCircleIn2,
-	kTransitionCircleIn3,
-	kTransitionCircleIn4,
-	kVertTransition1,
-	kVertTransition2,
-	kVertTransition3,
-	kVertTransition4,
-	kVertTransition5,
-	kVertTransition6,
-	kVertTransition7,
-	kNullPaletteCopy
-};
-
-enum StoryMode {
-	STORYMODE_NAUGHTY = NAUGHTY, STORYMODE_NICE = NICE
-};
-
-// These original constants may be useful when cleaning up room logic
-#ifdef old_animation
-#define kernel_animation                kernel_anim[0].anim
-#define kernel_animation_cycled         kernel_anim[0].cycled
-#define kernel_repeat_animation         kernel_anim[0].repeat
-#define kernel_animation_sprite_loaded  kernel_anim[0].sprite_loaded
-#define kernel_animation_buffer_id      kernel_anim[0].buffer_id
-#define kernel_animation_buffer         kernel_anim[0].buffer
-#define kernel_animation_frame          kernel_anim[0].frame
-#define kernel_animation_image          kernel_anim[0].image
-#define kernel_animation_doomed         kernel_anim[0].doomed
-#define kernel_animation_trigger_code   kernel_anim[0].trigger_code
-#define kernel_animation_trigger_mode   kernel_anim[0].trigger_mode
-#define kernel_animation_trigger_words  kernel_anim[0].trigger_words
-#define kernel_animation_next_clock     kernel_anim[0].next_clock
-#endif
-
-enum {
-	RETURNING_FROM_DIALOG = KERNEL_RESTORING_GAME,
-	RETURNING_FROM_LOADING = KERNEL_STARTING_GAME
-};
-
 } // namespace Rooms
 } // namespace RexNebular
 } // namespace MADS


Commit: 6e82f01ee4db629aaf7a969426509ff881586824
    https://github.com/scummvm/scummvm/commit/6e82f01ee4db629aaf7a969426509ff881586824
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-07-25T21:31:58+10:00

Commit Message:
MADS: NEBULAR: Remove now empty thunks.cpp

Holy Engine Bender! THEY'RE GONE!!!

Changed paths:
  R engines/mads/nebular/rooms/thunks.cpp
  R engines/mads/nebular/rooms/thunks.h
    engines/mads/module.mk
    engines/mads/nebular/rooms/forcefield.cpp
    engines/mads/nebular/rooms/room101.cpp
    engines/mads/nebular/rooms/room102.cpp
    engines/mads/nebular/rooms/room103.cpp
    engines/mads/nebular/rooms/room104.cpp
    engines/mads/nebular/rooms/room105.cpp
    engines/mads/nebular/rooms/room106.cpp
    engines/mads/nebular/rooms/room107.cpp
    engines/mads/nebular/rooms/room108.cpp
    engines/mads/nebular/rooms/room109.cpp
    engines/mads/nebular/rooms/room110.cpp
    engines/mads/nebular/rooms/room111.cpp
    engines/mads/nebular/rooms/room112.cpp
    engines/mads/nebular/rooms/room201.cpp
    engines/mads/nebular/rooms/room202.cpp
    engines/mads/nebular/rooms/room203.cpp
    engines/mads/nebular/rooms/room205.cpp
    engines/mads/nebular/rooms/room207.cpp
    engines/mads/nebular/rooms/room208.cpp
    engines/mads/nebular/rooms/room209.cpp
    engines/mads/nebular/rooms/room210.cpp
    engines/mads/nebular/rooms/room211.cpp
    engines/mads/nebular/rooms/room212.cpp
    engines/mads/nebular/rooms/room213.cpp
    engines/mads/nebular/rooms/room214.cpp
    engines/mads/nebular/rooms/room215.cpp
    engines/mads/nebular/rooms/room216.cpp
    engines/mads/nebular/rooms/room301.cpp
    engines/mads/nebular/rooms/room302.cpp
    engines/mads/nebular/rooms/room303.cpp
    engines/mads/nebular/rooms/room304.cpp
    engines/mads/nebular/rooms/room307.cpp
    engines/mads/nebular/rooms/room308.cpp
    engines/mads/nebular/rooms/room309.cpp
    engines/mads/nebular/rooms/room310.cpp
    engines/mads/nebular/rooms/room311.cpp
    engines/mads/nebular/rooms/room313.cpp
    engines/mads/nebular/rooms/room316.cpp
    engines/mads/nebular/rooms/room318.cpp
    engines/mads/nebular/rooms/room319.cpp
    engines/mads/nebular/rooms/room320.cpp
    engines/mads/nebular/rooms/room321.cpp
    engines/mads/nebular/rooms/room322.cpp
    engines/mads/nebular/rooms/room351.cpp
    engines/mads/nebular/rooms/room352.cpp
    engines/mads/nebular/rooms/room353.cpp
    engines/mads/nebular/rooms/room354.cpp
    engines/mads/nebular/rooms/room357.cpp
    engines/mads/nebular/rooms/room358.cpp
    engines/mads/nebular/rooms/room359.cpp
    engines/mads/nebular/rooms/room360.cpp
    engines/mads/nebular/rooms/room361.cpp
    engines/mads/nebular/rooms/room366.cpp
    engines/mads/nebular/rooms/room387.cpp
    engines/mads/nebular/rooms/room388.cpp
    engines/mads/nebular/rooms/room389.cpp
    engines/mads/nebular/rooms/room390.cpp
    engines/mads/nebular/rooms/room391.cpp
    engines/mads/nebular/rooms/room399.cpp
    engines/mads/nebular/rooms/room401.cpp
    engines/mads/nebular/rooms/room402.cpp
    engines/mads/nebular/rooms/room405.cpp
    engines/mads/nebular/rooms/room406.cpp
    engines/mads/nebular/rooms/room407.cpp
    engines/mads/nebular/rooms/room408.cpp
    engines/mads/nebular/rooms/room409.cpp
    engines/mads/nebular/rooms/room410.cpp
    engines/mads/nebular/rooms/room411.cpp
    engines/mads/nebular/rooms/room413.cpp
    engines/mads/nebular/rooms/room501.cpp
    engines/mads/nebular/rooms/room502.cpp
    engines/mads/nebular/rooms/room503.cpp
    engines/mads/nebular/rooms/room504.cpp
    engines/mads/nebular/rooms/room505.cpp
    engines/mads/nebular/rooms/room506.cpp
    engines/mads/nebular/rooms/room507.cpp
    engines/mads/nebular/rooms/room508.cpp
    engines/mads/nebular/rooms/room511.cpp
    engines/mads/nebular/rooms/room512.cpp
    engines/mads/nebular/rooms/room513.cpp
    engines/mads/nebular/rooms/room515.cpp
    engines/mads/nebular/rooms/room551.cpp
    engines/mads/nebular/rooms/room601.cpp
    engines/mads/nebular/rooms/room602.cpp
    engines/mads/nebular/rooms/room603.cpp
    engines/mads/nebular/rooms/room604.cpp
    engines/mads/nebular/rooms/room605.cpp
    engines/mads/nebular/rooms/room607.cpp
    engines/mads/nebular/rooms/room608.cpp
    engines/mads/nebular/rooms/room609.cpp
    engines/mads/nebular/rooms/room610.cpp
    engines/mads/nebular/rooms/room611.cpp
    engines/mads/nebular/rooms/room612.cpp
    engines/mads/nebular/rooms/room620.cpp
    engines/mads/nebular/rooms/room701.cpp
    engines/mads/nebular/rooms/room702.cpp
    engines/mads/nebular/rooms/room703.cpp
    engines/mads/nebular/rooms/room704.cpp
    engines/mads/nebular/rooms/room705.cpp
    engines/mads/nebular/rooms/room706.cpp
    engines/mads/nebular/rooms/room707.cpp
    engines/mads/nebular/rooms/room710.cpp
    engines/mads/nebular/rooms/room711.cpp
    engines/mads/nebular/rooms/room751.cpp
    engines/mads/nebular/rooms/room752.cpp
    engines/mads/nebular/rooms/room801.cpp
    engines/mads/nebular/rooms/room802.cpp
    engines/mads/nebular/rooms/room803.cpp
    engines/mads/nebular/rooms/room804.cpp
    engines/mads/nebular/rooms/room805.cpp
    engines/mads/nebular/rooms/room807.cpp
    engines/mads/nebular/rooms/room808.cpp
    engines/mads/nebular/rooms/room810.cpp
    engines/mads/nebular/rooms/section1.cpp
    engines/mads/nebular/rooms/section2.cpp
    engines/mads/nebular/rooms/teleporter.cpp


diff --git a/engines/mads/module.mk b/engines/mads/module.mk
index f9c9f7a3803..663b1e060e9 100644
--- a/engines/mads/module.mk
+++ b/engines/mads/module.mk
@@ -77,7 +77,6 @@ MODULE_OBJS := \
 	nebular/popup.o \
 	nebular/sound_nebular.o \
 	nebular/mads/mads.o \
-	nebular/rooms/thunks.o \
 	nebular/rooms/room101.o \
 	nebular/rooms/room102.o \
 	nebular/rooms/room103.o \
diff --git a/engines/mads/nebular/rooms/forcefield.cpp b/engines/mads/nebular/rooms/forcefield.cpp
index e94249df468..9b616d95acb 100644
--- a/engines/mads/nebular/rooms/forcefield.cpp
+++ b/engines/mads/nebular/rooms/forcefield.cpp
@@ -20,7 +20,6 @@
  */
 
 #include "mads/nebular/rooms/forcefield.h"
-#include "mads/nebular/rooms/thunks.h"
 #include "mads/mads.h"
 
 namespace MADS {
diff --git a/engines/mads/nebular/rooms/room101.cpp b/engines/mads/nebular/rooms/room101.cpp
index 9e2aae64fff..5678ad1aeca 100644
--- a/engines/mads/nebular/rooms/room101.cpp
+++ b/engines/mads/nebular/rooms/room101.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room102.cpp b/engines/mads/nebular/rooms/room102.cpp
index ac277eb560d..3e6f5ae6356 100644
--- a/engines/mads/nebular/rooms/room102.cpp
+++ b/engines/mads/nebular/rooms/room102.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room103.cpp b/engines/mads/nebular/rooms/room103.cpp
index 1365a30dbe8..485850ed13d 100644
--- a/engines/mads/nebular/rooms/room103.cpp
+++ b/engines/mads/nebular/rooms/room103.cpp
@@ -28,7 +28,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room104.cpp b/engines/mads/nebular/rooms/room104.cpp
index c4ab447fb94..27449518ea8 100644
--- a/engines/mads/nebular/rooms/room104.cpp
+++ b/engines/mads/nebular/rooms/room104.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room105.cpp b/engines/mads/nebular/rooms/room105.cpp
index 0d55efd748e..7b099fb4e11 100644
--- a/engines/mads/nebular/rooms/room105.cpp
+++ b/engines/mads/nebular/rooms/room105.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room106.cpp b/engines/mads/nebular/rooms/room106.cpp
index 24d553bc7df..c519b29faeb 100644
--- a/engines/mads/nebular/rooms/room106.cpp
+++ b/engines/mads/nebular/rooms/room106.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room107.cpp b/engines/mads/nebular/rooms/room107.cpp
index 11b3da0b00c..c67333a2f59 100644
--- a/engines/mads/nebular/rooms/room107.cpp
+++ b/engines/mads/nebular/rooms/room107.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room108.cpp b/engines/mads/nebular/rooms/room108.cpp
index ccc95d69565..dd6f606b82c 100644
--- a/engines/mads/nebular/rooms/room108.cpp
+++ b/engines/mads/nebular/rooms/room108.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room109.cpp b/engines/mads/nebular/rooms/room109.cpp
index bf3e143fe1b..98b08c1a849 100644
--- a/engines/mads/nebular/rooms/room109.cpp
+++ b/engines/mads/nebular/rooms/room109.cpp
@@ -29,7 +29,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room110.cpp b/engines/mads/nebular/rooms/room110.cpp
index 96b6796b9f2..41e341433d8 100644
--- a/engines/mads/nebular/rooms/room110.cpp
+++ b/engines/mads/nebular/rooms/room110.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room111.cpp b/engines/mads/nebular/rooms/room111.cpp
index 3f4b7a2884d..b372888f0b3 100644
--- a/engines/mads/nebular/rooms/room111.cpp
+++ b/engines/mads/nebular/rooms/room111.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room112.cpp b/engines/mads/nebular/rooms/room112.cpp
index 7554cddc84e..72244c7b4ff 100644
--- a/engines/mads/nebular/rooms/room112.cpp
+++ b/engines/mads/nebular/rooms/room112.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room201.cpp b/engines/mads/nebular/rooms/room201.cpp
index f8bb356aa54..d247d56c9f9 100644
--- a/engines/mads/nebular/rooms/room201.cpp
+++ b/engines/mads/nebular/rooms/room201.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"	
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room202.cpp b/engines/mads/nebular/rooms/room202.cpp
index b6e3e830bbe..1c2d5abc462 100644
--- a/engines/mads/nebular/rooms/room202.cpp
+++ b/engines/mads/nebular/rooms/room202.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room203.cpp b/engines/mads/nebular/rooms/room203.cpp
index 73308407704..874f996ffa6 100644
--- a/engines/mads/nebular/rooms/room203.cpp
+++ b/engines/mads/nebular/rooms/room203.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room205.cpp b/engines/mads/nebular/rooms/room205.cpp
index 6d08ccdf23a..6ec8522856a 100644
--- a/engines/mads/nebular/rooms/room205.cpp
+++ b/engines/mads/nebular/rooms/room205.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room207.cpp b/engines/mads/nebular/rooms/room207.cpp
index d720d6f7991..9a956c569c1 100644
--- a/engines/mads/nebular/rooms/room207.cpp
+++ b/engines/mads/nebular/rooms/room207.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room208.cpp b/engines/mads/nebular/rooms/room208.cpp
index f17ed3af136..209cfbfd657 100644
--- a/engines/mads/nebular/rooms/room208.cpp
+++ b/engines/mads/nebular/rooms/room208.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room209.cpp b/engines/mads/nebular/rooms/room209.cpp
index 3af8b22b253..d1e87995995 100644
--- a/engines/mads/nebular/rooms/room209.cpp
+++ b/engines/mads/nebular/rooms/room209.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room210.cpp b/engines/mads/nebular/rooms/room210.cpp
index 8187ec91507..eb169d05d1a 100644
--- a/engines/mads/nebular/rooms/room210.cpp
+++ b/engines/mads/nebular/rooms/room210.cpp
@@ -28,7 +28,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room211.cpp b/engines/mads/nebular/rooms/room211.cpp
index 42326e1d787..80edfc6d54b 100644
--- a/engines/mads/nebular/rooms/room211.cpp
+++ b/engines/mads/nebular/rooms/room211.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room212.cpp b/engines/mads/nebular/rooms/room212.cpp
index fc4f32fe122..40c5da95d10 100644
--- a/engines/mads/nebular/rooms/room212.cpp
+++ b/engines/mads/nebular/rooms/room212.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room213.cpp b/engines/mads/nebular/rooms/room213.cpp
index 315b34f9b09..1f89a3e742c 100644
--- a/engines/mads/nebular/rooms/room213.cpp
+++ b/engines/mads/nebular/rooms/room213.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room214.cpp b/engines/mads/nebular/rooms/room214.cpp
index fed1e3376ad..4af84cf1226 100644
--- a/engines/mads/nebular/rooms/room214.cpp
+++ b/engines/mads/nebular/rooms/room214.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room215.cpp b/engines/mads/nebular/rooms/room215.cpp
index ec1cbd9b58f..63e4a14d9a3 100644
--- a/engines/mads/nebular/rooms/room215.cpp
+++ b/engines/mads/nebular/rooms/room215.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room216.cpp b/engines/mads/nebular/rooms/room216.cpp
index ab0da38b97b..f58b8ee2f87 100644
--- a/engines/mads/nebular/rooms/room216.cpp
+++ b/engines/mads/nebular/rooms/room216.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room301.cpp b/engines/mads/nebular/rooms/room301.cpp
index e3a75bf9a21..fb8b3faa46a 100644
--- a/engines/mads/nebular/rooms/room301.cpp
+++ b/engines/mads/nebular/rooms/room301.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room302.cpp b/engines/mads/nebular/rooms/room302.cpp
index a84e698d9e0..be2d713e361 100644
--- a/engines/mads/nebular/rooms/room302.cpp
+++ b/engines/mads/nebular/rooms/room302.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room303.cpp b/engines/mads/nebular/rooms/room303.cpp
index e85737dc567..36e97399bfe 100644
--- a/engines/mads/nebular/rooms/room303.cpp
+++ b/engines/mads/nebular/rooms/room303.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room304.cpp b/engines/mads/nebular/rooms/room304.cpp
index b8e79f05c67..02d1adcca90 100644
--- a/engines/mads/nebular/rooms/room304.cpp
+++ b/engines/mads/nebular/rooms/room304.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room307.cpp b/engines/mads/nebular/rooms/room307.cpp
index 466c7663306..2c5fca19612 100644
--- a/engines/mads/nebular/rooms/room307.cpp
+++ b/engines/mads/nebular/rooms/room307.cpp
@@ -29,7 +29,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
 #include "mads/nebular/rooms/forcefield.h"
-#include "mads/nebular/rooms/thunks.h"
 #include "mads/nebular/rooms/dialog.h"
 
 namespace MADS {
diff --git a/engines/mads/nebular/rooms/room308.cpp b/engines/mads/nebular/rooms/room308.cpp
index 85443d8a995..ffce4a66869 100644
--- a/engines/mads/nebular/rooms/room308.cpp
+++ b/engines/mads/nebular/rooms/room308.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
 #include "mads/nebular/rooms/forcefield.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room309.cpp b/engines/mads/nebular/rooms/room309.cpp
index e81cd585196..4726ddddd9c 100644
--- a/engines/mads/nebular/rooms/room309.cpp
+++ b/engines/mads/nebular/rooms/room309.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
 #include "mads/nebular/rooms/forcefield.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room310.cpp b/engines/mads/nebular/rooms/room310.cpp
index a536e7fe9ed..a0a0fd95b27 100644
--- a/engines/mads/nebular/rooms/room310.cpp
+++ b/engines/mads/nebular/rooms/room310.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
 #include "mads/nebular/rooms/forcefield.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room311.cpp b/engines/mads/nebular/rooms/room311.cpp
index 9bd92e85608..31d3e2297fe 100644
--- a/engines/mads/nebular/rooms/room311.cpp
+++ b/engines/mads/nebular/rooms/room311.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room313.cpp b/engines/mads/nebular/rooms/room313.cpp
index c9a5b5d0258..a0a33e557ab 100644
--- a/engines/mads/nebular/rooms/room313.cpp
+++ b/engines/mads/nebular/rooms/room313.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room316.cpp b/engines/mads/nebular/rooms/room316.cpp
index dbcdb9bcddf..2f1f6d3b32b 100644
--- a/engines/mads/nebular/rooms/room316.cpp
+++ b/engines/mads/nebular/rooms/room316.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room318.cpp b/engines/mads/nebular/rooms/room318.cpp
index 93e7f083940..349bea12608 100644
--- a/engines/mads/nebular/rooms/room318.cpp
+++ b/engines/mads/nebular/rooms/room318.cpp
@@ -28,7 +28,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 #include "mads/nebular/rooms/dialog.h"
 
 namespace MADS {
diff --git a/engines/mads/nebular/rooms/room319.cpp b/engines/mads/nebular/rooms/room319.cpp
index f68ab805076..aac1a69ce1c 100644
--- a/engines/mads/nebular/rooms/room319.cpp
+++ b/engines/mads/nebular/rooms/room319.cpp
@@ -30,7 +30,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
 #include "mads/nebular/rooms/dialog.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room320.cpp b/engines/mads/nebular/rooms/room320.cpp
index 81dd4a9753f..424dac9471e 100644
--- a/engines/mads/nebular/rooms/room320.cpp
+++ b/engines/mads/nebular/rooms/room320.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room321.cpp b/engines/mads/nebular/rooms/room321.cpp
index 7132dea5f73..b4fe8b5db54 100644
--- a/engines/mads/nebular/rooms/room321.cpp
+++ b/engines/mads/nebular/rooms/room321.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room322.cpp b/engines/mads/nebular/rooms/room322.cpp
index 470a472d194..ddefc73bd42 100644
--- a/engines/mads/nebular/rooms/room322.cpp
+++ b/engines/mads/nebular/rooms/room322.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room351.cpp b/engines/mads/nebular/rooms/room351.cpp
index 073d27d5f29..68ffffed697 100644
--- a/engines/mads/nebular/rooms/room351.cpp
+++ b/engines/mads/nebular/rooms/room351.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room352.cpp b/engines/mads/nebular/rooms/room352.cpp
index 98480b07bc4..816eef457cc 100644
--- a/engines/mads/nebular/rooms/room352.cpp
+++ b/engines/mads/nebular/rooms/room352.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room353.cpp b/engines/mads/nebular/rooms/room353.cpp
index 10bb2a27d7f..946b444fe79 100644
--- a/engines/mads/nebular/rooms/room353.cpp
+++ b/engines/mads/nebular/rooms/room353.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room354.cpp b/engines/mads/nebular/rooms/room354.cpp
index 7d285818dea..7e4fa57c265 100644
--- a/engines/mads/nebular/rooms/room354.cpp
+++ b/engines/mads/nebular/rooms/room354.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room357.cpp b/engines/mads/nebular/rooms/room357.cpp
index 167d074eaec..a210401080f 100644
--- a/engines/mads/nebular/rooms/room357.cpp
+++ b/engines/mads/nebular/rooms/room357.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room358.cpp b/engines/mads/nebular/rooms/room358.cpp
index 39f77572888..c473563604c 100644
--- a/engines/mads/nebular/rooms/room358.cpp
+++ b/engines/mads/nebular/rooms/room358.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room359.cpp b/engines/mads/nebular/rooms/room359.cpp
index 06e3646c8a5..f5ae0860d47 100644
--- a/engines/mads/nebular/rooms/room359.cpp
+++ b/engines/mads/nebular/rooms/room359.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room360.cpp b/engines/mads/nebular/rooms/room360.cpp
index 6d6ee8a5c04..552b37a4c94 100644
--- a/engines/mads/nebular/rooms/room360.cpp
+++ b/engines/mads/nebular/rooms/room360.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room361.cpp b/engines/mads/nebular/rooms/room361.cpp
index 77c43851861..07102497f61 100644
--- a/engines/mads/nebular/rooms/room361.cpp
+++ b/engines/mads/nebular/rooms/room361.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room366.cpp b/engines/mads/nebular/rooms/room366.cpp
index c256843d79f..1fecd74fa04 100644
--- a/engines/mads/nebular/rooms/room366.cpp
+++ b/engines/mads/nebular/rooms/room366.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room387.cpp b/engines/mads/nebular/rooms/room387.cpp
index bb010d36b1f..8bc1a670f94 100644
--- a/engines/mads/nebular/rooms/room387.cpp
+++ b/engines/mads/nebular/rooms/room387.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room388.cpp b/engines/mads/nebular/rooms/room388.cpp
index 48fb506a4d5..aa9796a898d 100644
--- a/engines/mads/nebular/rooms/room388.cpp
+++ b/engines/mads/nebular/rooms/room388.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room389.cpp b/engines/mads/nebular/rooms/room389.cpp
index c9ca7ad0e8f..beaadd1655a 100644
--- a/engines/mads/nebular/rooms/room389.cpp
+++ b/engines/mads/nebular/rooms/room389.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room390.cpp b/engines/mads/nebular/rooms/room390.cpp
index 7848e1cee13..05fa07bffa0 100644
--- a/engines/mads/nebular/rooms/room390.cpp
+++ b/engines/mads/nebular/rooms/room390.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room391.cpp b/engines/mads/nebular/rooms/room391.cpp
index e36d3661565..9d893fd9a99 100644
--- a/engines/mads/nebular/rooms/room391.cpp
+++ b/engines/mads/nebular/rooms/room391.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room399.cpp b/engines/mads/nebular/rooms/room399.cpp
index d42ae488a23..58a33f11dcf 100644
--- a/engines/mads/nebular/rooms/room399.cpp
+++ b/engines/mads/nebular/rooms/room399.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section3.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room401.cpp b/engines/mads/nebular/rooms/room401.cpp
index a1c2033fff2..c411a5a4f61 100644
--- a/engines/mads/nebular/rooms/room401.cpp
+++ b/engines/mads/nebular/rooms/room401.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room402.cpp b/engines/mads/nebular/rooms/room402.cpp
index f5b8cd77486..6dd53abdcc5 100644
--- a/engines/mads/nebular/rooms/room402.cpp
+++ b/engines/mads/nebular/rooms/room402.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
 #include "mads/nebular/rooms/dialog.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room405.cpp b/engines/mads/nebular/rooms/room405.cpp
index ee8f11b2b9e..a7f343872a9 100644
--- a/engines/mads/nebular/rooms/room405.cpp
+++ b/engines/mads/nebular/rooms/room405.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room406.cpp b/engines/mads/nebular/rooms/room406.cpp
index a55f46a05d9..6d86c43584f 100644
--- a/engines/mads/nebular/rooms/room406.cpp
+++ b/engines/mads/nebular/rooms/room406.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room407.cpp b/engines/mads/nebular/rooms/room407.cpp
index 3844060912c..6af99e03e4a 100644
--- a/engines/mads/nebular/rooms/room407.cpp
+++ b/engines/mads/nebular/rooms/room407.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room408.cpp b/engines/mads/nebular/rooms/room408.cpp
index 28929fbe44c..7eafd8558bc 100644
--- a/engines/mads/nebular/rooms/room408.cpp
+++ b/engines/mads/nebular/rooms/room408.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room409.cpp b/engines/mads/nebular/rooms/room409.cpp
index 934fa278660..af578fb1952 100644
--- a/engines/mads/nebular/rooms/room409.cpp
+++ b/engines/mads/nebular/rooms/room409.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room410.cpp b/engines/mads/nebular/rooms/room410.cpp
index ff67e9b073f..a99030d207c 100644
--- a/engines/mads/nebular/rooms/room410.cpp
+++ b/engines/mads/nebular/rooms/room410.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room411.cpp b/engines/mads/nebular/rooms/room411.cpp
index eb74b223eba..b0599be48b2 100644
--- a/engines/mads/nebular/rooms/room411.cpp
+++ b/engines/mads/nebular/rooms/room411.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
 #include "mads/nebular/rooms/dialog.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room413.cpp b/engines/mads/nebular/rooms/room413.cpp
index f22609f5d15..5f3db5a44ef 100644
--- a/engines/mads/nebular/rooms/room413.cpp
+++ b/engines/mads/nebular/rooms/room413.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section4.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room501.cpp b/engines/mads/nebular/rooms/room501.cpp
index 032bb30ed7e..10ffee1e928 100644
--- a/engines/mads/nebular/rooms/room501.cpp
+++ b/engines/mads/nebular/rooms/room501.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room502.cpp b/engines/mads/nebular/rooms/room502.cpp
index 54732c46c0f..9d4bd504176 100644
--- a/engines/mads/nebular/rooms/room502.cpp
+++ b/engines/mads/nebular/rooms/room502.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room503.cpp b/engines/mads/nebular/rooms/room503.cpp
index 8654f039ccd..79349579567 100644
--- a/engines/mads/nebular/rooms/room503.cpp
+++ b/engines/mads/nebular/rooms/room503.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room504.cpp b/engines/mads/nebular/rooms/room504.cpp
index 0c4c68652d6..a012d3a5283 100644
--- a/engines/mads/nebular/rooms/room504.cpp
+++ b/engines/mads/nebular/rooms/room504.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room505.cpp b/engines/mads/nebular/rooms/room505.cpp
index 4df2a1e9046..8feb1d2683a 100644
--- a/engines/mads/nebular/rooms/room505.cpp
+++ b/engines/mads/nebular/rooms/room505.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room506.cpp b/engines/mads/nebular/rooms/room506.cpp
index 69cda9f396f..00589c0624e 100644
--- a/engines/mads/nebular/rooms/room506.cpp
+++ b/engines/mads/nebular/rooms/room506.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room507.cpp b/engines/mads/nebular/rooms/room507.cpp
index 2e63be902ff..c6f875e05b2 100644
--- a/engines/mads/nebular/rooms/room507.cpp
+++ b/engines/mads/nebular/rooms/room507.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room508.cpp b/engines/mads/nebular/rooms/room508.cpp
index 9426974b8b6..d90cc1c17a6 100644
--- a/engines/mads/nebular/rooms/room508.cpp
+++ b/engines/mads/nebular/rooms/room508.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room511.cpp b/engines/mads/nebular/rooms/room511.cpp
index 59b6f5b6a98..e8b2958abc2 100644
--- a/engines/mads/nebular/rooms/room511.cpp
+++ b/engines/mads/nebular/rooms/room511.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room512.cpp b/engines/mads/nebular/rooms/room512.cpp
index d18f12596cd..dd1c84918e8 100644
--- a/engines/mads/nebular/rooms/room512.cpp
+++ b/engines/mads/nebular/rooms/room512.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room513.cpp b/engines/mads/nebular/rooms/room513.cpp
index 5081bbf5277..479f60cc36f 100644
--- a/engines/mads/nebular/rooms/room513.cpp
+++ b/engines/mads/nebular/rooms/room513.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room515.cpp b/engines/mads/nebular/rooms/room515.cpp
index b0da3ac4ac8..b0e804cdfb9 100644
--- a/engines/mads/nebular/rooms/room515.cpp
+++ b/engines/mads/nebular/rooms/room515.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room551.cpp b/engines/mads/nebular/rooms/room551.cpp
index 98083da589a..b2fbe6d4845 100644
--- a/engines/mads/nebular/rooms/room551.cpp
+++ b/engines/mads/nebular/rooms/room551.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section5.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room601.cpp b/engines/mads/nebular/rooms/room601.cpp
index 134ae3286af..1339deea30f 100644
--- a/engines/mads/nebular/rooms/room601.cpp
+++ b/engines/mads/nebular/rooms/room601.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room602.cpp b/engines/mads/nebular/rooms/room602.cpp
index 3c02c7635d8..d63cbeb65c5 100644
--- a/engines/mads/nebular/rooms/room602.cpp
+++ b/engines/mads/nebular/rooms/room602.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room603.cpp b/engines/mads/nebular/rooms/room603.cpp
index 924c8c134d3..5393f81d395 100644
--- a/engines/mads/nebular/rooms/room603.cpp
+++ b/engines/mads/nebular/rooms/room603.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room604.cpp b/engines/mads/nebular/rooms/room604.cpp
index bd38e2b4dfd..6e241d7d414 100644
--- a/engines/mads/nebular/rooms/room604.cpp
+++ b/engines/mads/nebular/rooms/room604.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room605.cpp b/engines/mads/nebular/rooms/room605.cpp
index d14297af7aa..38377d62d76 100644
--- a/engines/mads/nebular/rooms/room605.cpp
+++ b/engines/mads/nebular/rooms/room605.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room607.cpp b/engines/mads/nebular/rooms/room607.cpp
index 7267347dd61..d74e6082430 100644
--- a/engines/mads/nebular/rooms/room607.cpp
+++ b/engines/mads/nebular/rooms/room607.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room608.cpp b/engines/mads/nebular/rooms/room608.cpp
index a9050b96879..0e1d2b2129b 100644
--- a/engines/mads/nebular/rooms/room608.cpp
+++ b/engines/mads/nebular/rooms/room608.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room609.cpp b/engines/mads/nebular/rooms/room609.cpp
index 93991fff45c..4038ddbbf65 100644
--- a/engines/mads/nebular/rooms/room609.cpp
+++ b/engines/mads/nebular/rooms/room609.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room610.cpp b/engines/mads/nebular/rooms/room610.cpp
index 61af8ec5979..8127c7863f1 100644
--- a/engines/mads/nebular/rooms/room610.cpp
+++ b/engines/mads/nebular/rooms/room610.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room611.cpp b/engines/mads/nebular/rooms/room611.cpp
index 459e4bf42c2..26c8e254b86 100644
--- a/engines/mads/nebular/rooms/room611.cpp
+++ b/engines/mads/nebular/rooms/room611.cpp
@@ -28,7 +28,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
 #include "mads/nebular/rooms/dialog.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room612.cpp b/engines/mads/nebular/rooms/room612.cpp
index d95451f19d6..7629d24d66d 100644
--- a/engines/mads/nebular/rooms/room612.cpp
+++ b/engines/mads/nebular/rooms/room612.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room620.cpp b/engines/mads/nebular/rooms/room620.cpp
index e61720ebc2d..77a3482bf83 100644
--- a/engines/mads/nebular/rooms/room620.cpp
+++ b/engines/mads/nebular/rooms/room620.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section6.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room701.cpp b/engines/mads/nebular/rooms/room701.cpp
index a687c6def6f..babd3393517 100644
--- a/engines/mads/nebular/rooms/room701.cpp
+++ b/engines/mads/nebular/rooms/room701.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room702.cpp b/engines/mads/nebular/rooms/room702.cpp
index 8af55534fcd..29b07c7a12d 100644
--- a/engines/mads/nebular/rooms/room702.cpp
+++ b/engines/mads/nebular/rooms/room702.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room703.cpp b/engines/mads/nebular/rooms/room703.cpp
index 9c75d689927..b84c32f9307 100644
--- a/engines/mads/nebular/rooms/room703.cpp
+++ b/engines/mads/nebular/rooms/room703.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
 #include "mads/nebular/rooms/dialog.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room704.cpp b/engines/mads/nebular/rooms/room704.cpp
index 8d8f963d3d9..bdfd1249f3f 100644
--- a/engines/mads/nebular/rooms/room704.cpp
+++ b/engines/mads/nebular/rooms/room704.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
 #include "mads/nebular/rooms/dialog.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room705.cpp b/engines/mads/nebular/rooms/room705.cpp
index 16c185d4382..77bc2a9d075 100644
--- a/engines/mads/nebular/rooms/room705.cpp
+++ b/engines/mads/nebular/rooms/room705.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
 #include "mads/nebular/rooms/dialog.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room706.cpp b/engines/mads/nebular/rooms/room706.cpp
index 90bab481912..0aa47a6f775 100644
--- a/engines/mads/nebular/rooms/room706.cpp
+++ b/engines/mads/nebular/rooms/room706.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room707.cpp b/engines/mads/nebular/rooms/room707.cpp
index c8706370932..c441a1dcb2c 100644
--- a/engines/mads/nebular/rooms/room707.cpp
+++ b/engines/mads/nebular/rooms/room707.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room710.cpp b/engines/mads/nebular/rooms/room710.cpp
index 0bc48ee31e1..a672bb75c24 100644
--- a/engines/mads/nebular/rooms/room710.cpp
+++ b/engines/mads/nebular/rooms/room710.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room711.cpp b/engines/mads/nebular/rooms/room711.cpp
index e23c9b00c89..af96dca87b7 100644
--- a/engines/mads/nebular/rooms/room711.cpp
+++ b/engines/mads/nebular/rooms/room711.cpp
@@ -27,7 +27,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room751.cpp b/engines/mads/nebular/rooms/room751.cpp
index 1424e6f2bbd..a8d0ed7fbe7 100644
--- a/engines/mads/nebular/rooms/room751.cpp
+++ b/engines/mads/nebular/rooms/room751.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room752.cpp b/engines/mads/nebular/rooms/room752.cpp
index 3a7de3a9aba..c29a11a19fd 100644
--- a/engines/mads/nebular/rooms/room752.cpp
+++ b/engines/mads/nebular/rooms/room752.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section7.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room801.cpp b/engines/mads/nebular/rooms/room801.cpp
index e7b65d3af3e..91ceaf063f0 100644
--- a/engines/mads/nebular/rooms/room801.cpp
+++ b/engines/mads/nebular/rooms/room801.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room802.cpp b/engines/mads/nebular/rooms/room802.cpp
index 3a50577156f..c4bc0ee63ac 100644
--- a/engines/mads/nebular/rooms/room802.cpp
+++ b/engines/mads/nebular/rooms/room802.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room803.cpp b/engines/mads/nebular/rooms/room803.cpp
index 089e15eda7f..806b81df6bf 100644
--- a/engines/mads/nebular/rooms/room803.cpp
+++ b/engines/mads/nebular/rooms/room803.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room804.cpp b/engines/mads/nebular/rooms/room804.cpp
index 27f53fd357a..ff9692c67e6 100644
--- a/engines/mads/nebular/rooms/room804.cpp
+++ b/engines/mads/nebular/rooms/room804.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room805.cpp b/engines/mads/nebular/rooms/room805.cpp
index 283c3ba575a..af4a2daea58 100644
--- a/engines/mads/nebular/rooms/room805.cpp
+++ b/engines/mads/nebular/rooms/room805.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room807.cpp b/engines/mads/nebular/rooms/room807.cpp
index 83ad20387f7..e4fc95f65d2 100644
--- a/engines/mads/nebular/rooms/room807.cpp
+++ b/engines/mads/nebular/rooms/room807.cpp
@@ -26,7 +26,6 @@
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room808.cpp b/engines/mads/nebular/rooms/room808.cpp
index 32ac1bad436..e393ba29640 100644
--- a/engines/mads/nebular/rooms/room808.cpp
+++ b/engines/mads/nebular/rooms/room808.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/room810.cpp b/engines/mads/nebular/rooms/room810.cpp
index fe730afacfb..04d2a2fb327 100644
--- a/engines/mads/nebular/rooms/room810.cpp
+++ b/engines/mads/nebular/rooms/room810.cpp
@@ -25,7 +25,6 @@
 #include "mads/nebular/mads/inventory.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/rooms/section8.h"
-#include "mads/nebular/rooms/thunks.h"
 
 namespace MADS {
 namespace RexNebular {
diff --git a/engines/mads/nebular/rooms/section1.cpp b/engines/mads/nebular/rooms/section1.cpp
index 2f783049101..c7ea33934ae 100644
--- a/engines/mads/nebular/rooms/section1.cpp
+++ b/engines/mads/nebular/rooms/section1.cpp
@@ -24,7 +24,6 @@
 #include "mads/core/pal.h"
 #include "mads/nebular/nebular.h"
 #include "mads/nebular/rooms/section1.h"
-#include "mads/nebular/rooms/thunks.h"
 #include "mads/nebular/global.h"
 
 namespace MADS {
diff --git a/engines/mads/nebular/rooms/section2.cpp b/engines/mads/nebular/rooms/section2.cpp
index 2e62c1245b3..00c622621aa 100644
--- a/engines/mads/nebular/rooms/section2.cpp
+++ b/engines/mads/nebular/rooms/section2.cpp
@@ -23,7 +23,6 @@
 #include "mads/core/config.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/rooms/section2.h"
-#include "mads/nebular/rooms/thunks.h"
 #include "mads/nebular/global.h"
 
 namespace MADS {
diff --git a/engines/mads/nebular/rooms/teleporter.cpp b/engines/mads/nebular/rooms/teleporter.cpp
index 8f5efb5d8b8..88638c0179e 100644
--- a/engines/mads/nebular/rooms/teleporter.cpp
+++ b/engines/mads/nebular/rooms/teleporter.cpp
@@ -23,7 +23,6 @@
 #include "mads/core/mouse.h"
 #include "mads/core/pal.h"
 #include "mads/nebular/rooms/teleporter.h"
-#include "mads/nebular/rooms/thunks.h"
 #include "mads/nebular/mads/words.h"
 #include "mads/nebular/global.h"
 
diff --git a/engines/mads/nebular/rooms/thunks.cpp b/engines/mads/nebular/rooms/thunks.cpp
deleted file mode 100644
index 0c245a51578..00000000000
--- a/engines/mads/nebular/rooms/thunks.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "mads/nebular/rooms/thunks.h"
-
-namespace MADS {
-namespace RexNebular {
-namespace Rooms {
-
-} // namespace Rooms
-} // namespace RexNebular
-} // namespace MADS
diff --git a/engines/mads/nebular/rooms/thunks.h b/engines/mads/nebular/rooms/thunks.h
deleted file mode 100644
index df2f804bb36..00000000000
--- a/engines/mads/nebular/rooms/thunks.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef MADS_NEBULAR_ROOMS_THUNKS_H
-#define MADS_NEBULAR_ROOMS_THUNKS_H
-
-namespace MADS {
-namespace RexNebular {
-namespace Rooms {
-
-} // namespace Rooms
-} // namespace RexNebular
-} // namespace MADS
-
-#endif /* MADS_NEBULAR_SCENES8_H */




More information about the Scummvm-git-logs mailing list