(svn r12411) [NoAI] -Change [API CHANGE]: order of params of CargoIncome is changed noai
authortruebrain
Tue, 25 Mar 2008 12:12:45 +0000
branchnoai
changeset 9814 be51ea0adc29
parent 9813 9646f7e37c31
child 9815 efac4d882b25
(svn r12411) [NoAI] -Change [API CHANGE]: order of params of CargoIncome is changed
[NoAI] -Change [API CHANGE]: AIList.Valuate is changed; it now works on any normal function and removes the need for _valuator.[ch]pp.
Please check documentation how to alter your AI to work with this commit, or check the changes in regression.
bin/ai/regression/regression.nut
bin/ai/regression/regression.txt
projects/openttd_vs80.vcproj
projects/openttd_vs90.vcproj
source.list
src/ai/ai_squirrel.cpp
src/ai/api/ai_abstractlist.cpp
src/ai/api/ai_abstractlist.hpp
src/ai/api/ai_abstractlist.hpp.sq
src/ai/api/ai_base.cpp
src/ai/api/ai_base.hpp
src/ai/api/ai_base.hpp.sq
src/ai/api/ai_bridgelist_valuator.cpp
src/ai/api/ai_bridgelist_valuator.hpp
src/ai/api/ai_bridgelist_valuator.hpp.sq
src/ai/api/ai_cargo.cpp
src/ai/api/ai_cargo.hpp
src/ai/api/ai_cargolist_valuator.cpp
src/ai/api/ai_cargolist_valuator.hpp
src/ai/api/ai_cargolist_valuator.hpp.sq
src/ai/api/ai_enginelist_valuator.cpp
src/ai/api/ai_enginelist_valuator.hpp
src/ai/api/ai_enginelist_valuator.hpp.sq
src/ai/api/ai_industry.cpp
src/ai/api/ai_industry.hpp
src/ai/api/ai_industry.hpp.sq
src/ai/api/ai_industrylist_valuator.cpp
src/ai/api/ai_industrylist_valuator.hpp
src/ai/api/ai_industrylist_valuator.hpp.sq
src/ai/api/ai_list_valuator.cpp
src/ai/api/ai_list_valuator.hpp
src/ai/api/ai_list_valuator.hpp.sq
src/ai/api/ai_object.hpp
src/ai/api/ai_station.cpp
src/ai/api/ai_station.hpp
src/ai/api/ai_station.hpp.sq
src/ai/api/ai_stationlist_valuator.cpp
src/ai/api/ai_stationlist_valuator.hpp
src/ai/api/ai_stationlist_valuator.hpp.sq
src/ai/api/ai_tile.cpp
src/ai/api/ai_tile.hpp
src/ai/api/ai_tile.hpp.sq
src/ai/api/ai_tilelist_valuator.cpp
src/ai/api/ai_tilelist_valuator.hpp
src/ai/api/ai_tilelist_valuator.hpp.sq
src/ai/api/ai_town.cpp
src/ai/api/ai_town.hpp
src/ai/api/ai_town.hpp.sq
src/ai/api/ai_townlist_valuator.cpp
src/ai/api/ai_townlist_valuator.hpp
src/ai/api/ai_townlist_valuator.hpp.sq
src/ai/api/ai_vehiclelist_valuator.cpp
src/ai/api/ai_vehiclelist_valuator.hpp
src/ai/api/ai_vehiclelist_valuator.hpp.sq
src/ai/api/squirrel_export.awk
--- a/bin/ai/regression/regression.nut	Tue Mar 25 12:09:42 2008 +0000
+++ b/bin/ai/regression/regression.nut	Tue Mar 25 12:12:45 2008 +0000
@@ -116,27 +116,27 @@
 	print("");
 	print("--BridgeList--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIBridgeList_vMaxSpeed());
+	list.Valuate(AIBridge.GetMaxSpeed);
 	print("  MaxSpeed ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIBridgeList_vPrice(5));
+	list.Valuate(AIBridge.GetPrice, 5);
 	print("  Price ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIBridgeList_vMaxLength());
+	list.Valuate(AIBridge.GetMaxLength);
 	print("  MaxLength ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIBridgeList_vMinLength());
+	list.Valuate(AIBridge.GetMinLength);
 	print("  MinLength ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIBridgeList_vYearAvailable());
+	list.Valuate(AIBridge.GetYearAvailable);
 	print("  YearAvailable ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -147,12 +147,12 @@
 	print("");
 	print("--BridgeList_Length--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIBridgeList_vMaxSpeed());
+	list.Valuate(AIBridge.GetMaxSpeed);
 	print("  MaxSpeed ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIBridgeList_vPrice(14));
+	list.Valuate(AIBridge.GetPrice, 14);
 	print("  Price ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -168,10 +168,10 @@
 		print("    IsValidCargo():          " + AICargo.IsValidCargo(i));
 		print("    GetCargoLabel():         '" + AICargo.GetCargoLabel(i)+ "'");
 		print("    IsFreight():             " + AICargo.IsFreight(i));
-		print("    GetCargoIncome(0, 0):    " + AICargo.GetCargoIncome(0, 0, i));
-		print("    GetCargoIncome(10, 10):  " + AICargo.GetCargoIncome(10, 10, i));
-		print("    GetCargoIncome(100, 10): " + AICargo.GetCargoIncome(100, 10, i));
-		print("    GetCargoIncome(10, 100): " + AICargo.GetCargoIncome(10, 100, i));
+		print("    GetCargoIncome(0, 0):    " + AICargo.GetCargoIncome(i, 0, 0));
+		print("    GetCargoIncome(10, 10):  " + AICargo.GetCargoIncome(i, 10, 10));
+		print("    GetCargoIncome(100, 10): " + AICargo.GetCargoIncome(i, 100, 10));
+		print("    GetCargoIncome(10, 100): " + AICargo.GetCargoIncome(i, 10, 100));
 	}
 }
 
@@ -182,13 +182,13 @@
 	print("");
 	print("--CargoList--");
 	print("  Count():            " + list.Count());
-	list.Valuate(AICargoList_vIsFreight());
+	list.Valuate(AICargo.IsFreight);
 	print("  IsFreight ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
 
-	list.Valuate(AICargoList_vCargoIncomes(100, 100));
+	list.Valuate(AICargo.GetCargoIncome, 100, 100);
 	print("  CargoIncomes(100, 100) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -271,27 +271,27 @@
 	print("");
 	print("--EngineList--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIEngineList_vCargoType());
+	list.Valuate(AIEngine.GetCargoType);
 	print("  CargoType ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIEngineList_vCapacity());
+	list.Valuate(AIEngine.GetCapacity);
 	print("  Capacity ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIEngineList_vReliability());
+	list.Valuate(AIEngine.GetReliability);
 	print("  Reliability ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIEngineList_vMaxSpeed());
+	list.Valuate(AIEngine.GetMaxSpeed);
 	print("  MaxSpeed ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIEngineList_vPrice());
+	list.Valuate(AIEngine.GetPrice);
 	print("  Price ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -375,27 +375,27 @@
 	print("");
 	print("--IndustryList--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIIndustryList_vLocation());
+	list.Valuate(AIIndustry.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIIndustryList_vDistanceManhattanToTile(30000));
+	list.Valuate(AIIndustry.GetDistanceManhattanToTile, 30000);
 	print("  DistanceManhattanToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIIndustryList_vDistanceSquareToTile(30000));
+	list.Valuate(AIIndustry.GetDistanceSquareToTile, 30000);
 	print("  DistanceSquareToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIIndustryList_vCargoAccepted(1));
+	list.Valuate(AIIndustry.IsCargoAccepted, 1);
 	print("  CargoAccepted(1) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIIndustryList_vProduction(1));
+	list.Valuate(AIIndustry.GetProduction, 1);
 	list.KeepAboveValue(50);
 	print("  KeepAboveValue(50): done");
 	print("  Count():             " + list.Count());
@@ -407,7 +407,7 @@
 	list = AIIndustryList_CargoAccepting(1);
 	print("--IndustryList_CargoAccepting--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIIndustryList_vLocation());
+	list.Valuate(AIIndustry.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -416,13 +416,18 @@
 	list = AIIndustryList_CargoProducing(1);
 	print("--IndustryList_CargoProducing--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIIndustryList_vLocation());
+	list.Valuate(AIIndustry.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
 }
 
+function CustomValuator(list_id)
+{
+	return list_id * 4343;
+}
+
 function Regression::List()
 {
 	local list = AIList();
@@ -448,7 +453,12 @@
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIList_vRandomize());
+	list.Valuate(CustomValuator);
+	print("  Custom ListDump:");
+	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
+		print("    " + i + " => " + list.GetValue(i));
+	}
+	list.Valuate(AIBase.RandItem);
 	print("  Randomize ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -603,32 +613,32 @@
 	print("");
 	print("--StationList_Vehicle--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIStationList_vLocation());
+	list.Valuate(AIStation.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIStationList_vCargoWaiting(0));
+	list.Valuate(AIStation.GetCargoWaiting, 0);
 	print("  CargoWaiting(0) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIStationList_vCargoWaiting(1));
+	list.Valuate(AIStation.GetCargoWaiting, 1);
 	print("  CargoWaiting(1) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIStationList_vCargoRating(1));
+	list.Valuate(AIStation.GetCargoRating, 1);
 	print("  CargoRating(1) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIStationList_vDistanceManhattanToTile(30000));
+	list.Valuate(AIStation.GetDistanceManhattanToTile, 30000);
 	print("  DistanceManhattanToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIStationList_vDistanceSquareToTile(30000));
+	list.Valuate(AIStation.GetDistanceSquareToTile, 30000);
 	print("  DistanceSquareToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -639,7 +649,7 @@
 	print("");
 	print("--VehicleList_Station--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIVehicleList_vLocation());
+	list.Valuate(AIVehicle.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -777,17 +787,17 @@
 	print("");
 	print("--StationList--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIStationList_vLocation());
+	list.Valuate(AIStation.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIStationList_vCargoWaiting(0));
+	list.Valuate(AIStation.GetCargoWaiting, 0);
 	print("  CargoWaiting(0) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIStationList_vCargoWaiting(1));
+	list.Valuate(AIStation.GetCargoWaiting, 1);
 	print("  CargoWaiting(1) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -804,7 +814,7 @@
 	list.AddRectangle(41895 - 256 * 2, 256 * 2 + 41895 + 8);
 	print("  Count():             " + list.Count());
 
-	list.Valuate(AITileList_vHeight());
+	list.Valuate(AITile.GetHeight);
 	print("  Height():            done");
 	print("  Count():             " + list.Count());
 	print("  ListDump:");
@@ -812,7 +822,7 @@
 		print("    " + i + " => " + list.GetValue(i));
 	}
 
-	list.Valuate(AITileList_vSlope());
+	list.Valuate(AITile.GetSlope);
 	list.KeepValue(0);
 	print("  Slope():             done");
 	print("  KeepValue(0):        done");
@@ -822,29 +832,29 @@
 		print("    " + i + " => " + list.GetValue(i));
 	}
 
-	list.Valuate(AITileList_vBuildable());
+	list.Valuate(AITile.IsBuildable);
 	list.KeepValue(1);
 	print("  Buildable():         done");
 	print("  KeepValue(1):        done");
 	print("  Count():             " + list.Count());
 
-	list.Valuate(AITileList_vBuildableRectangle(3, 3));
+	list.Valuate(AITile.IsBuildableRectangle, 3, 3);
 	print("  BuildableRectangle(3, 3) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AITileList_vDistanceManhattanToTile(30000));
+	list.Valuate(AITile.GetDistanceManhattanToTile, 30000);
 	print("  DistanceManhattanToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AITileList_vDistanceSquareToTile(30000));
+	list.Valuate(AITile.GetDistanceSquareToTile, 30000);
 	print("  DistanceSquareToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
 
-	list.Valuate(AITileList_vCargoAcceptance(0, 1, 1, 3));
+	list.Valuate(AITile.GetCargoAcceptance, 0, 1, 1, 3);
 	list.KeepAboveValue(10);
 	print("  CargoAcceptance():   done");
 	print("  KeepAboveValue(10):  done");
@@ -854,7 +864,7 @@
 		print("    " + i + " => " + list.GetValue(i));
 	}
 
-	list.Valuate(AITileList_vRoadTile());
+	list.Valuate(AIRoad.IsRoadTile);
 	list.KeepValue(1);
 	print("  RoadTile():          done");
 	print("  KeepValue(1):        done");
@@ -864,7 +874,7 @@
 		print("    " + i + " => " + list.GetValue(i));
 	}
 
-	list.Valuate(AITileList_vNeighbourRoadCount());
+	list.Valuate(AIRoad.GetNeighbourRoadCount);
 	list.KeepValue(1);
 	print("  NeighbourRoadCount():done");
 	print("  KeepValue(1):        done");
@@ -875,7 +885,7 @@
 	}
 
 	list.AddRectangle(54421 - 256 * 2, 256 * 2 + 54421 + 8);
-	list.Valuate(AITileList_vWater());
+	list.Valuate(AITile.IsWater);
 	print("  Water():             done");
 	print("  Count():             " + list.Count());
 	print("  ListDump:");
@@ -887,7 +897,7 @@
 	print("");
 	print("--TileList_IndustryAccepting--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AITileList_vCargoAcceptance(3, 1, 1, 3));
+	list.Valuate(AITile.GetCargoAcceptance, 3, 1, 1, 3);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -897,7 +907,7 @@
 	print("");
 	print("--TileList_IndustryProducing--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AITileList_vCargoProduction(7, 1, 1, 3));
+	list.Valuate(AITile.GetCargoProduction, 7, 1, 1, 3);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
@@ -931,22 +941,22 @@
 	print("");
 	print("--TownList--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AITownList_vLocation());
+	list.Valuate(AITown.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AITownList_vDistanceManhattanToTile(30000));
+	list.Valuate(AITown.GetDistanceManhattanToTile, 30000);
 	print("  DistanceManhattanToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AITownList_vDistanceSquareToTile(30000));
+	list.Valuate(AITown.GetDistanceSquareToTile, 30000);
 	print("  DistanceSquareToTile(30000) ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AITownList_vPopulation());
+	list.Valuate(AITown.GetPopulation);
 	list.KeepAboveValue(500);
 	print("  KeepAboveValue(500): done");
 	print("  Count():             " + list.Count());
@@ -1057,52 +1067,52 @@
 	print("");
 	print("--VehicleList--");
 	print("  Count():             " + list.Count());
-	list.Valuate(AIVehicleList_vLocation());
+	list.Valuate(AIVehicle.GetLocation);
 	print("  Location ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vEngineType());
+	list.Valuate(AIVehicle.GetEngineType);
 	print("  EngineType ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vUnitNumber());
+	list.Valuate(AIVehicle.GetUnitNumber);
 	print("  UnitNumber ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vAge());
+	list.Valuate(AIVehicle.GetAge);
 	print("  Age ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vMaxAge());
+	list.Valuate(AIVehicle.GetMaxAge);
 	print("  MaxAge ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vAgeLeft());
+	list.Valuate(AIVehicle.GetAgeLeft);
 	print("  AgeLeft ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vRunningCost());
+	list.Valuate(AIVehicle.GetRunningCost);
 	print("  RunningCost ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vProfitThisYear());
+	list.Valuate(AIVehicle.GetProfitThisYear);
 	print("  ProfitThisYear ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vProfitLastYear());
+	list.Valuate(AIVehicle.GetProfitLastYear);
 	print("  ProfitLastYear ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
 	}
-	list.Valuate(AIVehicleList_vVehicleType());
+	list.Valuate(AIVehicle.GetVehicleType);
 	print("  VehicleType ListDump:");
 	for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
 		print("    " + i + " => " + list.GetValue(i));
--- a/bin/ai/regression/regression.txt	Tue Mar 25 12:09:42 2008 +0000
+++ b/bin/ai/regression/regression.txt	Tue Mar 25 12:12:45 2008 +0000
@@ -136,6 +136,108 @@
     1097 => 1097
     1098 => 1098
     1099 => 1099
+  Custom ListDump:
+    1 => 4343
+    2 => 8686
+    1000 => 4343000
+    1001 => 4347343
+    1002 => 4351686
+    1003 => 4356029
+    1004 => 4360372
+    1005 => 4364715
+    1006 => 4369058
+    1007 => 4373401
+    1008 => 4377744
+    1009 => 4382087
+    1010 => 4386430
+    1011 => 4390773
+    1012 => 4395116
+    1013 => 4399459
+    1014 => 4403802
+    1015 => 4408145
+    1016 => 4412488
+    1017 => 4416831
+    1018 => 4421174
+    1019 => 4425517
+    1020 => 4429860
+    1021 => 4434203
+    1022 => 4438546
+    1023 => 4442889
+    1024 => 4447232
+    1025 => 4451575
+    1026 => 4455918
+    1027 => 4460261
+    1028 => 4464604
+    1029 => 4468947
+    1030 => 4473290
+    1031 => 4477633
+    1032 => 4481976
+    1033 => 4486319
+    1034 => 4490662
+    1035 => 4495005
+    1036 => 4499348
+    1037 => 4503691
+    1038 => 4508034
+    1039 => 4512377
+    1040 => 4516720
+    1041 => 4521063
+    1042 => 4525406
+    1043 => 4529749
+    1044 => 4534092
+    1045 => 4538435
+    1046 => 4542778
+    1047 => 4547121
+    1048 => 4551464
+    1049 => 4555807
+    1051 => 4564493
+    1052 => 4568836
+    1053 => 4573179
+    1054 => 4577522
+    1055 => 4581865
+    1056 => 4586208
+    1057 => 4590551
+    1058 => 4594894
+    1059 => 4599237
+    1060 => 4603580
+    1061 => 4607923
+    1062 => 4612266
+    1063 => 4616609
+    1064 => 4620952
+    1065 => 4625295
+    1066 => 4629638
+    1067 => 4633981
+    1068 => 4638324
+    1069 => 4642667
+    1070 => 4647010
+    1071 => 4651353
+    1072 => 4655696
+    1073 => 4660039
+    1074 => 4664382
+    1075 => 4668725
+    1076 => 4673068
+    1077 => 4677411
+    1078 => 4681754
+    1079 => 4686097
+    1080 => 4690440
+    1081 => 4694783
+    1082 => 4699126
+    1083 => 4703469
+    1084 => 4707812
+    1085 => 4712155
+    1086 => 4716498
+    1087 => 4720841
+    1088 => 4725184
+    1089 => 4729527
+    1090 => 4733870
+    1091 => 4738213
+    1092 => 4742556
+    1093 => 4746899
+    1094 => 4751242
+    1095 => 4755585
+    1096 => 4759928
+    1097 => 4764271
+    1098 => 4768614
+    1099 => 4772957
   Randomize ListDump:
     1 => -619704336
     2 => 1166439751
--- a/projects/openttd_vs80.vcproj	Tue Mar 25 12:09:42 2008 +0000
+++ b/projects/openttd_vs80.vcproj	Tue Mar 25 12:12:45 2008 +0000
@@ -1940,10 +1940,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_bridgelist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_cargo.hpp"
 				>
 			</File>
@@ -1952,10 +1948,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_company.hpp"
 				>
 			</File>
@@ -1972,10 +1964,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_enginelist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_event.hpp"
 				>
 			</File>
@@ -1996,18 +1984,10 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_industrylist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_list.hpp"
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_list_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_map.hpp"
 				>
 			</File>
@@ -2052,10 +2032,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_stationlist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_testmode.hpp"
 				>
 			</File>
@@ -2068,10 +2044,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_tilelist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_town.hpp"
 				>
 			</File>
@@ -2080,10 +2052,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_townlist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_tunnel.hpp"
 				>
 			</File>
@@ -2099,10 +2067,6 @@
 				RelativePath=".\..\src\ai\api\ai_vehiclelist.hpp"
 				>
 			</File>
-			<File
-				RelativePath=".\..\src\ai\api\ai_vehiclelist_valuator.hpp"
-				>
-			</File>
 		</Filter>
 		<Filter
 			Name="AI API Implementation"
@@ -2132,10 +2096,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_bridgelist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_cargo.cpp"
 				>
 			</File>
@@ -2144,10 +2104,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_company.cpp"
 				>
 			</File>
@@ -2164,10 +2120,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_enginelist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_event.cpp"
 				>
 			</File>
@@ -2188,18 +2140,10 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_industrylist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_list.cpp"
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_list_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_map.cpp"
 				>
 			</File>
@@ -2240,10 +2184,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_stationlist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_testmode.cpp"
 				>
 			</File>
@@ -2256,10 +2196,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_tilelist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_town.cpp"
 				>
 			</File>
@@ -2268,10 +2204,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_townlist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_tunnel.cpp"
 				>
 			</File>
@@ -2287,10 +2219,6 @@
 				RelativePath=".\..\src\ai\api\ai_vehiclelist.cpp"
 				>
 			</File>
-			<File
-				RelativePath=".\..\src\ai\api\ai_vehiclelist_valuator.cpp"
-				>
-			</File>
 		</Filter>
 		<Filter
 			Name="Blitters"
--- a/projects/openttd_vs90.vcproj	Tue Mar 25 12:09:42 2008 +0000
+++ b/projects/openttd_vs90.vcproj	Tue Mar 25 12:12:45 2008 +0000
@@ -1937,10 +1937,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_bridgelist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_cargo.hpp"
 				>
 			</File>
@@ -1949,10 +1945,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_company.hpp"
 				>
 			</File>
@@ -1969,10 +1961,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_enginelist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_event.hpp"
 				>
 			</File>
@@ -1993,18 +1981,10 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_industrylist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_list.hpp"
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_list_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_map.hpp"
 				>
 			</File>
@@ -2049,10 +2029,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_stationlist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_testmode.hpp"
 				>
 			</File>
@@ -2065,10 +2041,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_tilelist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_town.hpp"
 				>
 			</File>
@@ -2077,10 +2049,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_townlist_valuator.hpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_tunnel.hpp"
 				>
 			</File>
@@ -2096,10 +2064,6 @@
 				RelativePath=".\..\src\ai\api\ai_vehiclelist.hpp"
 				>
 			</File>
-			<File
-				RelativePath=".\..\src\ai\api\ai_vehiclelist_valuator.hpp"
-				>
-			</File>
 		</Filter>
 		<Filter
 			Name="AI API Implementation"
@@ -2129,10 +2093,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_bridgelist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_cargo.cpp"
 				>
 			</File>
@@ -2141,10 +2101,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_cargolist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_company.cpp"
 				>
 			</File>
@@ -2161,10 +2117,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_enginelist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_event.cpp"
 				>
 			</File>
@@ -2185,18 +2137,10 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_industrylist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_list.cpp"
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_list_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_map.cpp"
 				>
 			</File>
@@ -2237,10 +2181,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_stationlist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_testmode.cpp"
 				>
 			</File>
@@ -2253,10 +2193,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_tilelist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_town.cpp"
 				>
 			</File>
@@ -2265,10 +2201,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\..\src\ai\api\ai_townlist_valuator.cpp"
-				>
-			</File>
-			<File
 				RelativePath=".\..\src\ai\api\ai_tunnel.cpp"
 				>
 			</File>
@@ -2284,10 +2216,6 @@
 				RelativePath=".\..\src\ai\api\ai_vehiclelist.cpp"
 				>
 			</File>
-			<File
-				RelativePath=".\..\src\ai\api\ai_vehiclelist_valuator.cpp"
-				>
-			</File>
 		</Filter>
 		<Filter
 			Name="Blitters"
--- a/source.list	Tue Mar 25 12:09:42 2008 +0000
+++ b/source.list	Tue Mar 25 12:12:45 2008 +0000
@@ -400,23 +400,18 @@
 ai/api/ai_base.hpp
 ai/api/ai_bridge.hpp
 ai/api/ai_bridgelist.hpp
-ai/api/ai_bridgelist_valuator.hpp
 ai/api/ai_cargo.hpp
 ai/api/ai_cargolist.hpp
-ai/api/ai_cargolist_valuator.hpp
 ai/api/ai_company.hpp
 ai/api/ai_controller.hpp
 ai/api/ai_engine.hpp
 ai/api/ai_enginelist.hpp
-ai/api/ai_enginelist_valuator.hpp
 ai/api/ai_event.hpp
 ai/api/ai_event_types.hpp
 ai/api/ai_execmode.hpp
 ai/api/ai_industry.hpp
 ai/api/ai_industrylist.hpp
-ai/api/ai_industrylist_valuator.hpp
 ai/api/ai_list.hpp
-ai/api/ai_list_valuator.hpp
 ai/api/ai_map.hpp
 ai/api/ai_marine.hpp
 ai/api/ai_object.hpp
@@ -428,19 +423,15 @@
 ai/api/ai_sign.hpp
 ai/api/ai_station.hpp
 ai/api/ai_stationlist.hpp
-ai/api/ai_stationlist_valuator.hpp
 ai/api/ai_testmode.hpp
 ai/api/ai_tile.hpp
 ai/api/ai_tilelist.hpp
-ai/api/ai_tilelist_valuator.hpp
 ai/api/ai_town.hpp
 ai/api/ai_townlist.hpp
-ai/api/ai_townlist_valuator.hpp
 ai/api/ai_tunnel.hpp
 ai/api/ai_transactionmode.hpp
 ai/api/ai_vehicle.hpp
 ai/api/ai_vehiclelist.hpp
-ai/api/ai_vehiclelist_valuator.hpp
 
 # AI API Implementation
 ai/api/ai_abstractlist.cpp
@@ -449,23 +440,18 @@
 ai/api/ai_base.cpp
 ai/api/ai_bridge.cpp
 ai/api/ai_bridgelist.cpp
-ai/api/ai_bridgelist_valuator.cpp
 ai/api/ai_cargo.cpp
 ai/api/ai_cargolist.cpp
-ai/api/ai_cargolist_valuator.cpp
 ai/api/ai_company.cpp
 ai/api/ai_controller.cpp
 ai/api/ai_engine.cpp
 ai/api/ai_enginelist.cpp
-ai/api/ai_enginelist_valuator.cpp
 ai/api/ai_event.cpp
 ai/api/ai_event_types.cpp
 ai/api/ai_execmode.cpp
 ai/api/ai_industry.cpp
 ai/api/ai_industrylist.cpp
-ai/api/ai_industrylist_valuator.cpp
 ai/api/ai_list.cpp
-ai/api/ai_list_valuator.cpp
 ai/api/ai_map.cpp
 ai/api/ai_marine.cpp
 ai/api/ai_object.cpp
@@ -476,19 +462,15 @@
 ai/api/ai_sign.cpp
 ai/api/ai_station.cpp
 ai/api/ai_stationlist.cpp
-ai/api/ai_stationlist_valuator.cpp
 ai/api/ai_testmode.cpp
 ai/api/ai_tile.cpp
 ai/api/ai_tilelist.cpp
-ai/api/ai_tilelist_valuator.cpp
 ai/api/ai_town.cpp
 ai/api/ai_townlist.cpp
-ai/api/ai_townlist_valuator.cpp
 ai/api/ai_tunnel.cpp
 ai/api/ai_transactionmode.cpp
 ai/api/ai_vehicle.cpp
 ai/api/ai_vehiclelist.cpp
-ai/api/ai_vehiclelist_valuator.cpp
 #end
 
 # Blitters
--- a/src/ai/ai_squirrel.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/ai_squirrel.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -28,23 +28,18 @@
 #include "api/ai_base.hpp.sq"
 #include "api/ai_bridge.hpp.sq"
 #include "api/ai_bridgelist.hpp.sq"
-#include "api/ai_bridgelist_valuator.hpp.sq"
 #include "api/ai_cargo.hpp.sq"
 #include "api/ai_cargolist.hpp.sq"
-#include "api/ai_cargolist_valuator.hpp.sq"
 #include "api/ai_company.hpp.sq"
 #include "api/ai_controller.hpp.sq"
 #include "api/ai_engine.hpp.sq"
 #include "api/ai_enginelist.hpp.sq"
-#include "api/ai_enginelist_valuator.hpp.sq"
 #include "api/ai_event.hpp.sq"
 #include "api/ai_event_types.hpp.sq"
 #include "api/ai_execmode.hpp.sq"
 #include "api/ai_industry.hpp.sq"
 #include "api/ai_industrylist.hpp.sq"
-#include "api/ai_industrylist_valuator.hpp.sq"
 #include "api/ai_list.hpp.sq"
-#include "api/ai_list_valuator.hpp.sq"
 #include "api/ai_map.hpp.sq"
 #include "api/ai_marine.hpp.sq"
 #include "api/ai_order.hpp.sq"
@@ -55,19 +50,15 @@
 #include "api/ai_sign.hpp.sq"
 #include "api/ai_station.hpp.sq"
 #include "api/ai_stationlist.hpp.sq"
-#include "api/ai_stationlist_valuator.hpp.sq"
 #include "api/ai_testmode.hpp.sq"
 #include "api/ai_tile.hpp.sq"
 #include "api/ai_tilelist.hpp.sq"
-#include "api/ai_tilelist_valuator.hpp.sq"
 #include "api/ai_town.hpp.sq"
 #include "api/ai_townlist.hpp.sq"
-#include "api/ai_townlist_valuator.hpp.sq"
 #include "api/ai_transactionmode.hpp.sq"
 #include "api/ai_tunnel.hpp.sq"
 #include "api/ai_vehicle.hpp.sq"
 #include "api/ai_vehiclelist.hpp.sq"
-#include "api/ai_vehiclelist_valuator.hpp.sq"
 
 static FSquirrel iFSquirrel; ///< Tell the AI-core that we have an AI with which we like to play.
 
@@ -227,24 +218,12 @@
 	SQAIBridge_Register(this->engine);
 	SQAIBridgeList_Register(this->engine);
 	SQAIBridgeList_Length_Register(this->engine);
-	SQAIBridgeList_vMaxLength_Register(this->engine);
-	SQAIBridgeList_vMaxSpeed_Register(this->engine);
-	SQAIBridgeList_vMinLength_Register(this->engine);
-	SQAIBridgeList_vPrice_Register(this->engine);
-	SQAIBridgeList_vYearAvailable_Register(this->engine);
 	SQAICargo_Register(this->engine);
 	SQAICargoList_Register(this->engine);
-	SQAICargoList_vCargoIncomes_Register(this->engine);
-	SQAICargoList_vIsFreight_Register(this->engine);
 	SQAICompany_Register(this->engine);
 	SQAIController_Register(this->engine);
 	SQAIEngine_Register(this->engine);
 	SQAIEngineList_Register(this->engine);
-	SQAIEngineList_vCapacity_Register(this->engine);
-	SQAIEngineList_vCargoType_Register(this->engine);
-	SQAIEngineList_vMaxSpeed_Register(this->engine);
-	SQAIEngineList_vPrice_Register(this->engine);
-	SQAIEngineList_vReliability_Register(this->engine);
 	SQAIEvent_Register(this->engine);
 	SQAIEventController_Register(this->engine);
 	SQAIEventTest_Register(this->engine);
@@ -254,13 +233,7 @@
 	SQAIIndustryList_Register(this->engine);
 	SQAIIndustryList_CargoAccepting_Register(this->engine);
 	SQAIIndustryList_CargoProducing_Register(this->engine);
-	SQAIIndustryList_vCargoAccepted_Register(this->engine);
-	SQAIIndustryList_vDistanceManhattanToTile_Register(this->engine);
-	SQAIIndustryList_vDistanceSquareToTile_Register(this->engine);
-	SQAIIndustryList_vLocation_Register(this->engine);
-	SQAIIndustryList_vProduction_Register(this->engine);
 	SQAIList_Register(this->engine);
-	SQAIList_vRandomize_Register(this->engine);
 	SQAIMap_Register(this->engine);
 	SQAIMarine_Register(this->engine);
 	SQAIOrder_Register(this->engine);
@@ -272,48 +245,18 @@
 	SQAIStation_Register(this->engine);
 	SQAIStationList_Register(this->engine);
 	SQAIStationList_Vehicle_Register(this->engine);
-	SQAIStationList_vCargoRating_Register(this->engine);
-	SQAIStationList_vCargoWaiting_Register(this->engine);
-	SQAIStationList_vDistanceManhattanToTile_Register(this->engine);
-	SQAIStationList_vDistanceSquareToTile_Register(this->engine);
-	SQAIStationList_vLocation_Register(this->engine);
 	SQAITestMode_Register(this->engine);
 	SQAITile_Register(this->engine);
 	SQAITileList_Register(this->engine);
 	SQAITileList_IndustryAccepting_Register(this->engine);
 	SQAITileList_IndustryProducing_Register(this->engine);
-	SQAITileList_vBuildable_Register(this->engine);
-	SQAITileList_vBuildableRectangle_Register(this->engine);
-	SQAITileList_vCargoAcceptance_Register(this->engine);
-	SQAITileList_vCargoProduction_Register(this->engine);
-	SQAITileList_vDistanceManhattanToTile_Register(this->engine);
-	SQAITileList_vDistanceSquareToTile_Register(this->engine);
-	SQAITileList_vHeight_Register(this->engine);
-	SQAITileList_vNeighbourRoadCount_Register(this->engine);
-	SQAITileList_vRoadTile_Register(this->engine);
-	SQAITileList_vSlope_Register(this->engine);
-	SQAITileList_vWater_Register(this->engine);
 	SQAITown_Register(this->engine);
 	SQAITownList_Register(this->engine);
-	SQAITownList_vDistanceManhattanToTile_Register(this->engine);
-	SQAITownList_vDistanceSquareToTile_Register(this->engine);
-	SQAITownList_vLocation_Register(this->engine);
-	SQAITownList_vPopulation_Register(this->engine);
 	SQAITransactionMode_Register(this->engine);
 	SQAITunnel_Register(this->engine);
 	SQAIVehicle_Register(this->engine);
 	SQAIVehicleList_Register(this->engine);
 	SQAIVehicleList_Station_Register(this->engine);
-	SQAIVehicleList_vAge_Register(this->engine);
-	SQAIVehicleList_vAgeLeft_Register(this->engine);
-	SQAIVehicleList_vEngineType_Register(this->engine);
-	SQAIVehicleList_vLocation_Register(this->engine);
-	SQAIVehicleList_vMaxAge_Register(this->engine);
-	SQAIVehicleList_vProfitLastYear_Register(this->engine);
-	SQAIVehicleList_vProfitThisYear_Register(this->engine);
-	SQAIVehicleList_vRunningCost_Register(this->engine);
-	SQAIVehicleList_vUnitNumber_Register(this->engine);
-	SQAIVehicleList_vVehicleType_Register(this->engine);
 
 	this->engine->SetGlobalPointer(this->engine);
 }
--- a/src/ai/api/ai_abstractlist.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_abstractlist.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -2,6 +2,7 @@
 
 /** @file ai_abstractlist.cpp Implementation of AIAbstractList */
 
+#include <squirrel.h>
 #include "ai_abstractlist.hpp"
 #include "../../debug.h"
 
@@ -542,17 +543,64 @@
 	this->RemoveList(&tmp);
 }
 
-void AIAbstractList::Valuate(const AIAbstractList::Valuator &proc)
-{
-	if (this->GetListName() != NULL && proc.GetListName() != NULL && strcmp(this->GetListName(), proc.GetListName()) != 0) {
-		DEBUG(ai, 0, "WARNING: You are trying to use a valuator for %s on a list which\n", this->GetListName());
-		DEBUG(ai, 0, " is based on %s. In general, this can't work. Expect fuzzy results!\n", proc.GetListName());
+SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm) {
+	int nparam = sq_gettop(vm) - 2;
+
+	/* Get the list instance and the function to call */
+	HSQOBJECT obj_list, obj_func;
+	sq_getstackobj(vm, 1, &obj_list);
+	sq_getstackobj(vm, 2, &obj_func);
+
+	/* Read the params */
+	HSQOBJECT obj_params[10];
+	assert(nparam < 10);
+	for (int i = 0; i < nparam; i++) {
+		sq_getstackobj(vm, i + 3, &obj_params[i]);
 	}
+	/* Remove all unneeded stuff */
+	sq_pop(vm, nparam + 1);
 
+	/* Walk all items, and query the result */
 	this->buckets.clear();
 	for (AIAbstractListMap::iterator iter = this->items.begin(); iter != this->items.end(); iter++) {
-		int32 value = proc.Valuate((*iter).first);
+		/* The function to call */
+		sq_pushobject(vm, obj_func);
+		/* The 'list' instance; this is most likely wrong, but we need to send something ;) */
+		sq_pushobject(vm, obj_list);
+
+		/* Now send the params */
+		sq_pushinteger(vm, (*iter).first);
+		for (int i = 0; i < nparam; i++) {
+			sq_pushobject(vm, obj_params[i]);
+		}
+
+		/* Call the function */
+		if (SQ_FAILED(sq_call(vm, nparam + 2, SQTrue, SQTrue))) return -1;
+
+		/* Retreive the return value */
+		SQInteger value;
+		switch (sq_gettype(vm, -1)) {
+			case OT_INTEGER: {
+				sq_getinteger(vm, -1, &value);
+			} break;
+
+			case OT_BOOL: {
+				SQBool v;
+				sq_getbool(vm, -1, &v);
+				value = v ? 1 : 0;
+			} break;
+
+			default: {
+				sq_throwerror(vm, "return value of valuator is not valid (not integer/bool)");
+				return -1;
+			}
+		}
+		/* Remove junk */
+		sq_pop(vm, 2);
+
 		(*iter).second = value;
 		this->buckets[value].insert((*iter).first);
 	}
+
+	return 0;
 }
--- a/src/ai/api/ai_abstractlist.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_abstractlist.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -262,9 +262,20 @@
 
 	/**
 	 * Give all items a value defined by the valuator you give.
-	 * @note the valuator should be a valid instance.
+	 * @param vm Internal pointer, not something you need to specify.
+	 * @note The first param for this function is the function you want to use
+	 *  to valuate the items in the list. It should accept at least one integer
+	 *  which will be set to the item, and should return an integer, which will
+	 *  become the value of the item. Additional parameters are possible, then
+	 *  you need to add them to the Valuator to. Example:
+	 *  list.Valuate(AIBridge.GetPrice, 5);
+	 *  list.Valuate(AIBridge.GetMaxLength);
+	 *  function MyVal(bridge_id, myparam) {
+	 *    return myparam * bridge_id; // This is silly
+	 *  }
+	 *  list.Valuate(MyVal, 12);
 	 */
-	void Valuate(const AIAbstractList::Valuator &proc);
+	SQInteger Valuate(HSQUIRRELVM vm);
 
 private:
 	/**
--- a/src/ai/api/ai_abstractlist.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_abstractlist.hpp.sq	Tue Mar 25 12:12:45 2008 +0000
@@ -54,7 +54,7 @@
 	SQAIAbstractList.DefSQMethod(engine, &AIAbstractList::KeepTop,            "KeepTop",            2, "xi");
 	SQAIAbstractList.DefSQMethod(engine, &AIAbstractList::KeepBottom,         "KeepBottom",         2, "xi");
 	SQAIAbstractList.DefSQMethod(engine, &AIAbstractList::KeepList,           "KeepList",           2, "xx");
-	SQAIAbstractList.DefSQMethod(engine, &AIAbstractList::Valuate,            "Valuate",            2, "xx");
+	SQAIAbstractList.DefSQAdvancedMethod(engine, &AIAbstractList::Valuate,    "Valuate");
 
 	SQAIAbstractList.PostRegister(engine);
 }
--- a/src/ai/api/ai_base.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_base.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -13,6 +13,11 @@
 	return ::Random();
 }
 
+/* static */ uint32 AIBase::RandItem(int unused_param)
+{
+	return AIBase::Rand();
+}
+
 /* static */ uint AIBase::RandRange(uint max)
 {
 	/* We pick RandomRange if we are in SP (so when saved, we do the same over and over)
@@ -21,7 +26,17 @@
 	return ::RandomRange(max);
 }
 
+/* static */ uint32 AIBase::RandRangeItem(int unused_param, uint max)
+{
+	return AIBase::RandRange(max);
+}
+
 /* static */ bool AIBase::Chance(uint out, uint max)
 {
 	return (uint16)Rand() <= (uint16)((65536 * out) / max);
 }
+
+/* static */ bool AIBase::ChanceItem(int unused_param, uint out, uint max)
+{
+	return AIBase::Chance(out, max);
+}
--- a/src/ai/api/ai_base.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_base.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -32,6 +32,13 @@
 	static uint32 Rand();
 
 	/**
+	 * Get a random value.
+	 * @param unused_param This param is not used, but is needed to work with lists.
+	 * @return a random value between 0 and MAX(uint32).
+	 */
+	static uint32 RandItem(int unused_param);
+
+	/**
 	 * Get a random value in a range.
 	 * @param max the maximum value it will return.
 	 * @return a random value between 0 .. max.
@@ -39,11 +46,27 @@
 	static uint RandRange(uint max);
 
 	/**
+	 * Get a random value in a range.
+	 * @param unused_param This param is not used, but is needed to work with lists.
+	 * @param max the maximum value it will return.
+	 * @return a random value between 0 .. max.
+	 */
+	static uint RandRangeItem(int unused_param, uint max);
+
+	/**
 	 * Returns approximatelly 'out' times true when called 'max' times.
 	 *   After all, it is a random function.
 	 * @return true if the chance worked out.
 	 */
 	static bool Chance(uint out, uint max);
+
+	/**
+	 * Returns approximatelly 'out' times true when called 'max' times.
+	 *   After all, it is a random function.
+	 * @param unused_param This param is not used, but is needed to work with lists.
+	 * @return true if the chance worked out.
+	 */
+	static bool ChanceItem(int unused_param, uint out, uint max);
 };
 
 #endif /* AI_BASE_HPP */
--- a/src/ai/api/ai_base.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_base.hpp.sq	Tue Mar 25 12:12:45 2008 +0000
@@ -14,10 +14,13 @@
 	SQAIBase.PreRegister(engine);
 	SQAIBase.AddConstructor<void (AIBase::*)(), 1>(engine, "x");
 
-	SQAIBase.DefSQStaticMethod(engine, &AIBase::GetClassName, "GetClassName", 1, "x");
-	SQAIBase.DefSQStaticMethod(engine, &AIBase::Rand,         "Rand",         1, "x");
-	SQAIBase.DefSQStaticMethod(engine, &AIBase::RandRange,    "RandRange",    2, "xi");
-	SQAIBase.DefSQStaticMethod(engine, &AIBase::Chance,       "Chance",       3, "xii");
+	SQAIBase.DefSQStaticMethod(engine, &AIBase::GetClassName,  "GetClassName",  1, "x");
+	SQAIBase.DefSQStaticMethod(engine, &AIBase::Rand,          "Rand",          1, "x");
+	SQAIBase.DefSQStaticMethod(engine, &AIBase::RandItem,      "RandItem",      2, "xi");
+	SQAIBase.DefSQStaticMethod(engine, &AIBase::RandRange,     "RandRange",     2, "xi");
+	SQAIBase.DefSQStaticMethod(engine, &AIBase::RandRangeItem, "RandRangeItem", 3, "xii");
+	SQAIBase.DefSQStaticMethod(engine, &AIBase::Chance,        "Chance",        3, "xii");
+	SQAIBase.DefSQStaticMethod(engine, &AIBase::ChanceItem,    "ChanceItem",    4, "xiii");
 
 	SQAIBase.PostRegister(engine);
 }
--- a/src/ai/api/ai_bridgelist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-#include "ai_bridgelist_valuator.hpp"
-#include "ai_bridge.hpp"
-
-int32 AIBridgeList_vMaxSpeed::Valuate(int32 bridge_id) const
-{
-	return AIBridge::GetMaxSpeed(bridge_id);
-}
-
-int32 AIBridgeList_vPrice::Valuate(int32 bridge_id) const
-{
-	return AIBridge::GetPrice(bridge_id, this->length);
-}
-
-int32 AIBridgeList_vMaxLength::Valuate(int32 bridge_id) const
-{
-	return AIBridge::GetMaxLength(bridge_id);
-}
-
-int32 AIBridgeList_vMinLength::Valuate(int32 bridge_id) const
-{
-	return AIBridge::GetMinLength(bridge_id);
-}
-
-int32 AIBridgeList_vYearAvailable::Valuate(int32 bridge_id) const
-{
-	return AIBridge::GetYearAvailable(bridge_id);
-}
-
--- a/src/ai/api/ai_bridgelist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/* $Id$ */
-
-/** @file ai_bridgelist_valuator.hpp all the valuators for AIBridgeList */
-
-#ifndef AI_BRIDGELIST_VALUATOR_HPP
-#define AI_BRIDGELIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Get the maximum speed for entries in an AIBridgeList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIBridgeList instance.
- * @ingroup AIBridgeList
- */
-class AIBridgeList_vMaxSpeed : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIBridgeList_vMaxSpeed"; }
-
-private:
-	const char *GetListName() const { return "AIBridgeList"; }
-	int32 Valuate(int32 bridge_id) const;
-};
-
-/**
- * Get the price for entries in an AIBridgeList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIBridgeList instance.
- * @ingroup AIBridgeList
- */
-class AIBridgeList_vPrice : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIBridgeList_vPrice"; }
-
-	/**
-	 * @param length The length of the bridge you want to build.
-	 */
-	AIBridgeList_vPrice(uint length) :
-		length(length)
-	{}
-
-private:
-	uint length;
-
-	const char *GetListName() const { return "AIBridgeList"; }
-	int32 Valuate(int32 bridge_id) const;
-};
-
-/**
- * Get the maximum bridge length for entries in an AIBridgeList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIBridgeList instance.
- * @ingroup AIBridgeList
- */
-class AIBridgeList_vMaxLength : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIBridgeList_vMaxLength"; }
-
-private:
-	const char *GetListName() const { return "AIBridgeList"; }
-	int32 Valuate(int32 bridge_id) const;
-};
-
-/**
- * Get the minimum bridge length for entries in an AIBridgeList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIBridgeList instance.
- * @ingroup AIBridgeList
- */
-class AIBridgeList_vMinLength : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIBridgeList_vMinLength"; }
-
-private:
-	const char *GetListName() const { return "AIBridgeList"; }
-	int32 Valuate(int32 bridge_id) const;
-};
-
-/**
- * Get the year in which the bridge will be available for all entries in an
- *  AIBridgeList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIBridgeList instance.
- * @ingroup AIBridgeList
- */
-class AIBridgeList_vYearAvailable : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIBridgeList_vYearAvailable"; }
-
-private:
-	const char *GetListName() const { return "AIBridgeList"; }
-	int32 Valuate(int32 bridge_id) const;
-};
-
-#endif /* AI_BRIDGELIST_VALUATOR_HPP */
--- a/src/ai/api/ai_bridgelist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-#include "ai_bridgelist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AIBridgeList_vMaxSpeed to be used as Squirrel parameter */
-	template <> AIBridgeList_vMaxSpeed *GetParam(ForceType<AIBridgeList_vMaxSpeed *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vMaxSpeed *)instance; }
-	template <> AIBridgeList_vMaxSpeed &GetParam(ForceType<AIBridgeList_vMaxSpeed &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vMaxSpeed *)instance; }
-	template <> const AIBridgeList_vMaxSpeed *GetParam(ForceType<const AIBridgeList_vMaxSpeed *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vMaxSpeed *)instance; }
-	template <> const AIBridgeList_vMaxSpeed &GetParam(ForceType<const AIBridgeList_vMaxSpeed &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vMaxSpeed *)instance; }
-	template <> int Return<AIBridgeList_vMaxSpeed *>(HSQUIRRELVM vm, AIBridgeList_vMaxSpeed *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIBridgeList_vMaxSpeed", res, NULL, DefSQDestructorCallback<AIBridgeList_vMaxSpeed>); return 1; }
-}; // namespace SQConvert
-
-void SQAIBridgeList_vMaxSpeed_Register(Squirrel *engine) {
-	DefSQClass <AIBridgeList_vMaxSpeed> SQAIBridgeList_vMaxSpeed("AIBridgeList_vMaxSpeed");
-	SQAIBridgeList_vMaxSpeed.PreRegister(engine);
-	SQAIBridgeList_vMaxSpeed.AddConstructor<void (AIBridgeList_vMaxSpeed::*)(), 1>(engine, "x");
-
-	SQAIBridgeList_vMaxSpeed.DefSQStaticMethod(engine, &AIBridgeList_vMaxSpeed::GetClassName, "GetClassName", 1, "x");
-
-	SQAIBridgeList_vMaxSpeed.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIBridgeList_vPrice to be used as Squirrel parameter */
-	template <> AIBridgeList_vPrice *GetParam(ForceType<AIBridgeList_vPrice *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vPrice *)instance; }
-	template <> AIBridgeList_vPrice &GetParam(ForceType<AIBridgeList_vPrice &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vPrice *)instance; }
-	template <> const AIBridgeList_vPrice *GetParam(ForceType<const AIBridgeList_vPrice *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vPrice *)instance; }
-	template <> const AIBridgeList_vPrice &GetParam(ForceType<const AIBridgeList_vPrice &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vPrice *)instance; }
-	template <> int Return<AIBridgeList_vPrice *>(HSQUIRRELVM vm, AIBridgeList_vPrice *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIBridgeList_vPrice", res, NULL, DefSQDestructorCallback<AIBridgeList_vPrice>); return 1; }
-}; // namespace SQConvert
-
-void SQAIBridgeList_vPrice_Register(Squirrel *engine) {
-	DefSQClass <AIBridgeList_vPrice> SQAIBridgeList_vPrice("AIBridgeList_vPrice");
-	SQAIBridgeList_vPrice.PreRegister(engine);
-	SQAIBridgeList_vPrice.AddConstructor<void (AIBridgeList_vPrice::*)(uint length), 2>(engine, "xi");
-
-	SQAIBridgeList_vPrice.DefSQStaticMethod(engine, &AIBridgeList_vPrice::GetClassName, "GetClassName", 1, "x");
-
-	SQAIBridgeList_vPrice.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIBridgeList_vMaxLength to be used as Squirrel parameter */
-	template <> AIBridgeList_vMaxLength *GetParam(ForceType<AIBridgeList_vMaxLength *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vMaxLength *)instance; }
-	template <> AIBridgeList_vMaxLength &GetParam(ForceType<AIBridgeList_vMaxLength &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vMaxLength *)instance; }
-	template <> const AIBridgeList_vMaxLength *GetParam(ForceType<const AIBridgeList_vMaxLength *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vMaxLength *)instance; }
-	template <> const AIBridgeList_vMaxLength &GetParam(ForceType<const AIBridgeList_vMaxLength &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vMaxLength *)instance; }
-	template <> int Return<AIBridgeList_vMaxLength *>(HSQUIRRELVM vm, AIBridgeList_vMaxLength *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIBridgeList_vMaxLength", res, NULL, DefSQDestructorCallback<AIBridgeList_vMaxLength>); return 1; }
-}; // namespace SQConvert
-
-void SQAIBridgeList_vMaxLength_Register(Squirrel *engine) {
-	DefSQClass <AIBridgeList_vMaxLength> SQAIBridgeList_vMaxLength("AIBridgeList_vMaxLength");
-	SQAIBridgeList_vMaxLength.PreRegister(engine);
-	SQAIBridgeList_vMaxLength.AddConstructor<void (AIBridgeList_vMaxLength::*)(), 1>(engine, "x");
-
-	SQAIBridgeList_vMaxLength.DefSQStaticMethod(engine, &AIBridgeList_vMaxLength::GetClassName, "GetClassName", 1, "x");
-
-	SQAIBridgeList_vMaxLength.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIBridgeList_vMinLength to be used as Squirrel parameter */
-	template <> AIBridgeList_vMinLength *GetParam(ForceType<AIBridgeList_vMinLength *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vMinLength *)instance; }
-	template <> AIBridgeList_vMinLength &GetParam(ForceType<AIBridgeList_vMinLength &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vMinLength *)instance; }
-	template <> const AIBridgeList_vMinLength *GetParam(ForceType<const AIBridgeList_vMinLength *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vMinLength *)instance; }
-	template <> const AIBridgeList_vMinLength &GetParam(ForceType<const AIBridgeList_vMinLength &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vMinLength *)instance; }
-	template <> int Return<AIBridgeList_vMinLength *>(HSQUIRRELVM vm, AIBridgeList_vMinLength *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIBridgeList_vMinLength", res, NULL, DefSQDestructorCallback<AIBridgeList_vMinLength>); return 1; }
-}; // namespace SQConvert
-
-void SQAIBridgeList_vMinLength_Register(Squirrel *engine) {
-	DefSQClass <AIBridgeList_vMinLength> SQAIBridgeList_vMinLength("AIBridgeList_vMinLength");
-	SQAIBridgeList_vMinLength.PreRegister(engine);
-	SQAIBridgeList_vMinLength.AddConstructor<void (AIBridgeList_vMinLength::*)(), 1>(engine, "x");
-
-	SQAIBridgeList_vMinLength.DefSQStaticMethod(engine, &AIBridgeList_vMinLength::GetClassName, "GetClassName", 1, "x");
-
-	SQAIBridgeList_vMinLength.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIBridgeList_vYearAvailable to be used as Squirrel parameter */
-	template <> AIBridgeList_vYearAvailable *GetParam(ForceType<AIBridgeList_vYearAvailable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vYearAvailable *)instance; }
-	template <> AIBridgeList_vYearAvailable &GetParam(ForceType<AIBridgeList_vYearAvailable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vYearAvailable *)instance; }
-	template <> const AIBridgeList_vYearAvailable *GetParam(ForceType<const AIBridgeList_vYearAvailable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBridgeList_vYearAvailable *)instance; }
-	template <> const AIBridgeList_vYearAvailable &GetParam(ForceType<const AIBridgeList_vYearAvailable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBridgeList_vYearAvailable *)instance; }
-	template <> int Return<AIBridgeList_vYearAvailable *>(HSQUIRRELVM vm, AIBridgeList_vYearAvailable *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIBridgeList_vYearAvailable", res, NULL, DefSQDestructorCallback<AIBridgeList_vYearAvailable>); return 1; }
-}; // namespace SQConvert
-
-void SQAIBridgeList_vYearAvailable_Register(Squirrel *engine) {
-	DefSQClass <AIBridgeList_vYearAvailable> SQAIBridgeList_vYearAvailable("AIBridgeList_vYearAvailable");
-	SQAIBridgeList_vYearAvailable.PreRegister(engine);
-	SQAIBridgeList_vYearAvailable.AddConstructor<void (AIBridgeList_vYearAvailable::*)(), 1>(engine, "x");
-
-	SQAIBridgeList_vYearAvailable.DefSQStaticMethod(engine, &AIBridgeList_vYearAvailable::GetClassName, "GetClassName", 1, "x");
-
-	SQAIBridgeList_vYearAvailable.PostRegister(engine);
-}
--- a/src/ai/api/ai_cargo.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_cargo.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -35,7 +35,7 @@
 	return cargo->is_freight;
 }
 
-/* static */ int32 AICargo::GetCargoIncome(uint32 distance, uint32 days_in_transit, CargoID cargo_type)
+/* static */ int32 AICargo::GetCargoIncome(CargoID cargo_type, uint32 distance, uint32 days_in_transit)
 {
 	if (!IsValidCargo(cargo_type)) return 0;
 	return ::GetTransportedGoodsIncome(1, distance, days_in_transit, cargo_type);
--- a/src/ai/api/ai_cargo.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_cargo.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -42,12 +42,12 @@
 	/**
 	 * Get the income for transporting a piece of cargo over the
 	 *   given distance within the specified time.
+	 * @param cargo_type the cargo to transport.
 	 * @param distance the distance the cargo travels from begin to end.
 	 * @param days_in_transit amount of (game) days the cargo is in transit.
-	 * @param cargo_type the cargo to transport.
 	 * @return the amount of money that would be earned by this trip.
 	 */
-	static int32 GetCargoIncome(uint32 distance, uint32 days_in_transit, CargoID cargo_type);
+	static int32 GetCargoIncome(CargoID cargo_type, uint32 distance, uint32 days_in_transit);
 };
 
 #endif /* AI_CARGO_HPP */
--- a/src/ai/api/ai_cargolist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-#include "ai_cargolist_valuator.hpp"
-#include "ai_cargo.hpp"
-
-int32 AICargoList_vIsFreight::Valuate(int32 cargoID) const
-{
-	return AICargo::IsFreight(cargoID);
-}
-
-int32 AICargoList_vCargoIncomes::Valuate(int32 cargoID) const
-{
-	return AICargo::GetCargoIncome(distance, days_in_transit, cargoID);
-}
--- a/src/ai/api/ai_cargolist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/** @file ai_cargolist_valuator.hpp all the valuators for AICargoList */
-
-#ifndef AI_CARGOLIST_VALUATOR_HPP
-#define AI_CARGOLIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-
-/**
- * Checks if the given cargo is freight cargo, for all entries in an AICargoList.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on a AICargoList.
- * @ingroup AICargoList.
- */
-class AICargoList_vIsFreight : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AICargoList_vIsFreight"; }
-
-private:
-	const char *GetListName() const { return "AICargoList"; }
-	int32 Valuate(int32 cargo) const;
-};
-
-/**
- * Get the income for transporting one unit of cargo over the given distance
- *  within the specified time.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on a AICargoList.
- * @ingroup AICargoList.
- */
-class AICargoList_vCargoIncomes : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AICargoList_vCargoIncomes"; }
-
-	/**
-	 * @param distance The distance the cargo travels from begin to end.
-	 * @param days_in_transit Amount of (game)days the cargo is in transit.
-	 */
-	AICargoList_vCargoIncomes(uint32 distance, uint32 days_in_transit) :
-		distance(distance),
-		days_in_transit(days_in_transit)
-	{}
-
-private:
-	uint32 distance, days_in_transit;
-
-	const char *GetListName() const { return "AICargoList"; }
-	int32 Valuate(int32 cargo) const;
-};
-
-#endif // AI_CARGOLIST_VALUATOR_HPP
--- a/src/ai/api/ai_cargolist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#include "ai_cargolist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AICargoList_vIsFreight to be used as Squirrel parameter */
-	template <> AICargoList_vIsFreight *GetParam(ForceType<AICargoList_vIsFreight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vIsFreight *)instance; }
-	template <> AICargoList_vIsFreight &GetParam(ForceType<AICargoList_vIsFreight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vIsFreight *)instance; }
-	template <> const AICargoList_vIsFreight *GetParam(ForceType<const AICargoList_vIsFreight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vIsFreight *)instance; }
-	template <> const AICargoList_vIsFreight &GetParam(ForceType<const AICargoList_vIsFreight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vIsFreight *)instance; }
-	template <> int Return<AICargoList_vIsFreight *>(HSQUIRRELVM vm, AICargoList_vIsFreight *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AICargoList_vIsFreight", res, NULL, DefSQDestructorCallback<AICargoList_vIsFreight>); return 1; }
-}; // namespace SQConvert
-
-void SQAICargoList_vIsFreight_Register(Squirrel *engine) {
-	DefSQClass <AICargoList_vIsFreight> SQAICargoList_vIsFreight("AICargoList_vIsFreight");
-	SQAICargoList_vIsFreight.PreRegister(engine);
-	SQAICargoList_vIsFreight.AddConstructor<void (AICargoList_vIsFreight::*)(), 1>(engine, "x");
-
-	SQAICargoList_vIsFreight.DefSQStaticMethod(engine, &AICargoList_vIsFreight::GetClassName, "GetClassName", 1, "x");
-
-	SQAICargoList_vIsFreight.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AICargoList_vCargoIncomes to be used as Squirrel parameter */
-	template <> AICargoList_vCargoIncomes *GetParam(ForceType<AICargoList_vCargoIncomes *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vCargoIncomes *)instance; }
-	template <> AICargoList_vCargoIncomes &GetParam(ForceType<AICargoList_vCargoIncomes &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vCargoIncomes *)instance; }
-	template <> const AICargoList_vCargoIncomes *GetParam(ForceType<const AICargoList_vCargoIncomes *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargoList_vCargoIncomes *)instance; }
-	template <> const AICargoList_vCargoIncomes &GetParam(ForceType<const AICargoList_vCargoIncomes &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargoList_vCargoIncomes *)instance; }
-	template <> int Return<AICargoList_vCargoIncomes *>(HSQUIRRELVM vm, AICargoList_vCargoIncomes *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AICargoList_vCargoIncomes", res, NULL, DefSQDestructorCallback<AICargoList_vCargoIncomes>); return 1; }
-}; // namespace SQConvert
-
-void SQAICargoList_vCargoIncomes_Register(Squirrel *engine) {
-	DefSQClass <AICargoList_vCargoIncomes> SQAICargoList_vCargoIncomes("AICargoList_vCargoIncomes");
-	SQAICargoList_vCargoIncomes.PreRegister(engine);
-	SQAICargoList_vCargoIncomes.AddConstructor<void (AICargoList_vCargoIncomes::*)(uint32 distance, uint32 days_in_transit), 3>(engine, "xii");
-
-	SQAICargoList_vCargoIncomes.DefSQStaticMethod(engine, &AICargoList_vCargoIncomes::GetClassName, "GetClassName", 1, "x");
-
-	SQAICargoList_vCargoIncomes.PostRegister(engine);
-}
--- a/src/ai/api/ai_enginelist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#include "ai_enginelist_valuator.hpp"
-#include "ai_engine.hpp"
-
-int32 AIEngineList_vCargoType::Valuate(int32 engine_id) const
-{
-	return AIEngine::GetCargoType(engine_id);
-}
-
-int32 AIEngineList_vCapacity::Valuate(int32 engine_id) const
-{
-	return AIEngine::GetCapacity(engine_id);
-}
-
-int32 AIEngineList_vReliability::Valuate(int32 engine_id) const
-{
-	return AIEngine::GetReliability(engine_id);
-}
-
-int32 AIEngineList_vMaxSpeed::Valuate(int32 engine_id) const
-{
-	return AIEngine::GetMaxSpeed(engine_id);
-}
-
-int32 AIEngineList_vPrice::Valuate(int32 engine_id) const
-{
-	return AIEngine::GetPrice(engine_id);
-}
--- a/src/ai/api/ai_enginelist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/* $Id$ */
-
-/** @file ai_enginelist_valuator.hpp all the valuators for AIEngineList */
-
-#ifndef AI_ENGINELIST_VALUATOR_HPP
-#define AI_ENGINELIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Get the cargo-type for entries in an AIEngineList instance.
- * @note Resulting items are of the type CargoID.
- * @note Can only operate on an AIEngineList instance.
- * @ingroup AIEngineList
- */
-class AIEngineList_vCargoType : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIEngineList_vCargoType"; }
-
-private:
-	const char *GetListName() const { return "AIEngineList"; }
-	int32 Valuate(int32 engine_id) const;
-};
-
-/**
- * Get the capacity for entries in an AIEngineList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIEngineList instance.
- * @ingroup AIEngineList
- */
-class AIEngineList_vCapacity : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIEngineList_vCapacity"; }
-
-private:
-	const char *GetListName() const { return "AIEngineList"; }
-	int32 Valuate(int32 engine_id) const;
-};
-
-/**
- * Get the reliability for entries in an AIEngineList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIEngineList instance.
- * @ingroup AIEngineList
- */
-class AIEngineList_vReliability : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIEngineList_vReliability"; }
-
-private:
-	const char *GetListName() const { return "AIEngineList"; }
-	int32 Valuate(int32 engine_id) const;
-};
-
-/**
- * Get the max speed for entries in an AIEngineList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIEngineList instance.
- * @ingroup AIEngineList
- */
-class AIEngineList_vMaxSpeed : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIEngineList_vMaxSpeed"; }
-
-private:
-	const char *GetListName() const { return "AIEngineList"; }
-	int32 Valuate(int32 engine_id) const;
-};
-
-/**
- * Get the price for entries in an AIEngineList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIEngineList instance.
- * @ingroup AIEngineList
- */
-class AIEngineList_vPrice : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIEngineList_vPrice"; }
-
-private:
-	const char *GetListName() const { return "AIEngineList"; }
-	int32 Valuate(int32 engine_id) const;
-};
-
-#endif /* AI_ENGINELIST_VALUATOR_HPP */
--- a/src/ai/api/ai_enginelist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-#include "ai_enginelist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AIEngineList_vCargoType to be used as Squirrel parameter */
-	template <> AIEngineList_vCargoType *GetParam(ForceType<AIEngineList_vCargoType *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vCargoType *)instance; }
-	template <> AIEngineList_vCargoType &GetParam(ForceType<AIEngineList_vCargoType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vCargoType *)instance; }
-	template <> const AIEngineList_vCargoType *GetParam(ForceType<const AIEngineList_vCargoType *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vCargoType *)instance; }
-	template <> const AIEngineList_vCargoType &GetParam(ForceType<const AIEngineList_vCargoType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vCargoType *)instance; }
-	template <> int Return<AIEngineList_vCargoType *>(HSQUIRRELVM vm, AIEngineList_vCargoType *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIEngineList_vCargoType", res, NULL, DefSQDestructorCallback<AIEngineList_vCargoType>); return 1; }
-}; // namespace SQConvert
-
-void SQAIEngineList_vCargoType_Register(Squirrel *engine) {
-	DefSQClass <AIEngineList_vCargoType> SQAIEngineList_vCargoType("AIEngineList_vCargoType");
-	SQAIEngineList_vCargoType.PreRegister(engine);
-	SQAIEngineList_vCargoType.AddConstructor<void (AIEngineList_vCargoType::*)(), 1>(engine, "x");
-
-	SQAIEngineList_vCargoType.DefSQStaticMethod(engine, &AIEngineList_vCargoType::GetClassName, "GetClassName", 1, "x");
-
-	SQAIEngineList_vCargoType.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIEngineList_vCapacity to be used as Squirrel parameter */
-	template <> AIEngineList_vCapacity *GetParam(ForceType<AIEngineList_vCapacity *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vCapacity *)instance; }
-	template <> AIEngineList_vCapacity &GetParam(ForceType<AIEngineList_vCapacity &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vCapacity *)instance; }
-	template <> const AIEngineList_vCapacity *GetParam(ForceType<const AIEngineList_vCapacity *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vCapacity *)instance; }
-	template <> const AIEngineList_vCapacity &GetParam(ForceType<const AIEngineList_vCapacity &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vCapacity *)instance; }
-	template <> int Return<AIEngineList_vCapacity *>(HSQUIRRELVM vm, AIEngineList_vCapacity *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIEngineList_vCapacity", res, NULL, DefSQDestructorCallback<AIEngineList_vCapacity>); return 1; }
-}; // namespace SQConvert
-
-void SQAIEngineList_vCapacity_Register(Squirrel *engine) {
-	DefSQClass <AIEngineList_vCapacity> SQAIEngineList_vCapacity("AIEngineList_vCapacity");
-	SQAIEngineList_vCapacity.PreRegister(engine);
-	SQAIEngineList_vCapacity.AddConstructor<void (AIEngineList_vCapacity::*)(), 1>(engine, "x");
-
-	SQAIEngineList_vCapacity.DefSQStaticMethod(engine, &AIEngineList_vCapacity::GetClassName, "GetClassName", 1, "x");
-
-	SQAIEngineList_vCapacity.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIEngineList_vReliability to be used as Squirrel parameter */
-	template <> AIEngineList_vReliability *GetParam(ForceType<AIEngineList_vReliability *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vReliability *)instance; }
-	template <> AIEngineList_vReliability &GetParam(ForceType<AIEngineList_vReliability &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vReliability *)instance; }
-	template <> const AIEngineList_vReliability *GetParam(ForceType<const AIEngineList_vReliability *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vReliability *)instance; }
-	template <> const AIEngineList_vReliability &GetParam(ForceType<const AIEngineList_vReliability &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vReliability *)instance; }
-	template <> int Return<AIEngineList_vReliability *>(HSQUIRRELVM vm, AIEngineList_vReliability *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIEngineList_vReliability", res, NULL, DefSQDestructorCallback<AIEngineList_vReliability>); return 1; }
-}; // namespace SQConvert
-
-void SQAIEngineList_vReliability_Register(Squirrel *engine) {
-	DefSQClass <AIEngineList_vReliability> SQAIEngineList_vReliability("AIEngineList_vReliability");
-	SQAIEngineList_vReliability.PreRegister(engine);
-	SQAIEngineList_vReliability.AddConstructor<void (AIEngineList_vReliability::*)(), 1>(engine, "x");
-
-	SQAIEngineList_vReliability.DefSQStaticMethod(engine, &AIEngineList_vReliability::GetClassName, "GetClassName", 1, "x");
-
-	SQAIEngineList_vReliability.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIEngineList_vMaxSpeed to be used as Squirrel parameter */
-	template <> AIEngineList_vMaxSpeed *GetParam(ForceType<AIEngineList_vMaxSpeed *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vMaxSpeed *)instance; }
-	template <> AIEngineList_vMaxSpeed &GetParam(ForceType<AIEngineList_vMaxSpeed &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vMaxSpeed *)instance; }
-	template <> const AIEngineList_vMaxSpeed *GetParam(ForceType<const AIEngineList_vMaxSpeed *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vMaxSpeed *)instance; }
-	template <> const AIEngineList_vMaxSpeed &GetParam(ForceType<const AIEngineList_vMaxSpeed &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vMaxSpeed *)instance; }
-	template <> int Return<AIEngineList_vMaxSpeed *>(HSQUIRRELVM vm, AIEngineList_vMaxSpeed *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIEngineList_vMaxSpeed", res, NULL, DefSQDestructorCallback<AIEngineList_vMaxSpeed>); return 1; }
-}; // namespace SQConvert
-
-void SQAIEngineList_vMaxSpeed_Register(Squirrel *engine) {
-	DefSQClass <AIEngineList_vMaxSpeed> SQAIEngineList_vMaxSpeed("AIEngineList_vMaxSpeed");
-	SQAIEngineList_vMaxSpeed.PreRegister(engine);
-	SQAIEngineList_vMaxSpeed.AddConstructor<void (AIEngineList_vMaxSpeed::*)(), 1>(engine, "x");
-
-	SQAIEngineList_vMaxSpeed.DefSQStaticMethod(engine, &AIEngineList_vMaxSpeed::GetClassName, "GetClassName", 1, "x");
-
-	SQAIEngineList_vMaxSpeed.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIEngineList_vPrice to be used as Squirrel parameter */
-	template <> AIEngineList_vPrice *GetParam(ForceType<AIEngineList_vPrice *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vPrice *)instance; }
-	template <> AIEngineList_vPrice &GetParam(ForceType<AIEngineList_vPrice &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vPrice *)instance; }
-	template <> const AIEngineList_vPrice *GetParam(ForceType<const AIEngineList_vPrice *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIEngineList_vPrice *)instance; }
-	template <> const AIEngineList_vPrice &GetParam(ForceType<const AIEngineList_vPrice &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIEngineList_vPrice *)instance; }
-	template <> int Return<AIEngineList_vPrice *>(HSQUIRRELVM vm, AIEngineList_vPrice *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIEngineList_vPrice", res, NULL, DefSQDestructorCallback<AIEngineList_vPrice>); return 1; }
-}; // namespace SQConvert
-
-void SQAIEngineList_vPrice_Register(Squirrel *engine) {
-	DefSQClass <AIEngineList_vPrice> SQAIEngineList_vPrice("AIEngineList_vPrice");
-	SQAIEngineList_vPrice.PreRegister(engine);
-	SQAIEngineList_vPrice.AddConstructor<void (AIEngineList_vPrice::*)(), 1>(engine, "x");
-
-	SQAIEngineList_vPrice.DefSQStaticMethod(engine, &AIEngineList_vPrice::GetClassName, "GetClassName", 1, "x");
-
-	SQAIEngineList_vPrice.PostRegister(engine);
-}
--- a/src/ai/api/ai_industry.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_industry.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -4,6 +4,7 @@
 
 #include "ai_industry.hpp"
 #include "ai_cargo.hpp"
