(svn r10612) [NoAI] -Add: allow a class as return value; pack the result in a SQ instance and it should work perfectly noai
authortruelight
Wed, 18 Jul 2007 14:58:37 +0000
branchnoai
changeset 9673 ee4f133c84ec
parent 9672 18c71ca987e4
child 9674 15f7b310b6cf
(svn r10612) [NoAI] -Add: allow a class as return value; pack the result in a SQ instance and it should work perfectly
src/ai/ai_squirrel.cpp
src/ai/api/ai_abstractlist.hpp.sq
src/ai/api/ai_accounting.hpp.sq
src/ai/api/ai_airport.hpp.sq
src/ai/api/ai_base.hpp.sq
src/ai/api/ai_cargo.hpp.sq
src/ai/api/ai_company.hpp.sq
src/ai/api/ai_execmode.hpp.sq
src/ai/api/ai_industry.hpp.sq
src/ai/api/ai_industrylist.hpp.sq
src/ai/api/ai_industrylist_valuator.hpp.sq
src/ai/api/ai_list.hpp.sq
src/ai/api/ai_list_valuator.hpp.sq
src/ai/api/ai_map.hpp.sq
src/ai/api/ai_order.hpp.sq
src/ai/api/ai_pathfinder.hpp.sq
src/ai/api/ai_pathfinder_stupid.hpp.sq
src/ai/api/ai_road.hpp.sq
src/ai/api/ai_settings.hpp.sq
src/ai/api/ai_sign.hpp.sq
src/ai/api/ai_station.hpp.sq
src/ai/api/ai_stationlist.hpp.sq
src/ai/api/ai_stationlist_valuator.hpp.sq
src/ai/api/ai_testmode.hpp.sq
src/ai/api/ai_tile.hpp.sq
src/ai/api/ai_tilelist.hpp.sq
src/ai/api/ai_tilelist_valuator.hpp.sq
src/ai/api/ai_town.hpp.sq
src/ai/api/ai_townlist.hpp.sq
src/ai/api/ai_townlist_valuator.hpp.sq
src/ai/api/ai_transactionmode.hpp.sq
src/ai/api/ai_vehicle.hpp.sq
src/ai/api/ai_vehiclelist.hpp.sq
src/ai/api/ai_vehiclelist_valuator.hpp.sq
src/ai/api/squirrel_export.awk
src/squirrel.cpp
src/squirrel.hpp
--- a/src/ai/ai_squirrel.cpp	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/ai_squirrel.cpp	Wed Jul 18 14:58:37 2007 +0000
@@ -28,6 +28,7 @@
 #include "api/ai_cargo.hpp.sq"
 #include "api/ai_company.hpp.sq"
 #include "api/ai_controller.hpp.sq"
+#include "api/ai_event.hpp.sq"
 #include "api/ai_execmode.hpp.sq"
 #include "api/ai_industry.hpp.sq"
 #include "api/ai_industrylist.hpp.sq"
@@ -214,6 +215,9 @@
 	SQAICargoRegister(this->engine);
 	SQAICompanyRegister(this->engine);
 	SQAIControllerRegister(this->engine);
+	SQAIEventChildRegister(this->engine);
+	SQAIEventRegister(this->engine);
+	SQAIEventVehicleCrashRegister(this->engine);
 	SQAIExecModeRegister(this->engine);
 	SQAIIndustryListDistanceManhattanToTileRegister(this->engine);
 	SQAIIndustryListDistanceSquareToTileRegister(this->engine);
--- a/src/ai/api/ai_abstractlist.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_abstractlist.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -9,12 +9,14 @@
 	template <> AIAbstractList::Valuator &GetParam(ForceType<AIAbstractList::Valuator &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList::Valuator *)instance; }
 	template <> const AIAbstractList::Valuator *GetParam(ForceType<const AIAbstractList::Valuator *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAbstractList::Valuator *)instance; }
 	template <> const AIAbstractList::Valuator &GetParam(ForceType<const AIAbstractList::Valuator &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList::Valuator *)instance; }
+	template <> int Return<AIAbstractList::Valuator *>(HSQUIRRELVM vm, AIAbstractList::Valuator *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIAbstractList::Valuator", res, &instance); sq_pushobject(vm, instance); return 1; }
 
 	/* Allow AIAbstractList to be used as Squirrel parameter */
 	template <> AIAbstractList *GetParam(ForceType<AIAbstractList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAbstractList *)instance; }
 	template <> AIAbstractList &GetParam(ForceType<AIAbstractList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList *)instance; }
 	template <> const AIAbstractList *GetParam(ForceType<const AIAbstractList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAbstractList *)instance; }
 	template <> const AIAbstractList &GetParam(ForceType<const AIAbstractList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList *)instance; }
+	template <> int Return<AIAbstractList *>(HSQUIRRELVM vm, AIAbstractList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIAbstractList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIAbstractListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_accounting.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_accounting.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIAccounting &GetParam(ForceType<AIAccounting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAccounting *)instance; }
 	template <> const AIAccounting *GetParam(ForceType<const AIAccounting *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAccounting *)instance; }
 	template <> const AIAccounting &GetParam(ForceType<const AIAccounting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAccounting *)instance; }
