(svn r11120) -Codechange: remove the arbitrary limit of 10 articulated parts for a vehicle.
authorrubidium
Sun, 16 Sep 2007 20:48:00 +0000
changeset 8089 a172d415e963
parent 8088 7c1a4dd586ae
child 8090 454ea60f6414
(svn r11120) -Codechange: remove the arbitrary limit of 10 articulated parts for a vehicle.
src/articulated_vehicles.cpp
src/roadveh_cmd.cpp
src/train_cmd.cpp
--- a/src/articulated_vehicles.cpp	Sun Sep 16 18:10:52 2007 +0000
+++ b/src/articulated_vehicles.cpp	Sun Sep 16 20:48:00 2007 +0000
@@ -20,7 +20,7 @@
 	if (!HASBIT(EngInfo(engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return 0;
 
 	uint i;
-	for (i = 1; i < 10; i++) {
+	for (i = 1; i < MAX_UVALUE(EngineID); i++) {
 		uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine_type, NULL);
 		if (callback == CALLBACK_FAILED || callback == 0xFF) break;
 	}
@@ -35,7 +35,7 @@
 
 	if (!HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return;
 
-	for (uint i = 1; i < 10; i++) {
+	for (uint i = 1; i < MAX_UVALUE(EngineID); i++) {
 		uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, v->engine_type, v);
 		if (callback == CALLBACK_FAILED || callback == 0xFF) return;
 
--- a/src/roadveh_cmd.cpp	Sun Sep 16 18:10:52 2007 +0000
+++ b/src/roadveh_cmd.cpp	Sun Sep 16 20:48:00 2007 +0000
@@ -181,9 +181,9 @@
 
 	uint num_vehicles = 1 + CountArticulatedParts(p1);
 
-	/* Allow for the front and up to 10 articulated parts. */
-	Vehicle *vl[11];
-	memset(&vl, 0, sizeof(vl));
+	/* Allow for the front and the articulated parts. */
+	Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * num_vehicles);
+	memset(vl, 0, sizeof(*vl) * num_vehicles);
 
 	if (!Vehicle::AllocateList(vl, num_vehicles)) {
 		return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
--- a/src/train_cmd.cpp	Sun Sep 16 18:10:52 2007 +0000
+++ b/src/train_cmd.cpp	Sun Sep 16 20:48:00 2007 +0000
@@ -517,9 +517,9 @@
 	uint num_vehicles = 1 + CountArticulatedParts(engine);
 
 	if (!(flags & DC_QUERY_COST)) {
-		Vehicle *vl[11]; // Allow for wagon and upto 10 artic parts.
-
-		memset(&vl, 0, sizeof(vl));
+		/* Allow for the wagon and the articulated parts. */
+		Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * num_vehicles);
+		memset(vl, 0, sizeof(*vl) * num_vehicles);
 
 		if (!Vehicle::AllocateList(vl, num_vehicles))
 			return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
@@ -685,9 +685,9 @@
 		CountArticulatedParts(p1);
 
 	if (!(flags & DC_QUERY_COST)) {
-		Vehicle *vl[12]; // Allow for upto 10 artic parts and dual-heads
-
-		memset(&vl, 0, sizeof(vl));
+		/* Allow for the dual-heads and the articulated parts. */
+		Vehicle **vl = (Vehicle**)alloca(sizeof(*vl) * num_vehicles);
+		memset(vl, 0, sizeof(*vl) * num_vehicles);
 
 		if (!Vehicle::AllocateList(vl, num_vehicles))
 			return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);