+#include "ai_map.hpp"
 #include "../../industry.h"
 #include "../../strings_func.h"
 #include "table/strings.h"
@@ -96,3 +97,13 @@
 
 	return false;
 }
+
+/* static */ int32 AIIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile)
+{
+	return AIMap::DistanceManhattan(tile, GetLocation(industry_id));
+}
+
+/* static */ int32 AIIndustry::GetDistanceSquareToTile(IndustryID industry_id, TileIndex tile)
+{
+	return AIMap::DistanceSquare(tile, GetLocation(industry_id));
+}
--- a/src/ai/api/ai_industry.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_industry.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -100,6 +100,24 @@
 	 * @return the amount of given cargo transported from this industry last month.
 	 */
 	static uint16 GetLastMonthTransported(IndustryID industry_id, CargoID cargo_id);
+
+	/**
+	 * Get the manhattan distance from the tile to the AIIndustry::GetLocation()
+	 *  of the industry.
+	 * @param industry_id The industry to get the distance to.
+	 * @param tile The tile to get the distance to.
+	 * @return The distance between industry and tile.
+	 */
+	static int32 GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile);
+
+	/**
+	 * Get the square distance from the tile to the AIIndustry::GetLocation()
+	 *  of the industry.
+	 * @param industry_id The industry to get the distance to.
+	 * @param tile The tile to get the distance to.
+	 * @return The distance between industry and tile.
+	 */
+	static int32 GetDistanceSquareToTile(IndustryID industry_id, TileIndex tile);
 };
 
 #endif /* AI_INDUSTRY_HPP */