+	template <> int Return<AIAccounting *>(HSQUIRRELVM vm, AIAccounting *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIAccounting", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIAccountingRegister(Squirrel *engine) {
--- a/src/ai/api/ai_airport.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_airport.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -10,6 +10,7 @@
 	template <> AIAirport &GetParam(ForceType<AIAirport &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAirport *)instance; }
 	template <> const AIAirport *GetParam(ForceType<const AIAirport *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAirport *)instance; }
 	template <> const AIAirport &GetParam(ForceType<const AIAirport &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAirport *)instance; }
+	template <> int Return<AIAirport *>(HSQUIRRELVM vm, AIAirport *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIAirport", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIAirportRegister(Squirrel *engine) {
--- a/src/ai/api/ai_base.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_base.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIBase &GetParam(ForceType<AIBase &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBase *)instance; }
 	template <> const AIBase *GetParam(ForceType<const AIBase *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBase *)instance; }
 	template <> const AIBase &GetParam(ForceType<const AIBase &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBase *)instance; }
+	template <> int Return<AIBase *>(HSQUIRRELVM vm, AIBase *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIBase", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIBaseRegister(Squirrel *engine) {
--- a/src/ai/api/ai_cargo.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_cargo.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AICargo &GetParam(ForceType<AICargo &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargo *)instance; }
 	template <> const AICargo *GetParam(ForceType<const AICargo *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargo *)instance; }
 	template <> const AICargo &GetParam(ForceType<const AICargo &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargo *)instance; }
+	template <> int Return<AICargo *>(HSQUIRRELVM vm, AICargo *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AICargo", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAICargoRegister(Squirrel *engine) {
--- a/src/ai/api/ai_company.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_company.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -10,6 +10,7 @@
 	template <> AICompany &GetParam(ForceType<AICompany &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICompany *)instance; }
 	template <> const AICompany *GetParam(ForceType<const AICompany *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICompany *)instance; }
 	template <> const AICompany &GetParam(ForceType<const AICompany &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICompany *)instance; }
+	template <> int Return<AICompany *>(HSQUIRRELVM vm, AICompany *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AICompany", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAICompanyRegister(Squirrel *engine) {
--- a/src/ai/api/ai_execmode.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_execmode.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIExecMode &GetParam(ForceType<AIExecMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIExecMode *)instance; }
 	template <> const AIExecMode *GetParam(ForceType<const AIExecMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIExecMode *)instance; }
 	template <> const AIExecMode &GetParam(ForceType<const AIExecMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIExecMode *)instance; }
+	template <> int Return<AIExecMode *>(HSQUIRRELVM vm, AIExecMode *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIExecMode", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIExecModeRegister(Squirrel *engine) {
--- a/src/ai/api/ai_industry.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_industry.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIIndustry &GetParam(ForceType<AIIndustry &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustry *)instance; }
 	template <> const AIIndustry *GetParam(ForceType<const AIIndustry *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustry *)instance; }
 	template <> const AIIndustry &GetParam(ForceType<const AIIndustry &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustry *)instance; }
+	template <> int Return<AIIndustry *>(HSQUIRRELVM vm, AIIndustry *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIIndustry", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIIndustryRegister(Squirrel *engine) {
--- a/src/ai/api/ai_industrylist.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_industrylist.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIIndustryList &GetParam(ForceType<AIIndustryList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList *)instance; }
 	template <> const AIIndustryList *GetParam(ForceType<const AIIndustryList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryList *)instance; }
 	template <> const AIIndustryList &GetParam(ForceType<const AIIndustryList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryList *)instance; }
+	template <> int Return<AIIndustryList *>(HSQUIRRELVM vm, AIIndustryList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIIndustryList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIIndustryListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_industrylist_valuator.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_industrylist_valuator.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIIndustryListProduction &GetParam(ForceType<AIIndustryListProduction &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListProduction *)instance; }
 	template <> const AIIndustryListProduction *GetParam(ForceType<const AIIndustryListProduction *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryListProduction *)instance; }
 	template <> const AIIndustryListProduction &GetParam(ForceType<const AIIndustryListProduction &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListProduction *)instance; }
+	template <> int Return<AIIndustryListProduction *>(HSQUIRRELVM vm, AIIndustryListProduction *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIIndustryListProduction", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIIndustryListProductionRegister(Squirrel *engine) {
@@ -24,6 +25,7 @@
 	template <> AIIndustryListLocation &GetParam(ForceType<AIIndustryListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListLocation *)instance; }
 	template <> const AIIndustryListLocation *GetParam(ForceType<const AIIndustryListLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryListLocation *)instance; }
 	template <> const AIIndustryListLocation &GetParam(ForceType<const AIIndustryListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListLocation *)instance; }
+	template <> int Return<AIIndustryListLocation *>(HSQUIRRELVM vm, AIIndustryListLocation *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIIndustryListLocation", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIIndustryListLocationRegister(Squirrel *engine) {
@@ -42,6 +44,7 @@
 	template <> AIIndustryListDistanceManhattanToTile &GetParam(ForceType<AIIndustryListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListDistanceManhattanToTile *)instance; }
 	template <> const AIIndustryListDistanceManhattanToTile *GetParam(ForceType<const AIIndustryListDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryListDistanceManhattanToTile *)instance; }
 	template <> const AIIndustryListDistanceManhattanToTile &GetParam(ForceType<const AIIndustryListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListDistanceManhattanToTile *)instance; }
