[Scummvm-git-logs] scummvm master -> 046fafc1f10cd111c7e33460384ae8a0346f4aac

dreammaster noreply at scummvm.org
Thu Jun 25 10:19:36 UTC 2026


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

Summary:
3d5841388d MADS: FOREST: Identified inventory items in room 101
50a9796e0e MADS: FOREST: Identifying characters in room 101
ce0a3a333b MADS: FOREST: Add complete words list, remap player_parse calls to use it
3f14bd5851 MADS: FOREST: Inventory cleanup
158be46f4b MADS: FOREST: Clarify param 2 of inter_move_object calls
5f6d5e8475 MADS: FOREST: Add pebble to inventory list
046fafc1f1 MADS: FOREST: Add support for second distinct digi format


Commit: 3d5841388d08f976314032ee729f9ef58cde31a5
    https://github.com/scummvm/scummvm/commit/3d5841388d08f976314032ee729f9ef58cde31a5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-25T20:19:21+10:00

Commit Message:
MADS: FOREST: Identified inventory items in room 101

Changed paths:
    engines/mads/madsv2/forest/mads/inventory.h
    engines/mads/madsv2/forest/rooms/room101.cpp


diff --git a/engines/mads/madsv2/forest/mads/inventory.h b/engines/mads/madsv2/forest/mads/inventory.h
index daf83353cf1..4e442c7c034 100644
--- a/engines/mads/madsv2/forest/mads/inventory.h
+++ b/engines/mads/madsv2/forest/mads/inventory.h
@@ -28,7 +28,11 @@ namespace MADS {
 namespace MADSV2 {
 namespace Forest {
 
-//enum {};
+enum {
+	cogs           =  0,
+	twine          =  8,
+	planks         = 11
+};
 
 } // namespace Forest
 } // namespace MADSV2
diff --git a/engines/mads/madsv2/forest/rooms/room101.cpp b/engines/mads/madsv2/forest/rooms/room101.cpp
index 08e11d5a938..3d067d78ae6 100644
--- a/engines/mads/madsv2/forest/rooms/room101.cpp
+++ b/engines/mads/madsv2/forest/rooms/room101.cpp
@@ -232,7 +232,7 @@ static void room_101_init() {
 			++flags[0];
 	}
 
-	if (object_is_here(11)) {
+	if (object_is_here(planks)) {
 		ss[0] = kernel_load_series("*rm101p11", 0);
 		seq[0] = kernel_seq_stamp(ss[0], 0, -1);
 		kernel_seq_depth(seq[0], 13);
@@ -242,7 +242,7 @@ static void room_101_init() {
 		kernel_flip_hotspot(164, false);
 	}
 
-	if (object_is_here(0)) {
+	if (object_is_here(cogs)) {
 		ss[2] = kernel_load_series("*rm101p10", 0);
 		seq[2] = kernel_seq_stamp(ss[2], 0, -1);
 		kernel_seq_depth(seq[2], 8);
@@ -252,7 +252,7 @@ static void room_101_init() {
 		kernel_flip_hotspot(105, false);
 	}
 
-	if (object_is_here(8)) {
+	if (object_is_here(twine)) {
 		ss[1] = kernel_load_series(kernel_name('p', 8), 0);
 		seq[1] = kernel_seq_stamp(ss[1], 0, -1);
 		kernel_seq_depth(seq[1], 1);
@@ -372,13 +372,13 @@ static void room_101_anim1() {
 
 static void room_101_anim2() {
 	int16 frame = kernel_anim[aa[7]].frame;
-	if (frame == aainfo[7]._frame)
-		return;
-	aainfo[7]._frame = frame;
-	if (frame != 18) return;
-	if (aainfo[7]._val3 != 7) return;
-	aainfo[7]._frame = 6;
-	kernel_reset_animation(aa[7], 6);
+	if (frame != aainfo[7]._frame) {
+		aainfo[7]._frame = frame;
+		if (frame == 18 && aainfo[7]._val3 == 7) {
+			aainfo[7]._frame = 6;
+			kernel_reset_animation(aa[7], 6);
+		}
+	}
 }
 
 static void room_101_anim3() {
@@ -657,7 +657,7 @@ static void room_101_daemon() {
 			kernel_reset_animation(scratch._a6, 0);
 			global[g133] = 1;
 			global[g143] = 1;
-			inter_move_object(0, 2);
+			inter_move_object(cogs, PLAYER);
 			kernel_seq_delete(seq[2]);
 			kernel_flip_hotspot(105, 0);
 			aa[4] = kernel_run_animation(kernel_name('R', 5), 103);
@@ -682,7 +682,7 @@ static void room_101_daemon() {
 			kernel_reset_animation(scratch._a6, 0);
 			global[g133] = 1;
 			global[g143] = 1;
-			inter_move_object(11, 2);
+			inter_move_object(planks, PLAYER);
 			kernel_seq_delete(seq[0]);
 			kernel_flip_hotspot(164, 0);
 			aa[4] = kernel_run_animation(kernel_name('R', 6), 103);
@@ -908,7 +908,7 @@ static void room_101_daemon() {
 		kernel_reset_animation(scratch._a6, 0);
 		global[g133] = 1;
 		global[g143] = 1;
-		inter_move_object(8, 2);
+		inter_move_object(twine, PLAYER);
 		kernel_seq_delete(seq[1]);
 		kernel_flip_hotspot(154, 0);
 		aa[4] = kernel_run_animation(kernel_name('R', 4), 103);


Commit: 50a9796e0e2e0fe8df22f021b1be8d50b5b8663c
    https://github.com/scummvm/scummvm/commit/50a9796e0e2e0fe8df22f021b1be8d50b5b8663c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-25T20:19:21+10:00

Commit Message:
MADS: FOREST: Identifying characters in room 101

Changed paths:
    engines/mads/madsv2/forest/rooms/room101.cpp


diff --git a/engines/mads/madsv2/forest/rooms/room101.cpp b/engines/mads/madsv2/forest/rooms/room101.cpp
index 3d067d78ae6..cfdeb4be396 100644
--- a/engines/mads/madsv2/forest/rooms/room101.cpp
+++ b/engines/mads/madsv2/forest/rooms/room101.cpp
@@ -56,8 +56,8 @@ struct Scratch {
 	int16 _9e;				// Offset 9eh
 	int16 _a0;				// Offset a0h
 	int16 _a2;				// Offset a2h
-	int16 _a4;
-	int16 _a6;
+	int16 _edgar;
+	int16 _russell;
 	int16 _a8;
 	int16 _aa;
 	int16 _startCutsceneCtr;
@@ -109,10 +109,10 @@ static void room_101_init2() {
 	global[g131] = 0;
 	global[g141] = 0;
 
-	scratch._a6 = kernel_run_animation_disp('r', 3, 0);
-	kernel_position_anim(scratch._a6, 123, 14, 69, 7);
-	scratch._a4 = kernel_run_animation_disp('e', 1, 0);
-	kernel_position_anim(scratch._a4, 194, 145, 75, 4);
+	scratch._russell = kernel_run_animation_disp('r', 3, 0);
+	kernel_position_anim(scratch._russell, 123, 14, 69, 7);
+	scratch._edgar = kernel_run_animation_disp('e', 1, 0);
+	kernel_position_anim(scratch._edgar, 194, 145, 75, 4);
 
 	global[g009] = -1;
 	global_midi_play(8);
@@ -137,10 +137,10 @@ static void room_101_init3() {
 	global[g131] = 0;
 	global[g141] = 0;
 
-	scratch._a6 = kernel_run_animation_disp('r', 3, 0);
-	kernel_position_anim(scratch._a6, 123, 134, 69, 7);
-	scratch._a4 = kernel_run_animation_disp('e', 1, 0);
-	kernel_position_anim(scratch._a4, 194, 145, 75, 4);
+	scratch._russell = kernel_run_animation_disp('r', 3, 0);
+	kernel_position_anim(scratch._russell, 123, 134, 69, 7);
+	scratch._edgar = kernel_run_animation_disp('e', 1, 0);
+	kernel_position_anim(scratch._edgar, 194, 145, 75, 4);
 
 	if (previous_room != KERNEL_RESTORING_GAME) {
 		player.x = 96;
@@ -151,8 +151,8 @@ static void room_101_init3() {
 	if (previous_room == KERNEL_RESTORING_GAME) {
 		global[g131] = -1;
 		global[g141] = -1;
-		kernel_reset_animation(scratch._a4, 2);
-		kernel_reset_animation(scratch._a6, 2);
+		kernel_reset_animation(scratch._edgar, 2);
+		kernel_reset_animation(scratch._russell, 2);
 		global[g133] = 0;
 		global[g143] = 0;
 		player.commands_allowed = -1;
@@ -176,8 +176,8 @@ static void room_101_init3() {
 	if (previous_room == 199) {
 		global[g131] = -1;
 		global[g141] = -1;
-		kernel_reset_animation(scratch._a4, 2);
-		kernel_reset_animation(scratch._a6, 2);
+		kernel_reset_animation(scratch._edgar, 2);
+		kernel_reset_animation(scratch._russell, 2);
 		global[g133] = 0;
 		global[g143] = 0;
 		restore_player();
@@ -189,8 +189,8 @@ static void room_101_init3() {
 	if (previous_room == 205) {
 		global[g131] = -1;
 		global[g141] = -1;
-		kernel_reset_animation(scratch._a4, 2);
-		kernel_reset_animation(scratch._a6, 2);
+		kernel_reset_animation(scratch._edgar, 2);
+		kernel_reset_animation(scratch._russell, 2);
 		global[g133] = 0;
 		global[g143] = 0;
 		player.commands_allowed = 0;
@@ -204,8 +204,8 @@ static void room_101_init3() {
 
 	global[g131] = -1;
 	global[g141] = -1;
-	kernel_reset_animation(scratch._a4, 2);
-	kernel_reset_animation(scratch._a6, 2);
+	kernel_reset_animation(scratch._edgar, 2);
+	kernel_reset_animation(scratch._russell, 2);
 	global[g133] = 0;
 	global[g143] = 0;
 	player.commands_allowed = -1;
@@ -264,6 +264,7 @@ static void room_101_init() {
 
 	switch (flags[0]) {
 	case -3:
+		// Intro
 		room_101_init1();
 		break;
 	case -2:
@@ -271,9 +272,11 @@ static void room_101_init() {
 		room_101_init2();
 		break;
 	case 1:
+		// Start of game
 		room_101_init2();
 		break;
 	default:
+		// Restoring savegame
 		room_101_init3();
 		break;
 	}
@@ -653,8 +656,8 @@ static void room_101_daemon() {
 		case 49:
 			kernel_abort_animation(scratch._a8);
 			scratch._b2 = 0;
-			kernel_reset_animation(scratch._a4, 0);
-			kernel_reset_animation(scratch._a6, 0);
+			kernel_reset_animation(scratch._edgar, 0);
+			kernel_reset_animation(scratch._russell, 0);
 			global[g133] = 1;
 			global[g143] = 1;
 			inter_move_object(cogs, PLAYER);
@@ -664,7 +667,7 @@ static void room_101_daemon() {
 			aainfo[4]._active = -1;
 			aainfo[4]._val3 = 14;
 			scratch._a2 = 4;
-			kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_ANIM, aa[4]);
+			kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_ANIM, aa[4]);
 			break;
 		case 50:
 			aainfo[4]._frame = 8;
@@ -678,8 +681,8 @@ static void room_101_daemon() {
 		case 59:
 			kernel_abort_animation(scratch._a8);
 			scratch._b2 = 0;
-			kernel_reset_animation(scratch._a4, 0);
-			kernel_reset_animation(scratch._a6, 0);
+			kernel_reset_animation(scratch._edgar, 0);
+			kernel_reset_animation(scratch._russell, 0);
 			global[g133] = 1;
 			global[g143] = 1;
 			inter_move_object(planks, PLAYER);
@@ -689,7 +692,7 @@ static void room_101_daemon() {
 			aainfo[4]._active = -1;
 			aainfo[4]._val3 = 15;
 			scratch._a2 = 4;
-			kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_ANIM, aa[4]);
+			kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_ANIM, aa[4]);
 			break;
 		case 69:
 			global[g154] = 0;
@@ -751,8 +754,8 @@ static void room_101_daemon() {
 			aa[1] = kernel_run_animation(kernel_name('E', 1), 102);
 			aainfo[1]._active = -1;
 			scratch._a0 = 1;
-			kernel_reset_animation(scratch._a4, 0);
-			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._a4);
+			kernel_reset_animation(scratch._edgar, 0);
+			kernel_synch(KERNEL_ANIM, aa[1], KERNEL_ANIM, scratch._edgar);
 			global[g133] = 1;
 		}
 		break;
@@ -762,8 +765,8 @@ static void room_101_daemon() {
 			aa[2] = kernel_run_animation(kernel_name('R', 1), 101);
 			aainfo[2]._active = -1;
 			scratch._9e = 2;
-			kernel_reset_animation(scratch._a6, 0);
-			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._a6);
+			kernel_reset_animation(scratch._russell, 0);
+			kernel_synch(KERNEL_ANIM, aa[2], KERNEL_ANIM, scratch._russell);
 			global[g143] = 1;
 		}
 		break;
@@ -815,8 +818,8 @@ static void room_101_daemon() {
 		case 6:
 			kernel_abort_animation(aa[6]);
 			global[g131] = -1;
-			kernel_reset_animation(scratch._a4, 1);
-			kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_NOW, 0);
+			kernel_reset_animation(scratch._edgar, 1);
+			kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
 			global[g133] = 0;
 			aa[6] = kernel_run_animation(kernel_name('b', 4), 104);
 			aainfo[6]._active = -1;
@@ -863,10 +866,10 @@ static void room_101_daemon() {
 		aainfo[4]._active = 0;
 		global[g131] = -1;
 		global[g141] = -1;
-		kernel_reset_animation(scratch._a4, 1);
-		kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_NOW, 0);
-		kernel_reset_animation(scratch._a6, 1);
-		kernel_synch(KERNEL_ANIM, scratch._a6, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._edgar, 1);
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._russell, 1);
+		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
 		player.walker_visible = true;
 		global[g133] = 0;
 		global[g143] = 0;
@@ -904,8 +907,8 @@ static void room_101_daemon() {
 		break;
 
 	case 109:
-		kernel_reset_animation(scratch._a4, 0);
-		kernel_reset_animation(scratch._a6, 0);
+		kernel_reset_animation(scratch._edgar, 0);
+		kernel_reset_animation(scratch._russell, 0);
 		global[g133] = 1;
 		global[g143] = 1;
 		inter_move_object(twine, PLAYER);
@@ -915,7 +918,7 @@ static void room_101_daemon() {
 		aainfo[4]._active = -1;
 		aainfo[4]._val3 = 13;
 		scratch._a2 = 4;
-		kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_ANIM, aa[4]);
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_ANIM, aa[4]);
 		digi_play_build(101, 'e', 3, 1);
 		scratch._aa = 0;
 		break;
@@ -932,8 +935,8 @@ static void room_101_daemon() {
 		if (aainfo[7]._val3 == 0) {
 			aainfo[7]._active = 0;
 			global[g141] = -1;
-			kernel_reset_animation(scratch._a6, 1);
-			kernel_synch(KERNEL_ANIM, scratch._a6, KERNEL_NOW, 0);
+			kernel_reset_animation(scratch._russell, 1);
+			kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
 			global[g143] = 0;
 			global[g009] = 0;
 			player.commands_allowed = -1;
@@ -951,10 +954,10 @@ static void room_101_daemon() {
 		aainfo[0]._active = 0;
 		global[g131] = -1;
 		global[g141] = -1;
-		kernel_reset_animation(scratch._a4, 1);
-		kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_NOW, 0);
-		kernel_reset_animation(scratch._a6, 1);
-		kernel_synch(KERNEL_ANIM, scratch._a6, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._edgar, 1);
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._russell, 1);
+		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
 		player.walker_visible = true;
 		global[g133] = 0;
 		global[g143] = 0;
@@ -965,8 +968,8 @@ static void room_101_daemon() {
 	case 101:
 		kernel_abort_animation(aa[scratch._9e]);
 		aainfo[scratch._9e]._active = 0;
-		kernel_reset_animation(scratch._a6, 1);
-		kernel_synch(KERNEL_ANIM, scratch._a6, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._russell, 1);
+		kernel_synch(KERNEL_ANIM, scratch._russell, KERNEL_NOW, 0);
 		global[g143] = 0;
 		player.commands_allowed = -1;
 		break;
@@ -974,8 +977,8 @@ static void room_101_daemon() {
 	case 102:
 		kernel_abort_animation(aa[scratch._a0]);
 		aainfo[scratch._a0]._active = 0;
-		kernel_reset_animation(scratch._a4, 1);
-		kernel_synch(KERNEL_ANIM, scratch._a4, KERNEL_NOW, 0);
+		kernel_reset_animation(scratch._edgar, 1);
+		kernel_synch(KERNEL_ANIM, scratch._edgar, KERNEL_NOW, 0);
 		global[g133] = 0;
 		player.commands_allowed = -1;
 		break;
@@ -1000,8 +1003,8 @@ static void room_101_daemon() {
 	}
 
 	if (flags[0] != -3) {
-		global_anim1(1, scratch._a4, global[g131], &global[g132]);
-		global_anim2(3, scratch._a6, global[g141], &global[g142]);
+		global_anim1(1, scratch._edgar, global[g131], &global[g132]);
+		global_anim2(3, scratch._russell, global[g141], &global[g142]);
 		if (mouse_hidden != 0)
 			mouse_show();
 	}
@@ -1098,8 +1101,8 @@ void room_101_synchronize(Common::Serializer &s) {
 	s.syncAsSint16LE(scratch._9e);
 	s.syncAsSint16LE(scratch._a0);
 	s.syncAsSint16LE(scratch._a2);
-	s.syncAsSint16LE(scratch._a4);
-	s.syncAsSint16LE(scratch._a6);
+	s.syncAsSint16LE(scratch._edgar);
+	s.syncAsSint16LE(scratch._russell);
 	s.syncAsSint16LE(scratch._a8);
 	s.syncAsSint16LE(scratch._aa);
 	s.syncAsSint16LE(scratch._startCutsceneCtr);


Commit: ce0a3a333bd27b82b6fc9627bdb6e2131eaa752a
    https://github.com/scummvm/scummvm/commit/ce0a3a333bd27b82b6fc9627bdb6e2131eaa752a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-25T20:19:21+10:00

Commit Message:
MADS: FOREST: Add complete words list, remap player_parse calls to use it

Changed paths:
    engines/mads/madsv2/forest/global.cpp
    engines/mads/madsv2/forest/mads/words.h
    engines/mads/madsv2/forest/rooms/room101.cpp
    engines/mads/madsv2/forest/rooms/room103.cpp
    engines/mads/madsv2/forest/rooms/room104.cpp
    engines/mads/madsv2/forest/rooms/room106.cpp
    engines/mads/madsv2/forest/rooms/room199.cpp
    engines/mads/madsv2/forest/rooms/room201.cpp
    engines/mads/madsv2/forest/rooms/room203.cpp
    engines/mads/madsv2/forest/rooms/room204.cpp
    engines/mads/madsv2/forest/rooms/room205.cpp
    engines/mads/madsv2/forest/rooms/room210.cpp
    engines/mads/madsv2/forest/rooms/room211.cpp
    engines/mads/madsv2/forest/rooms/room220.cpp
    engines/mads/madsv2/forest/rooms/room301.cpp
    engines/mads/madsv2/forest/rooms/room302.cpp
    engines/mads/madsv2/forest/rooms/room303.cpp
    engines/mads/madsv2/forest/rooms/room304.cpp
    engines/mads/madsv2/forest/rooms/room305.cpp
    engines/mads/madsv2/forest/rooms/room306.cpp
    engines/mads/madsv2/forest/rooms/room307.cpp
    engines/mads/madsv2/forest/rooms/room308.cpp
    engines/mads/madsv2/forest/rooms/room321.cpp
    engines/mads/madsv2/forest/rooms/room322.cpp
    engines/mads/madsv2/forest/rooms/room401.cpp
    engines/mads/madsv2/forest/rooms/room402.cpp
    engines/mads/madsv2/forest/rooms/room403.cpp
    engines/mads/madsv2/forest/rooms/room404.cpp
    engines/mads/madsv2/forest/rooms/room405.cpp
    engines/mads/madsv2/forest/rooms/room501.cpp


diff --git a/engines/mads/madsv2/forest/global.cpp b/engines/mads/madsv2/forest/global.cpp
index 9c4c62e91c5..21b0c87a507 100644
--- a/engines/mads/madsv2/forest/global.cpp
+++ b/engines/mads/madsv2/forest/global.cpp
@@ -30,6 +30,7 @@
 #include "mads/madsv2/core/kernel.h"
 #include "mads/madsv2/forest/midi.h"
 #include "mads/madsv2/core/pal.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/extra.h"
 
@@ -928,7 +929,7 @@ void global_error_code() {
 	int16 randVal = imath_random(1, 1000);
 	int16 text_id = 0;
 
-	if (player_parse(4, 0)) {
+	if (player_parse(words_take, 0)) {
 		if (player_has(object_named(player_main_noun)) && player.main_object_source != 4) {
 			text_id = 25;
 		} else {
@@ -936,19 +937,19 @@ void global_error_code() {
 			else if (randVal <= 666) text_id = 2;
 			else                     text_id = 3;
 		}
-	} else if (player_parse(5, 0)) {
+	} else if (player_parse(words_push, 0)) {
 		text_id = (randVal < 750) ? 4 : 5;
-	} else if (player_parse(10, 0)) {
+	} else if (player_parse(words_pull, 0)) {
 		text_id = (randVal < 750) ? 6 : 7;
-	} else if (player_parse(6, 0)) {
+	} else if (player_parse(words_open, 0)) {
 		if (randVal <= 500)      text_id = 8;
 		else if (randVal <= 750) text_id = 9;
 		else                     text_id = 10;
-	} else if (player_parse(11, 0)) {
+	} else if (player_parse(words_close, 0)) {
 		if (randVal <= 500)      text_id = 11;
 		else if (randVal <= 750) text_id = 12;
 		else                     text_id = 13;
-	} else if (player_parse(7, 0)) {
+	} else if (player_parse(words_put, 0)) {
 		if (player_has(object_named(player_main_noun))) {
 			text_id = 26;
 		} else if (player.main_object_source == 4 && player.second_object_source == 4) {
@@ -956,9 +957,9 @@ void global_error_code() {
 		} else {
 			text_id = (randVal < 500) ? 14 : 15;
 		}
-	} else if (player_parse(8, 0)) {
+	} else if (player_parse(words_talk_to, 0)) {
 		text_id = (randVal <= 500) ? 16 : 17;
-	} else if (player_parse(9, 0)) {
+	} else if (player_parse(words_give, 0)) {
 		if (player_has(object_named(player_main_noun))) {
 			text_id = 27;
 		} else if (player.main_object_source == 4 && player.second_object_source == 4) {
@@ -966,18 +967,18 @@ void global_error_code() {
 		} else {
 			text_id = 18;
 		}
-	} else if (player_parse(12, 0)) {
+	} else if (player_parse(words_throw, 0)) {
 		if (player_has(object_named(player_main_noun))) {
 			text_id = 19;
 		} else {
 			text_id = 28;
 		}
-	} else if (player_parse(3, 0)) {
+	} else if (player_parse(words_look, 0)) {
 		object_named(player_main_noun);
 		if (randVal <= 333)      text_id = 20;
 		else if (randVal <= 666) text_id = 21;
 		else                     text_id = 22;
-	} else if (!player_parse(13, 0) && !player_parse(160, 0)) {
+	} else if (!player_parse(words_walk_to, 0) && !player_parse(words_walk_down, 0)) {
 		text_id = (randVal < 500) ? 23 : 24;
 	}
 
diff --git a/engines/mads/madsv2/forest/mads/words.h b/engines/mads/madsv2/forest/mads/words.h
index 199d01ec063..5de407c1596 100644
--- a/engines/mads/madsv2/forest/mads/words.h
+++ b/engines/mads/madsv2/forest/mads/words.h
@@ -29,7 +29,194 @@ namespace MADSV2 {
 namespace Forest {
 
 enum {
-	dummy = 0
+	words_game                 =   1,
+	words_qsave                =   2,
+	words_look                 =   3,
+	words_take                 =   4,
+	words_push                 =   5,
+	words_open                 =   6,
+	words_put                  =   7,
+	words_talk_to              =   8,
+	words_give                 =   9,
+	words_pull                 =  10,
+	words_close                =  11,
+	words_throw                =  12,
+	words_walk_to              =  13,
+	words_room_101             =  15,
+	words_room_104             =  16,
+	words_room_106             =  17,
+	words_room_107             =  18,
+	words_room_110             =  19,
+	words_room_150             =  20,
+	words_room_201             =  21,
+	words_room_202             =  22,
+	words_room_203             =  23,
+	words_room_204             =  24,
+	words_room_205             =  25,
+	words_room_209             =  26,
+	words_room_210             =  27,
+	words_room_210h            =  28,
+	words_room_211             =  29,
+	words_room_220             =  30,
+	words_room_221             =  31,
+	words_room_250             =  32,
+	words_room_251             =  33,
+	words_room_301             =  34,
+	words_room_302             =  35,
+	words_room_303             =  36,
+	words_room_304             =  37,
+	words_room_305             =  38,
+	words_room_306             =  39,
+	words_room_307             =  40,
+	words_room_308             =  41,
+	words_room_320             =  42,
+	words_room_321             =  43,
+	words_room_322             =  44,
+	words_room_350             =  45,
+	words_room_401             =  46,
+	words_room_402             =  47,
+	words_room_403             =  48,
+	words_room_404             =  49,
+	words_room_405             =  50,
+	words_room_406             =  51,
+	words_room_410             =  52,
+	words_room_420             =  53,
+	words_room_450             =  54,
+	words_room_501             =  55,
+	words_room_502             =  56,
+	words_room_503             =  57,
+	words_room_509             =  58,
+	words_room_510             =  59,
+	words_room_511             =  60,
+	words_room_520             =  61,
+	words_room_521             =  62,
+	words_room_550             =  63,
+	words_owl_tree             =  64,
+	words_abi_bubble           =  65,
+	words_all_bubble           =  66,
+	words_attack               =  67,
+	words_bedroom              =  68,
+	words_bird_figurine        =  69,
+	words_birdcall             =  70,
+	words_book                 =  71,
+	words_bookcase             =  72,
+	words_books                =  73,
+	words_bookshelf            =  74,
+	words_bush                 =  75,
+	words_carve_up             =  76,
+	words_chicory              =  77,
+	words_click_on             =  78,
+	words_cliff                =  79,
+	words_climb_down           =  80,
+	words_climb_up             =  81,
+	words_comfrey              =  82,
+	words_dandelion            =  83,
+	words_door                 =  84,
+	words_door_1               =  85,
+	words_door_2               =  86,
+	words_door_3               =  87,
+	words_door_4               =  88,
+	words_door_5               =  89,
+	words_down_page            =  90,
+	words_eat                  =  91,
+	words_edge_of_cliff        =  92,
+	words_elm_leaves           =  93,
+	words_exit_journal         =  94,
+	words_eyebright            =  95,
+	words_feather              =  96,
+	words_five                 =  97,
+	words_floor                =  98,
+	words_flowers              =  99,
+	words_forest               = 100,
+	words_forked_stick         = 101,
+	words_four                 = 102,
+	words_foxglove             = 103,
+	words_frog                 = 104,
+	words_gears                = 105,
+	words_ground               = 106,
+	words_hole                 = 107,
+	words_invoke               = 108,
+	words_ivy_leaf             = 109,
+	words_journal              = 110,
+	words_laboratory           = 111,
+	words_leaves               = 112,
+	words_lily_pad             = 113,
+	words_look_at              = 114,
+	words_make_noise           = 115,
+	words_map                  = 116,
+	words_marsh                = 117,
+	words_mint                 = 118,
+	words_moss                 = 119,
+	words_mushroom             = 120,
+	words_needle               = 121,
+	words_nothing              = 122,
+	words_one                  = 123,
+	words_overhanging_grass    = 124,
+	words_pebbles              = 125,
+	words_pick_up              = 126,
+	words_plant                = 127,
+	words_polish               = 128,
+	words_pond                 = 129,
+	words_poster               = 130,
+	words_primrose             = 131,
+	words_reeds                = 132,
+	words_river                = 133,
+	words_rocks                = 134,
+	words_rope                 = 135,
+	words_rub                  = 136,
+	words_rubber_band          = 137,
+	words_sanctuary_woods      = 138,
+	words_shieldstone          = 139,
+	words_signet_ring          = 140,
+	words_six                  = 141,
+	words_snapdragon           = 142,
+	words_spider_silk          = 143,
+	words_stairs               = 144,
+	words_sticks               = 145,
+	words_sunflower            = 146,
+	words_sword                = 147,
+	words_table                = 148,
+	words_telescope            = 149,
+	words_thistle              = 150,
+	words_three                = 151,
+	words_thrust               = 152,
+	words_tie                  = 153,
+	words_twine                = 154,
+	words_two                  = 155,
+	words_up_page              = 156,
+	words_use                  = 157,
+	words_vine_weed            = 158,
+	words_walk                 = 159,
+	words_walk_down            = 160,
+	words_wear                 = 161,
+	words_weasel               = 162,
+	words_web                  = 163,
+	words_wood                 = 164,
+	words_woods                = 165,
+	words_wrench               = 166,
+	words_y_stick              = 167,
+	words_abigail              = 168,
+	words_edgar                = 169,
+	words_russel               = 170,
+	words_snapdragon2          = 171,
+	words_lungwort             = 172,
+	words_grass                = 173,
+	words_fwt                  = 174,
+	words_dragon1              = 175,
+	words_dragon2              = 176,
+	words_nest                 = 177,
+	words_paint_can            = 178,
+	words_dam                  = 179,
+	words_brown                = 180,
+	words_turtle               = 181,
+	words_dragonfly            = 182,
+	words_fenwick              = 183,
+	words_blue_bird            = 184,
+	words_black_bird           = 185,
+	words_lever                = 186,
+	words_rock                 = 187,
+	words_used_it              = 188,
+	words_tail                 = 189
 };
 
 } // namespace Forest
diff --git a/engines/mads/madsv2/forest/rooms/room101.cpp b/engines/mads/madsv2/forest/rooms/room101.cpp
index cfdeb4be396..cbd9aaf646a 100644
--- a/engines/mads/madsv2/forest/rooms/room101.cpp
+++ b/engines/mads/madsv2/forest/rooms/room101.cpp
@@ -1025,10 +1025,10 @@ static void room_101_daemon() {
 }
 
 static void room_101_pre_parser() {
-	if (player_parse(13, 16, 0))
+	if (player_parse(words_walk_to, words_room_104, 0))
 		player.walk_off_edge_to_room = 104;
 
-	if (player_parse(13, 17, 0))
+	if (player_parse(words_walk_to, words_room_106, 0))
 		player.walk_off_edge_to_room = 106;
 }
 
@@ -1044,35 +1044,35 @@ static void room_101_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._98 = 2;
 		goto handled;
 	}
 
-	if (player_parse(126, 154, 0)) {
+	if (player_parse(words_pick_up, words_twine, 0)) {
 		player.commands_allowed = 0;
 		global[g150] = -1;
 		scratch._9a = 13;
 		goto handled;
 	}
 
-	if (player_parse(126, 105, 0)) {
+	if (player_parse(words_pick_up, words_gears, 0)) {
 		player.commands_allowed = 0;
 		global[g150] = -1;
 		scratch._9a = 14;
 		goto handled;
 	}
 
-	if (player_parse(126, 164, 0)) {
+	if (player_parse(words_pick_up, words_wood, 0)) {
 		player.commands_allowed = 0;
 		global[g150] = -1;
 		scratch._9a = 15;
 		goto handled;
 	}
 
-	if (player_parse(13, 149, 0)) {
+	if (player_parse(words_walk_to, words_telescope, 0)) {
 		player.commands_allowed = 0;
 		player.walker_visible = false;
 		kernel.trigger_setup_mode = 1;
diff --git a/engines/mads/madsv2/forest/rooms/room103.cpp b/engines/mads/madsv2/forest/rooms/room103.cpp
index 99c8fbebc78..4cacbcc96eb 100644
--- a/engines/mads/madsv2/forest/rooms/room103.cpp
+++ b/engines/mads/madsv2/forest/rooms/room103.cpp
@@ -395,7 +395,7 @@ static void room_103_daemon() {
 }
 
 static void room_103_pre_parser() {
-	if (player_parse(13, 15, 0))
+	if (player_parse(words_walk_to, words_room_101, 0))
 		player.walk_off_edge_to_room = 101;
 }
 
diff --git a/engines/mads/madsv2/forest/rooms/room104.cpp b/engines/mads/madsv2/forest/rooms/room104.cpp
index bd92745d46b..f5c776099c8 100644
--- a/engines/mads/madsv2/forest/rooms/room104.cpp
+++ b/engines/mads/madsv2/forest/rooms/room104.cpp
@@ -899,7 +899,7 @@ static void room_104_daemon() {
 }
 
 static void room_104_pre_parser() {
-	if (player_parse(13, 15, 0)) {
+	if (player_parse(words_walk_to, words_room_101, 0)) {
 		global[g009] = 0;
 		midi_stop();
 		player.walk_off_edge_to_room = 101;
@@ -917,21 +917,21 @@ static void room_104_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
 		goto handled;
 	}
 
-	if (player_parse(126, 99, 0)) {
+	if (player_parse(words_pick_up, words_flowers, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
 		goto handled;
 	}
 
-	if (player_parse(78, 119, 0)) {
+	if (player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room106.cpp b/engines/mads/madsv2/forest/rooms/room106.cpp
index 406817c2d25..c7b8475ea3a 100644
--- a/engines/mads/madsv2/forest/rooms/room106.cpp
+++ b/engines/mads/madsv2/forest/rooms/room106.cpp
@@ -696,7 +696,7 @@ static void room_106_daemon() {
 }
 
 static void room_106_pre_parser() {
-	if (player_parse(13, 21, 0))
+	if (player_parse(words_walk_to, words_room_201, 0))
 		player.walk_off_edge_to_room = 201;
 }
 
@@ -708,19 +708,19 @@ static void room_106_parser() {
 		return;
 	}
 
-	if (player_parse(118, 0)) {
+	if (player_parse(words_mint, 0)) {
 		global[g135] = -1;
 		scratch._a2 = 2;
 		player.commands_allowed = 0;
 	}
 
-	if (player_parse(131, 0)) {
+	if (player_parse(words_primrose, 0)) {
 		global[g135] = -1;
 		scratch._a2 = 1;
 		player.commands_allowed = 0;
 	}
 
-	if (player_parse(125, 0)) {
+	if (player_parse(words_pebbles, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
@@ -734,13 +734,13 @@ static void room_106_parser() {
 		return;
 	}
 
-	if (player_parse(13, 15, 0)) {
+	if (player_parse(words_walk_to, words_room_101, 0)) {
 		new_room = 101;
 		player.command_ready = 0;
 		return;
 	}
 
-	if (player_parse(27, 84, 0) && global[g022] == 0) {
+	if (player_parse(words_room_210, words_door, 0) && global[g022] == 0) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
@@ -756,7 +756,7 @@ static void room_106_parser() {
 		return;
 	}
 
-	if (player_parse(13, 27, 0)) {
+	if (player_parse(words_walk_to, words_room_210, 0)) {
 		global[g150] = -1;
 		scratch._90 = 6;
 		player.commands_allowed = 0;
@@ -769,7 +769,7 @@ static void room_106_parser() {
 		return;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
@@ -777,7 +777,7 @@ static void room_106_parser() {
 		return;
 	}
 
-	if (player_parse(126, 99, 0) || player_parse(78, 119, 0)) {
+	if (player_parse(words_pick_up, words_flowers, 0) || player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room199.cpp b/engines/mads/madsv2/forest/rooms/room199.cpp
index 9398644b830..e9ead4d331b 100644
--- a/engines/mads/madsv2/forest/rooms/room199.cpp
+++ b/engines/mads/madsv2/forest/rooms/room199.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section1.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/journal.h"
@@ -497,36 +498,36 @@ static void room_199_parser1() {
 }
 
 static void room_199_parser() {
-	if (player_parse(174, 121, 0)) { digi_play_build(521, 'e', 6, 2);  goto handled; }
-	if (player_parse(174, 164, 0)) { digi_play_build(521, 'e', 10, 2); goto handled; }
-	if (player_parse(174, 112, 0)) { digi_play_build(521, 'e', 3, 2);  goto handled; }
-	if (player_parse(174, 163, 0)) { digi_play_build(521, 'e', 8, 2);  goto handled; }
-	if (player_parse(174, 158, 0)) { digi_play_build(521, 'e', 9, 2);  goto handled; }
-	if (player_parse(174, 154, 0)) { digi_play_build(521, 'e', 20, 2); goto handled; }
-	if (player_parse(174, 96, 0))  { digi_play_build(521, 'e', 5, 2);  goto handled; }
-	if (player_parse(174, 132, 0)) { digi_play_build(521, 'e', 2, 2);  goto handled; }
-	if (player_parse(174, 113, 0)) { digi_play_build(521, 'e', 7, 2);  goto handled; }
-	if (player_parse(174, 105, 0)) { digi_play_build(521, 'e', 4, 2);  goto handled; }
-	if (player_parse(174, 145, 0)) { digi_play_build(521, 'e', 21, 2); goto handled; }
-
-	if (player_parse(99, 82, 0))  { digi_play_build_ii('e', 9, 2);  goto handled; }
-	if (player_parse(99, 131, 0)) { digi_play_build_ii('e', 5, 2);  goto handled; }
-	if (player_parse(99, 142, 0)) { digi_play_build_ii('e', 3, 2);  goto handled; }
-	if (player_parse(99, 146, 0)) { digi_play_build_ii('e', 6, 2);  goto handled; }
-	if (player_parse(99, 150, 0)) { digi_play_build_ii('e', 8, 2);  goto handled; }
-	if (player_parse(99, 95, 0))  { digi_play_build_ii('e', 11, 2); goto handled; }
-	if (player_parse(99, 118, 0)) { digi_play_build_ii('e', 1, 2);  goto handled; }
-	if (player_parse(99, 103, 0)) { digi_play_build_ii('e', 4, 2);  goto handled; }
-	if (player_parse(99, 83, 0))  { digi_play_build_ii('e', 7, 2);  goto handled; }
-	if (player_parse(99, 172, 0)) { digi_play_build_ii('e', 12, 2); goto handled; }
-	if (player_parse(99, 77, 0))  { digi_play_build_ii('e', 2, 2);  goto handled; }
-
-	if (player_parse(94, 0)) {
+	if (player_parse(words_fwt, words_needle, 0)) { digi_play_build(521, 'e', 6, 2);  goto handled; }
+	if (player_parse(words_fwt, words_wood, 0)) { digi_play_build(521, 'e', 10, 2); goto handled; }
+	if (player_parse(words_fwt, words_leaves, 0)) { digi_play_build(521, 'e', 3, 2);  goto handled; }
+	if (player_parse(words_fwt, words_web, 0)) { digi_play_build(521, 'e', 8, 2);  goto handled; }
+	if (player_parse(words_fwt, words_vine_weed, 0)) { digi_play_build(521, 'e', 9, 2);  goto handled; }
+	if (player_parse(words_fwt, words_twine, 0)) { digi_play_build(521, 'e', 20, 2); goto handled; }
+	if (player_parse(words_fwt, words_feather, 0))  { digi_play_build(521, 'e', 5, 2);  goto handled; }
+	if (player_parse(words_fwt, words_reeds, 0)) { digi_play_build(521, 'e', 2, 2);  goto handled; }
+	if (player_parse(words_fwt, words_lily_pad, 0)) { digi_play_build(521, 'e', 7, 2);  goto handled; }
+	if (player_parse(words_fwt, words_gears, 0)) { digi_play_build(521, 'e', 4, 2);  goto handled; }
+	if (player_parse(words_fwt, words_sticks, 0)) { digi_play_build(521, 'e', 21, 2); goto handled; }
+
+	if (player_parse(words_flowers, words_comfrey, 0))  { digi_play_build_ii('e', 9, 2);  goto handled; }
+	if (player_parse(words_flowers, words_primrose, 0)) { digi_play_build_ii('e', 5, 2);  goto handled; }
+	if (player_parse(words_flowers, words_snapdragon, 0)) { digi_play_build_ii('e', 3, 2);  goto handled; }
+	if (player_parse(words_flowers, words_sunflower, 0)) { digi_play_build_ii('e', 6, 2);  goto handled; }
+	if (player_parse(words_flowers, words_thistle, 0)) { digi_play_build_ii('e', 8, 2);  goto handled; }
+	if (player_parse(words_flowers, words_eyebright, 0))  { digi_play_build_ii('e', 11, 2); goto handled; }
+	if (player_parse(words_flowers, words_mint, 0)) { digi_play_build_ii('e', 1, 2);  goto handled; }
+	if (player_parse(words_flowers, words_foxglove, 0)) { digi_play_build_ii('e', 4, 2);  goto handled; }
+	if (player_parse(words_flowers, words_dandelion, 0))  { digi_play_build_ii('e', 7, 2);  goto handled; }
+	if (player_parse(words_flowers, words_lungwort, 0)) { digi_play_build_ii('e', 12, 2); goto handled; }
+	if (player_parse(words_flowers, words_chicory, 0))  { digi_play_build_ii('e', 2, 2);  goto handled; }
+
+	if (player_parse(words_exit_journal, 0)) {
 		leave_journal();
 		goto handled;
 	}
 
-	if (player_parse(156, 0)) {
+	if (player_parse(words_up_page, 0)) {
 		if (aainfo[2]._active != 3) {
 			aainfo[2]._active = aainfo[2]._frame;
 			aainfo[2]._frame++;
@@ -536,7 +537,7 @@ static void room_199_parser() {
 		goto handled;
 	}
 
-	if (player_parse(90, 0)) {
+	if (player_parse(words_down_page, 0)) {
 		if (aainfo[2]._active != 0) {
 			aainfo[2]._active = aainfo[2]._frame;
 			aainfo[2]._frame--;
diff --git a/engines/mads/madsv2/forest/rooms/room201.cpp b/engines/mads/madsv2/forest/rooms/room201.cpp
index a9178a34523..c8f757ec789 100644
--- a/engines/mads/madsv2/forest/rooms/room201.cpp
+++ b/engines/mads/madsv2/forest/rooms/room201.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section2.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/journal.h"
@@ -568,9 +569,9 @@ static void room_201_daemon() {
 }
 
 static void room_201_pre_parser() {
-	if (player_parse(13, 17, 0))
+	if (player_parse(words_walk_to, words_room_106, 0))
 		player.walk_off_edge_to_room = 106;
-	if (player_parse(13, 23, 0))
+	if (player_parse(words_walk_to, words_room_203, 0))
 		player.walk_off_edge_to_room = 203;
 }
 
@@ -581,7 +582,7 @@ static void room_201_parser() {
 		goto handled;
 	}
 
-	if (player_parse(93, 0)) {
+	if (player_parse(words_elm_leaves, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
@@ -594,7 +595,7 @@ static void room_201_parser() {
 		goto handled;
 	}
 
-	if (player_parse(145, 0)) {
+	if (player_parse(words_sticks, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
@@ -607,7 +608,7 @@ static void room_201_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 77, 0)) {
+	if (player_parse(words_look_at, words_chicory, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -615,7 +616,7 @@ static void room_201_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 103, 0)) {
+	if (player_parse(words_look_at, words_foxglove, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -628,21 +629,21 @@ static void room_201_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
 		goto handled;
 	}
 
-	if (player_parse(99, 0)) {
+	if (player_parse(words_flowers, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
 		goto handled;
 	}
 
-	if (player_parse(78, 119, 0)) {
+	if (player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room203.cpp b/engines/mads/madsv2/forest/rooms/room203.cpp
index 7ce6fec9f6b..a2eb74caf8f 100644
--- a/engines/mads/madsv2/forest/rooms/room203.cpp
+++ b/engines/mads/madsv2/forest/rooms/room203.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section2.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/extra.h"
 #include "mads/madsv2/forest/global.h"
@@ -1629,14 +1630,14 @@ static void room_203_pre_parser() {
 		player.need_to_walk = 0;
 		return;
 	}
-	if (player_parse(13, 21, 0))
+	if (player_parse(words_walk_to, words_room_201, 0))
 		player.walk_off_edge_to_room = 201;
-	if (player_parse(13, 24, 0))
+	if (player_parse(words_walk_to, words_room_204, 0))
 		player.walk_off_edge_to_room = 204;
 }
 
 static void room_203_parser() {
-	if (player_parse(13, 27, 0)) {
+	if (player_parse(words_walk_to, words_room_210, 0)) {
 		if (global[g046] != 0) {
 			global[g135] = -1;
 			scratch._8c = 50;
@@ -1648,7 +1649,7 @@ static void room_203_parser() {
 		goto handled;
 	}
 
-	if (player_parse(13, 21, 0)) {
+	if (player_parse(words_walk_to, words_room_201, 0)) {
 		if (global[g046] == 0) {
 			player.commands_allowed = 0;
 			global[g150] = -1;
@@ -1657,7 +1658,7 @@ static void room_203_parser() {
 		goto handled;
 	}
 
-	if (player_parse(13, 24, 0) && global[g046] == 0) {
+	if (player_parse(words_walk_to, words_room_204, 0) && global[g046] == 0) {
 		player.commands_allowed = 0;
 		global[g150] = -1;
 		scratch._90 = 15;
@@ -1731,7 +1732,7 @@ static void room_203_parser() {
 		goto handled;
 	}
 
-	if (player_parse(78, 119, 0)) {
+	if (player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		if (global[g046] == 0) {
 			global[g150] = -1;
@@ -1749,7 +1750,7 @@ static void room_203_parser() {
 		goto handled;
 	}
 
-	if (player_parse(78, 168, 0)) {
+	if (player_parse(words_click_on, words_abigail, 0)) {
 		if (player_has(5) && player_has(8)) {
 			kernel.trigger_setup_mode = KERNEL_TRIGGER_DAEMON;
 			aa[3] = kernel_run_animation(kernel_name('a', 1), 104);
@@ -1777,21 +1778,21 @@ static void room_203_parser() {
 		goto handled;
 	}
 
-	if (player_parse(78, 169, 0)) {
+	if (player_parse(words_click_on, words_edgar, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 51;
 		goto handled;
 	}
 
-	if (player_parse(78, 170, 0)) {
+	if (player_parse(words_click_on, words_russel, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 43;
 		goto handled;
 	}
 
-	if (player_parse(78, 65, 0)) {
+	if (player_parse(words_click_on, words_abi_bubble, 0)) {
 		player.commands_allowed = 0;
 		aainfo[3]._frame = 28;
 		kernel_reset_animation(aa[3], 28);
@@ -1799,7 +1800,7 @@ static void room_203_parser() {
 		goto handled;
 	}
 
-	if (player_parse(78, 66, 0)) {
+	if (player_parse(words_click_on, words_all_bubble, 0)) {
 		player.commands_allowed = 0;
 		aainfo[3]._frame = 33;
 		kernel_reset_animation(aa[3], 33);
@@ -1810,7 +1811,7 @@ static void room_203_parser() {
 	if (global[g049] == 0)
 		return;
 
-	if (player_parse(13, 106, 0)) {
+	if (player_parse(words_walk_to, words_ground, 0)) {
 		player.commands_allowed = 0;
 		aainfo[3]._frame = 41;
 		kernel_reset_animation(aa[3], 41);
diff --git a/engines/mads/madsv2/forest/rooms/room204.cpp b/engines/mads/madsv2/forest/rooms/room204.cpp
index 29884b3de12..5fc56ad56f2 100644
--- a/engines/mads/madsv2/forest/rooms/room204.cpp
+++ b/engines/mads/madsv2/forest/rooms/room204.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section2.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/journal.h"
@@ -539,10 +540,10 @@ bottom:
 }
 
 static void room_204_pre_parser() {
-	if (player_parse(13, 23, 0))
+	if (player_parse(words_walk_to, words_room_203, 0))
 		player.walk_off_edge_to_room = 203;
 
-	if (player_parse(13, 25, 0))
+	if (player_parse(words_walk_to, words_room_205, 0))
 		player.walk_off_edge_to_room = flags[13] ? 205 : 220;
 }
 
@@ -557,7 +558,7 @@ static void room_204_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 103, 0)) {
+	if (player_parse(words_look_at, words_foxglove, 0)) {
 		player.commands_allowed = false;
 		global[g135] = -1;
 		local->_8c = 5;
@@ -565,7 +566,7 @@ static void room_204_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 82, 0)) {
+	if (player_parse(words_look_at, words_comfrey, 0)) {
 		player.commands_allowed = false;
 		global[g135] = -1;
 		local->_8c = 5;
@@ -573,7 +574,7 @@ static void room_204_parser() {
 		goto handled;
 	}
 
-	if (player_parse(126, 158, 0)) {
+	if (player_parse(words_pick_up, words_vine_weed, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = false;
 		kernel_run_animation_talk('b', 9, 0);
@@ -581,7 +582,7 @@ static void room_204_parser() {
 		goto handled;
 	}
 
-	if (player_parse(78, 119, 0)) {
+	if (player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = false;
 		global[g135] = -1;
 		local->_8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room205.cpp b/engines/mads/madsv2/forest/rooms/room205.cpp
index 2f449cf91ed..7be2c1a5a9e 100644
--- a/engines/mads/madsv2/forest/rooms/room205.cpp
+++ b/engines/mads/madsv2/forest/rooms/room205.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section2.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/journal.h"
@@ -417,10 +418,10 @@ static void room_205_daemon() {
 }
 
 static void room_205_pre_parser() {
-	if (player_parse(13, 24, 0))
+	if (player_parse(words_walk_to, words_room_204, 0))
 		player.walk_off_edge_to_room = 204;
 
-	if (player_parse(13, 34, 0))
+	if (player_parse(words_walk_to, words_room_301, 0))
 		player.walk_off_edge_to_room = 301;
 }
 
@@ -433,7 +434,7 @@ static void room_205_parser() {
 		return;
 	}
 
-	if (player_parse(78, 107, 0)) {
+	if (player_parse(words_click_on, words_hole, 0)) {
 		player.commands_allowed = 0;
 		scratch._a4 = 121;
 		digi_play_build(221, '_', 1, 1);
@@ -446,7 +447,7 @@ static void room_205_parser() {
 		return;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
@@ -454,7 +455,7 @@ static void room_205_parser() {
 		return;
 	}
 
-	if (player_parse(126, 99, 0) || player_parse(78, 119, 0)) {
+	if (player_parse(words_pick_up, words_flowers, 0) || player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room210.cpp b/engines/mads/madsv2/forest/rooms/room210.cpp
index 809ed2ada5f..d96e914aa01 100644
--- a/engines/mads/madsv2/forest/rooms/room210.cpp
+++ b/engines/mads/madsv2/forest/rooms/room210.cpp
@@ -604,7 +604,7 @@ static void room_210_parser() {
 		return;
 	}
 
-	if (player_parse(78, 85, 0)) {
+	if (player_parse(words_click_on, words_door_1, 0)) {
 		player.commands_allowed = 0;
 		player.walker_visible = false;
 		global[g150] = -1;
@@ -613,7 +613,7 @@ static void room_210_parser() {
 		return;
 	}
 
-	if (player_parse(78, 86, 0)) {
+	if (player_parse(words_click_on, words_door_2, 0)) {
 		player.commands_allowed = 0;
 		player.walker_visible = false;
 		global[g150] = -1;
@@ -622,7 +622,7 @@ static void room_210_parser() {
 		return;
 	}
 
-	if (player_parse(78, 87, 0)) {
+	if (player_parse(words_click_on, words_door_3, 0)) {
 		player.commands_allowed = 0;
 		player.walker_visible = false;
 		global[g150] = -1;
@@ -631,7 +631,7 @@ static void room_210_parser() {
 		return;
 	}
 
-	if (player_parse(78, 88, 0)) {
+	if (player_parse(words_click_on, words_door_4, 0)) {
 		player.commands_allowed = 0;
 		player.walker_visible = false;
 		global[g150] = -1;
@@ -640,7 +640,7 @@ static void room_210_parser() {
 		return;
 	}
 
-	if (player_parse(78, 89, 0)) {
+	if (player_parse(words_click_on, words_door_5, 0)) {
 		player.commands_allowed = 0;
 		player.walker_visible = false;
 		global[g150] = -1;
diff --git a/engines/mads/madsv2/forest/rooms/room211.cpp b/engines/mads/madsv2/forest/rooms/room211.cpp
index be5867f711c..64dcedda3dd 100644
--- a/engines/mads/madsv2/forest/rooms/room211.cpp
+++ b/engines/mads/madsv2/forest/rooms/room211.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section1.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/midi.h"
diff --git a/engines/mads/madsv2/forest/rooms/room220.cpp b/engines/mads/madsv2/forest/rooms/room220.cpp
index c96cf0692bf..d1f0efe3785 100644
--- a/engines/mads/madsv2/forest/rooms/room220.cpp
+++ b/engines/mads/madsv2/forest/rooms/room220.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section1.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/midi.h"
diff --git a/engines/mads/madsv2/forest/rooms/room301.cpp b/engines/mads/madsv2/forest/rooms/room301.cpp
index 600eb83fcc3..318bb8db0a6 100644
--- a/engines/mads/madsv2/forest/rooms/room301.cpp
+++ b/engines/mads/madsv2/forest/rooms/room301.cpp
@@ -23,6 +23,7 @@
 #include "mads/madsv2/forest/global.h"
 #include "mads/madsv2/forest/journal.h"
 #include "mads/madsv2/forest/midi.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/core/game.h"
 #include "mads/madsv2/core/inter.h"
 #include "mads/madsv2/core/kernel.h"
@@ -751,20 +752,20 @@ static void room_301_daemon() {
 }
 
 static void room_301_pre_parser() {
-	if (player_parse(13, 25, 0))
+	if (player_parse(words_walk_to, words_room_205, 0))
 		player.walk_off_edge_to_room = 205;
 
-	if (player_parse(13, 38, 0))
+	if (player_parse(words_walk_to, words_room_305, 0))
 		player.walk_off_edge_to_room = 305;
 
-	if (player_parse(13, 40, 0)) {
+	if (player_parse(words_walk_to, words_room_307, 0)) {
 		if (global[g064] != 0)
 			player.walk_off_edge_to_room = 322;
 		else
 			player.walk_off_edge_to_room = 307;
 	}
 
-	if (player_parse(13, 44, 0))
+	if (player_parse(words_walk_to, words_room_322, 0))
 		player.walk_off_edge_to_room = 322;
 }
 
@@ -776,7 +777,7 @@ static void room_301_parser() {
 		return;
 	}
 
-	if (player_parse(114, 83, 0)) {
+	if (player_parse(words_look_at, words_dandelion, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -785,7 +786,7 @@ static void room_301_parser() {
 		return;
 	}
 
-	if (player_parse(114, 146, 0)) {
+	if (player_parse(words_look_at, words_sunflower, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -794,7 +795,7 @@ static void room_301_parser() {
 		return;
 	}
 
-	if (player_parse(13, 35, 0)) {
+	if (player_parse(words_walk_to, words_room_302, 0)) {
 		new_room = 302;
 		player.command_ready = 0;
 		return;
@@ -805,7 +806,7 @@ static void room_301_parser() {
 		return;
 	}
 
-	if (player_parse(126, 163, 0)) {
+	if (player_parse(words_pick_up, words_web, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
@@ -819,7 +820,7 @@ static void room_301_parser() {
 		return;
 	}
 
-	if (player_parse(126, 101, 0)) {
+	if (player_parse(words_pick_up, words_forked_stick, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
diff --git a/engines/mads/madsv2/forest/rooms/room302.cpp b/engines/mads/madsv2/forest/rooms/room302.cpp
index 7bc318ae7a3..357ddd86965 100644
--- a/engines/mads/madsv2/forest/rooms/room302.cpp
+++ b/engines/mads/madsv2/forest/rooms/room302.cpp
@@ -831,10 +831,10 @@ static void room_302_daemon() {
 }
 
 static void room_302_pre_parser() {
-	if (player_parse(13, 34, 0))
+	if (player_parse(words_walk_to, words_room_301, 0))
 		player.walk_off_edge_to_room = 301;
 
-	if (player_parse(13, 36, 0)) {
+	if (player_parse(words_walk_to, words_room_303, 0)) {
 		if (global[g064])
 			player.walk_off_edge_to_room = 321;
 		else
@@ -850,13 +850,13 @@ static void room_302_parser() {
 		return;
 	}
 
-	if (player_parse(13, 37, 0)) {
+	if (player_parse(words_walk_to, words_room_304, 0)) {
 		new_room = 304;
 		player.command_ready = 0;
 		return;
 	}
 
-	if (player_parse(13, 27, 0)) {
+	if (player_parse(words_walk_to, words_room_210, 0)) {
 		global[g135] = -1;
 		scratch._8c = 7;
 		player.command_ready = 0;
@@ -868,7 +868,7 @@ static void room_302_parser() {
 		return;
 	}
 
-	if (player_parse(114, 150, 0)) {
+	if (player_parse(words_look_at, words_thistle, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -879,7 +879,7 @@ static void room_302_parser() {
 		return;
 	}
 
-	if (player_parse(114, 82, 0)) {
+	if (player_parse(words_look_at, words_comfrey, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -890,7 +890,7 @@ static void room_302_parser() {
 		return;
 	}
 
-	if (player_parse(126, 137, 0)) {
+	if (player_parse(words_pick_up, words_rubber_band, 0)) {
 		global[g154] = 2;
 		global[player_score] = 0;
 		player.commands_allowed = 0;
@@ -905,7 +905,7 @@ static void room_302_parser() {
 		return;
 	}
 
-	if (player_parse(78, 173, 0)) {
+	if (player_parse(words_click_on, words_grass, 0)) {
 		global[g154] = 2;
 		global[player_score] = 0;
 		player.commands_allowed = 0;
@@ -920,7 +920,7 @@ static void room_302_parser() {
 		return;
 	}
 
-	if (player_parse(78, 75, 0)) {
+	if (player_parse(words_click_on, words_bush, 0)) {
 		global[player_score] = 0;
 		player.commands_allowed = 0;
 		global[g135] = -1;
diff --git a/engines/mads/madsv2/forest/rooms/room303.cpp b/engines/mads/madsv2/forest/rooms/room303.cpp
index d9cb17e1000..4a3fb29764e 100644
--- a/engines/mads/madsv2/forest/rooms/room303.cpp
+++ b/engines/mads/madsv2/forest/rooms/room303.cpp
@@ -826,7 +826,7 @@ static void room_303_daemon() {
 }
 
 static void room_303_pre_parser() {
-	if (player_parse(13, 35, 0))
+	if (player_parse(words_walk_to, words_room_302, 0))
 		player.walk_off_edge_to_room = 302;
 }
 
@@ -838,7 +838,7 @@ static void room_303_parser() {
 		return;
 	}
 
-	if (player_parse(177, 0)) {
+	if (player_parse(words_nest, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -857,7 +857,7 @@ static void room_303_parser() {
 		return;
 	}
 
-	if (player_parse(114, 77, 0)) {
+	if (player_parse(words_look_at, words_chicory, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -868,7 +868,7 @@ static void room_303_parser() {
 		return;
 	}
 
-	if (player_parse(114, 103, 0)) {
+	if (player_parse(words_look_at, words_foxglove, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -879,7 +879,7 @@ static void room_303_parser() {
 		return;
 	}
 
-	if (player_parse(126, 132, 0)) {
+	if (player_parse(words_pick_up, words_reeds, 0)) {
 		global[g154] = 2;
 		global[player_score] = 0;
 		player.commands_allowed = 0;
@@ -894,7 +894,7 @@ static void room_303_parser() {
 		return;
 	}
 
-	if (player_parse(126, 125, 0)) {
+	if (player_parse(words_pick_up, words_pebbles, 0)) {
 		global[g154] = 2;
 		global[player_score] = 0;
 		player.commands_allowed = 0;
@@ -909,7 +909,7 @@ static void room_303_parser() {
 		return;
 	}
 
-	if (player_parse(78, 119, 0)) {
+	if (player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room304.cpp b/engines/mads/madsv2/forest/rooms/room304.cpp
index 85e6f4b94ab..25283da976b 100644
--- a/engines/mads/madsv2/forest/rooms/room304.cpp
+++ b/engines/mads/madsv2/forest/rooms/room304.cpp
@@ -539,7 +539,7 @@ static void room_304_daemon() {
 }
 
 static void room_304_pre_parser() {
-	if (player_parse(13, 35, 0))
+	if (player_parse(words_walk_to, words_room_302, 0))
 		player.walk_off_edge_to_room = 302;
 }
 
@@ -563,7 +563,7 @@ static void room_304_parser() {
 		return;
 	}
 
-	if (player_parse(78, 178, 0)) {
+	if (player_parse(words_click_on, words_paint_can, 0)) {
 		player.commands_allowed = 0;
 		global[g150] = -1;
 		scratch._90 = 3;
@@ -571,7 +571,7 @@ static void room_304_parser() {
 		return;
 	}
 
-	if (player_parse(78, 179, 0)) {
+	if (player_parse(words_click_on, words_dam, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 2;
diff --git a/engines/mads/madsv2/forest/rooms/room305.cpp b/engines/mads/madsv2/forest/rooms/room305.cpp
index 62ddb684b67..7ca77fb3bc8 100644
--- a/engines/mads/madsv2/forest/rooms/room305.cpp
+++ b/engines/mads/madsv2/forest/rooms/room305.cpp
@@ -1045,10 +1045,10 @@ static void room_305_daemon() {
 }
 
 static void room_305_pre_parser() {
-	if (player_parse(13, 34, 0))
+	if (player_parse(words_walk_to, words_room_301, 0))
 		player.walk_off_edge_to_room = 301;
 
-	if (player_parse(13, 39, 0))
+	if (player_parse(words_walk_to, words_room_306, 0))
 		player.walk_off_edge_to_room = 306;
 }
 
@@ -1059,7 +1059,7 @@ static void room_305_parser() {
 		goto handled;
 	}
 
-	if (player_parse(28, 0)) {
+	if (player_parse(words_room_210h, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -1074,7 +1074,7 @@ static void room_305_parser() {
 		goto handled;
 	}
 
-	if (player_parse(27, 0)) {
+	if (player_parse(words_room_210, 0)) {
 		scratch._8c = 3;
 		global[g135] = -1;
 		player.commands_allowed = 0;
@@ -1085,7 +1085,7 @@ static void room_305_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 118, 0)) {
+	if (player_parse(words_look_at, words_mint, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -1095,7 +1095,7 @@ static void room_305_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 142, 0)) {
+	if (player_parse(words_look_at, words_snapdragon, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -1105,7 +1105,7 @@ static void room_305_parser() {
 		goto handled;
 	}
 
-	if (player_parse(126, 145, 0)) {
+	if (player_parse(words_pick_up, words_sticks, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		global[g154] = 2;
@@ -1122,7 +1122,7 @@ static void room_305_parser() {
 		goto handled;
 	}
 
-	if (player_parse(78, 119, 0)) {
+	if (player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room306.cpp b/engines/mads/madsv2/forest/rooms/room306.cpp
index f972be09496..a758de83bf6 100644
--- a/engines/mads/madsv2/forest/rooms/room306.cpp
+++ b/engines/mads/madsv2/forest/rooms/room306.cpp
@@ -952,7 +952,7 @@ static void room_306_daemon() {
 }
 
 static void room_306_pre_parser() {
-	if (player_parse(13, 38, 0))
+	if (player_parse(words_walk_to, words_room_305, 0))
 		player.walk_off_edge_to_room = 305;
 }
 
@@ -963,7 +963,7 @@ static void room_306_parser() {
 		goto handled;
 	}
 
-	if (player_parse(180, 0)) {
+	if (player_parse(words_brown, 0)) {
 		aainfo[2]._val3 = 15;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
@@ -981,7 +981,7 @@ static void room_306_parser() {
 		goto handled;
 	}
 
-	if (player_parse(133, 0)) {
+	if (player_parse(words_river, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		goto handled;
diff --git a/engines/mads/madsv2/forest/rooms/room307.cpp b/engines/mads/madsv2/forest/rooms/room307.cpp
index 6b20f83d331..01a5918f0fc 100644
--- a/engines/mads/madsv2/forest/rooms/room307.cpp
+++ b/engines/mads/madsv2/forest/rooms/room307.cpp
@@ -849,10 +849,10 @@ static void room_307_daemon() {
 }
 
 static void room_307_pre_parser() {
-	if (player_parse(13, 34, 0))
+	if (player_parse(words_walk_to, words_room_301, 0))
 		player.walk_off_edge_to_room = 301;
 
-	if (player_parse(104, 0)) {
+	if (player_parse(words_frog, 0)) {
 		switch (kernel.trigger) {
 		case 0:
 			scratch._b0 = -1;
@@ -866,7 +866,7 @@ static void room_307_pre_parser() {
 		}
 	}
 
-	if (player_parse(41, 0)) {
+	if (player_parse(words_room_308, 0)) {
 		player_walk(96, 120, 3);
 		global[g017] = 0;
 	}
@@ -879,7 +879,7 @@ static void room_307_parser() {
 		goto handled;
 	}
 
-	if (player_parse(113, 0)) {
+	if (player_parse(words_lily_pad, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -892,7 +892,7 @@ static void room_307_parser() {
 		goto handled;
 	}
 
-	if (player_parse(28, 0)) {
+	if (player_parse(words_room_210h, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -908,13 +908,13 @@ static void room_307_parser() {
 		goto handled;
 	}
 
-	if (player_parse(27, 0)) {
+	if (player_parse(words_room_210, 0)) {
 		global[g150] = -1;
 		scratch._a2 = 1;
 		goto handled;
 	}
 
-	if (player_parse(41, 0)) {
+	if (player_parse(words_room_308, 0)) {
 		global[g150] = -1;
 		player.commands_allowed = 0;
 		scratch._a2 = 2;
diff --git a/engines/mads/madsv2/forest/rooms/room308.cpp b/engines/mads/madsv2/forest/rooms/room308.cpp
index d39e91e2435..1f10d3001c0 100644
--- a/engines/mads/madsv2/forest/rooms/room308.cpp
+++ b/engines/mads/madsv2/forest/rooms/room308.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mads/madsv2/forest/rooms/section3.h"
+#include "mads/madsv2/forest/mads/words.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/extra.h"
 #include "mads/madsv2/forest/global.h"
@@ -1286,14 +1287,14 @@ static void room_308_daemon() {
 }
 
 static void room_308_pre_parser() {
-	if (player_parse(13, 40, 0)) {
+	if (player_parse(words_walk_to, words_room_307, 0)) {
 		if (global[g064] != 0)
 			player.walk_off_edge_to_room = 322;
 		else
 			player.walk_off_edge_to_room = 307;
 	}
 
-	if (player_parse(13, 46, 0))
+	if (player_parse(words_walk_to, words_room_401, 0))
 		player.walk_off_edge_to_room = 401;
 }
 
@@ -1307,13 +1308,13 @@ static void room_308_parser() {
 		goto handled;
 	}
 
-	if (player_parse(189, 0)) {
+	if (player_parse(words_tail, 0)) {
 		scratch._bc = -1;
 		player.commands_allowed = 0;
 		goto handled;
 	}
 
-	if (player_parse(170, 0)) {
+	if (player_parse(words_russel, 0)) {
 		scratch._be = -1;
 		player.commands_allowed = 0;
 		goto handled;
diff --git a/engines/mads/madsv2/forest/rooms/room321.cpp b/engines/mads/madsv2/forest/rooms/room321.cpp
index d015400d3c6..1f3f0234b56 100644
--- a/engines/mads/madsv2/forest/rooms/room321.cpp
+++ b/engines/mads/madsv2/forest/rooms/room321.cpp
@@ -762,7 +762,7 @@ static void room_321_daemon() {
 }
 
 static void room_321_pre_parser() {
-	if (player_parse(13, 35, 0))
+	if (player_parse(words_walk_to, words_room_302, 0))
 		player.walk_off_edge_to_room = 302;
 }
 
@@ -778,7 +778,7 @@ static void room_321_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 77, 0)) {
+	if (player_parse(words_look_at, words_chicory, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -788,7 +788,7 @@ static void room_321_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 103, 0)) {
+	if (player_parse(words_look_at, words_foxglove, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -798,7 +798,7 @@ static void room_321_parser() {
 		goto handled;
 	}
 
-	if (player_parse(126, 132, 0)) {
+	if (player_parse(words_pick_up, words_reeds, 0)) {
 		global[g154] = 2;
 		global[player_score] = 0;
 		player.commands_allowed = 0;
@@ -812,7 +812,7 @@ static void room_321_parser() {
 		goto handled;
 	}
 
-	if (player_parse(126, 125, 0)) {
+	if (player_parse(words_pick_up, words_pebbles, 0)) {
 		global[g154] = 2;
 		global[player_score] = 0;
 		player.commands_allowed = 0;
@@ -826,33 +826,33 @@ static void room_321_parser() {
 		goto handled;
 	}
 
-	if (player_parse(78, 181, 0)) {
+	if (player_parse(words_click_on, words_turtle, 0)) {
 		aainfo[8]._frame = 1;
 		kernel_reset_animation(aa[8], 1);
 		player.commands_allowed = 0;
 		goto handled;
 	}
 
-	if (player_parse(78, 182, 0)) {
+	if (player_parse(words_click_on, words_dragonfly, 0)) {
 		aainfo[7]._frame = 5;
 		kernel_reset_animation(aa[7], 5);
 		goto handled;
 	}
 
-	if (player_parse(78, 177, 0)) {
+	if (player_parse(words_click_on, words_nest, 0)) {
 		aainfo[5]._frame = 1;
 		kernel_reset_animation(aa[5], 1);
 		player.commands_allowed = 0;
 		goto handled;
 	}
 
-	if (player_parse(78, 185, 0)) {
+	if (player_parse(words_click_on, words_black_bird, 0)) {
 		aainfo[4]._frame = 5;
 		kernel_reset_animation(aa[4], 5);
 		goto handled;
 	}
 
-	if (player_parse(78, 184, 0)) {
+	if (player_parse(words_click_on, words_blue_bird, 0)) {
 		aainfo[4]._frame = 12;
 		kernel_reset_animation(aa[4], 12);
 		goto handled;
diff --git a/engines/mads/madsv2/forest/rooms/room322.cpp b/engines/mads/madsv2/forest/rooms/room322.cpp
index b69eaa0fb0b..a569b91580e 100644
--- a/engines/mads/madsv2/forest/rooms/room322.cpp
+++ b/engines/mads/madsv2/forest/rooms/room322.cpp
@@ -706,10 +706,10 @@ static void room_322_daemon() {
 }
 
 static void room_322_pre_parser() {
-	if (player_parse(34, 0))
+	if (player_parse(words_room_301, 0))
 		player_walk(21, 101, 4);
 
-	if (player_parse(41, 0)) {
+	if (player_parse(words_room_308, 0)) {
 		player_walk(96, 120, 3);
 		global[g017] = 0;
 	}
@@ -723,7 +723,7 @@ static void room_322_parser() {
 		return;
 	}
 
-	if (player_parse(34, 0)) {
+	if (player_parse(words_room_301, 0)) {
 		global[g150] = -1;
 		scratch._ac = 3;
 		player.commands_allowed = 0;
@@ -731,7 +731,7 @@ static void room_322_parser() {
 		return;
 	}
 
-	if (player_parse(113, 0)) {
+	if (player_parse(words_lily_pad, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -745,7 +745,7 @@ static void room_322_parser() {
 		return;
 	}
 
-	if (player_parse(28, 0)) {
+	if (player_parse(words_room_210h, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -762,7 +762,7 @@ static void room_322_parser() {
 		return;
 	}
 
-	if (player_parse(27, 0)) {
+	if (player_parse(words_room_210, 0)) {
 		global[g150] = -1;
 		scratch._ac = 1;
 		player.commands_allowed = 0;
@@ -770,7 +770,7 @@ static void room_322_parser() {
 		return;
 	}
 
-	if (player_parse(41, 0)) {
+	if (player_parse(words_room_308, 0)) {
 		global[g150] = -1;
 		player.commands_allowed = 0;
 		scratch._ac = 2;
diff --git a/engines/mads/madsv2/forest/rooms/room401.cpp b/engines/mads/madsv2/forest/rooms/room401.cpp
index 83dbfcaae74..f736ed99f74 100644
--- a/engines/mads/madsv2/forest/rooms/room401.cpp
+++ b/engines/mads/madsv2/forest/rooms/room401.cpp
@@ -601,10 +601,10 @@ static void room_401_daemon() {
 }
 
 static void room_401_pre_parser() {
-	if (player_parse(13, 47, 0))
+	if (player_parse(words_walk_to, words_room_402, 0))
 		player.walk_off_edge_to_room = 402;
 
-	if (player_parse(13, 49, 0))
+	if (player_parse(words_walk_to, words_room_404, 0))
 		player.walk_off_edge_to_room = 404;
 }
 
@@ -617,7 +617,7 @@ static void room_401_parser() {
 		return;
 	}
 
-	if (player_parse(13, 41, 0)) {
+	if (player_parse(words_walk_to, words_room_308, 0)) {
 		global[g150] = -1;
 		scratch._90 = 16;
 		player.commands_allowed = 0;
@@ -630,7 +630,7 @@ static void room_401_parser() {
 		return;
 	}
 
-	if (player_parse(114, 150, 0)) {
+	if (player_parse(words_look_at, words_thistle, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 20;
diff --git a/engines/mads/madsv2/forest/rooms/room402.cpp b/engines/mads/madsv2/forest/rooms/room402.cpp
index 6c76b58cf1d..376c1c97a8d 100644
--- a/engines/mads/madsv2/forest/rooms/room402.cpp
+++ b/engines/mads/madsv2/forest/rooms/room402.cpp
@@ -762,7 +762,7 @@ static void room_402_daemon() {
 
 static void room_402_pre_parser() {
 	if (global[g083] == 0) {
-		if (player_parse(13, 186, 0)) {
+		if (player_parse(words_walk_to, words_lever, 0)) {
 			player.need_to_walk = 0;
 			return;
 		}
@@ -776,14 +776,14 @@ static void room_402_pre_parser() {
 		return;
 	}
 
-	if (player_parse(13, 46, 0)) {
+	if (player_parse(words_walk_to, words_room_401, 0)) {
 		if (global[g080] == 0 || flags[31] != 0)
 			player.walk_off_edge_to_room = 401;
 		else
 			player.walk_off_edge_to_room = 420;
 	}
 
-	if (player_parse(13, 48, 0))
+	if (player_parse(words_walk_to, words_room_403, 0))
 		player.walk_off_edge_to_room = 403;
 }
 
@@ -811,7 +811,7 @@ static void room_402_parser() {
 	}
 
 	if (global[g083] == 0) {
-		if (player_parse(13, 186, 0)) {
+		if (player_parse(words_walk_to, words_lever, 0)) {
 			player.commands_allowed = 0;
 			aainfo[1]._frame = 4;
 			kernel_reset_animation(aa[1], 4);
@@ -824,7 +824,7 @@ static void room_402_parser() {
 	}
 
 	if (global[g083] == 2) {
-		if (player_parse(78, 187, 0)) {
+		if (player_parse(words_click_on, words_rock, 0)) {
 			player.commands_allowed = 0;
 			scratch._90 = 17;
 		}
diff --git a/engines/mads/madsv2/forest/rooms/room403.cpp b/engines/mads/madsv2/forest/rooms/room403.cpp
index 39783f01b3e..aa090828af5 100644
--- a/engines/mads/madsv2/forest/rooms/room403.cpp
+++ b/engines/mads/madsv2/forest/rooms/room403.cpp
@@ -696,7 +696,7 @@ static void room_403_daemon() {
 }
 
 static void room_403_pre_parser() {
-	if (player_parse(13, 47, 0))
+	if (player_parse(words_walk_to, words_room_402, 0))
 		player.walk_off_edge_to_room = 402;
 }
 
@@ -713,7 +713,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(114, 142, 0)) {
+	if (player_parse(words_look_at, words_snapdragon, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -722,7 +722,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(114, 83, 0)) {
+	if (player_parse(words_look_at, words_dandelion, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -731,7 +731,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(114, 131, 0)) {
+	if (player_parse(words_look_at, words_primrose, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -740,7 +740,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(114, 146, 0)) {
+	if (player_parse(words_look_at, words_sunflower, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 5;
@@ -749,7 +749,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
@@ -757,7 +757,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(126, 166, 0)) {
+	if (player_parse(words_pick_up, words_wrench, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -773,7 +773,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(126, 95, 0)) {
+	if (player_parse(words_pick_up, words_eyebright, 0)) {
 		global[g154] = 2;
 		player.walker_visible = false;
 		player.commands_allowed = 0;
@@ -789,7 +789,7 @@ static void room_403_parser() {
 		return;
 	}
 
-	if (player_parse(126, 99, 0) || player_parse(78, 119, 0)) {
+	if (player_parse(words_pick_up, words_flowers, 0) || player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
diff --git a/engines/mads/madsv2/forest/rooms/room404.cpp b/engines/mads/madsv2/forest/rooms/room404.cpp
index 04a182bd965..471ef1fcdd5 100644
--- a/engines/mads/madsv2/forest/rooms/room404.cpp
+++ b/engines/mads/madsv2/forest/rooms/room404.cpp
@@ -808,7 +808,7 @@ static void room_404_daemon() {
 }
 
 static void room_404_pre_parser() {
-	if (player_parse(13, 46, 0)) {
+	if (player_parse(words_walk_to, words_room_401, 0)) {
 		global[g084] = 15;
 		player.walk_off_edge_to_room = 401;
 	}
@@ -836,7 +836,7 @@ static void room_404_parser() {
 		return;
 	}
 
-	if (player_parse(13, 50, 0)) {
+	if (player_parse(words_walk_to, words_room_405, 0)) {
 		global[g084] = 15;
 		new_room = 405;
 		player.command_ready = false;
@@ -860,7 +860,7 @@ static void room_404_parser() {
 		return;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
@@ -868,7 +868,7 @@ static void room_404_parser() {
 		return;
 	}
 
-	if (player_parse(126, 99, 0)) {
+	if (player_parse(words_pick_up, words_flowers, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
@@ -876,7 +876,7 @@ static void room_404_parser() {
 		return;
 	}
 
-	if (player_parse(78, 107, 0)) {
+	if (player_parse(words_click_on, words_hole, 0)) {
 		if (!global[g082]) {
 			player.commands_allowed = 0;
 			global[g150] = -1;
@@ -890,7 +890,7 @@ static void room_404_parser() {
 		return;
 	}
 
-	if (player_parse(78, 175, 0)) {
+	if (player_parse(words_click_on, words_dragon1, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
@@ -906,7 +906,7 @@ static void room_404_parser() {
 		return;
 	}
 
-	if (player_parse(78, 176, 0)) {
+	if (player_parse(words_click_on, words_dragon2, 0)) {
 		global[g154] = 2;
 		player.commands_allowed = 0;
 		player.walker_visible = false;
diff --git a/engines/mads/madsv2/forest/rooms/room405.cpp b/engines/mads/madsv2/forest/rooms/room405.cpp
index fbeca6cf153..72bfc0409cb 100644
--- a/engines/mads/madsv2/forest/rooms/room405.cpp
+++ b/engines/mads/madsv2/forest/rooms/room405.cpp
@@ -453,7 +453,7 @@ static void room_405_daemon() {
 }
 
 static void room_405_pre_parser() {
-	if (player_parse(13, 55, 0))
+	if (player_parse(words_walk_to, words_room_501, 0))
 		player.walk_off_edge_to_room = 501;
 }
 
@@ -465,7 +465,7 @@ static void room_405_parser() {
 		return;
 	}
 
-	if (player_parse(13, 49, 0)) {
+	if (player_parse(words_walk_to, words_room_404, 0)) {
 		new_room = 404;
 		player.command_ready = false;
 		return;
@@ -476,7 +476,7 @@ static void room_405_parser() {
 		return;
 	}
 
-	if (player_parse(114, 116, 0)) {
+	if (player_parse(words_look_at, words_map, 0)) {
 		player.commands_allowed = 0;
 		global[g145] = -1;
 		scratch._8e = 2;
@@ -484,7 +484,7 @@ static void room_405_parser() {
 		return;
 	}
 
-	if (player_parse(126, 99, 0)) {
+	if (player_parse(words_pick_up, words_flowers, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;
@@ -492,7 +492,7 @@ static void room_405_parser() {
 		return;
 	}
 
-	if (player_parse(78, 175, 0)) {
+	if (player_parse(words_click_on, words_dragon1, 0)) {
 		player.commands_allowed = 0;
 		global[g150] = -1;
 		scratch._90 = 6;
diff --git a/engines/mads/madsv2/forest/rooms/room501.cpp b/engines/mads/madsv2/forest/rooms/room501.cpp
index de66e58e370..6236d219d07 100644
--- a/engines/mads/madsv2/forest/rooms/room501.cpp
+++ b/engines/mads/madsv2/forest/rooms/room501.cpp
@@ -539,7 +539,7 @@ static void room_501_daemon() {
 }
 
 static void room_501_pre_parser() {
-	if (player_parse(13, 50, 0))
+	if (player_parse(words_walk_to, words_room_405, 0))
 		player.walk_off_edge_to_room = 405;
 }
 
@@ -550,7 +550,7 @@ static void room_501_parser() {
 		goto handled;
 	}
 
-	if (player_parse(13, 57, 0)) {
+	if (player_parse(words_walk_to, words_room_503, 0)) {
 		new_room = 503;
 		goto handled;
 	}
@@ -559,7 +559,7 @@ static void room_501_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 142, 0)) {
+	if (player_parse(words_look_at, words_snapdragon, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -569,7 +569,7 @@ static void room_501_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 171, 0)) {
+	if (player_parse(words_look_at, words_snapdragon2, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -579,7 +579,7 @@ static void room_501_parser() {
 		goto handled;
 	}
 
-	if (player_parse(114, 131, 0)) {
+	if (player_parse(words_look_at, words_primrose, 0)) {
 		global[player_score] = 0;
 		digi_stop(3);
 		player.commands_allowed = 0;
@@ -589,7 +589,7 @@ static void room_501_parser() {
 		goto handled;
 	}
 
-	if (player_parse(126, 99, 0) || player_parse(78, 119, 0)) {
+	if (player_parse(words_pick_up, words_flowers, 0) || player_parse(words_click_on, words_moss, 0)) {
 		player.commands_allowed = 0;
 		global[g135] = -1;
 		scratch._8c = 3;


Commit: 3f14bd5851344dc0c68dbe9cc8a7b82942f9e2eb
    https://github.com/scummvm/scummvm/commit/3f14bd5851344dc0c68dbe9cc8a7b82942f9e2eb
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-25T20:19:21+10:00

Commit Message:
MADS: FOREST: Inventory cleanup

Changed paths:
    engines/mads/madsv2/forest/inventory.cpp


diff --git a/engines/mads/madsv2/forest/inventory.cpp b/engines/mads/madsv2/forest/inventory.cpp
index ade074dd552..82b0b5bce50 100644
--- a/engines/mads/madsv2/forest/inventory.cpp
+++ b/engines/mads/madsv2/forest/inventory.cpp
@@ -141,7 +141,7 @@ static void inven_set_interface_mode(int mode) {
 void display_inventory() {
 	int var_10 = 17;
 	int var_12 = 72;
-	int var_2  = -1;
+	int object_id  = -1;
 	int var_22 = -1;
 	int var_6  = 0;
 	int var_E  = 0;
@@ -240,7 +240,7 @@ void display_inventory() {
 			if (object[object_num].location == 2) {
 				var_E++;
 				if (var_E == var_4) {
-					var_2 = object_num;
+					object_id = object_num;
 					break;
 				}
 			}
@@ -255,8 +255,8 @@ void display_inventory() {
 		kernel_force_refresh();
 
 		// Determine usability based on object number and room
-		if (var_2 <= 15) {
-			switch (var_2) {
+		if (object_id <= 15) {
+			switch (object_id) {
 			case 0:
 				var_22 = (room_id == 521) ? 0 : -1;
 				break;
@@ -284,13 +284,13 @@ void display_inventory() {
 			}
 		}
 
-		if (object_check_quality(var_2, 0))
+		if (object_check_quality(object_id, 0))
 			var_22 = -1;
 
 		// Room 203: special quality-gated overrides
 		if (room_id == 203 && !global[g046]) {
-			if (var_2 == 8 || var_2 == 5) {
-				if (object_check_quality(var_2, 0))
+			if (object_id == 8 || object_id == 5) {
+				if (object_check_quality(object_id, 0))
 					var_22 = -1;
 				else
 					var_22 = 0;
@@ -309,8 +309,8 @@ void display_inventory() {
 
 		// Room 308
 		if (room_id == 308) {
-			if (var_2 == 1 || var_2 == 15 || var_2 == 5) {
-				if (object_check_quality(var_2, 0))
+			if (object_id == 1 || object_id == 15 || object_id == 5) {
+				if (object_check_quality(object_id, 0))
 					var_22 = -1;
 				else
 					var_22 = 0;
@@ -319,7 +319,7 @@ void display_inventory() {
 			}
 		}
 
-		if (var_2 == -1 || var_4 == -1 || var_22 != 0) {
+		if (object_id == -1 || var_4 == -1 || var_22 != 0) {
 			var_E = 0;
 			var_4 = 0;
 			continue;
@@ -332,13 +332,13 @@ void display_inventory() {
 			var_22 = -1;
 			break;
 		case 203:
-			if (var_2 != 5 && var_2 != 8) {
+			if (object_id != 5 && object_id != 8) {
 				digi_play_build(203, 'R', 5, 2);
 				var_22 = -1;
 			}
 			break;
 		case 308:
-			if (var_2 == 1 || var_2 == 15) {
+			if (object_id == 1 || object_id == 15) {
 				var_8 = 90;
 				digi_play_build(308, 'e', 4, 1);
 				var_1C_1A = timer_read();
@@ -346,7 +346,7 @@ void display_inventory() {
 				player.commands_allowed = 0;
 				mouse_cursor_sprite(cursor, 2);
 				continue;
-			} else if (var_2 == 5) {
+			} else if (object_id == 5) {
 				var_8 = 180;
 				digi_play_build(308, 'r', 2, 1);
 				var_1C_1A = timer_read();
@@ -381,9 +381,9 @@ exit_inventory:
 		var_6 = var_20;
 		close_journal(2);
 		knuthole_flag = true;
-		inter_spin_object(var_2);
-		inter_move_object(var_2, 2);
-		global[player_selected_object] = var_2;
+		inter_spin_object(object_id);
+		inter_move_object(object_id, 2);
+		global[player_selected_object] = object_id;
 
 		player_verb        = -1;
 		player_main_noun   = -1;


Commit: 158be46f4be46176a37dcddac98427da384756ae
    https://github.com/scummvm/scummvm/commit/158be46f4be46176a37dcddac98427da384756ae
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-25T20:19:22+10:00

Commit Message:
MADS: FOREST: Clarify param 2 of inter_move_object calls

Changed paths:
    engines/mads/madsv2/forest/inventory.cpp
    engines/mads/madsv2/forest/rooms/room106.cpp
    engines/mads/madsv2/forest/rooms/room201.cpp
    engines/mads/madsv2/forest/rooms/room204.cpp
    engines/mads/madsv2/forest/rooms/room301.cpp
    engines/mads/madsv2/forest/rooms/room302.cpp
    engines/mads/madsv2/forest/rooms/room303.cpp
    engines/mads/madsv2/forest/rooms/room305.cpp
    engines/mads/madsv2/forest/rooms/room307.cpp
    engines/mads/madsv2/forest/rooms/room308.cpp
    engines/mads/madsv2/forest/rooms/room321.cpp
    engines/mads/madsv2/forest/rooms/room322.cpp
    engines/mads/madsv2/forest/rooms/room403.cpp
    engines/mads/madsv2/forest/rooms/room404.cpp


diff --git a/engines/mads/madsv2/forest/inventory.cpp b/engines/mads/madsv2/forest/inventory.cpp
index 82b0b5bce50..0103ff30d8a 100644
--- a/engines/mads/madsv2/forest/inventory.cpp
+++ b/engines/mads/madsv2/forest/inventory.cpp
@@ -382,7 +382,7 @@ exit_inventory:
 		close_journal(2);
 		knuthole_flag = true;
 		inter_spin_object(object_id);
-		inter_move_object(object_id, 2);
+		inter_move_object(object_id, PLAYER);
 		global[player_selected_object] = object_id;
 
 		player_verb        = -1;
diff --git a/engines/mads/madsv2/forest/rooms/room106.cpp b/engines/mads/madsv2/forest/rooms/room106.cpp
index c7b8475ea3a..78866975842 100644
--- a/engines/mads/madsv2/forest/rooms/room106.cpp
+++ b/engines/mads/madsv2/forest/rooms/room106.cpp
@@ -634,7 +634,7 @@ static void room_106_daemon() {
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
 		kernel_flip_hotspot(125, 0);
-		inter_move_object(5, 2);
+		inter_move_object(5, PLAYER);
 		player.commands_allowed = -1;
 		break;
 	case 108:
diff --git a/engines/mads/madsv2/forest/rooms/room201.cpp b/engines/mads/madsv2/forest/rooms/room201.cpp
index c8f757ec789..9c12c600606 100644
--- a/engines/mads/madsv2/forest/rooms/room201.cpp
+++ b/engines/mads/madsv2/forest/rooms/room201.cpp
@@ -381,7 +381,7 @@ static void room_201_daemon() {
 		kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 		global[g133] = 0;
 		kernel_flip_hotspot(145, false);
-		inter_move_object(7, 2);
+		inter_move_object(7, PLAYER);
 		player.commands_allowed = -1;
 	} else if (trigger == 26) {
 		if (scratch._a8 == 1) {
@@ -469,7 +469,7 @@ static void room_201_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
 			kernel_flip_hotspot(93, false);
-			inter_move_object(12, 2);
+			inter_move_object(12, PLAYER);
 			player.commands_allowed = -1;
 		}
 	} else if (trigger == 7) {
diff --git a/engines/mads/madsv2/forest/rooms/room204.cpp b/engines/mads/madsv2/forest/rooms/room204.cpp
index 5fc56ad56f2..fab3c8d086a 100644
--- a/engines/mads/madsv2/forest/rooms/room204.cpp
+++ b/engines/mads/madsv2/forest/rooms/room204.cpp
@@ -520,7 +520,7 @@ trigger_103:
 	kernel_synch(3, scratch._9a, 4, 0);
 	global[g133] = 0;
 	kernel_flip_hotspot(158, -1);
-	inter_move_object(9, 2);
+	inter_move_object(9, PLAYER);
 	global[player_score] = -1;
 	player.commands_allowed = -1;
 
diff --git a/engines/mads/madsv2/forest/rooms/room301.cpp b/engines/mads/madsv2/forest/rooms/room301.cpp
index 318bb8db0a6..2237046a9f3 100644
--- a/engines/mads/madsv2/forest/rooms/room301.cpp
+++ b/engines/mads/madsv2/forest/rooms/room301.cpp
@@ -620,7 +620,7 @@ static void room_301_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
 			kernel_flip_hotspot(101, 0);
-			inter_move_object(15, 2);
+			inter_move_object(15, PLAYER);
 			global[player_score] = -1;
 			player.commands_allowed = -1;
 		} else if (scratch._a8 == 2) {
@@ -638,7 +638,7 @@ static void room_301_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
 			kernel_flip_hotspot(163, 0);
-			inter_move_object(10, 2);
+			inter_move_object(10, PLAYER);
 			global[player_score] = -1;
 			player.commands_allowed = -1;
 		}
diff --git a/engines/mads/madsv2/forest/rooms/room302.cpp b/engines/mads/madsv2/forest/rooms/room302.cpp
index 357ddd86965..47fa3c7adb0 100644
--- a/engines/mads/madsv2/forest/rooms/room302.cpp
+++ b/engines/mads/madsv2/forest/rooms/room302.cpp
@@ -753,7 +753,7 @@ static void room_302_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
 			kernel_flip_hotspot(137, 0);
-			inter_move_object(1, 2);
+			inter_move_object(1, PLAYER);
 			global[player_score] = -1;
 			player.commands_allowed = -1;
 		}
diff --git a/engines/mads/madsv2/forest/rooms/room303.cpp b/engines/mads/madsv2/forest/rooms/room303.cpp
index 4a3fb29764e..18cc993f1c7 100644
--- a/engines/mads/madsv2/forest/rooms/room303.cpp
+++ b/engines/mads/madsv2/forest/rooms/room303.cpp
@@ -631,7 +631,7 @@ static void room_303_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
 			kernel_flip_hotspot(132, 0);
-			inter_move_object(6, 2);
+			inter_move_object(6, PLAYER);
 			player.commands_allowed = -1;
 		} else if (scratch._a6 == 2) {
 			dont_frag_the_palette();
@@ -645,7 +645,7 @@ static void room_303_daemon() {
 			global[g133] = 0;
 			kernel_flip_hotspot(125, 0);
 			if (!player_has(5))
-				inter_move_object(5, 2);
+				inter_move_object(5, PLAYER);
 			global[g068] = -1;
 			player.commands_allowed = -1;
 		}
diff --git a/engines/mads/madsv2/forest/rooms/room305.cpp b/engines/mads/madsv2/forest/rooms/room305.cpp
index 7ca77fb3bc8..1b9a28dd887 100644
--- a/engines/mads/madsv2/forest/rooms/room305.cpp
+++ b/engines/mads/madsv2/forest/rooms/room305.cpp
@@ -934,7 +934,7 @@ static void room_305_daemon() {
 			global[g133] = 0;
 			kernel_flip_hotspot(145, false);
 			if (!player_has(7))
-				inter_move_object(7, 2);
+				inter_move_object(7, PLAYER);
 			global[g069] = -1;
 			global[player_score] = -1;
 			player.commands_allowed = -1;
diff --git a/engines/mads/madsv2/forest/rooms/room307.cpp b/engines/mads/madsv2/forest/rooms/room307.cpp
index 01a5918f0fc..d6087fe13cf 100644
--- a/engines/mads/madsv2/forest/rooms/room307.cpp
+++ b/engines/mads/madsv2/forest/rooms/room307.cpp
@@ -197,13 +197,13 @@ static void room_307_anim3() {
 			int16 old = seq[1];
 			kernel_seq_delete(seq[1]);
 			kernel_synch(KERNEL_SERIES, old, KERNEL_ANIM, aa[2]);
-			inter_move_object(14, 2);
+			inter_move_object(14, PLAYER);
 			break;
 		}
 		case 22: {
 			int16 old = seq[0];
 			kernel_seq_delete(seq[0]);
-			inter_move_object(4, 2);
+			inter_move_object(4, PLAYER);
 			kernel_synch(KERNEL_SERIES, old, KERNEL_ANIM, aa[2]);
 			kernel_flip_hotspot(113, 0);
 			break;
@@ -783,8 +783,8 @@ static void room_307_daemon() {
 			kernel_synch(KERNEL_ANIM, aa[8], KERNEL_PLAYER, 0);
 		} else {
 			kernel_synch(KERNEL_ANIM, aa[9], KERNEL_NOW, 0);
-			inter_move_object(14, 2);
-			inter_move_object(4, 2);
+			inter_move_object(14, PLAYER);
+			inter_move_object(4, PLAYER);
 		}
 		break;
 	}
diff --git a/engines/mads/madsv2/forest/rooms/room308.cpp b/engines/mads/madsv2/forest/rooms/room308.cpp
index 1f10d3001c0..f34a61db327 100644
--- a/engines/mads/madsv2/forest/rooms/room308.cpp
+++ b/engines/mads/madsv2/forest/rooms/room308.cpp
@@ -867,10 +867,10 @@ static void room_308_anim22() {
 		object_set_quality(5, -1, -1);
 		object_set_quality(1, -1, -1);
 		object_set_quality(15, -1, -1);
-		inter_move_object(1, 1);
-		inter_move_object(15, 1);
-		inter_move_object(4, 2);
-		inter_move_object(14, 2);
+		inter_move_object(1, NOWHERE);
+		inter_move_object(15, NOWHERE);
+		inter_move_object(4, PLAYER);
+		inter_move_object(14, PLAYER);
 		global[player_score] = -1;
 		new_room = 401;
 	}
@@ -894,8 +894,8 @@ static void room_308_anim23() {
 		object_set_quality(5, -1, -1);
 		object_set_quality(1, -1, -1);
 		object_set_quality(15, -1, -1);
-		inter_move_object(4, 2);
-		inter_move_object(14, 2);
+		inter_move_object(4, PLAYER);
+		inter_move_object(14, PLAYER);
 		global[player_score] = -1;
 		if (global[g064] != 0)
 			new_room = 322;
@@ -950,15 +950,15 @@ static void room_308_anim25() {
 		object_set_quality(5, -1, -1);
 		object_set_quality(1, -1, -1);
 		object_set_quality(15, -1, -1);
-		inter_move_object(1, 1);
-		inter_move_object(15, 1);
+		inter_move_object(1, NOWHERE);
+		inter_move_object(15, NOWHERE);
 		kernel_timing_trigger(140, 112);
 	}
 }
 
 static void room_308_init() {
-	inter_move_object(4, 1);
-	inter_move_object(14, 1);
+	inter_move_object(4, NOWHERE);
+	inter_move_object(14, NOWHERE);
 
 	if (!player_has_been_in_room(401)) {
 		if (previous_room == 307 || previous_room == 322) {
@@ -1209,8 +1209,8 @@ static void room_308_daemon() {
 		object_set_quality(5, -1, -1);
 		object_set_quality(1, -1, -1);
 		object_set_quality(15, -1, -1);
-		inter_move_object(4, 2);
-		inter_move_object(14, 2);
+		inter_move_object(4, PLAYER);
+		inter_move_object(14, PLAYER);
 		global[player_score] = -1;
 		if (global[g064] != 0)
 			new_room = 322;
@@ -1250,8 +1250,8 @@ static void room_308_daemon() {
 		break;
 
 	case 112:
-		inter_move_object(4, 2);
-		inter_move_object(14, 2);
+		inter_move_object(4, PLAYER);
+		inter_move_object(14, PLAYER);
 		global[player_score] = -1;
 		new_room = 401;
 		break;
diff --git a/engines/mads/madsv2/forest/rooms/room321.cpp b/engines/mads/madsv2/forest/rooms/room321.cpp
index 1f3f0234b56..243274a5fd8 100644
--- a/engines/mads/madsv2/forest/rooms/room321.cpp
+++ b/engines/mads/madsv2/forest/rooms/room321.cpp
@@ -710,7 +710,7 @@ static void room_321_daemon() {
 			global[g133] = 0;
 			room_321_anim2();
 			kernel_flip_hotspot(132, 0);
-			inter_move_object(6, 2);
+			inter_move_object(6, PLAYER);
 			global[player_score] = -1;
 			player.commands_allowed = -1;
 		} else if (scratch._a6 == 2) {
@@ -726,7 +726,7 @@ static void room_321_daemon() {
 			room_321_anim2();
 			kernel_flip_hotspot(125, 0);
 			if (!player_has(5))
-				inter_move_object(5, 2);
+				inter_move_object(5, PLAYER);
 			global[g068] = -1;
 			global[player_score] = -1;
 			player.commands_allowed = -1;
diff --git a/engines/mads/madsv2/forest/rooms/room322.cpp b/engines/mads/madsv2/forest/rooms/room322.cpp
index a569b91580e..3d6e8997863 100644
--- a/engines/mads/madsv2/forest/rooms/room322.cpp
+++ b/engines/mads/madsv2/forest/rooms/room322.cpp
@@ -188,11 +188,11 @@ static void room_322_anim2() {
 				seq_handle = seq[1];
 				kernel_seq_delete(seq_handle);
 				kernel_synch(KERNEL_SERIES, seq_handle, KERNEL_ANIM, aa[2]);
-				inter_move_object(14, 2);
+				inter_move_object(14, PLAYER);
 			} else if (cur == 22) {
 				seq_handle = seq[0];
 				kernel_seq_delete(seq_handle);
-				inter_move_object(4, 2);
+				inter_move_object(4, PLAYER);
 				kernel_synch(KERNEL_SERIES, seq_handle, KERNEL_ANIM, aa[2]);
 				kernel_flip_hotspot(113, 0);
 			} else if (cur == 28) {
@@ -576,8 +576,8 @@ static void room_322_daemon() {
 			kernel_synch(KERNEL_ANIM, aa[8], KERNEL_NOW, 0);
 		} else {
 			kernel_synch(KERNEL_ANIM, aa[9], KERNEL_NOW, 0);
-			inter_move_object(14, 2);
-			inter_move_object(4, 2);
+			inter_move_object(14, PLAYER);
+			inter_move_object(4, PLAYER);
 		}
 		break;
 	}
diff --git a/engines/mads/madsv2/forest/rooms/room403.cpp b/engines/mads/madsv2/forest/rooms/room403.cpp
index aa090828af5..b0e840361bf 100644
--- a/engines/mads/madsv2/forest/rooms/room403.cpp
+++ b/engines/mads/madsv2/forest/rooms/room403.cpp
@@ -621,7 +621,7 @@ static void room_403_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
 			kernel_flip_hotspot(166, 0);
-			inter_move_object(13, 2);
+			inter_move_object(13, PLAYER);
 			display_interface();
 			player.commands_allowed = -1;
 			if (config_file.forest1 != 0)
diff --git a/engines/mads/madsv2/forest/rooms/room404.cpp b/engines/mads/madsv2/forest/rooms/room404.cpp
index 471ef1fcdd5..f867583e041 100644
--- a/engines/mads/madsv2/forest/rooms/room404.cpp
+++ b/engines/mads/madsv2/forest/rooms/room404.cpp
@@ -710,7 +710,7 @@ static void room_404_daemon() {
 			global[g081] = -1;
 			kernel_flip_hotspot(107, 0);
 			object_set_quality(13, 0, 0L);
-			inter_move_object(13, 1);
+			inter_move_object(13, NOWHERE);
 			display_interface();
 			if (global[walker_converse_state]) {
 				global[walker_converse_state] = 0;


Commit: 5f6d5e8475eba05bac4e7b17cf66ad97846a640b
    https://github.com/scummvm/scummvm/commit/5f6d5e8475eba05bac4e7b17cf66ad97846a640b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-25T20:19:22+10:00

Commit Message:
MADS: FOREST: Add pebble to inventory list

Changed paths:
    engines/mads/madsv2/forest/mads/inventory.h
    engines/mads/madsv2/forest/rooms/room303.cpp
    engines/mads/madsv2/forest/rooms/room321.cpp


diff --git a/engines/mads/madsv2/forest/mads/inventory.h b/engines/mads/madsv2/forest/mads/inventory.h
index 4e442c7c034..be15aa5b04b 100644
--- a/engines/mads/madsv2/forest/mads/inventory.h
+++ b/engines/mads/madsv2/forest/mads/inventory.h
@@ -30,6 +30,7 @@ namespace Forest {
 
 enum {
 	cogs           =  0,
+	pebbles        =  5,
 	twine          =  8,
 	planks         = 11
 };
diff --git a/engines/mads/madsv2/forest/rooms/room303.cpp b/engines/mads/madsv2/forest/rooms/room303.cpp
index 18cc993f1c7..58e66c04967 100644
--- a/engines/mads/madsv2/forest/rooms/room303.cpp
+++ b/engines/mads/madsv2/forest/rooms/room303.cpp
@@ -644,8 +644,8 @@ static void room_303_daemon() {
 			kernel_synch(KERNEL_ANIM, scratch._9a, KERNEL_NOW, 0);
 			global[g133] = 0;
 			kernel_flip_hotspot(125, 0);
-			if (!player_has(5))
-				inter_move_object(5, PLAYER);
+			if (!player_has(pebbles))
+				inter_move_object(pebbles, PLAYER);
 			global[g068] = -1;
 			player.commands_allowed = -1;
 		}
diff --git a/engines/mads/madsv2/forest/rooms/room321.cpp b/engines/mads/madsv2/forest/rooms/room321.cpp
index 243274a5fd8..99823d318f2 100644
--- a/engines/mads/madsv2/forest/rooms/room321.cpp
+++ b/engines/mads/madsv2/forest/rooms/room321.cpp
@@ -726,7 +726,7 @@ static void room_321_daemon() {
 			room_321_anim2();
 			kernel_flip_hotspot(125, 0);
 			if (!player_has(5))
-				inter_move_object(5, PLAYER);
+				inter_move_object(pebbles, PLAYER);
 			global[g068] = -1;
 			global[player_score] = -1;
 			player.commands_allowed = -1;


Commit: 046fafc1f10cd111c7e33460384ae8a0346f4aac
    https://github.com/scummvm/scummvm/commit/046fafc1f10cd111c7e33460384ae8a0346f4aac
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2026-06-25T20:19:22+10:00

Commit Message:
MADS: FOREST: Add support for second distinct digi format

Changed paths:
    engines/mads/madsv2/forest/digi.cpp


diff --git a/engines/mads/madsv2/forest/digi.cpp b/engines/mads/madsv2/forest/digi.cpp
index 16c5f20e0fe..900a1632df1 100644
--- a/engines/mads/madsv2/forest/digi.cpp
+++ b/engines/mads/madsv2/forest/digi.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "audio/decoders/adpcm.h"
+#include "audio/decoders/raw.h"
 #include "mads/madsv2/forest/digi.h"
 #include "mads/madsv2/forest/forest.h"
 #include "mads/madsv2/core/env.h"
@@ -46,22 +47,28 @@ DigiPlayer::DigiPlayer(Audio::Mixer *mixer) : _mixer(mixer) {
 void DigiPlayer::play(const char *name, int slot) {
 	stop(slot);
 	DigiChannel &c = _channels[slot - 1];
-
+	Audio::AudioStream *audioStream;
 	Common::SeekableReadStream *src;
+
 	src = env_open(Common::String::format("*%s.rac", name).c_str());
-	if (!src)
-		src = env_open(Common::String::format("*%s.raw", name).c_str());
+	if (src) {
+		// Skip past the HMI header
+		src->seek(0x20);
 
-	if (!src) {
-		warning("Could not open digi sound - %s", name);
-		return;
-	}
+		audioStream = Audio::makeADPCMStream(src, DisposeAfterUse::YES,
+			src->size() - 0x20, Audio::kADPCMApple, 11025, 1);
 
-	// Skip past the HMI header
-	src->seek(0x20);
+	} else {
+		src = env_open(Common::String::format("*%s.raw", name).c_str());
+		if (src) {
+			// Raw audio
+			audioStream = Audio::makeRawStream(src, 11025, Audio::FLAG_UNSIGNED);
+		} else {
+			warning("Could not open digi sound - %s", name);
+			return;
+		}
+	}
 
-	Audio::AudioStream *audioStream = Audio::makeADPCMStream(src, DisposeAfterUse::YES,
-		src->size() - 0x20, Audio::kADPCMApple, 11025, 1);
 	_mixer->playStream(Audio::Mixer::kSpeechSoundType, &c._soundHandle, audioStream);
 	c._isPlaying = true;
 }




More information about the Scummvm-git-logs mailing list