--- a/src/ai/api/ai_industry.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_industry.hpp.sq	Tue Mar 25 12:12:45 2008 +0000
@@ -14,16 +14,18 @@
 	SQAIIndustry.PreRegister(engine);
 	SQAIIndustry.AddConstructor<void (AIIndustry::*)(), 1>(engine, "x");
 
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetClassName,            "GetClassName",            1, "x");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetMaxIndustryID,        "GetMaxIndustryID",        1, "x");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetIndustryCount,        "GetIndustryCount",        1, "x");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::IsValidIndustry,         "IsValidIndustry",         2, "xi");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetName,                 "GetName",                 2, "xi");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetProduction,           "GetProduction",           3, "xii");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::IsCargoAccepted,         "IsCargoAccepted",         3, "xii");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLocation,             "GetLocation",             2, "xi");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLastMonthProduction,  "GetLastMonthProduction",  3, "xii");
-	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLastMonthTransported, "GetLastMonthTransported", 3, "xii");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetClassName,               "GetClassName",               1, "x");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetMaxIndustryID,           "GetMaxIndustryID",           1, "x");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetIndustryCount,           "GetIndustryCount",           1, "x");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::IsValidIndustry,            "IsValidIndustry",            2, "xi");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetName,                    "GetName",                    2, "xi");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetProduction,              "GetProduction",              3, "xii");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::IsCargoAccepted,            "IsCargoAccepted",            3, "xii");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLocation,                "GetLocation",                2, "xi");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLastMonthProduction,     "GetLastMonthProduction",     3, "xii");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetLastMonthTransported,    "GetLastMonthTransported",    3, "xii");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, "xii");
+	SQAIIndustry.DefSQStaticMethod(engine, &AIIndustry::GetDistanceSquareToTile,    "GetDistanceSquareToTile",    3, "xii");
 
 	SQAIIndustry.PostRegister(engine);
 }