+	template <> int Return<AIIndustryListDistanceManhattanToTile *>(HSQUIRRELVM vm, AIIndustryListDistanceManhattanToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIIndustryListDistanceManhattanToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIIndustryListDistanceManhattanToTileRegister(Squirrel *engine) {
@@ -60,6 +63,7 @@
 	template <> AIIndustryListDistanceSquareToTile &GetParam(ForceType<AIIndustryListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListDistanceSquareToTile *)instance; }
 	template <> const AIIndustryListDistanceSquareToTile *GetParam(ForceType<const AIIndustryListDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustryListDistanceSquareToTile *)instance; }
 	template <> const AIIndustryListDistanceSquareToTile &GetParam(ForceType<const AIIndustryListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustryListDistanceSquareToTile *)instance; }
+	template <> int Return<AIIndustryListDistanceSquareToTile *>(HSQUIRRELVM vm, AIIndustryListDistanceSquareToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIIndustryListDistanceSquareToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIIndustryListDistanceSquareToTileRegister(Squirrel *engine) {
--- a/src/ai/api/ai_list.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_list.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIList &GetParam(ForceType<AIList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIList *)instance; }
 	template <> const AIList *GetParam(ForceType<const AIList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIList *)instance; }
 	template <> const AIList &GetParam(ForceType<const AIList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIList *)instance; }
+	template <> int Return<AIList *>(HSQUIRRELVM vm, AIList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_list_valuator.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_list_valuator.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIListRandomize &GetParam(ForceType<AIListRandomize &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIListRandomize *)instance; }
 	template <> const AIListRandomize *GetParam(ForceType<const AIListRandomize *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIListRandomize *)instance; }
 	template <> const AIListRandomize &GetParam(ForceType<const AIListRandomize &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIListRandomize *)instance; }
+	template <> int Return<AIListRandomize *>(HSQUIRRELVM vm, AIListRandomize *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIListRandomize", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIListRandomizeRegister(Squirrel *engine) {
--- a/src/ai/api/ai_map.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_map.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIMap &GetParam(ForceType<AIMap &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIMap *)instance; }
 	template <> const AIMap *GetParam(ForceType<const AIMap *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIMap *)instance; }
 	template <> const AIMap &GetParam(ForceType<const AIMap &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIMap *)instance; }
+	template <> int Return<AIMap *>(HSQUIRRELVM vm, AIMap *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIMap", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIMapRegister(Squirrel *engine) {
--- a/src/ai/api/ai_order.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_order.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -10,6 +10,7 @@
 	template <> AIOrder &GetParam(ForceType<AIOrder &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIOrder *)instance; }
 	template <> const AIOrder *GetParam(ForceType<const AIOrder *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIOrder *)instance; }
 	template <> const AIOrder &GetParam(ForceType<const AIOrder &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIOrder *)instance; }
+	template <> int Return<AIOrder *>(HSQUIRRELVM vm, AIOrder *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIOrder", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIOrderRegister(Squirrel *engine) {
--- a/src/ai/api/ai_pathfinder.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_pathfinder.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -10,6 +10,7 @@
 	template <> AIPathFinder &GetParam(ForceType<AIPathFinder &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIPathFinder *)instance; }
 	template <> const AIPathFinder *GetParam(ForceType<const AIPathFinder *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIPathFinder *)instance; }
 	template <> const AIPathFinder &GetParam(ForceType<const AIPathFinder &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIPathFinder *)instance; }
+	template <> int Return<AIPathFinder *>(HSQUIRRELVM vm, AIPathFinder *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIPathFinder", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIPathFinderRegister(Squirrel *engine) {
--- a/src/ai/api/ai_pathfinder_stupid.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_pathfinder_stupid.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIPathFinderStupid &GetParam(ForceType<AIPathFinderStupid &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIPathFinderStupid *)instance; }
 	template <> const AIPathFinderStupid *GetParam(ForceType<const AIPathFinderStupid *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIPathFinderStupid *)instance; }
 	template <> const AIPathFinderStupid &GetParam(ForceType<const AIPathFinderStupid &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIPathFinderStupid *)instance; }
+	template <> int Return<AIPathFinderStupid *>(HSQUIRRELVM vm, AIPathFinderStupid *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIPathFinderStupid", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIPathFinderStupidRegister(Squirrel *engine) {
--- a/src/ai/api/ai_road.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_road.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIRoad &GetParam(ForceType<AIRoad &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIRoad *)instance; }
 	template <> const AIRoad *GetParam(ForceType<const AIRoad *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIRoad *)instance; }
 	template <> const AIRoad &GetParam(ForceType<const AIRoad &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIRoad *)instance; }
+	template <> int Return<AIRoad *>(HSQUIRRELVM vm, AIRoad *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIRoad", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIRoadRegister(Squirrel *engine) {
--- a/src/ai/api/ai_settings.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_settings.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AISettings &GetParam(ForceType<AISettings &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISettings *)instance; }
 	template <> const AISettings *GetParam(ForceType<const AISettings *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISettings *)instance; }
 	template <> const AISettings &GetParam(ForceType<const AISettings &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISettings *)instance; }
+	template <> int Return<AISettings *>(HSQUIRRELVM vm, AISettings *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AISettings", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAISettingsRegister(Squirrel *engine) {
--- a/src/ai/api/ai_sign.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_sign.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AISign &GetParam(ForceType<AISign &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISign *)instance; }
 	template <> const AISign *GetParam(ForceType<const AISign *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISign *)instance; }
 	template <> const AISign &GetParam(ForceType<const AISign &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISign *)instance; }
