From 68209044dd280c3522011284014e9a878459902b Mon Sep 17 00:00:00 2001
From: Yona-TYT <yonatan.el.amigo@gmail.com>
Date: Tue, 13 Jan 2026 23:10:32 -0400
Subject: [PATCH] Add set_followed method to convoy script API

---
 src/simutrans/script/api/api_convoy.cc              | 13 +++++++++++++
 .../script/api/squirrel_types_scenario.awk          |  2 ++
 2 files changed, 15 insertions(+)

diff --git a/src/simutrans/script/api/api_convoy.cc b/src/simutrans/script/api/api_convoy.cc
index ff0a58808..cf3222bfd 100644
--- a/src/simutrans/script/api/api_convoy.cc
+++ b/src/simutrans/script/api/api_convoy.cc
@@ -165,6 +165,14 @@ sint32 convoy_is_followed(convoi_t const *cnv)
 	return cnv ? world()->get_viewport()->get_follow_convoi().get_id() == cnv->self.get_id() : false;
 }
 
+sint32 convoy_set_followed(convoi_t const *cnv)
+{
+	if (cnv) {
+		world()->get_viewport()->set_follow_convoi(cnv->self);
+	}
+	return 0;
+}
+
 bool convoy_is_loading(convoi_t const *cnv)
 {
 	return cnv->get_state() == convoi_t::LOADING;
@@ -369,6 +377,11 @@ void export_convoy(HSQUIRRELVM vm)
 	 * @returns true if convoy is currently being followed
 	 */
 	register_method(vm, convoy_is_followed, "is_followed", true);
+	/**
+	 * Centers the camera on this convoy and follows it.
+	 * @ingroup game_cmd
+	 */
+	register_method(vm, convoy_set_followed, "set_followed", true);
 	/**
 	 * @returns true if convoy is currently loading or unloading at a stop
 	 */
diff --git a/src/simutrans/script/api/squirrel_types_scenario.awk b/src/simutrans/script/api/squirrel_types_scenario.awk
index 4c55b689b..b79acd2e0 100644
--- a/src/simutrans/script/api/squirrel_types_scenario.awk
+++ b/src/simutrans/script/api/squirrel_types_scenario.awk
@@ -65,6 +65,8 @@ BEGIN {
 	export_types_scenario["convoy_x::is_withdrawn"] = "bool()"
 	export_types_scenario["convoy_x::is_in_depot"] = "bool()"
 	export_types_scenario["convoy_x::is_waiting"] = "bool()"
+	export_types_scenario["convoy_x::is_followed"] = "bool()"
+	export_types_scenario["convoy_x::set_followed"] = "void()"
 	export_types_scenario["convoy_x::is_loading"] = "bool()"
 	export_types_scenario["convoy_x::destroy"] = "void(player_x)"
 	export_types_scenario["convoy_x::is_schedule_editor_open"] = "bool()"
-- 
2.52.0