--- a/src/ai/api/ai_industrylist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-#include "ai_industrylist_valuator.hpp"
-#include "ai_industry.hpp"
-#include "ai_map.hpp"
-
-int32 AIIndustryList_vProduction::Valuate(int32 industry_id) const
-{
-	return AIIndustry::GetProduction(industry_id, this->cargo_id);
-}
-
-int32 AIIndustryList_vCargoAccepted::Valuate(int32 industry_id) const
-{
-	return AIIndustry::IsCargoAccepted(industry_id, this->cargo_id);
-}
-
-int32 AIIndustryList_vLocation::Valuate(int32 industry_id) const
-{
-	return AIIndustry::GetLocation(industry_id);
-}
-
-int32 AIIndustryList_vDistanceManhattanToTile::Valuate(int32 industry_id) const
-{
-	return AIMap::DistanceManhattan(this->tile, AIIndustry::GetLocation(industry_id));
-}
-
-int32 AIIndustryList_vDistanceSquareToTile::Valuate(int32 industry_id) const
-{
-	return AIMap::DistanceSquare(this->tile, AIIndustry::GetLocation(industry_id));
-}
--- a/src/ai/api/ai_industrylist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/* $Id$ */
-
-/** @file ai_industrylist_valuator.hpp all the valuators for AIIndustryList */
-
-#ifndef AI_INDUSTRYLIST_VALUATOR_HPP
-#define AI_INDUSTRYLIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Get the production rate of the cargo for entries in an AIIndustryList
- *  instance. This is the amount of production you can expect in a month.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIIndustryList instance.
- * @ingroup AIIndustryList
- */
-class AIIndustryList_vProduction : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIIndustryList_vProduction"; }
-
-	/**
-	 * @param cargo_id The cargo to check the production rate of.
-	 */
-	AIIndustryList_vProduction(CargoID cargo_id) :
-		cargo_id(cargo_id)
-	{}
-
-private:
-	CargoID cargo_id;
-
-	const char *GetListName() const { return "AIIndustryList"; }
-	int32 Valuate(int32 industry) const;
-};
-
-/**
- * See which entries in the AIIndustryList instance accepts a given cargo.
- * @note Resulting items are of the type bool.
- * @note Can only operate on an AIIndustryList instance.
- * @ingroup AIIndustryList
- */
-class AIIndustryList_vCargoAccepted : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIIndustryList_vCargoAccepted"; }
-
-	/**
-	 * @param cargo_id Check if this cargo is accepted.
-	 */
-	AIIndustryList_vCargoAccepted(CargoID cargo_id) :
-		cargo_id(cargo_id)
-	{}
-
-private:
-	CargoID cargo_id;
-
-	const char *GetListName() const { return "AIIndustryList"; }
-	int32 Valuate(int32 industry) const;
-};
-
-/**
- * Get the location for entries in an AIIndustryList instance.
- * @note Resulting items are of the type TileIndex.
- * @note Can only operate on an AIIndustryList instance.
- * @ingroup AIIndustryList
- */
-class AIIndustryList_vLocation : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIIndustryList_vGetLocation"; }
-
-private:
-	const char *GetListName() const { return "AIIndustryList"; }
-	int32 Valuate(int32 industry) const;
-};
-
-/**
- * Get the manhattan distance to a tile for entries in an AIIndustryList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AIIndustryList instance.
- * @ingroup AIIndustryList
- */
-class AIIndustryList_vDistanceManhattanToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIIndustryList_vDistanceManhattanToTile"; }
-
-	/**
-	 * @param tile The tile to get the distance to.
-	 */
-	AIIndustryList_vDistanceManhattanToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	const char *GetListName() const { return "AIIndustryList"; }
-	int32 Valuate(int32 station) const;
-};
-
-/**
- * Get the square distance to a tile for entries in an AIIndustryList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AIIndustryList instance.
- * @ingroup AIIndustryList
- */
-class AIIndustryList_vDistanceSquareToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIIndustryList_vDistanceSquareToTile"; }
-
-	/**
-	 * @param tile The tile to get the distance to.
-	 */
-	AIIndustryList_vDistanceSquareToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	const char *GetListName() const { return "AIIndustryList"; }
-	int32 Valuate(int32 station) const;
-};
-
-#endif /* AI_INDUSTRYLIST_VALUATOR_HPP */
--- a/src/ai/api/ai_industrylist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-#include "ai_industrylist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AIIndustryList_vProduction to be used as Squirrel parameter */
-	template <> AIIndustryList_vProduction *GetParam(ForceType<AIIndustryList_vProduction *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vProduction *)instance; }
-	template <> AIIndustryList_vProduction &GetParam(ForceType<AIIndustryList_vProduction &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vProduction *)instance; }
-	template <> const AIIndustryList_vProduction *GetParam(ForceType<const AIIndustryList_vProduction *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vProduction *)instance; }
-	template <> const AIIndustryList_vProduction &GetParam(ForceType<const AIIndustryList_vProduction &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vProduction *)instance; }
-	template <> int Return<AIIndustryList_vProduction *>(HSQUIRRELVM vm, AIIndustryList_vProduction *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIIndustryList_vProduction", res, NULL, DefSQDestructorCallback<AIIndustryList_vProduction>); return 1; }
-}; // namespace SQConvert
-
-void SQAIIndustryList_vProduction_Register(Squirrel *engine) {
-	DefSQClass <AIIndustryList_vProduction> SQAIIndustryList_vProduction("AIIndustryList_vProduction");
-	SQAIIndustryList_vProduction.PreRegister(engine);
-	SQAIIndustryList_vProduction.AddConstructor<void (AIIndustryList_vProduction::*)(CargoID cargo_id), 2>(engine, "xi");
-
-	SQAIIndustryList_vProduction.DefSQStaticMethod(engine, &AIIndustryList_vProduction::GetClassName, "GetClassName", 1, "x");
-
-	SQAIIndustryList_vProduction.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIIndustryList_vCargoAccepted to be used as Squirrel parameter */
-	template <> AIIndustryList_vCargoAccepted *GetParam(ForceType<AIIndustryList_vCargoAccepted *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vCargoAccepted *)instance; }
-	template <> AIIndustryList_vCargoAccepted &GetParam(ForceType<AIIndustryList_vCargoAccepted &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vCargoAccepted *)instance; }
-	template <> const AIIndustryList_vCargoAccepted *GetParam(ForceType<const AIIndustryList_vCargoAccepted *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vCargoAccepted *)instance; }
-	template <> const AIIndustryList_vCargoAccepted &GetParam(ForceType<const AIIndustryList_vCargoAccepted &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vCargoAccepted *)instance; }
-	template <> int Return<AIIndustryList_vCargoAccepted *>(HSQUIRRELVM vm, AIIndustryList_vCargoAccepted *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIIndustryList_vCargoAccepted", res, NULL, DefSQDestructorCallback<AIIndustryList_vCargoAccepted>); return 1; }
-}; // namespace SQConvert
-
-void SQAIIndustryList_vCargoAccepted_Register(Squirrel *engine) {
-	DefSQClass <AIIndustryList_vCargoAccepted> SQAIIndustryList_vCargoAccepted("AIIndustryList_vCargoAccepted");
-	SQAIIndustryList_vCargoAccepted.PreRegister(engine);
-	SQAIIndustryList_vCargoAccepted.AddConstructor<void (AIIndustryList_vCargoAccepted::*)(CargoID cargo_id), 2>(engine, "xi");
-
-	SQAIIndustryList_vCargoAccepted.DefSQStaticMethod(engine, &AIIndustryList_vCargoAccepted::GetClassName, "GetClassName", 1, "x");
-
-	SQAIIndustryList_vCargoAccepted.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIIndustryList_vLocation to be used as Squirrel parameter */
-	template <> AIIndustryList_vLocation *GetParam(ForceType<AIIndustryList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vLocation *)instance; }
-	template <> AIIndustryList_vLocation &GetParam(ForceType<AIIndustryList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vLocation *)instance; }
-	template <> const AIIndustryList_vLocation *GetParam(ForceType<const AIIndustryList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vLocation *)instance; }
-	template <> const AIIndustryList_vLocation &GetParam(ForceType<const AIIndustryList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vLocation *)instance; }
-	template <> int Return<AIIndustryList_vLocation *>(HSQUIRRELVM vm, AIIndustryList_vLocation *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIIndustryList_vLocation", res, NULL, DefSQDestructorCallback<AIIndustryList_vLocation>); return 1; }
-}; // namespace SQConvert
-
-void SQAIIndustryList_vLocation_Register(Squirrel *engine) {
-	DefSQClass <AIIndustryList_vLocation> SQAIIndustryList_vLocation("AIIndustryList_vLocation");
-	SQAIIndustryList_vLocation.PreRegister(engine);
-	SQAIIndustryList_vLocation.AddConstructor<void (AIIndustryList_vLocation::*)(), 1>(engine, "x");
-
-	SQAIIndustryList_vLocation.DefSQStaticMethod(engine, &AIIndustryList_vLocation::GetClassName, "GetClassName", 1, "x");
-
-	SQAIIndustryList_vLocation.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIIndustryList_vDistanceManhattanToTile to be used as Squirrel parameter */
-	template <> AIIndustryList_vDistanceManhattanToTile *GetParam(ForceType<AIIndustryList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vDistanceManhattanToTile *)instance; }
-	template <> AIIndustryList_vDistanceManhattanToTile &GetParam(ForceType<AIIndustryList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vDistanceManhattanToTile *)instance; }
-	template <> const AIIndustryList_vDistanceManhattanToTile *GetParam(ForceType<const AIIndustryList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vDistanceManhattanToTile *)instance; }
-	template <> const AIIndustryList_vDistanceManhattanToTile &GetParam(ForceType<const AIIndustryList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vDistanceManhattanToTile *)instance; }
-	template <> int Return<AIIndustryList_vDistanceManhattanToTile *>(HSQUIRRELVM vm, AIIndustryList_vDistanceManhattanToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIIndustryList_vDistanceManhattanToTile", res, NULL, DefSQDestructorCallback<AIIndustryList_vDistanceManhattanToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAIIndustryList_vDistanceManhattanToTile_Register(Squirrel *engine) {
-	DefSQClass <AIIndustryList_vDistanceManhattanToTile> SQAIIndustryList_vDistanceManhattanToTile("AIIndustryList_vDistanceManhattanToTile");
-	SQAIIndustryList_vDistanceManhattanToTile.PreRegister(engine);
-	SQAIIndustryList_vDistanceManhattanToTile.AddConstructor<void (AIIndustryList_vDistanceManhattanToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAIIndustryList_vDistanceManhattanToTile.DefSQStaticMethod(engine, &AIIndustryList_vDistanceManhattanToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAIIndustryList_vDistanceManhattanToTile.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIIndustryList_vDistanceSquareToTile to be used as Squirrel parameter */
-	template <> AIIndustryList_vDistanceSquareToTile *GetParam(ForceType<AIIndustryList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vDistanceSquareToTile *)instance; }
-	template <> AIIndustryList_vDistanceSquareToTile &GetParam(ForceType<AIIndustryList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vDistanceSquareToTile *)instance; }
-	template <> const AIIndustryList_vDistanceSquareToTile *GetParam(ForceType<const AIIndustryList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList_vDistanceSquareToTile *)instance; }
-	template <> const AIIndustryList_vDistanceSquareToTile &GetParam(ForceType<const AIIndustryList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList_vDistanceSquareToTile *)instance; }
-	template <> int Return<AIIndustryList_vDistanceSquareToTile *>(HSQUIRRELVM vm, AIIndustryList_vDistanceSquareToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIIndustryList_vDistanceSquareToTile", res, NULL, DefSQDestructorCallback<AIIndustryList_vDistanceSquareToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAIIndustryList_vDistanceSquareToTile_Register(Squirrel *engine) {
-	DefSQClass <AIIndustryList_vDistanceSquareToTile> SQAIIndustryList_vDistanceSquareToTile("AIIndustryList_vDistanceSquareToTile");
-	SQAIIndustryList_vDistanceSquareToTile.PreRegister(engine);
-	SQAIIndustryList_vDistanceSquareToTile.AddConstructor<void (AIIndustryList_vDistanceSquareToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAIIndustryList_vDistanceSquareToTile.DefSQStaticMethod(engine, &AIIndustryList_vDistanceSquareToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAIIndustryList_vDistanceSquareToTile.PostRegister(engine);
-}
--- a/src/ai/api/ai_list_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-#include "ai_list_valuator.hpp"
-#include "ai_base.hpp"
-
-int32 AIList_vRandomize::Valuate(int32 town) const
-{
-	return AIBase::Rand();
-}
--- a/src/ai/api/ai_list_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/* $Id$ */
-
-/** @file ai_list_valuator.hpp all the valuators for AIList */
-
-#ifndef AI_LIST_VALUATOR_HPP
-#define AI_LIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Give a random value for each entry in an AIList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIList instance.
- * @ingroup AIList
- */
-class AIList_vRandomize : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIList_vRandomize"; }
-
-private:
-	const char *GetListName() const { return NULL; }
-	int32 Valuate(int32 item) const;
-};
-
-#endif /* AI_LIST_VALUATOR_HPP */
--- a/src/ai/api/ai_list_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#include "ai_list_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AIList_vRandomize to be used as Squirrel parameter */
-	template <> AIList_vRandomize *GetParam(ForceType<AIList_vRandomize *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIList_vRandomize *)instance; }
-	template <> AIList_vRandomize &GetParam(ForceType<AIList_vRandomize &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIList_vRandomize *)instance; }
-	template <> const AIList_vRandomize *GetParam(ForceType<const AIList_vRandomize *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIList_vRandomize *)instance; }
-	template <> const AIList_vRandomize &GetParam(ForceType<const AIList_vRandomize &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIList_vRandomize *)instance; }
-	template <> int Return<AIList_vRandomize *>(HSQUIRRELVM vm, AIList_vRandomize *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIList_vRandomize", res, NULL, DefSQDestructorCallback<AIList_vRandomize>); return 1; }
-}; // namespace SQConvert
-
-void SQAIList_vRandomize_Register(Squirrel *engine) {
-	DefSQClass <AIList_vRandomize> SQAIList_vRandomize("AIList_vRandomize");
-	SQAIList_vRandomize.PreRegister(engine);
-	SQAIList_vRandomize.AddConstructor<void (AIList_vRandomize::*)(), 1>(engine, "x");
-
-	SQAIList_vRandomize.DefSQStaticMethod(engine, &AIList_vRandomize::GetClassName, "GetClassName", 1, "x");
-
-	SQAIList_vRandomize.PostRegister(engine);
-}
--- a/src/ai/api/ai_object.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_object.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -9,6 +9,13 @@
 #include "../../functions.h"
 #include "../../misc/countedptr.hpp"
 