+	template <> int Return<AISign *>(HSQUIRRELVM vm, AISign *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AISign", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAISignRegister(Squirrel *engine) {
--- a/src/ai/api/ai_station.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_station.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -10,6 +10,7 @@
 	template <> AIStation &GetParam(ForceType<AIStation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStation *)instance; }
 	template <> const AIStation *GetParam(ForceType<const AIStation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStation *)instance; }
 	template <> const AIStation &GetParam(ForceType<const AIStation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStation *)instance; }
+	template <> int Return<AIStation *>(HSQUIRRELVM vm, AIStation *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStation", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationRegister(Squirrel *engine) {
--- a/src/ai/api/ai_stationlist.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_stationlist.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIStationList &GetParam(ForceType<AIStationList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList *)instance; }
 	template <> const AIStationList *GetParam(ForceType<const AIStationList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationList *)instance; }
 	template <> const AIStationList &GetParam(ForceType<const AIStationList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationList *)instance; }
+	template <> int Return<AIStationList *>(HSQUIRRELVM vm, AIStationList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStationList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationListRegister(Squirrel *engine) {
@@ -24,6 +25,7 @@
 	template <> AIVehicleStationList &GetParam(ForceType<AIVehicleStationList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleStationList *)instance; }
 	template <> const AIVehicleStationList *GetParam(ForceType<const AIVehicleStationList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleStationList *)instance; }
 	template <> const AIVehicleStationList &GetParam(ForceType<const AIVehicleStationList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleStationList *)instance; }
+	template <> int Return<AIVehicleStationList *>(HSQUIRRELVM vm, AIVehicleStationList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleStationList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleStationListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_stationlist_valuator.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_stationlist_valuator.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIStationListLocation &GetParam(ForceType<AIStationListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListLocation *)instance; }
 	template <> const AIStationListLocation *GetParam(ForceType<const AIStationListLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationListLocation *)instance; }
 	template <> const AIStationListLocation &GetParam(ForceType<const AIStationListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListLocation *)instance; }
+	template <> int Return<AIStationListLocation *>(HSQUIRRELVM vm, AIStationListLocation *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStationListLocation", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationListLocationRegister(Squirrel *engine) {
@@ -24,6 +25,7 @@
 	template <> AIStationListCargoWaiting &GetParam(ForceType<AIStationListCargoWaiting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListCargoWaiting *)instance; }
 	template <> const AIStationListCargoWaiting *GetParam(ForceType<const AIStationListCargoWaiting *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationListCargoWaiting *)instance; }
 	template <> const AIStationListCargoWaiting &GetParam(ForceType<const AIStationListCargoWaiting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListCargoWaiting *)instance; }
+	template <> int Return<AIStationListCargoWaiting *>(HSQUIRRELVM vm, AIStationListCargoWaiting *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStationListCargoWaiting", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationListCargoWaitingRegister(Squirrel *engine) {
@@ -42,6 +44,7 @@
 	template <> AIStationListCargoRating &GetParam(ForceType<AIStationListCargoRating &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListCargoRating *)instance; }
 	template <> const AIStationListCargoRating *GetParam(ForceType<const AIStationListCargoRating *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationListCargoRating *)instance; }
 	template <> const AIStationListCargoRating &GetParam(ForceType<const AIStationListCargoRating &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListCargoRating *)instance; }
+	template <> int Return<AIStationListCargoRating *>(HSQUIRRELVM vm, AIStationListCargoRating *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStationListCargoRating", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationListCargoRatingRegister(Squirrel *engine) {
@@ -60,6 +63,7 @@
 	template <> AIStationListDistanceManhattanToTile &GetParam(ForceType<AIStationListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListDistanceManhattanToTile *)instance; }
 	template <> const AIStationListDistanceManhattanToTile *GetParam(ForceType<const AIStationListDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationListDistanceManhattanToTile *)instance; }
 	template <> const AIStationListDistanceManhattanToTile &GetParam(ForceType<const AIStationListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListDistanceManhattanToTile *)instance; }
+	template <> int Return<AIStationListDistanceManhattanToTile *>(HSQUIRRELVM vm, AIStationListDistanceManhattanToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStationListDistanceManhattanToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationListDistanceManhattanToTileRegister(Squirrel *engine) {
@@ -78,6 +82,7 @@
 	template <> AIStationListDistanceSquareToTile &GetParam(ForceType<AIStationListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListDistanceSquareToTile *)instance; }
 	template <> const AIStationListDistanceSquareToTile *GetParam(ForceType<const AIStationListDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationListDistanceSquareToTile *)instance; }
 	template <> const AIStationListDistanceSquareToTile &GetParam(ForceType<const AIStationListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationListDistanceSquareToTile *)instance; }
+	template <> int Return<AIStationListDistanceSquareToTile *>(HSQUIRRELVM vm, AIStationListDistanceSquareToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStationListDistanceSquareToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationListDistanceSquareToTileRegister(Squirrel *engine) {
--- a/src/ai/api/ai_testmode.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_testmode.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITestMode &GetParam(ForceType<AITestMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITestMode *)instance; }
 	template <> const AITestMode *GetParam(ForceType<const AITestMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITestMode *)instance; }
 	template <> const AITestMode &GetParam(ForceType<const AITestMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITestMode *)instance; }
+	template <> int Return<AITestMode *>(HSQUIRRELVM vm, AITestMode *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITestMode", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITestModeRegister(Squirrel *engine) {
--- a/src/ai/api/ai_tile.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_tile.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITile &GetParam(ForceType<AITile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITile *)instance; }
 	template <> const AITile *GetParam(ForceType<const AITile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITile *)instance; }
 	template <> const AITile &GetParam(ForceType<const AITile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITile *)instance; }
+	template <> int Return<AITile *>(HSQUIRRELVM vm, AITile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileRegister(Squirrel *engine) {
--- a/src/ai/api/ai_tilelist.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_tilelist.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITileList &GetParam(ForceType<AITileList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList *)instance; }
 	template <> const AITileList *GetParam(ForceType<const AITileList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList *)instance; }
 	template <> const AITileList &GetParam(ForceType<const AITileList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList *)instance; }
+	template <> int Return<AITileList *>(HSQUIRRELVM vm, AITileList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_tilelist_valuator.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_tilelist_valuator.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITileListBuildable &GetParam(ForceType<AITileListBuildable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListBuildable *)instance; }
 	template <> const AITileListBuildable *GetParam(ForceType<const AITileListBuildable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListBuildable *)instance; }
 	template <> const AITileListBuildable &GetParam(ForceType<const AITileListBuildable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListBuildable *)instance; }
+	template <> int Return<AITileListBuildable *>(HSQUIRRELVM vm, AITileListBuildable *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListBuildable", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListBuildableRegister(Squirrel *engine) {
@@ -24,6 +25,7 @@
 	template <> AITileListBuildableRectangle &GetParam(ForceType<AITileListBuildableRectangle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListBuildableRectangle *)instance; }
 	template <> const AITileListBuildableRectangle *GetParam(ForceType<const AITileListBuildableRectangle *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListBuildableRectangle *)instance; }
 	template <> const AITileListBuildableRectangle &GetParam(ForceType<const AITileListBuildableRectangle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListBuildableRectangle *)instance; }
+	template <> int Return<AITileListBuildableRectangle *>(HSQUIRRELVM vm, AITileListBuildableRectangle *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListBuildableRectangle", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListBuildableRectangleRegister(Squirrel *engine) {
@@ -42,6 +44,7 @@
 	template <> AITileListSlope &GetParam(ForceType<AITileListSlope &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListSlope *)instance; }
 	template <> const AITileListSlope *GetParam(ForceType<const AITileListSlope *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListSlope *)instance; }
 	template <> const AITileListSlope &GetParam(ForceType<const AITileListSlope &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListSlope *)instance; }
+	template <> int Return<AITileListSlope *>(HSQUIRRELVM vm, AITileListSlope *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListSlope", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListSlopeRegister(Squirrel *engine) {
@@ -60,6 +63,7 @@
 	template <> AITileListNeighbourRoadCount &GetParam(ForceType<AITileListNeighbourRoadCount &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListNeighbourRoadCount *)instance; }
 	template <> const AITileListNeighbourRoadCount *GetParam(ForceType<const AITileListNeighbourRoadCount *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListNeighbourRoadCount *)instance; }
 	template <> const AITileListNeighbourRoadCount &GetParam(ForceType<const AITileListNeighbourRoadCount &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListNeighbourRoadCount *)instance; }
+	template <> int Return<AITileListNeighbourRoadCount *>(HSQUIRRELVM vm, AITileListNeighbourRoadCount *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListNeighbourRoadCount", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListNeighbourRoadCountRegister(Squirrel *engine) {
@@ -78,6 +82,7 @@
 	template <> AITileListRoadTile &GetParam(ForceType<AITileListRoadTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListRoadTile *)instance; }
 	template <> const AITileListRoadTile *GetParam(ForceType<const AITileListRoadTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListRoadTile *)instance; }
 	template <> const AITileListRoadTile &GetParam(ForceType<const AITileListRoadTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListRoadTile *)instance; }
+	template <> int Return<AITileListRoadTile *>(HSQUIRRELVM vm, AITileListRoadTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListRoadTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListRoadTileRegister(Squirrel *engine) {
@@ -96,6 +101,7 @@
 	template <> AITileListCargoAcceptance &GetParam(ForceType<AITileListCargoAcceptance &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListCargoAcceptance *)instance; }
 	template <> const AITileListCargoAcceptance *GetParam(ForceType<const AITileListCargoAcceptance *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListCargoAcceptance *)instance; }
 	template <> const AITileListCargoAcceptance &GetParam(ForceType<const AITileListCargoAcceptance &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListCargoAcceptance *)instance; }
+	template <> int Return<AITileListCargoAcceptance *>(HSQUIRRELVM vm, AITileListCargoAcceptance *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListCargoAcceptance", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListCargoAcceptanceRegister(Squirrel *engine) {
@@ -114,6 +120,7 @@
 	template <> AITileListDistanceManhattanToTile &GetParam(ForceType<AITileListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListDistanceManhattanToTile *)instance; }
 	template <> const AITileListDistanceManhattanToTile *GetParam(ForceType<const AITileListDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListDistanceManhattanToTile *)instance; }
 	template <> const AITileListDistanceManhattanToTile &GetParam(ForceType<const AITileListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListDistanceManhattanToTile *)instance; }
+	template <> int Return<AITileListDistanceManhattanToTile *>(HSQUIRRELVM vm, AITileListDistanceManhattanToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListDistanceManhattanToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListDistanceManhattanToTileRegister(Squirrel *engine) {
@@ -132,6 +139,7 @@
 	template <> AITileListDistanceSquareToTile &GetParam(ForceType<AITileListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListDistanceSquareToTile *)instance; }
 	template <> const AITileListDistanceSquareToTile *GetParam(ForceType<const AITileListDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListDistanceSquareToTile *)instance; }
 	template <> const AITileListDistanceSquareToTile &GetParam(ForceType<const AITileListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListDistanceSquareToTile *)instance; }
+	template <> int Return<AITileListDistanceSquareToTile *>(HSQUIRRELVM vm, AITileListDistanceSquareToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITileListDistanceSquareToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITileListDistanceSquareToTileRegister(Squirrel *engine) {
--- a/src/ai/api/ai_town.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_town.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITown &GetParam(ForceType<AITown &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITown *)instance; }
 	template <> const AITown *GetParam(ForceType<const AITown *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITown *)instance; }
 	template <> const AITown &GetParam(ForceType<const AITown &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITown *)instance; }
+	template <> int Return<AITown *>(HSQUIRRELVM vm, AITown *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITown", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITownRegister(Squirrel *engine) {
--- a/src/ai/api/ai_townlist.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_townlist.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITownList &GetParam(ForceType<AITownList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList *)instance; }
 	template <> const AITownList *GetParam(ForceType<const AITownList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList *)instance; }
 	template <> const AITownList &GetParam(ForceType<const AITownList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList *)instance; }
+	template <> int Return<AITownList *>(HSQUIRRELVM vm, AITownList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITownList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITownListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_townlist_valuator.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_townlist_valuator.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITownListRandomize &GetParam(ForceType<AITownListRandomize &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListRandomize *)instance; }
 	template <> const AITownListRandomize *GetParam(ForceType<const AITownListRandomize *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListRandomize *)instance; }
 	template <> const AITownListRandomize &GetParam(ForceType<const AITownListRandomize &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListRandomize *)instance; }
+	template <> int Return<AITownListRandomize *>(HSQUIRRELVM vm, AITownListRandomize *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITownListRandomize", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITownListRandomizeRegister(Squirrel *engine) {
@@ -24,6 +25,7 @@
 	template <> AITownListPopulation &GetParam(ForceType<AITownListPopulation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListPopulation *)instance; }
 	template <> const AITownListPopulation *GetParam(ForceType<const AITownListPopulation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListPopulation *)instance; }
 	template <> const AITownListPopulation &GetParam(ForceType<const AITownListPopulation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListPopulation *)instance; }
+	template <> int Return<AITownListPopulation *>(HSQUIRRELVM vm, AITownListPopulation *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITownListPopulation", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITownListPopulationRegister(Squirrel *engine) {
@@ -42,6 +44,7 @@
 	template <> AITownListLocation &GetParam(ForceType<AITownListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListLocation *)instance; }
 	template <> const AITownListLocation *GetParam(ForceType<const AITownListLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListLocation *)instance; }
 	template <> const AITownListLocation &GetParam(ForceType<const AITownListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListLocation *)instance; }
+	template <> int Return<AITownListLocation *>(HSQUIRRELVM vm, AITownListLocation *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITownListLocation", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITownListLocationRegister(Squirrel *engine) {
@@ -60,6 +63,7 @@
 	template <> AITownListDistanceManhattanToTile &GetParam(ForceType<AITownListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListDistanceManhattanToTile *)instance; }
 	template <> const AITownListDistanceManhattanToTile *GetParam(ForceType<const AITownListDistanceManhattanToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListDistanceManhattanToTile *)instance; }
 	template <> const AITownListDistanceManhattanToTile &GetParam(ForceType<const AITownListDistanceManhattanToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListDistanceManhattanToTile *)instance; }
+	template <> int Return<AITownListDistanceManhattanToTile *>(HSQUIRRELVM vm, AITownListDistanceManhattanToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITownListDistanceManhattanToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITownListDistanceManhattanToTileRegister(Squirrel *engine) {
@@ -78,6 +82,7 @@
 	template <> AITownListDistanceSquareToTile &GetParam(ForceType<AITownListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListDistanceSquareToTile *)instance; }
 	template <> const AITownListDistanceSquareToTile *GetParam(ForceType<const AITownListDistanceSquareToTile *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListDistanceSquareToTile *)instance; }
 	template <> const AITownListDistanceSquareToTile &GetParam(ForceType<const AITownListDistanceSquareToTile &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListDistanceSquareToTile *)instance; }
+	template <> int Return<AITownListDistanceSquareToTile *>(HSQUIRRELVM vm, AITownListDistanceSquareToTile *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITownListDistanceSquareToTile", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITownListDistanceSquareToTileRegister(Squirrel *engine) {
--- a/src/ai/api/ai_transactionmode.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_transactionmode.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AITransactionMode &GetParam(ForceType<AITransactionMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITransactionMode *)instance; }
 	template <> const AITransactionMode *GetParam(ForceType<const AITransactionMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITransactionMode *)instance; }
 	template <> const AITransactionMode &GetParam(ForceType<const AITransactionMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITransactionMode *)instance; }