+#ifndef _SQUIRREL_H_
+/* Life becomes easier when we can tell about a function it needs the VM, but
+ *  without really including 'squirrel.h'. */
+typedef void* HSQUIRRELVM;
+typedef int SQInteger;
+#endif
+
 /**
  * The callback function for Mode-classes.
  */
--- a/src/ai/api/ai_station.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_station.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -4,6 +4,7 @@
 
 #include "ai_station.hpp"
 #include "ai_cargo.hpp"
+#include "ai_map.hpp"
 #include "../../debug.h"
 #include "../../station.h"
 #include "../../station_map.h"
@@ -76,3 +77,13 @@
 		default:                 return CA_NONE;
 	}
 }
+
+/* static */ int32 AIStation::GetDistanceManhattanToTile(StationID station_id, TileIndex tile)
+{
+	return AIMap::DistanceManhattan(tile, GetLocation(station_id));
+}
+
+/* static */ int32 AIStation::GetDistanceSquareToTile(StationID station_id, TileIndex tile)
+{
+	return AIMap::DistanceSquare(tile, GetLocation(station_id));
+}
--- a/src/ai/api/ai_station.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_station.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -86,6 +86,24 @@
 	 * @return the radius in tiles.
 	 */
 	static int32 GetCoverageRadius(AIStation::StationType type);
+
+	/**
+	 * Get the manhattan distance from the tile to the AIStation::GetLocation()
+	 *  of the station.
+	 * @param station_id The station to get the distance to.
+	 * @param tile The tile to get the distance to.
+	 * @return The distance between station and tile.
+	 */
+	static int32 GetDistanceManhattanToTile(StationID station_id, TileIndex tile);
+
+	/**
+	 * Get the square distance from the tile to the AIStation::GetLocation()
+	 *  of the station.
+	 * @param station_id The station to get the distance to.
+	 * @param tile The tile to get the distance to.
+	 * @return The distance between station and tile.
+	 */
+	static int32 GetDistanceSquareToTile(StationID station_id, TileIndex tile);
 };
 DECLARE_ENUM_AS_BIT_SET(AIStation::StationType);
 
--- a/src/ai/api/ai_station.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_station.hpp.sq	Tue Mar 25 12:12:45 2008 +0000
@@ -25,14 +25,16 @@
 	SQAIStation.DefSQConst(engine, AIStation::STATION_AIRPORT,    "STATION_AIRPORT");
 	SQAIStation.DefSQConst(engine, AIStation::STATION_DOCK,       "STATION_DOCK");
 
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetClassName,      "GetClassName",      1, "x");
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::IsValidStation,    "IsValidStation",    2, "xi");
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetStationID,      "GetStationID",      2, "xi");
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetName,           "GetName",           2, "xi");
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetLocation,       "GetLocation",       2, "xi");
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoWaiting,   "GetCargoWaiting",   3, "xii");
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoRating,    "GetCargoRating",    3, "xii");
-	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCoverageRadius, "GetCoverageRadius", 2, "xi");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetClassName,               "GetClassName",               1, "x");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::IsValidStation,             "IsValidStation",             2, "xi");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetStationID,               "GetStationID",               2, "xi");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetName,                    "GetName",                    2, "xi");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetLocation,                "GetLocation",                2, "xi");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoWaiting,            "GetCargoWaiting",            3, "xii");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoRating,             "GetCargoRating",             3, "xii");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCoverageRadius,          "GetCoverageRadius",          2, "xi");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, "xii");
+	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetDistanceSquareToTile,    "GetDistanceSquareToTile",    3, "xii");
 
 	SQAIStation.PostRegister(engine);
 }
--- a/src/ai/api/ai_stationlist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/* $Id$ */
-
-#include "ai_stationlist_valuator.hpp"
-#include "ai_station.hpp"
-#include "ai_map.hpp"
-
-int32 AIStationList_vLocation::Valuate(int32 station_id) const
-{
-	return AIStation::GetLocation(station_id);
-}
-
-int32 AIStationList_vCargoWaiting::Valuate(int32 station_id) const
-{
-	return AIStation::GetCargoWaiting(station_id, this->cargo_id);
-}
-
-int32 AIStationList_vCargoRating::Valuate(int32 station_id) const
-{
-	return AIStation::GetCargoRating(station_id, this->cargo_id);
-}
-
-int32 AIStationList_vDistanceManhattanToTile::Valuate(int32 station_id) const
-{
-	return AIMap::DistanceManhattan(this->tile, AIStation::GetLocation(station_id));
-}
-
-int32 AIStationList_vDistanceSquareToTile::Valuate(int32 station_id) const
-{
-	return AIMap::DistanceSquare(this->tile, AIStation::GetLocation(station_id));
-}
--- a/src/ai/api/ai_stationlist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/* $Id$ */
-
-/** @file ai_stationlist_valuator.hpp all the valuators for AIStationList */
-
-#ifndef AI_STATIONLIST_VALUATOR_HPP
-#define AI_STATIONLIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Get the location for entries in an AIStationList instance.
- * @note Resulting items are of the type TileIndex.
- * @note Can only operate on an AIStationList instance.
- * @ingroup AIStationList
- */
-class AIStationList_vLocation : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIStationList_vGetLocation"; }
-
-private:
-	const char *GetListName() const { return "AIStationList"; }
-	int32 Valuate(int32 station_id) const;
-};
-
-/**
- * Get the cargo-waiting for entries in an AIStationList instance.
- * @note Resulting items are of the type uint32 (units of cargo).
- * @note Can only operate on an AIStationList instance.
- * @ingroup AIStationList
- */
-class AIStationList_vCargoWaiting : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIStationList_vCargoWaiting"; }
-
-	/**
-	 * @param cargo_id The cargo of which you want to get the amount of units waiting for.
-	 */
-	AIStationList_vCargoWaiting(CargoID cargo_id) :
-		cargo_id(cargo_id)
-	{}
-
-private:
-	CargoID cargo_id;
-
-	const char *GetListName() const { return "AIStationList"; }
-	int32 Valuate(int32 station_id) const;
-};
-
-/**
- * Get the cargo rating for entries in an AIStationList instance.
- * @note Resulting items are of the type int32 (percent).
- * @note Can only operate on an AIStationList instance.
- * @ingroup AIStationList
- */
-class AIStationList_vCargoRating : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIStationList_vCargoRating"; }
-
-	/**
-	 * @param cargo_id The cargo of which you want to get the rating of.
-	 */
-	AIStationList_vCargoRating(CargoID cargo_id) :
-		cargo_id(cargo_id)
-	{}
-
-private:
-	CargoID cargo_id;
-
-	const char *GetListName() const { return "AIStationList"; }
-	int32 Valuate(int32 station_id) const;
-};
-
-/**
- * Get the manhattan distance to a tile for entries in an AIStationList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AIStationList instance.
- * @ingroup AIStationList
- */
-class AIStationList_vDistanceManhattanToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIStationList_vDistanceManhattanToTile"; }
-
-	/**
-	 * @param tile The tile to get the distances to.
-	 */
-	AIStationList_vDistanceManhattanToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	const char *GetListName() const { return "AIStationList"; }
-	int32 Valuate(int32 station_id) const;
-};
-
-/**
- * Get the square distance to a tile for entries in an AIStationList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AIStationList instance.
- * @ingroup AIStationList
- */
-class AIStationList_vDistanceSquareToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIStationList_vDistanceSquareToTile"; }
-
-	/**
-	 * @param tile The tile to get the distances to.
-	 */
-	AIStationList_vDistanceSquareToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	const char *GetListName() const { return "AIStationList"; }
-	int32 Valuate(int32 station_id) const;
-};
-
-#endif /* AI_STATIONLIST_VALUATOR_HPP */
--- a/src/ai/api/ai_stationlist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-#include "ai_stationlist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AIStationList_vLocation to be used as Squirrel parameter */
-	template <> AIStationList_vLocation *GetParam(ForceType<AIStationList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vLocation *)instance; }
-	template <> AIStationList_vLocation &GetParam(ForceType<AIStationList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vLocation *)instance; }
-	template <> const AIStationList_vLocation *GetParam(ForceType<const AIStationList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vLocation *)instance; }
-	template <> const AIStationList_vLocation &GetParam(ForceType<const AIStationList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vLocation *)instance; }
-	template <> int Return<AIStationList_vLocation *>(HSQUIRRELVM vm, AIStationList_vLocation *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIStationList_vLocation", res, NULL, DefSQDestructorCallback<AIStationList_vLocation>); return 1; }
-}; // namespace SQConvert
-
-void SQAIStationList_vLocation_Register(Squirrel *engine) {
-	DefSQClass <AIStationList_vLocation> SQAIStationList_vLocation("AIStationList_vLocation");
-	SQAIStationList_vLocation.PreRegister(engine);
-	SQAIStationList_vLocation.AddConstructor<void (AIStationList_vLocation::*)(), 1>(engine, "x");
-
-	SQAIStationList_vLocation.DefSQStaticMethod(engine, &AIStationList_vLocation::GetClassName, "GetClassName", 1, "x");
-
-	SQAIStationList_vLocation.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIStationList_vCargoWaiting to be used as Squirrel parameter */
-	template <> AIStationList_vCargoWaiting *GetParam(ForceType<AIStationList_vCargoWaiting *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vCargoWaiting *)instance; }
-	template <> AIStationList_vCargoWaiting &GetParam(ForceType<AIStationList_vCargoWaiting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vCargoWaiting *)instance; }
-	template <> const AIStationList_vCargoWaiting *GetParam(ForceType<const AIStationList_vCargoWaiting *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vCargoWaiting *)instance; }
-	template <> const AIStationList_vCargoWaiting &GetParam(ForceType<const AIStationList_vCargoWaiting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vCargoWaiting *)instance; }
-	template <> int Return<AIStationList_vCargoWaiting *>(HSQUIRRELVM vm, AIStationList_vCargoWaiting *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIStationList_vCargoWaiting", res, NULL, DefSQDestructorCallback<AIStationList_vCargoWaiting>); return 1; }
-}; // namespace SQConvert
-
-void SQAIStationList_vCargoWaiting_Register(Squirrel *engine) {
-	DefSQClass <AIStationList_vCargoWaiting> SQAIStationList_vCargoWaiting("AIStationList_vCargoWaiting");
-	SQAIStationList_vCargoWaiting.PreRegister(engine);
-	SQAIStationList_vCargoWaiting.AddConstructor<void (AIStationList_vCargoWaiting::*)(CargoID cargo_id), 2>(engine, "xi");
-
-	SQAIStationList_vCargoWaiting.DefSQStaticMethod(engine, &AIStationList_vCargoWaiting::GetClassName, "GetClassName", 1, "x");
-
-	SQAIStationList_vCargoWaiting.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIStationList_vCargoRating to be used as Squirrel parameter */
-	template <> AIStationList_vCargoRating *GetParam(ForceType<AIStationList_vCargoRating *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vCargoRating *)instance; }
-	template <> AIStationList_vCargoRating &GetParam(ForceType<AIStationList_vCargoRating &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vCargoRating *)instance; }
-	template <> const AIStationList_vCargoRating *GetParam(ForceType<const AIStationList_vCargoRating *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vCargoRating *)instance; }
-	template <> const AIStationList_vCargoRating &GetParam(ForceType<const AIStationList_vCargoRating &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vCargoRating *)instance; }
-	template <> int Return<AIStationList_vCargoRating *>(HSQUIRRELVM vm, AIStationList_vCargoRating *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIStationList_vCargoRating", res, NULL, DefSQDestructorCallback<AIStationList_vCargoRating>); return 1; }
-}; // namespace SQConvert
-
-void SQAIStationList_vCargoRating_Register(Squirrel *engine) {
-	DefSQClass <AIStationList_vCargoRating> SQAIStationList_vCargoRating("AIStationList_vCargoRating");
-	SQAIStationList_vCargoRating.PreRegister(engine);
-	SQAIStationList_vCargoRating.AddConstructor<void (AIStationList_vCargoRating::*)(CargoID cargo_id), 2>(engine, "xi");
-
-	SQAIStationList_vCargoRating.DefSQStaticMethod(engine, &AIStationList_vCargoRating::GetClassName, "GetClassName", 1, "x");
-
-	SQAIStationList_vCargoRating.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIStationList_vDistanceManhattanToTile to be used as Squirrel parameter */
-	template <> AIStationList_vDistanceManhattanToTile *GetParam(ForceType<AIStationList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vDistanceManhattanToTile *)instance; }
-	template <> AIStationList_vDistanceManhattanToTile &GetParam(ForceType<AIStationList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vDistanceManhattanToTile *)instance; }
-	template <> const AIStationList_vDistanceManhattanToTile *GetParam(ForceType<const AIStationList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vDistanceManhattanToTile *)instance; }
-	template <> const AIStationList_vDistanceManhattanToTile &GetParam(ForceType<const AIStationList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vDistanceManhattanToTile *)instance; }
-	template <> int Return<AIStationList_vDistanceManhattanToTile *>(HSQUIRRELVM vm, AIStationList_vDistanceManhattanToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIStationList_vDistanceManhattanToTile", res, NULL, DefSQDestructorCallback<AIStationList_vDistanceManhattanToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAIStationList_vDistanceManhattanToTile_Register(Squirrel *engine) {
-	DefSQClass <AIStationList_vDistanceManhattanToTile> SQAIStationList_vDistanceManhattanToTile("AIStationList_vDistanceManhattanToTile");
-	SQAIStationList_vDistanceManhattanToTile.PreRegister(engine);
-	SQAIStationList_vDistanceManhattanToTile.AddConstructor<void (AIStationList_vDistanceManhattanToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAIStationList_vDistanceManhattanToTile.DefSQStaticMethod(engine, &AIStationList_vDistanceManhattanToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAIStationList_vDistanceManhattanToTile.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIStationList_vDistanceSquareToTile to be used as Squirrel parameter */
-	template <> AIStationList_vDistanceSquareToTile *GetParam(ForceType<AIStationList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vDistanceSquareToTile *)instance; }
-	template <> AIStationList_vDistanceSquareToTile &GetParam(ForceType<AIStationList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vDistanceSquareToTile *)instance; }
-	template <> const AIStationList_vDistanceSquareToTile *GetParam(ForceType<const AIStationList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList_vDistanceSquareToTile *)instance; }
-	template <> const AIStationList_vDistanceSquareToTile &GetParam(ForceType<const AIStationList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList_vDistanceSquareToTile *)instance; }
-	template <> int Return<AIStationList_vDistanceSquareToTile *>(HSQUIRRELVM vm, AIStationList_vDistanceSquareToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIStationList_vDistanceSquareToTile", res, NULL, DefSQDestructorCallback<AIStationList_vDistanceSquareToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAIStationList_vDistanceSquareToTile_Register(Squirrel *engine) {
-	DefSQClass <AIStationList_vDistanceSquareToTile> SQAIStationList_vDistanceSquareToTile("AIStationList_vDistanceSquareToTile");
-	SQAIStationList_vDistanceSquareToTile.PreRegister(engine);
-	SQAIStationList_vDistanceSquareToTile.AddConstructor<void (AIStationList_vDistanceSquareToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAIStationList_vDistanceSquareToTile.DefSQStaticMethod(engine, &AIStationList_vDistanceSquareToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAIStationList_vDistanceSquareToTile.PostRegister(engine);
-}
--- a/src/ai/api/ai_tile.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_tile.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -3,6 +3,7 @@
 /** @file ai_tile.cpp handles the functions of the AITile class */
 
 #include "ai_tile.hpp"
+#include "ai_map.hpp"
 #include "../../tile_map.h"
 #include "../../map_func.h"
 #include "../../variables.h"
@@ -31,6 +32,22 @@
 	}
 }
 