+	template <> int Return<AITransactionMode *>(HSQUIRRELVM vm, AITransactionMode *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AITransactionMode", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAITransactionModeRegister(Squirrel *engine) {
--- a/src/ai/api/ai_vehicle.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_vehicle.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIVehicle &GetParam(ForceType<AIVehicle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicle *)instance; }
 	template <> const AIVehicle *GetParam(ForceType<const AIVehicle *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicle *)instance; }
 	template <> const AIVehicle &GetParam(ForceType<const AIVehicle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicle *)instance; }
+	template <> int Return<AIVehicle *>(HSQUIRRELVM vm, AIVehicle *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicle", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleRegister(Squirrel *engine) {
--- a/src/ai/api/ai_vehiclelist.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_vehiclelist.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIVehicleList &GetParam(ForceType<AIVehicleList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList *)instance; }
 	template <> const AIVehicleList *GetParam(ForceType<const AIVehicleList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleList *)instance; }
 	template <> const AIVehicleList &GetParam(ForceType<const AIVehicleList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleList *)instance; }
+	template <> int Return<AIVehicleList *>(HSQUIRRELVM vm, AIVehicleList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListRegister(Squirrel *engine) {
@@ -24,6 +25,7 @@
 	template <> AIStationVehicleList &GetParam(ForceType<AIStationVehicleList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationVehicleList *)instance; }
 	template <> const AIStationVehicleList *GetParam(ForceType<const AIStationVehicleList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStationVehicleList *)instance; }
 	template <> const AIStationVehicleList &GetParam(ForceType<const AIStationVehicleList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStationVehicleList *)instance; }
+	template <> int Return<AIStationVehicleList *>(HSQUIRRELVM vm, AIStationVehicleList *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStationVehicleList", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIStationVehicleListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_vehiclelist_valuator.hpp.sq	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/ai_vehiclelist_valuator.hpp.sq	Wed Jul 18 14:58:37 2007 +0000
@@ -6,6 +6,7 @@
 	template <> AIVehicleListLocation &GetParam(ForceType<AIVehicleListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListLocation *)instance; }
 	template <> const AIVehicleListLocation *GetParam(ForceType<const AIVehicleListLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListLocation *)instance; }
 	template <> const AIVehicleListLocation &GetParam(ForceType<const AIVehicleListLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListLocation *)instance; }
+	template <> int Return<AIVehicleListLocation *>(HSQUIRRELVM vm, AIVehicleListLocation *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListLocation", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListLocationRegister(Squirrel *engine) {
@@ -24,6 +25,7 @@
 	template <> AIVehicleListEngineType &GetParam(ForceType<AIVehicleListEngineType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListEngineType *)instance; }
 	template <> const AIVehicleListEngineType *GetParam(ForceType<const AIVehicleListEngineType *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListEngineType *)instance; }
 	template <> const AIVehicleListEngineType &GetParam(ForceType<const AIVehicleListEngineType &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListEngineType *)instance; }
+	template <> int Return<AIVehicleListEngineType *>(HSQUIRRELVM vm, AIVehicleListEngineType *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListEngineType", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListEngineTypeRegister(Squirrel *engine) {
@@ -42,6 +44,7 @@
 	template <> AIVehicleListUnitNumber &GetParam(ForceType<AIVehicleListUnitNumber &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListUnitNumber *)instance; }
 	template <> const AIVehicleListUnitNumber *GetParam(ForceType<const AIVehicleListUnitNumber *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListUnitNumber *)instance; }
 	template <> const AIVehicleListUnitNumber &GetParam(ForceType<const AIVehicleListUnitNumber &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListUnitNumber *)instance; }
+	template <> int Return<AIVehicleListUnitNumber *>(HSQUIRRELVM vm, AIVehicleListUnitNumber *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListUnitNumber", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListUnitNumberRegister(Squirrel *engine) {
@@ -60,6 +63,7 @@
 	template <> AIVehicleListAge &GetParam(ForceType<AIVehicleListAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListAge *)instance; }
 	template <> const AIVehicleListAge *GetParam(ForceType<const AIVehicleListAge *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListAge *)instance; }
 	template <> const AIVehicleListAge &GetParam(ForceType<const AIVehicleListAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListAge *)instance; }
+	template <> int Return<AIVehicleListAge *>(HSQUIRRELVM vm, AIVehicleListAge *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListAge", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListAgeRegister(Squirrel *engine) {
@@ -78,6 +82,7 @@
 	template <> AIVehicleListMaxAge &GetParam(ForceType<AIVehicleListMaxAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListMaxAge *)instance; }
 	template <> const AIVehicleListMaxAge *GetParam(ForceType<const AIVehicleListMaxAge *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListMaxAge *)instance; }
 	template <> const AIVehicleListMaxAge &GetParam(ForceType<const AIVehicleListMaxAge &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListMaxAge *)instance; }
+	template <> int Return<AIVehicleListMaxAge *>(HSQUIRRELVM vm, AIVehicleListMaxAge *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListMaxAge", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListMaxAgeRegister(Squirrel *engine) {
@@ -96,6 +101,7 @@
 	template <> AIVehicleListAgeLeft &GetParam(ForceType<AIVehicleListAgeLeft &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListAgeLeft *)instance; }
 	template <> const AIVehicleListAgeLeft *GetParam(ForceType<const AIVehicleListAgeLeft *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListAgeLeft *)instance; }
 	template <> const AIVehicleListAgeLeft &GetParam(ForceType<const AIVehicleListAgeLeft &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListAgeLeft *)instance; }