+/* static */ bool AITile::IsBuildableRectangle(TileIndex tile, uint width, uint height)
+{
+	uint tx, ty;
+
+	tx = AIMap::GetTileX(tile);
+	ty = AIMap::GetTileY(tile);
+
+	for (uint x = tx; x < width + tx; x++) {
+		for (uint y = ty; y < height + ty; y++) {
+			if (!IsBuildable(AIMap::GetTileIndex(x, y))) return false;
+		}
+	}
+
+	return true;
+}
+
 /* static */ bool AITile::IsWater(TileIndex tile)
 {
 	if (!::IsValidTile(tile)) return false;
@@ -83,3 +100,13 @@
 
 	return AIObject::DoCommand(tile, slope, 0, CMD_TERRAFORM_LAND);
 }
+
+/* static */ int32 AITile::GetDistanceManhattanToTile(TileIndex tile_from, TileIndex tile_to)
+{
+	return AIMap::DistanceManhattan(tile_from, tile_to);
+}
+
+/* static */ int32 AITile::GetDistanceSquareToTile(TileIndex tile_from, TileIndex tile_to)
+{
+	return AIMap::DistanceSquare(tile_from, tile_to);
+}
--- a/src/ai/api/ai_tile.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_tile.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -59,6 +59,17 @@
 	static bool IsBuildable(TileIndex tile);
 
 	/**
+	 	 * Check if this tile is buildable in a rectangle around a tile, with the entry in the list as top-left.
+	 * @note Road and rail are considered buildable.
+	 * @param tile the tile to check on.
+	 * @param width the width of the rectangle.
+	 * @param height the height of the rectangle.
+	 * @pre AIMap::IsValidTile(tile).
+	 * @return true if it is buildable, false if not.
+	 */
+	static bool IsBuildableRectangle(TileIndex tile, uint width, uint height);
+
+	/**
 	 * Check if a tile is water.
 	 * @param tile the tile to check on.
 	 * @pre AIMap::IsValidTile(tile).
@@ -112,6 +123,22 @@
 	static int32 GetCargoProduction(TileIndex tile, CargoID cargo_type, uint width, uint height, uint radius);
 
 	/**
+	 * Get the manhattan distance from the tile to the tile.
+	 * @param tile_from The tile to get the distance to.
+	 * @param tile_to The tile to get the distance to.
+	 * @return The distance between the two tiles.
+	 */
+	static int32 GetDistanceManhattanToTile(TileIndex tile_from, TileIndex tile_to);
+
+	/**
+	 * Get the square distance from the tile to the tile.
+	 * @param tile_from The tile to get the distance to.
+	 * @param tile_to The tile to get the distance to.
+	 * @return The distance between the two tiles.
+	 */
+	static int32 GetDistanceSquareToTile(TileIndex tile_from, TileIndex tile_to);
+
+	/**
 	 * Raise the given corners of the tile. The corners can be combined,
 	 *  for example: SLOPE_N | SLOPE_W (= SLOPE_NW)
 	 * @param tile the tile to raise.
--- a/src/ai/api/ai_tile.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_tile.hpp.sq	Tue Mar 25 12:12:45 2008 +0000
@@ -40,15 +40,18 @@
 	SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_E,  "SLOPE_STEEP_E");
 	SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_N,  "SLOPE_STEEP_N");
 
-	SQAITile.DefSQStaticMethod(engine, &AITile::GetClassName,       "GetClassName",       1, "x");
-	SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildable,        "IsBuildable",        2, "xi");
-	SQAITile.DefSQStaticMethod(engine, &AITile::IsWater,            "IsWater",            2, "xi");
-	SQAITile.DefSQStaticMethod(engine, &AITile::GetSlope,           "GetSlope",           2, "xi");
-	SQAITile.DefSQStaticMethod(engine, &AITile::GetHeight,          "GetHeight",          2, "xi");
-	SQAITile.DefSQStaticMethod(engine, &AITile::GetCargoAcceptance, "GetCargoAcceptance", 6, "xiiiii");
-	SQAITile.DefSQStaticMethod(engine, &AITile::GetCargoProduction, "GetCargoProduction", 6, "xiiiii");
-	SQAITile.DefSQStaticMethod(engine, &AITile::RaiseTile,          "RaiseTile",          3, "xii");
-	SQAITile.DefSQStaticMethod(engine, &AITile::LowerTile,          "LowerTile",          3, "xii");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetClassName,               "GetClassName",               1, "x");
+	SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildable,                "IsBuildable",                2, "xi");
+	SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildableRectangle,       "IsBuildableRectangle",       4, "xiii");
+	SQAITile.DefSQStaticMethod(engine, &AITile::IsWater,                    "IsWater",                    2, "xi");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetSlope,                   "GetSlope",                   2, "xi");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetHeight,                  "GetHeight",                  2, "xi");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetCargoAcceptance,         "GetCargoAcceptance",         6, "xiiiii");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetCargoProduction,         "GetCargoProduction",         6, "xiiiii");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, "xii");
+	SQAITile.DefSQStaticMethod(engine, &AITile::GetDistanceSquareToTile,    "GetDistanceSquareToTile",    3, "xii");
+	SQAITile.DefSQStaticMethod(engine, &AITile::RaiseTile,                  "RaiseTile",                  3, "xii");
+	SQAITile.DefSQStaticMethod(engine, &AITile::LowerTile,                  "LowerTile",                  3, "xii");
 
 	SQAITile.PostRegister(engine);
 }
--- a/src/ai/api/ai_tilelist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-#include "ai_tilelist_valuator.hpp"
-#include "ai_tile.hpp"
-#include "ai_road.hpp"
-#include "ai_map.hpp"
-#include "../../road_map.h"
-
-int32 AITileList_vBuildable::Valuate(int32 tile) const
-{
-	return AITile::IsBuildable(tile);
-}
-
-int32 AITileList_vWater::Valuate(int32 tile) const
-{
-	return AITile::IsWater(tile);
-}
-
-int32 AITileList_vBuildableRectangle::Valuate(int32 tile) const
-{
-	uint tx, ty;
-
-	tx = AIMap::GetTileX(tile);
-	ty = AIMap::GetTileY(tile);
-
-	for (uint x = tx; x < this->width + tx; x++) {
-		for (uint y = ty; y < this->height + ty; y++) {
-			if (!AITile::IsBuildable(AIMap::GetTileIndex(x, y))) return false;
-		}
-	}
-
-	return true;
-}
-
-int32 AITileList_vSlope::Valuate(int32 tile) const
-{
-	return AITile::GetSlope(tile);
-}
-
-int32 AITileList_vHeight::Valuate(int32 tile) const
-{
-	return AITile::GetHeight(tile);
-}
-
-int32 AITileList_vNeighbourRoadCount::Valuate(int32 tile) const
-{
-	return AIRoad::GetNeighbourRoadCount(tile);
-}
-
-int32 AITileList_vRoadTile::Valuate(int32 tile) const
-{
-	return ::IsTileType(tile, MP_ROAD) && ::GetRoadTileType(tile) != ROAD_TILE_DEPOT;
-}
-
-int32 AITileList_vCargoAcceptance::Valuate(int32 tile) const
-{
-	return AITile::GetCargoAcceptance(tile, this->cargo_id, this->width, this->height, this->radius);
-}
-
-int32 AITileList_vCargoProduction::Valuate(int32 tile) const
-{
-	return AITile::GetCargoProduction(tile, this->cargo_id, this->width, this->height, this->radius);
-}
-
-int32 AITileList_vDistanceManhattanToTile::Valuate(int32 tile) const
-{
-	return AIMap::DistanceManhattan(this->tile, tile);
-}
-
-int32 AITileList_vDistanceSquareToTile::Valuate(int32 tile) const
-{
-	return AIMap::DistanceSquare(this->tile, tile);
-}
--- a/src/ai/api/ai_tilelist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,245 +0,0 @@
-/* $Id$ */
-
-/** @file ai_tilelist_valuator.hpp all the valuators for AITileList */
-
-#ifndef AI_TILELIST_VALUATOR_HPP
-#define AI_TILELIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Check if tiles are buildable for entries in an AITileList instance.
- * @note Resulting items are of the type bool (0 = not buildable, 1 = buildable).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vBuildable : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vBuildable"; }
-
-private:
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Check if tiles are water-tiles for entries in an AITileList instance.
- * @note Resulting items are of the type bool (0 = not water-tile, 1 = water-tile).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vWater : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vWater"; }
-
-private:
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Check if tiles are buildable in a rectangle around entries in an AITileList instance, with the entry in the list as top-left.
- * @note Resulting items are of the type bool (0 = not buildable, 1 = buildable).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vBuildableRectangle : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vBuildableRectangle"; }
-
-	/**
-	 * @param width The width of the rectangle.
-	 * @param height The height of the rectangle.
-	 */
-	AITileList_vBuildableRectangle(uint width, uint height) :
-		width(width),
-		height(height)
-	{}
-
-private:
-	uint width, height;
-
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Check how tiles in an AITileList instance are sloped.
- * @note Resulting items are of the type int32 (0 = flat, > 1 = slope).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vSlope : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vSlope"; }
-
-private:
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Check the height of the tiles in an AITileList instance.
- * @note Resulting items are of the type int32 (height, ranging from 0 to 15).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vHeight : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vHeight"; }
-
-private:
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Count for each entry in AITileList the amount of neighbours that contain road.
- *   This is a value between 0 and 4, as it only check horizontal and vertical.
- * @note Resulting items are of the type int32 (the amount of neighbour road tiles, value between 0 and 4).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vNeighbourRoadCount : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vNeighbourRoad"; }
-
-private:
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Check if the tiles in AITileList have a piece of road on them.
- * @note Resulting items are of the type bool (0 = no road, 1 = road).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vRoadTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vRoadTile"; }
-
-private:
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Get the amount of estimated accepted cargo for all tiles in AITileList.
- * If this value is >= 8, it means it will accept this cargo. For passengers
- *  and mail it is also a good indicator how much cargo would be brought to
- *  the station.
- * @post Values < 8 means this tile does not accept this cargo.
- * @note Resulting items are of the type int32 (indicating acceptance).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vCargoAcceptance : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vCargoAcceptance"; }
-
-	/**
-	 * @param cargo_id The cargo to check the acceptance for.
-	 * @param width The width of your station.
-	 * @param height The height of your station.
-	 * @param radius The radius of your station-type.
-	 */
-	AITileList_vCargoAcceptance(CargoID cargo_id, uint width, uint height, uint radius) :
-		cargo_id(cargo_id),
-		width(width),
-		height(height),
-		radius(radius)
-	{}
-
-private:
-	CargoID cargo_id;
-	uint width, height, radius;
-
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Get the amount of tiles producing cargo for all tiles in AITileList.
- *  This counts the tiles that produce this cargo. It doesn't give any
- *  indication about the amount it will be producing.
- * @note Town(houses) are not included in the value.
- * @note Resulting items are of the type int32 (indicating tiles of production).
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vCargoProduction : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vCargoProduction"; }
-
-	/**
-	 * @param cargo_id The cargo to check the production for.
-	 * @param width The width of your station.
-	 * @param height The height of your station.
-	 * @param radius The radius of your station-type.
-	 */
-	AITileList_vCargoProduction(CargoID cargo_id, uint width, uint height, uint radius) :
-		cargo_id(cargo_id),
-		width(width),
-		height(height),
-		radius(radius)
-	{}
-
-private:
-	CargoID cargo_id;
-	uint width, height, radius;
-
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 tile) const;
-};
-
-/**
- * Get the manhattan distance to a tile for entries in an AITileList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vDistanceManhattanToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vDistanceManhattanToTile"; }
-
-	/**
-	 * @param tile The tile to get the distance to.
-	 */
-	AITileList_vDistanceManhattanToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 station) const;
-};
-
-/**
- * Get the square distance to a tile for entries in an AITileList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AITileList instance.
- * @ingroup AITileList
- */
-class AITileList_vDistanceSquareToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITileList_vDistanceSquareToTile"; }
-
-	/**
-	 * @param tile The tile to get the distance to.
-	 */
-	AITileList_vDistanceSquareToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	const char *GetListName() const { return "AITileList"; }
-	int32 Valuate(int32 station) const;
-};
-
-
-#endif /* AI_TILELIST_VALUATOR_HPP */
--- a/src/ai/api/ai_tilelist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-#include "ai_tilelist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AITileList_vBuildable to be used as Squirrel parameter */
-	template <> AITileList_vBuildable *GetParam(ForceType<AITileList_vBuildable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vBuildable *)instance; }
-	template <> AITileList_vBuildable &GetParam(ForceType<AITileList_vBuildable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vBuildable *)instance; }
-	template <> const AITileList_vBuildable *GetParam(ForceType<const AITileList_vBuildable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vBuildable *)instance; }
-	template <> const AITileList_vBuildable &GetParam(ForceType<const AITileList_vBuildable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vBuildable *)instance; }
-	template <> int Return<AITileList_vBuildable *>(HSQUIRRELVM vm, AITileList_vBuildable *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vBuildable", res, NULL, DefSQDestructorCallback<AITileList_vBuildable>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vBuildable_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vBuildable> SQAITileList_vBuildable("AITileList_vBuildable");
-	SQAITileList_vBuildable.PreRegister(engine);
-	SQAITileList_vBuildable.AddConstructor<void (AITileList_vBuildable::*)(), 1>(engine, "x");
-
-	SQAITileList_vBuildable.DefSQStaticMethod(engine, &AITileList_vBuildable::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vBuildable.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vWater to be used as Squirrel parameter */
-	template <> AITileList_vWater *GetParam(ForceType<AITileList_vWater *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vWater *)instance; }
-	template <> AITileList_vWater &GetParam(ForceType<AITileList_vWater &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vWater *)instance; }
-	template <> const AITileList_vWater *GetParam(ForceType<const AITileList_vWater *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vWater *)instance; }
-	template <> const AITileList_vWater &GetParam(ForceType<const AITileList_vWater &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vWater *)instance; }
-	template <> int Return<AITileList_vWater *>(HSQUIRRELVM vm, AITileList_vWater *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vWater", res, NULL, DefSQDestructorCallback<AITileList_vWater>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vWater_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vWater> SQAITileList_vWater("AITileList_vWater");
-	SQAITileList_vWater.PreRegister(engine);
-	SQAITileList_vWater.AddConstructor<void (AITileList_vWater::*)(), 1>(engine, "x");
-
-	SQAITileList_vWater.DefSQStaticMethod(engine, &AITileList_vWater::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vWater.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vBuildableRectangle to be used as Squirrel parameter */
-	template <> AITileList_vBuildableRectangle *GetParam(ForceType<AITileList_vBuildableRectangle *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vBuildableRectangle *)instance; }
-	template <> AITileList_vBuildableRectangle &GetParam(ForceType<AITileList_vBuildableRectangle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vBuildableRectangle *)instance; }
-	template <> const AITileList_vBuildableRectangle *GetParam(ForceType<const AITileList_vBuildableRectangle *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vBuildableRectangle *)instance; }
-	template <> const AITileList_vBuildableRectangle &GetParam(ForceType<const AITileList_vBuildableRectangle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vBuildableRectangle *)instance; }
-	template <> int Return<AITileList_vBuildableRectangle *>(HSQUIRRELVM vm, AITileList_vBuildableRectangle *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vBuildableRectangle", res, NULL, DefSQDestructorCallback<AITileList_vBuildableRectangle>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vBuildableRectangle_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vBuildableRectangle> SQAITileList_vBuildableRectangle("AITileList_vBuildableRectangle");
-	SQAITileList_vBuildableRectangle.PreRegister(engine);
-	SQAITileList_vBuildableRectangle.AddConstructor<void (AITileList_vBuildableRectangle::*)(uint width, uint height), 3>(engine, "xii");
-
-	SQAITileList_vBuildableRectangle.DefSQStaticMethod(engine, &AITileList_vBuildableRectangle::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vBuildableRectangle.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vSlope to be used as Squirrel parameter */
-	template <> AITileList_vSlope *GetParam(ForceType<AITileList_vSlope *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vSlope *)instance; }
-	template <> AITileList_vSlope &GetParam(ForceType<AITileList_vSlope &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vSlope *)instance; }
-	template <> const AITileList_vSlope *GetParam(ForceType<const AITileList_vSlope *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vSlope *)instance; }
-	template <> const AITileList_vSlope &GetParam(ForceType<const AITileList_vSlope &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vSlope *)instance; }
-	template <> int Return<AITileList_vSlope *>(HSQUIRRELVM vm, AITileList_vSlope *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vSlope", res, NULL, DefSQDestructorCallback<AITileList_vSlope>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vSlope_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vSlope> SQAITileList_vSlope("AITileList_vSlope");
-	SQAITileList_vSlope.PreRegister(engine);
-	SQAITileList_vSlope.AddConstructor<void (AITileList_vSlope::*)(), 1>(engine, "x");
-
-	SQAITileList_vSlope.DefSQStaticMethod(engine, &AITileList_vSlope::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vSlope.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vHeight to be used as Squirrel parameter */
-	template <> AITileList_vHeight *GetParam(ForceType<AITileList_vHeight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vHeight *)instance; }
-	template <> AITileList_vHeight &GetParam(ForceType<AITileList_vHeight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vHeight *)instance; }
-	template <> const AITileList_vHeight *GetParam(ForceType<const AITileList_vHeight *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vHeight *)instance; }
-	template <> const AITileList_vHeight &GetParam(ForceType<const AITileList_vHeight &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vHeight *)instance; }
-	template <> int Return<AITileList_vHeight *>(HSQUIRRELVM vm, AITileList_vHeight *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vHeight", res, NULL, DefSQDestructorCallback<AITileList_vHeight>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vHeight_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vHeight> SQAITileList_vHeight("AITileList_vHeight");
-	SQAITileList_vHeight.PreRegister(engine);
-	SQAITileList_vHeight.AddConstructor<void (AITileList_vHeight::*)(), 1>(engine, "x");
-
-	SQAITileList_vHeight.DefSQStaticMethod(engine, &AITileList_vHeight::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vHeight.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vNeighbourRoadCount to be used as Squirrel parameter */
-	template <> AITileList_vNeighbourRoadCount *GetParam(ForceType<AITileList_vNeighbourRoadCount *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vNeighbourRoadCount *)instance; }
-	template <> AITileList_vNeighbourRoadCount &GetParam(ForceType<AITileList_vNeighbourRoadCount &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vNeighbourRoadCount *)instance; }
-	template <> const AITileList_vNeighbourRoadCount *GetParam(ForceType<const AITileList_vNeighbourRoadCount *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vNeighbourRoadCount *)instance; }
-	template <> const AITileList_vNeighbourRoadCount &GetParam(ForceType<const AITileList_vNeighbourRoadCount &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vNeighbourRoadCount *)instance; }
-	template <> int Return<AITileList_vNeighbourRoadCount *>(HSQUIRRELVM vm, AITileList_vNeighbourRoadCount *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vNeighbourRoadCount", res, NULL, DefSQDestructorCallback<AITileList_vNeighbourRoadCount>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vNeighbourRoadCount_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vNeighbourRoadCount> SQAITileList_vNeighbourRoadCount("AITileList_vNeighbourRoadCount");
-	SQAITileList_vNeighbourRoadCount.PreRegister(engine);
-	SQAITileList_vNeighbourRoadCount.AddConstructor<void (AITileList_vNeighbourRoadCount::*)(), 1>(engine, "x");
-
-	SQAITileList_vNeighbourRoadCount.DefSQStaticMethod(engine, &AITileList_vNeighbourRoadCount::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vNeighbourRoadCount.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vRoadTile to be used as Squirrel parameter */
-	template <> AITileList_vRoadTile *GetParam(ForceType<AITileList_vRoadTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vRoadTile *)instance; }
-	template <> AITileList_vRoadTile &GetParam(ForceType<AITileList_vRoadTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vRoadTile *)instance; }
-	template <> const AITileList_vRoadTile *GetParam(ForceType<const AITileList_vRoadTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vRoadTile *)instance; }
-	template <> const AITileList_vRoadTile &GetParam(ForceType<const AITileList_vRoadTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vRoadTile *)instance; }
-	template <> int Return<AITileList_vRoadTile *>(HSQUIRRELVM vm, AITileList_vRoadTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vRoadTile", res, NULL, DefSQDestructorCallback<AITileList_vRoadTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vRoadTile_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vRoadTile> SQAITileList_vRoadTile("AITileList_vRoadTile");
-	SQAITileList_vRoadTile.PreRegister(engine);
-	SQAITileList_vRoadTile.AddConstructor<void (AITileList_vRoadTile::*)(), 1>(engine, "x");
-
-	SQAITileList_vRoadTile.DefSQStaticMethod(engine, &AITileList_vRoadTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vRoadTile.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vCargoAcceptance to be used as Squirrel parameter */
-	template <> AITileList_vCargoAcceptance *GetParam(ForceType<AITileList_vCargoAcceptance *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vCargoAcceptance *)instance; }
-	template <> AITileList_vCargoAcceptance &GetParam(ForceType<AITileList_vCargoAcceptance &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vCargoAcceptance *)instance; }
-	template <> const AITileList_vCargoAcceptance *GetParam(ForceType<const AITileList_vCargoAcceptance *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vCargoAcceptance *)instance; }
-	template <> const AITileList_vCargoAcceptance &GetParam(ForceType<const AITileList_vCargoAcceptance &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vCargoAcceptance *)instance; }
-	template <> int Return<AITileList_vCargoAcceptance *>(HSQUIRRELVM vm, AITileList_vCargoAcceptance *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vCargoAcceptance", res, NULL, DefSQDestructorCallback<AITileList_vCargoAcceptance>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vCargoAcceptance_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vCargoAcceptance> SQAITileList_vCargoAcceptance("AITileList_vCargoAcceptance");
-	SQAITileList_vCargoAcceptance.PreRegister(engine);
-	SQAITileList_vCargoAcceptance.AddConstructor<void (AITileList_vCargoAcceptance::*)(CargoID cargo_id, uint width, uint height, uint radius), 5>(engine, "xiiii");
-
-	SQAITileList_vCargoAcceptance.DefSQStaticMethod(engine, &AITileList_vCargoAcceptance::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vCargoAcceptance.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vCargoProduction to be used as Squirrel parameter */
-	template <> AITileList_vCargoProduction *GetParam(ForceType<AITileList_vCargoProduction *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vCargoProduction *)instance; }
-	template <> AITileList_vCargoProduction &GetParam(ForceType<AITileList_vCargoProduction &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vCargoProduction *)instance; }
-	template <> const AITileList_vCargoProduction *GetParam(ForceType<const AITileList_vCargoProduction *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vCargoProduction *)instance; }
-	template <> const AITileList_vCargoProduction &GetParam(ForceType<const AITileList_vCargoProduction &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vCargoProduction *)instance; }
-	template <> int Return<AITileList_vCargoProduction *>(HSQUIRRELVM vm, AITileList_vCargoProduction *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vCargoProduction", res, NULL, DefSQDestructorCallback<AITileList_vCargoProduction>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vCargoProduction_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vCargoProduction> SQAITileList_vCargoProduction("AITileList_vCargoProduction");
-	SQAITileList_vCargoProduction.PreRegister(engine);
-	SQAITileList_vCargoProduction.AddConstructor<void (AITileList_vCargoProduction::*)(CargoID cargo_id, uint width, uint height, uint radius), 5>(engine, "xiiii");
-
-	SQAITileList_vCargoProduction.DefSQStaticMethod(engine, &AITileList_vCargoProduction::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vCargoProduction.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vDistanceManhattanToTile to be used as Squirrel parameter */
-	template <> AITileList_vDistanceManhattanToTile *GetParam(ForceType<AITileList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vDistanceManhattanToTile *)instance; }
-	template <> AITileList_vDistanceManhattanToTile &GetParam(ForceType<AITileList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vDistanceManhattanToTile *)instance; }
-	template <> const AITileList_vDistanceManhattanToTile *GetParam(ForceType<const AITileList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vDistanceManhattanToTile *)instance; }
-	template <> const AITileList_vDistanceManhattanToTile &GetParam(ForceType<const AITileList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vDistanceManhattanToTile *)instance; }
-	template <> int Return<AITileList_vDistanceManhattanToTile *>(HSQUIRRELVM vm, AITileList_vDistanceManhattanToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vDistanceManhattanToTile", res, NULL, DefSQDestructorCallback<AITileList_vDistanceManhattanToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vDistanceManhattanToTile_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vDistanceManhattanToTile> SQAITileList_vDistanceManhattanToTile("AITileList_vDistanceManhattanToTile");
-	SQAITileList_vDistanceManhattanToTile.PreRegister(engine);
-	SQAITileList_vDistanceManhattanToTile.AddConstructor<void (AITileList_vDistanceManhattanToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAITileList_vDistanceManhattanToTile.DefSQStaticMethod(engine, &AITileList_vDistanceManhattanToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vDistanceManhattanToTile.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITileList_vDistanceSquareToTile to be used as Squirrel parameter */
-	template <> AITileList_vDistanceSquareToTile *GetParam(ForceType<AITileList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vDistanceSquareToTile *)instance; }
-	template <> AITileList_vDistanceSquareToTile &GetParam(ForceType<AITileList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vDistanceSquareToTile *)instance; }
-	template <> const AITileList_vDistanceSquareToTile *GetParam(ForceType<const AITileList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList_vDistanceSquareToTile *)instance; }
-	template <> const AITileList_vDistanceSquareToTile &GetParam(ForceType<const AITileList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList_vDistanceSquareToTile *)instance; }
-	template <> int Return<AITileList_vDistanceSquareToTile *>(HSQUIRRELVM vm, AITileList_vDistanceSquareToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITileList_vDistanceSquareToTile", res, NULL, DefSQDestructorCallback<AITileList_vDistanceSquareToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAITileList_vDistanceSquareToTile_Register(Squirrel *engine) {
-	DefSQClass <AITileList_vDistanceSquareToTile> SQAITileList_vDistanceSquareToTile("AITileList_vDistanceSquareToTile");
-	SQAITileList_vDistanceSquareToTile.PreRegister(engine);
-	SQAITileList_vDistanceSquareToTile.AddConstructor<void (AITileList_vDistanceSquareToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAITileList_vDistanceSquareToTile.DefSQStaticMethod(engine, &AITileList_vDistanceSquareToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAITileList_vDistanceSquareToTile.PostRegister(engine);
-}
--- a/src/ai/api/ai_town.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_town.cpp	Tue Mar 25 12:12:45 2008 +0000
@@ -3,6 +3,7 @@
 /** @file ai_town.cpp handles the town-related functions of the AITown class */
 
 #include "ai_town.hpp"
+#include "ai_map.hpp"
 #include "../../town.h"
 #include "../../strings_func.h"
 #include "../../town_type.h"
@@ -49,3 +50,13 @@
 	const Town *t = ::GetTown(town_id);
 	return t->xy;
 }
+
+/* static */ int32 AITown::GetDistanceManhattanToTile(TownID town_id, TileIndex tile)
+{
+	return AIMap::DistanceManhattan(tile, GetLocation(town_id));
+}
+
+/* static */ int32 AITown::GetDistanceSquareToTile(TownID town_id, TileIndex tile)
+{
+	return AIMap::DistanceSquare(tile, GetLocation(town_id));
+}
--- a/src/ai/api/ai_town.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_town.hpp	Tue Mar 25 12:12:45 2008 +0000
@@ -66,6 +66,24 @@
 	 * @post return value is always valid with AIMap::IsValidTile().
 	 */
 	static TileIndex GetLocation(TownID town_id);
+
+	/**
+	 * Get the manhattan distance from the tile to the AITown::GetLocation()
+	 *  of the town.
+	 * @param town_id The town to get the distance to.
+	 * @param tile The tile to get the distance to.
+	 * @return The distance between town and tile.
+	 */
+	static int32 GetDistanceManhattanToTile(TownID town_id, TileIndex tile);
+
+	/**
+	 * Get the square distance from the tile to the AITown::GetLocation()
+	 *  of the town.
+	 * @param town_id The town to get the distance to.
+	 * @param tile The tile to get the distance to.
+	 * @return The distance between town and tile.
+	 */
+	static int32 GetDistanceSquareToTile(TownID town_id, TileIndex tile);
 };
 
 #endif /* AI_TOWN_HPP */
--- a/src/ai/api/ai_town.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/ai_town.hpp.sq	Tue Mar 25 12:12:45 2008 +0000
@@ -14,13 +14,15 @@
 	SQAITown.PreRegister(engine);
 	SQAITown.AddConstructor<void (AITown::*)(), 1>(engine, "x");
 
-	SQAITown.DefSQStaticMethod(engine, &AITown::GetClassName,  "GetClassName",  1, "x");
-	SQAITown.DefSQStaticMethod(engine, &AITown::GetMaxTownID,  "GetMaxTownID",  1, "x");
-	SQAITown.DefSQStaticMethod(engine, &AITown::GetTownCount,  "GetTownCount",  1, "x");
-	SQAITown.DefSQStaticMethod(engine, &AITown::IsValidTown,   "IsValidTown",   2, "xi");
-	SQAITown.DefSQStaticMethod(engine, &AITown::GetName,       "GetName",       2, "xi");
-	SQAITown.DefSQStaticMethod(engine, &AITown::GetPopulation, "GetPopulation", 2, "xi");
-	SQAITown.DefSQStaticMethod(engine, &AITown::GetLocation,   "GetLocation",   2, "xi");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetClassName,               "GetClassName",               1, "x");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetMaxTownID,               "GetMaxTownID",               1, "x");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetTownCount,               "GetTownCount",               1, "x");
+	SQAITown.DefSQStaticMethod(engine, &AITown::IsValidTown,                "IsValidTown",                2, "xi");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetName,                    "GetName",                    2, "xi");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetPopulation,              "GetPopulation",              2, "xi");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetLocation,                "GetLocation",                2, "xi");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetDistanceManhattanToTile, "GetDistanceManhattanToTile", 3, "xii");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetDistanceSquareToTile,    "GetDistanceSquareToTile",    3, "xii");
 
 	SQAITown.PostRegister(engine);
 }