+	template <> int Return<AIVehicleListAgeLeft *>(HSQUIRRELVM vm, AIVehicleListAgeLeft *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListAgeLeft", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListAgeLeftRegister(Squirrel *engine) {
@@ -114,6 +120,7 @@
 	template <> AIVehicleListProfitThisYear &GetParam(ForceType<AIVehicleListProfitThisYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListProfitThisYear *)instance; }
 	template <> const AIVehicleListProfitThisYear *GetParam(ForceType<const AIVehicleListProfitThisYear *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListProfitThisYear *)instance; }
 	template <> const AIVehicleListProfitThisYear &GetParam(ForceType<const AIVehicleListProfitThisYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListProfitThisYear *)instance; }
+	template <> int Return<AIVehicleListProfitThisYear *>(HSQUIRRELVM vm, AIVehicleListProfitThisYear *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListProfitThisYear", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListProfitThisYearRegister(Squirrel *engine) {
@@ -132,6 +139,7 @@
 	template <> AIVehicleListProfitLastYear &GetParam(ForceType<AIVehicleListProfitLastYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListProfitLastYear *)instance; }
 	template <> const AIVehicleListProfitLastYear *GetParam(ForceType<const AIVehicleListProfitLastYear *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicleListProfitLastYear *)instance; }
 	template <> const AIVehicleListProfitLastYear &GetParam(ForceType<const AIVehicleListProfitLastYear &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicleListProfitLastYear *)instance; }
+	template <> int Return<AIVehicleListProfitLastYear *>(HSQUIRRELVM vm, AIVehicleListProfitLastYear *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIVehicleListProfitLastYear", res, &instance); sq_pushobject(vm, instance); return 1; }
 }; // namespace SQConvert
 
 void SQAIVehicleListProfitLastYearRegister(Squirrel *engine) {
--- a/src/ai/api/squirrel_export.awk	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/ai/api/squirrel_export.awk	Wed Jul 18 14:58:37 2007 +0000
@@ -21,6 +21,7 @@
 	print "	template <> "       name " &GetParam(ForceType<"       name " &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
 	print "	template <> const " name " *GetParam(ForceType<const " name " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (" name " *)instance; }"
 	print "	template <> const " name " &GetParam(ForceType<const " name " &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
+	print "	template <> int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, \"" name "\", res, &instance); sq_pushobject(vm, instance); return 1; }"
 }
 
 BEGIN {
--- a/src/squirrel.cpp	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/squirrel.cpp	Wed Jul 18 14:58:37 2007 +0000
@@ -152,41 +152,46 @@
 	sq_settop(this->vm, top);
 }
 
-bool Squirrel::CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance)
+/* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance)
 {
-	int oldtop = sq_gettop(this->vm);
+	int oldtop = sq_gettop(vm);
 
 	/* First, find the class */
-	sq_pushroottable(this->vm);
-	sq_pushstring(this->vm, OTTD2FS(class_name), -1);
-	if (SQ_FAILED(sq_get(this->vm, -2))) {
+	sq_pushroottable(vm);
+	sq_pushstring(vm, OTTD2FS(class_name), -1);
+	if (SQ_FAILED(sq_get(vm, -2))) {
 		DEBUG(misc, 0, "[squirrel] Failed to find class by the name '%s'", class_name);
-		sq_settop(this->vm, oldtop);
+		sq_settop(vm, oldtop);
 		return false;
 	}
 
 	/* Create the instance */
-	if (SQ_FAILED(sq_createinstance(this->vm, -1))) {
+	if (SQ_FAILED(sq_createinstance(vm, -1))) {
 		DEBUG(misc, 0, "[squirrel] Failed to create instance for class '%s'", class_name);
-		sq_settop(this->vm, oldtop);
+		sq_settop(vm, oldtop);
 		return false;
 	}
 
 	if (instance != NULL) {
 		/* Find our instance */
-		sq_getstackobj(this->vm, -1, instance);
+		sq_getstackobj(vm, -1, instance);
 		/* Add a reference to it, so it survives for ever */
-		sq_addref(this->vm, instance);
+		sq_addref(vm, instance);
 	}
 	/* Store it in the class */
-	sq_setinstanceup(this->vm, -1, real_instance);
+	sq_setinstanceup(vm, -1, real_instance);
 
 	/* Reset the top */
-	sq_settop(this->vm, oldtop);
+	sq_settop(vm, oldtop);
 
 	return true;
 }
 
+bool Squirrel::CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance)
+{
+	return Squirrel::CreateClassInstanceVM(this->vm, class_name, real_instance, instance);
+}
+
 Squirrel::Squirrel()
 {
 	this->vm = sq_open(1024);
--- a/src/squirrel.hpp	Wed Jul 18 10:53:58 2007 +0000
+++ b/src/squirrel.hpp	Wed Jul 18 14:58:37 2007 +0000
@@ -96,6 +96,11 @@
 	 * @param instance Returning value with the pointer to the instance.
 	 * @return False if creating failed.
 	 */
+	static bool CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance);
+
+	/**
+	 * Exactly the same as CreateClassInstanceVM, only callable without instance of Squirrel.
+	 */
 	bool CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance);
 
 	/**