--- a/src/ai/api/ai_townlist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#include "ai_townlist_valuator.hpp"
-#include "ai_town.hpp"
-#include "ai_map.hpp"
-#include "ai_base.hpp"
-
-int32 AITownList_vPopulation::Valuate(int32 town) const
-{
-	return AITown::GetPopulation(town);
-}
-
-int32 AITownList_vLocation::Valuate(int32 town) const
-{
-	return AITown::GetLocation(town);
-}
-
-int32 AITownList_vDistanceManhattanToTile::Valuate(int32 town) const
-{
-	return AIMap::DistanceManhattan(this->tile, AITown::GetLocation(town));
-}
-
-int32 AITownList_vDistanceSquareToTile::Valuate(int32 town) const
-{
-	return AIMap::DistanceSquare(this->tile, AITown::GetLocation(town));
-}
--- a/src/ai/api/ai_townlist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/* $Id$ */
-
-/** @file ai_townlist_valuator.hpp all the valuators for AITownList */
-
-#ifndef AI_TOWNLIST_VALUATOR_HPP
-#define AI_TOWNLIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Get the population for entries in an AITownList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AITownList instance.
- * @ingroup AITownList
- */
-class AITownList_vPopulation : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITownList_vGetPopulation"; }
-
-private:
-	const char *GetListName() const { return "AITownList"; }
-	int32 Valuate(int32 town) const;
-};
-
-/**
- * Get the location for entries in an AITownList instance.
- * @note Resulting items are of the type TileIndex.
- * @note Can only operate on an AITownList instance.
- * @ingroup AITownList
- */
-class AITownList_vLocation : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITownList_vGetLocation"; }
-
-private:
-	const char *GetListName() const { return "AITownList"; }
-	int32 Valuate(int32 town) const;
-};
-
-/**
- * Get the manhattan distance to a tile for entries in an AITownList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AITownList instance.
- * @ingroup AITownList
- */
-class AITownList_vDistanceManhattanToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITownList_vDistanceManhattanToTile"; }
-
-	/**
-	 * Custom constructor, we want a tile as parameter.
-	 */
-	AITownList_vDistanceManhattanToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	/**
-	 * @param tile The tile to get the distance to.
-	 */
-	const char *GetListName() const { return "AITownList"; }
-
-	int32 Valuate(int32 station) const;
-};
-
-/**
- * Get the square distance to a tile for entries in an AITownList instance.
- * @note Resulting items are of the type uint32.
- * @note Can only operate on an AITownList instance.
- * @ingroup AITownList
- */
-class AITownList_vDistanceSquareToTile : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AITownList_vDistanceSquareToTile"; }
-
-	/**
-	 * @param tile The tile to get the distance to.
-	 */
-	AITownList_vDistanceSquareToTile(TileIndex tile) :
-		tile(tile)
-	{}
-
-private:
-	TileIndex tile;
-
-	const char *GetListName() const { return "AITownList"; }
-	int32 Valuate(int32 station) const;
-};
-
-#endif /* AI_TOWNLIST_VALUATOR_HPP */
--- a/src/ai/api/ai_townlist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-#include "ai_townlist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AITownList_vPopulation to be used as Squirrel parameter */
-	template <> AITownList_vPopulation *GetParam(ForceType<AITownList_vPopulation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vPopulation *)instance; }
-	template <> AITownList_vPopulation &GetParam(ForceType<AITownList_vPopulation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vPopulation *)instance; }
-	template <> const AITownList_vPopulation *GetParam(ForceType<const AITownList_vPopulation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vPopulation *)instance; }
-	template <> const AITownList_vPopulation &GetParam(ForceType<const AITownList_vPopulation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vPopulation *)instance; }
-	template <> int Return<AITownList_vPopulation *>(HSQUIRRELVM vm, AITownList_vPopulation *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITownList_vPopulation", res, NULL, DefSQDestructorCallback<AITownList_vPopulation>); return 1; }
-}; // namespace SQConvert
-
-void SQAITownList_vPopulation_Register(Squirrel *engine) {
-	DefSQClass <AITownList_vPopulation> SQAITownList_vPopulation("AITownList_vPopulation");
-	SQAITownList_vPopulation.PreRegister(engine);
-	SQAITownList_vPopulation.AddConstructor<void (AITownList_vPopulation::*)(), 1>(engine, "x");
-
-	SQAITownList_vPopulation.DefSQStaticMethod(engine, &AITownList_vPopulation::GetClassName, "GetClassName", 1, "x");
-
-	SQAITownList_vPopulation.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITownList_vLocation to be used as Squirrel parameter */
-	template <> AITownList_vLocation *GetParam(ForceType<AITownList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vLocation *)instance; }
-	template <> AITownList_vLocation &GetParam(ForceType<AITownList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vLocation *)instance; }
-	template <> const AITownList_vLocation *GetParam(ForceType<const AITownList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vLocation *)instance; }
-	template <> const AITownList_vLocation &GetParam(ForceType<const AITownList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vLocation *)instance; }
-	template <> int Return<AITownList_vLocation *>(HSQUIRRELVM vm, AITownList_vLocation *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITownList_vLocation", res, NULL, DefSQDestructorCallback<AITownList_vLocation>); return 1; }
-}; // namespace SQConvert
-
-void SQAITownList_vLocation_Register(Squirrel *engine) {
-	DefSQClass <AITownList_vLocation> SQAITownList_vLocation("AITownList_vLocation");
-	SQAITownList_vLocation.PreRegister(engine);
-	SQAITownList_vLocation.AddConstructor<void (AITownList_vLocation::*)(), 1>(engine, "x");
-
-	SQAITownList_vLocation.DefSQStaticMethod(engine, &AITownList_vLocation::GetClassName, "GetClassName", 1, "x");
-
-	SQAITownList_vLocation.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITownList_vDistanceManhattanToTile to be used as Squirrel parameter */
-	template <> AITownList_vDistanceManhattanToTile *GetParam(ForceType<AITownList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vDistanceManhattanToTile *)instance; }
-	template <> AITownList_vDistanceManhattanToTile &GetParam(ForceType<AITownList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vDistanceManhattanToTile *)instance; }
-	template <> const AITownList_vDistanceManhattanToTile *GetParam(ForceType<const AITownList_vDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vDistanceManhattanToTile *)instance; }
-	template <> const AITownList_vDistanceManhattanToTile &GetParam(ForceType<const AITownList_vDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vDistanceManhattanToTile *)instance; }
-	template <> int Return<AITownList_vDistanceManhattanToTile *>(HSQUIRRELVM vm, AITownList_vDistanceManhattanToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITownList_vDistanceManhattanToTile", res, NULL, DefSQDestructorCallback<AITownList_vDistanceManhattanToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAITownList_vDistanceManhattanToTile_Register(Squirrel *engine) {
-	DefSQClass <AITownList_vDistanceManhattanToTile> SQAITownList_vDistanceManhattanToTile("AITownList_vDistanceManhattanToTile");
-	SQAITownList_vDistanceManhattanToTile.PreRegister(engine);
-	SQAITownList_vDistanceManhattanToTile.AddConstructor<void (AITownList_vDistanceManhattanToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAITownList_vDistanceManhattanToTile.DefSQStaticMethod(engine, &AITownList_vDistanceManhattanToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAITownList_vDistanceManhattanToTile.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AITownList_vDistanceSquareToTile to be used as Squirrel parameter */
-	template <> AITownList_vDistanceSquareToTile *GetParam(ForceType<AITownList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vDistanceSquareToTile *)instance; }
-	template <> AITownList_vDistanceSquareToTile &GetParam(ForceType<AITownList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vDistanceSquareToTile *)instance; }
-	template <> const AITownList_vDistanceSquareToTile *GetParam(ForceType<const AITownList_vDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList_vDistanceSquareToTile *)instance; }
-	template <> const AITownList_vDistanceSquareToTile &GetParam(ForceType<const AITownList_vDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList_vDistanceSquareToTile *)instance; }
-	template <> int Return<AITownList_vDistanceSquareToTile *>(HSQUIRRELVM vm, AITownList_vDistanceSquareToTile *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AITownList_vDistanceSquareToTile", res, NULL, DefSQDestructorCallback<AITownList_vDistanceSquareToTile>); return 1; }
-}; // namespace SQConvert
-
-void SQAITownList_vDistanceSquareToTile_Register(Squirrel *engine) {
-	DefSQClass <AITownList_vDistanceSquareToTile> SQAITownList_vDistanceSquareToTile("AITownList_vDistanceSquareToTile");
-	SQAITownList_vDistanceSquareToTile.PreRegister(engine);
-	SQAITownList_vDistanceSquareToTile.AddConstructor<void (AITownList_vDistanceSquareToTile::*)(TileIndex tile), 2>(engine, "xi");
-
-	SQAITownList_vDistanceSquareToTile.DefSQStaticMethod(engine, &AITownList_vDistanceSquareToTile::GetClassName, "GetClassName", 1, "x");
-
-	SQAITownList_vDistanceSquareToTile.PostRegister(engine);
-}
--- a/src/ai/api/ai_vehiclelist_valuator.cpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#include "ai_vehiclelist_valuator.hpp"
-#include "ai_vehicle.hpp"
-
-int32 AIVehicleList_vLocation::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetLocation(vehicle);
-}
-
-int32 AIVehicleList_vEngineType::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetEngineType(vehicle);
-}
-
-int32 AIVehicleList_vUnitNumber::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetUnitNumber(vehicle);
-}
-
-int32 AIVehicleList_vAge::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetAge(vehicle);
-}
-
-int32 AIVehicleList_vMaxAge::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetMaxAge(vehicle);
-}
-
-int32 AIVehicleList_vAgeLeft::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetAgeLeft(vehicle);
-}
-
-int32 AIVehicleList_vRunningCost::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetRunningCost(vehicle);
-}
-
-int32 AIVehicleList_vProfitThisYear::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetProfitThisYear(vehicle);
-}
-
-int32 AIVehicleList_vProfitLastYear::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetProfitLastYear(vehicle);
-}
-
-int32 AIVehicleList_vVehicleType::Valuate(int32 vehicle) const
-{
-	return AIVehicle::GetVehicleType(vehicle);
-}
--- a/src/ai/api/ai_vehiclelist_valuator.hpp	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-/* $Id$ */
-
-/** @file ai_vehiclelist_valuator.hpp all the valuators for AIVehicleList */
-
-#ifndef AI_VEHICLELIST_VALUATOR_HPP
-#define AI_VEHICLELIST_VALUATOR_HPP
-
-#include "ai_abstractlist.hpp"
-
-/**
- * Get the location for entries in an AIVehicleList instance.
- * @note Resulting items are of the type TileIndex.
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vLocation : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vGetLocation"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the engine-type for entries in an AIVehicleList instance.
- * @note Resulting items are of the type EngineID.
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vEngineType : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vEngineType"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the unit number for entries in an AIVehicleList instance.
- * @note Resulting items are of the type int32.
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vUnitNumber : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vUnitNumber"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the age for entries in an AIVehicleList instance.
- * @note Resulting items are of the type int32 (age in days).
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vAge : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vAge"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the max age for entries in an AIVehicleList instance.
- * @note Resulting items are of the type int32 (age in days).
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vMaxAge : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vMaxAge"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the age left for the vehicle gets 'old' for entries in an AIVehicleList instance.
- * @note Resulting items are of the type int32 (age in days).
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vAgeLeft : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vAgeLeft"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the running costs for the entries in an AIVehicleList instance.
- * @note Resulting items are of the type int32 (cost is per year).
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vRunningCost : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vRunningCost"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-
-/**
- * Get the profit of this year for entries in an AIVehicleList instance.
- * @note Resulting items are of the type int32 (age in days).
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vProfitThisYear : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vProfitThisYear"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the profit of last year for entries in an AIVehicleList instance.
- * @note Resulting items are of the type int32 (age in days).
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vProfitLastYear : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vProfitLastYear"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-/**
- * Get the type of the vehicle for entries in an AIVehicleList instance.
- * @note Resulting items are of the type AIVehicle::VehicleType.
- * @note Can only operate on an AIVehicleList instance.
- * @ingroup AIVehicleList
- */
-class AIVehicleList_vVehicleType : public AIAbstractList::Valuator {
-public:
-	static const char *GetClassName() { return "AIVehicleList_vVehicleType"; }
-
-private:
-	const char *GetListName() const { return "AIVehicleList"; }
-	int32 Valuate(int32 vehicle_id) const;
-};
-
-
-#endif /* AI_VEHICLELIST_VALUATOR_HPP */
--- a/src/ai/api/ai_vehiclelist_valuator.hpp.sq	Tue Mar 25 12:09:42 2008 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-#include "ai_vehiclelist_valuator.hpp"
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vLocation to be used as Squirrel parameter */
-	template <> AIVehicleList_vLocation *GetParam(ForceType<AIVehicleList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vLocation *)instance; }
-	template <> AIVehicleList_vLocation &GetParam(ForceType<AIVehicleList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vLocation *)instance; }
-	template <> const AIVehicleList_vLocation *GetParam(ForceType<const AIVehicleList_vLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vLocation *)instance; }
-	template <> const AIVehicleList_vLocation &GetParam(ForceType<const AIVehicleList_vLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vLocation *)instance; }
-	template <> int Return<AIVehicleList_vLocation *>(HSQUIRRELVM vm, AIVehicleList_vLocation *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vLocation", res, NULL, DefSQDestructorCallback<AIVehicleList_vLocation>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vLocation_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vLocation> SQAIVehicleList_vLocation("AIVehicleList_vLocation");
-	SQAIVehicleList_vLocation.PreRegister(engine);
-	SQAIVehicleList_vLocation.AddConstructor<void (AIVehicleList_vLocation::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vLocation.DefSQStaticMethod(engine, &AIVehicleList_vLocation::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vLocation.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vEngineType to be used as Squirrel parameter */
-	template <> AIVehicleList_vEngineType *GetParam(ForceType<AIVehicleList_vEngineType *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vEngineType *)instance; }
-	template <> AIVehicleList_vEngineType &GetParam(ForceType<AIVehicleList_vEngineType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vEngineType *)instance; }
-	template <> const AIVehicleList_vEngineType *GetParam(ForceType<const AIVehicleList_vEngineType *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vEngineType *)instance; }
-	template <> const AIVehicleList_vEngineType &GetParam(ForceType<const AIVehicleList_vEngineType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vEngineType *)instance; }
-	template <> int Return<AIVehicleList_vEngineType *>(HSQUIRRELVM vm, AIVehicleList_vEngineType *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vEngineType", res, NULL, DefSQDestructorCallback<AIVehicleList_vEngineType>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vEngineType_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vEngineType> SQAIVehicleList_vEngineType("AIVehicleList_vEngineType");
-	SQAIVehicleList_vEngineType.PreRegister(engine);
-	SQAIVehicleList_vEngineType.AddConstructor<void (AIVehicleList_vEngineType::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vEngineType.DefSQStaticMethod(engine, &AIVehicleList_vEngineType::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vEngineType.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vUnitNumber to be used as Squirrel parameter */
-	template <> AIVehicleList_vUnitNumber *GetParam(ForceType<AIVehicleList_vUnitNumber *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vUnitNumber *)instance; }
-	template <> AIVehicleList_vUnitNumber &GetParam(ForceType<AIVehicleList_vUnitNumber &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vUnitNumber *)instance; }
-	template <> const AIVehicleList_vUnitNumber *GetParam(ForceType<const AIVehicleList_vUnitNumber *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vUnitNumber *)instance; }
-	template <> const AIVehicleList_vUnitNumber &GetParam(ForceType<const AIVehicleList_vUnitNumber &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vUnitNumber *)instance; }
-	template <> int Return<AIVehicleList_vUnitNumber *>(HSQUIRRELVM vm, AIVehicleList_vUnitNumber *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vUnitNumber", res, NULL, DefSQDestructorCallback<AIVehicleList_vUnitNumber>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vUnitNumber_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vUnitNumber> SQAIVehicleList_vUnitNumber("AIVehicleList_vUnitNumber");
-	SQAIVehicleList_vUnitNumber.PreRegister(engine);
-	SQAIVehicleList_vUnitNumber.AddConstructor<void (AIVehicleList_vUnitNumber::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vUnitNumber.DefSQStaticMethod(engine, &AIVehicleList_vUnitNumber::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vUnitNumber.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vAge to be used as Squirrel parameter */
-	template <> AIVehicleList_vAge *GetParam(ForceType<AIVehicleList_vAge *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vAge *)instance; }
-	template <> AIVehicleList_vAge &GetParam(ForceType<AIVehicleList_vAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vAge *)instance; }
-	template <> const AIVehicleList_vAge *GetParam(ForceType<const AIVehicleList_vAge *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vAge *)instance; }
-	template <> const AIVehicleList_vAge &GetParam(ForceType<const AIVehicleList_vAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vAge *)instance; }
-	template <> int Return<AIVehicleList_vAge *>(HSQUIRRELVM vm, AIVehicleList_vAge *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vAge", res, NULL, DefSQDestructorCallback<AIVehicleList_vAge>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vAge_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vAge> SQAIVehicleList_vAge("AIVehicleList_vAge");
-	SQAIVehicleList_vAge.PreRegister(engine);
-	SQAIVehicleList_vAge.AddConstructor<void (AIVehicleList_vAge::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vAge.DefSQStaticMethod(engine, &AIVehicleList_vAge::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vAge.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vMaxAge to be used as Squirrel parameter */
-	template <> AIVehicleList_vMaxAge *GetParam(ForceType<AIVehicleList_vMaxAge *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vMaxAge *)instance; }
-	template <> AIVehicleList_vMaxAge &GetParam(ForceType<AIVehicleList_vMaxAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vMaxAge *)instance; }
-	template <> const AIVehicleList_vMaxAge *GetParam(ForceType<const AIVehicleList_vMaxAge *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vMaxAge *)instance; }
-	template <> const AIVehicleList_vMaxAge &GetParam(ForceType<const AIVehicleList_vMaxAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vMaxAge *)instance; }
-	template <> int Return<AIVehicleList_vMaxAge *>(HSQUIRRELVM vm, AIVehicleList_vMaxAge *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vMaxAge", res, NULL, DefSQDestructorCallback<AIVehicleList_vMaxAge>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vMaxAge_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vMaxAge> SQAIVehicleList_vMaxAge("AIVehicleList_vMaxAge");
-	SQAIVehicleList_vMaxAge.PreRegister(engine);
-	SQAIVehicleList_vMaxAge.AddConstructor<void (AIVehicleList_vMaxAge::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vMaxAge.DefSQStaticMethod(engine, &AIVehicleList_vMaxAge::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vMaxAge.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vAgeLeft to be used as Squirrel parameter */
-	template <> AIVehicleList_vAgeLeft *GetParam(ForceType<AIVehicleList_vAgeLeft *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vAgeLeft *)instance; }
-	template <> AIVehicleList_vAgeLeft &GetParam(ForceType<AIVehicleList_vAgeLeft &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vAgeLeft *)instance; }
-	template <> const AIVehicleList_vAgeLeft *GetParam(ForceType<const AIVehicleList_vAgeLeft *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vAgeLeft *)instance; }
-	template <> const AIVehicleList_vAgeLeft &GetParam(ForceType<const AIVehicleList_vAgeLeft &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vAgeLeft *)instance; }
-	template <> int Return<AIVehicleList_vAgeLeft *>(HSQUIRRELVM vm, AIVehicleList_vAgeLeft *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vAgeLeft", res, NULL, DefSQDestructorCallback<AIVehicleList_vAgeLeft>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vAgeLeft_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vAgeLeft> SQAIVehicleList_vAgeLeft("AIVehicleList_vAgeLeft");
-	SQAIVehicleList_vAgeLeft.PreRegister(engine);
-	SQAIVehicleList_vAgeLeft.AddConstructor<void (AIVehicleList_vAgeLeft::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vAgeLeft.DefSQStaticMethod(engine, &AIVehicleList_vAgeLeft::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vAgeLeft.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vRunningCost to be used as Squirrel parameter */
-	template <> AIVehicleList_vRunningCost *GetParam(ForceType<AIVehicleList_vRunningCost *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vRunningCost *)instance; }
-	template <> AIVehicleList_vRunningCost &GetParam(ForceType<AIVehicleList_vRunningCost &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vRunningCost *)instance; }
-	template <> const AIVehicleList_vRunningCost *GetParam(ForceType<const AIVehicleList_vRunningCost *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vRunningCost *)instance; }
-	template <> const AIVehicleList_vRunningCost &GetParam(ForceType<const AIVehicleList_vRunningCost &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vRunningCost *)instance; }
-	template <> int Return<AIVehicleList_vRunningCost *>(HSQUIRRELVM vm, AIVehicleList_vRunningCost *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vRunningCost", res, NULL, DefSQDestructorCallback<AIVehicleList_vRunningCost>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vRunningCost_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vRunningCost> SQAIVehicleList_vRunningCost("AIVehicleList_vRunningCost");
-	SQAIVehicleList_vRunningCost.PreRegister(engine);
-	SQAIVehicleList_vRunningCost.AddConstructor<void (AIVehicleList_vRunningCost::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vRunningCost.DefSQStaticMethod(engine, &AIVehicleList_vRunningCost::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vRunningCost.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vProfitThisYear to be used as Squirrel parameter */
-	template <> AIVehicleList_vProfitThisYear *GetParam(ForceType<AIVehicleList_vProfitThisYear *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vProfitThisYear *)instance; }
-	template <> AIVehicleList_vProfitThisYear &GetParam(ForceType<AIVehicleList_vProfitThisYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vProfitThisYear *)instance; }
-	template <> const AIVehicleList_vProfitThisYear *GetParam(ForceType<const AIVehicleList_vProfitThisYear *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vProfitThisYear *)instance; }
-	template <> const AIVehicleList_vProfitThisYear &GetParam(ForceType<const AIVehicleList_vProfitThisYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vProfitThisYear *)instance; }
-	template <> int Return<AIVehicleList_vProfitThisYear *>(HSQUIRRELVM vm, AIVehicleList_vProfitThisYear *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vProfitThisYear", res, NULL, DefSQDestructorCallback<AIVehicleList_vProfitThisYear>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vProfitThisYear_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vProfitThisYear> SQAIVehicleList_vProfitThisYear("AIVehicleList_vProfitThisYear");
-	SQAIVehicleList_vProfitThisYear.PreRegister(engine);
-	SQAIVehicleList_vProfitThisYear.AddConstructor<void (AIVehicleList_vProfitThisYear::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vProfitThisYear.DefSQStaticMethod(engine, &AIVehicleList_vProfitThisYear::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vProfitThisYear.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vProfitLastYear to be used as Squirrel parameter */
-	template <> AIVehicleList_vProfitLastYear *GetParam(ForceType<AIVehicleList_vProfitLastYear *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vProfitLastYear *)instance; }
-	template <> AIVehicleList_vProfitLastYear &GetParam(ForceType<AIVehicleList_vProfitLastYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vProfitLastYear *)instance; }
-	template <> const AIVehicleList_vProfitLastYear *GetParam(ForceType<const AIVehicleList_vProfitLastYear *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vProfitLastYear *)instance; }
-	template <> const AIVehicleList_vProfitLastYear &GetParam(ForceType<const AIVehicleList_vProfitLastYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vProfitLastYear *)instance; }
-	template <> int Return<AIVehicleList_vProfitLastYear *>(HSQUIRRELVM vm, AIVehicleList_vProfitLastYear *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vProfitLastYear", res, NULL, DefSQDestructorCallback<AIVehicleList_vProfitLastYear>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vProfitLastYear_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vProfitLastYear> SQAIVehicleList_vProfitLastYear("AIVehicleList_vProfitLastYear");
-	SQAIVehicleList_vProfitLastYear.PreRegister(engine);
-	SQAIVehicleList_vProfitLastYear.AddConstructor<void (AIVehicleList_vProfitLastYear::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vProfitLastYear.DefSQStaticMethod(engine, &AIVehicleList_vProfitLastYear::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vProfitLastYear.PostRegister(engine);
-}
-
-namespace SQConvert {
-	/* Allow AIVehicleList_vVehicleType to be used as Squirrel parameter */
-	template <> AIVehicleList_vVehicleType *GetParam(ForceType<AIVehicleList_vVehicleType *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vVehicleType *)instance; }
-	template <> AIVehicleList_vVehicleType &GetParam(ForceType<AIVehicleList_vVehicleType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vVehicleType *)instance; }
-	template <> const AIVehicleList_vVehicleType *GetParam(ForceType<const AIVehicleList_vVehicleType *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList_vVehicleType *)instance; }
-	template <> const AIVehicleList_vVehicleType &GetParam(ForceType<const AIVehicleList_vVehicleType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList_vVehicleType *)instance; }
-	template <> int Return<AIVehicleList_vVehicleType *>(HSQUIRRELVM vm, AIVehicleList_vVehicleType *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AIVehicleList_vVehicleType", res, NULL, DefSQDestructorCallback<AIVehicleList_vVehicleType>); return 1; }
-}; // namespace SQConvert
-
-void SQAIVehicleList_vVehicleType_Register(Squirrel *engine) {
-	DefSQClass <AIVehicleList_vVehicleType> SQAIVehicleList_vVehicleType("AIVehicleList_vVehicleType");
-	SQAIVehicleList_vVehicleType.PreRegister(engine);
-	SQAIVehicleList_vVehicleType.AddConstructor<void (AIVehicleList_vVehicleType::*)(), 1>(engine, "x");
-
-	SQAIVehicleList_vVehicleType.DefSQStaticMethod(engine, &AIVehicleList_vVehicleType::GetClassName, "GetClassName", 1, "x");
-
-	SQAIVehicleList_vVehicleType.PostRegister(engine);
-}
--- a/src/ai/api/squirrel_export.awk	Tue Mar 25 12:09:42 2008 +0000
+++ b/src/ai/api/squirrel_export.awk	Tue Mar 25 12:12:45 2008 +0000
@@ -203,7 +203,11 @@
 			if (mlen <= length(methods[i, 0])) mlen = length(methods[i, 0])
 		}
 		for (i = 1; i <= method_size; i++) {
-			print "	SQ" cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\""  methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");"
+			if (methods[i, 2] == "v") {
+				print "	SQ" cls ".DefSQAdvancedMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0]) - 8) "\""  methods[i, 0] "\");"
+			} else {
+				print "	SQ" cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\""  methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");"
+			}
 			delete methods[i]
 		}
 		if (method_size != 0) print ""
@@ -274,6 +278,8 @@
 			}
 		} else if (match(params[len], "^bool")) {
 			types = types "b"
+		} else if (match(params[len], "^HSQUIRRELVM")) {
+			types = "v"
 		} else {
 			types = types "i"
 		}