changeset 17799:2dbb9286ae7a draft

(svn r22584) -Add: [NoAI] several functions to AICompany to find out performance information (Morloth)
author yexo <yexo@openttd.org>
date Mon, 13 Jun 2011 15:23:20 +0000
parents 4581fc7adab8
children 1d09833dd1cb
files bin/ai/compat_0.7.nut bin/ai/compat_1.0.nut bin/ai/compat_1.1.nut bin/ai/regression/regression.nut bin/ai/regression/regression.txt src/ai/api/ai_changelog.hpp src/ai/api/ai_company.cpp src/ai/api/ai_company.hpp src/ai/api/ai_company.hpp.sq
diffstat 9 files changed, 423 insertions(+), 128 deletions(-) [+]
line wrap: on
line diff
--- a/bin/ai/compat_0.7.nut
+++ b/bin/ai/compat_0.7.nut
@@ -321,3 +321,8 @@
 AIList.ChangeItem <- AIList.SetValue;
 
 AIRail.ERR_NONUNIFORM_STATIONS_DISABLED <- 0xFFFF;
+
+AICompany.GetCompanyValue <- function(company)
+{
+	return AICompany.GetQuarterlyCompanyValue(company, AICompany.CURRENT_QUARTER);
+}
--- a/bin/ai/compat_1.0.nut
+++ b/bin/ai/compat_1.0.nut
@@ -72,3 +72,8 @@
 AIList.ChangeItem <- AIList.SetValue;
 
 AIRail.ERR_NONUNIFORM_STATIONS_DISABLED <- 0xFFFF;
+
+AICompany.GetCompanyValue <- function(company)
+{
+	return AICompany.GetQuarterlyCompanyValue(company, AICompany.CURRENT_QUARTER);
+}
--- a/bin/ai/compat_1.1.nut
+++ b/bin/ai/compat_1.1.nut
@@ -8,3 +8,8 @@
  */
 
 AILog.Info("1.1 API compatability in effect.");
+
+AICompany.GetCompanyValue <- function(company)
+{
+	return AICompany.GetQuarterlyCompanyValue(company, AICompany.CURRENT_QUARTER);
+}
--- a/bin/ai/regression/regression.nut
+++ b/bin/ai/regression/regression.nut
@@ -394,50 +394,57 @@
 		}
 	}
 
-	print("  GetName():                   " + AICompany.GetName(AICompany.COMPANY_SELF));
-	print("  GetPresidentName():          " + AICompany.GetPresidentName(AICompany.COMPANY_SELF));
-	print("  SetPresidentName():          " + AICompany.SetPresidentName("Regression AI"));
-	print("  GetPresidentName():          " + AICompany.GetPresidentName(AICompany.COMPANY_SELF));
-	print("  GetCompanyValue():           " + AICompany.GetCompanyValue(AICompany.COMPANY_SELF));
-	print("  GetBankBalance():            " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
-	print("  GetName():                   " + AICompany.GetName(240));
-	print("  GetLoanAmount():             " + AICompany.GetLoanAmount());
-	print("  GetMaxLoanAmount():          " + AICompany.GetMaxLoanAmount());
-	print("  GetLoanInterval():           " + AICompany.GetLoanInterval());
-	print("  SetLoanAmount(1):            " + AICompany.SetLoanAmount(1));
-	print("  SetLoanAmount(100):          " + AICompany.SetLoanAmount(100));
-	print("  SetLoanAmount(10000):        " + AICompany.SetLoanAmount(10000));
-	print("  GetLastErrorString():        " + AIError.GetLastErrorString());
-	print("  GetBankBalance():            " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
-	print("  GetLoanAmount():             " + AICompany.GetLoanAmount());
-	print("  SetMinimumLoanAmount(31337): " + AICompany.SetMinimumLoanAmount(31337));
-	print("  GetBankBalance():            " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
-	print("  GetLoanAmount():             " + AICompany.GetLoanAmount());
-	print("  SetLoanAmount(10000):        " + AICompany.SetLoanAmount(AICompany.GetMaxLoanAmount()));
-	print("  GetBankBalance():            " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
-	print("  GetLoanAmount():             " + AICompany.GetLoanAmount());
-	print("  GetCompanyHQ():              " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF));
-	print("  BuildCompanyHQ():            " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(127, 129)));
-	print("  GetCompanyHQ():              " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF));
-	print("  BuildCompanyHQ():            " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 129)));
-	print("  GetCompanyHQ():              " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF));
-	print("  BuildCompanyHQ():            " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 128)));
-	print("  GetLastErrorString():        " + AIError.GetLastErrorString());
-	print("  GetAutoRenewStatus();        " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF));
-	print("  SetAutoRenewStatus(true);    " + AICompany.SetAutoRenewStatus(true));
-	print("  GetAutoRenewStatus();        " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF));
-	print("  SetAutoRenewStatus(true);    " + AICompany.SetAutoRenewStatus(true));
-	print("  SetAutoRenewStatus(false);   " + AICompany.SetAutoRenewStatus(false));
-	print("  GetAutoRenewMonths();        " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF));
-	print("  SetAutoRenewMonths(-12);     " + AICompany.SetAutoRenewMonths(-12));
-	print("  GetAutoRenewMonths();        " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF));
-	print("  SetAutoRenewMonths(-12);     " + AICompany.SetAutoRenewMonths(-12));
-	print("  SetAutoRenewMonths(6);       " + AICompany.SetAutoRenewMonths(6));
-	print("  GetAutoRenewMoney();         " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF));
-	print("  SetAutoRenewMoney(200000);   " + AICompany.SetAutoRenewMoney(200000));
-	print("  GetAutoRenewMoney();         " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF));
-	print("  SetAutoRenewMoney(200000);   " + AICompany.SetAutoRenewMoney(200000));
-	print("  SetAutoRenewMoney(100000);   " + AICompany.SetAutoRenewMoney(100000));
+	print("  GetName():                         " + AICompany.GetName(AICompany.COMPANY_SELF));
+	print("  GetPresidentName():                " + AICompany.GetPresidentName(AICompany.COMPANY_SELF));
+	print("  SetPresidentName():                " + AICompany.SetPresidentName("Regression AI"));
+	print("  GetPresidentName():                " + AICompany.GetPresidentName(AICompany.COMPANY_SELF));
+	print("  GetBankBalance():                  " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
+	print("  GetName():                         " + AICompany.GetName(240));
+	print("  GetLoanAmount():                   " + AICompany.GetLoanAmount());
+	print("  GetMaxLoanAmount():                " + AICompany.GetMaxLoanAmount());
+	print("  GetLoanInterval():                 " + AICompany.GetLoanInterval());
+	print("  SetLoanAmount(1):                  " + AICompany.SetLoanAmount(1));
+	print("  SetLoanAmount(100):                " + AICompany.SetLoanAmount(100));
+	print("  SetLoanAmount(10000):              " + AICompany.SetLoanAmount(10000));
+	print("  GetLastErrorString():              " + AIError.GetLastErrorString());
+	print("  GetBankBalance():                  " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
+	print("  GetLoanAmount():                   " + AICompany.GetLoanAmount());
+	print("  SetMinimumLoanAmount(31337):       " + AICompany.SetMinimumLoanAmount(31337));
+	print("  GetBankBalance():                  " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
+	print("  GetLoanAmount():                   " + AICompany.GetLoanAmount());
+	print("  SetLoanAmount(10000):              " + AICompany.SetLoanAmount(AICompany.GetMaxLoanAmount()));
+	print("  GetBankBalance():                  " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
+	print("  GetLoanAmount():                   " + AICompany.GetLoanAmount());
+	print("  GetCompanyHQ():                    " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF));
+	print("  BuildCompanyHQ():                  " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(127, 129)));
+	print("  GetCompanyHQ():                    " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF));
+	print("  BuildCompanyHQ():                  " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 129)));
+	print("  GetCompanyHQ():                    " + AICompany.GetCompanyHQ(AICompany.COMPANY_SELF));
+	print("  BuildCompanyHQ():                  " + AICompany.BuildCompanyHQ(AIMap.GetTileIndex(129, 128)));
+	print("  GetLastErrorString():              " + AIError.GetLastErrorString());
+	print("  GetAutoRenewStatus();              " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF));
+	print("  SetAutoRenewStatus(true);          " + AICompany.SetAutoRenewStatus(true));
+	print("  GetAutoRenewStatus();              " + AICompany.GetAutoRenewStatus(AICompany.COMPANY_SELF));
+	print("  SetAutoRenewStatus(true);          " + AICompany.SetAutoRenewStatus(true));
+	print("  SetAutoRenewStatus(false);         " + AICompany.SetAutoRenewStatus(false));
+	print("  GetAutoRenewMonths();              " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF));
+	print("  SetAutoRenewMonths(-12);           " + AICompany.SetAutoRenewMonths(-12));
+	print("  GetAutoRenewMonths();              " + AICompany.GetAutoRenewMonths(AICompany.COMPANY_SELF));
+	print("  SetAutoRenewMonths(-12);           " + AICompany.SetAutoRenewMonths(-12));
+	print("  SetAutoRenewMonths(6);             " + AICompany.SetAutoRenewMonths(6));
+	print("  GetAutoRenewMoney();               " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF));
+	print("  SetAutoRenewMoney(200000);         " + AICompany.SetAutoRenewMoney(200000));
+	print("  GetAutoRenewMoney();               " + AICompany.GetAutoRenewMoney(AICompany.COMPANY_SELF));
+	print("  SetAutoRenewMoney(200000);         " + AICompany.SetAutoRenewMoney(200000));
+	print("  SetAutoRenewMoney(100000);         " + AICompany.SetAutoRenewMoney(100000));
+	for (local i = -1; i <= AICompany.EARLIEST_QUARTER; i++) {
+		print("  Quarter: " + i);
+		print("    GetQuarterlyIncome();            " + AICompany.GetQuarterlyIncome(AICompany.COMPANY_SELF, i));
+		print("    GetQuarterlyExpenses();          " + AICompany.GetQuarterlyExpenses(AICompany.COMPANY_SELF, i));
+		print("    GetQuarterlyCargoDelivered();    " + AICompany.GetQuarterlyCargoDelivered(AICompany.COMPANY_SELF, i));
+		print("    GetQuarterlyPerformanceRating(); " + AICompany.GetQuarterlyPerformanceRating(AICompany.COMPANY_SELF, i));
+		print("    GetQuarterlyCompanyValue();      " + AICompany.GetQuarterlyCompanyValue(AICompany.COMPANY_SELF, i));
+	}
 }
 
 function Regression::Engine()
--- a/bin/ai/regression/regression.txt
+++ b/bin/ai/regression/regression.txt
@@ -584,50 +584,205 @@
   SetName():            true
   SetName():            false
   GetLastErrorString(): ERR_NAME_IS_NOT_UNIQUE
-  GetName():                   Regression
-  GetPresidentName():          I. McAlpine
-  SetPresidentName():          true
-  GetPresidentName():          Regression AI
-  GetCompanyValue():           1
-  GetBankBalance():            100000
-  GetName():                   (null : 0x00000000)
-  GetLoanAmount():             100000
-  GetMaxLoanAmount():          500000
-  GetLoanInterval():           10000
-  SetLoanAmount(1):            false
-  SetLoanAmount(100):          false
-  SetLoanAmount(10000):        true
-  GetLastErrorString():        ERR_NONE
-  GetBankBalance():            10000
-  GetLoanAmount():             10000
-  SetMinimumLoanAmount(31337): true
-  GetBankBalance():            40000
-  GetLoanAmount():             40000
-  SetLoanAmount(10000):        true
-  GetBankBalance():            500000
-  GetLoanAmount():             500000
-  GetCompanyHQ():              -1
-  BuildCompanyHQ():            true
-  GetCompanyHQ():              33151
-  BuildCompanyHQ():            true
-  GetCompanyHQ():              33153
-  BuildCompanyHQ():            false
-  GetLastErrorString():        ERR_AREA_NOT_CLEAR
-  GetAutoRenewStatus();        false
-  SetAutoRenewStatus(true);    true
-  GetAutoRenewStatus();        true
-  SetAutoRenewStatus(true);    true
-  SetAutoRenewStatus(false);   true
-  GetAutoRenewMonths();        6
-  SetAutoRenewMonths(-12);     true
-  GetAutoRenewMonths();        -12
-  SetAutoRenewMonths(-12);     true
-  SetAutoRenewMonths(6);       true
-  GetAutoRenewMoney();         100000
-  SetAutoRenewMoney(200000);   true
-  GetAutoRenewMoney();         200000
-  SetAutoRenewMoney(200000);   true
-  SetAutoRenewMoney(100000);   true
+  GetName():                         Regression
+  GetPresidentName():                I. McAlpine
+  SetPresidentName():                true
+  GetPresidentName():                Regression AI
+  GetBankBalance():                  100000
+  GetName():                         (null : 0x00000000)
+  GetLoanAmount():                   100000
+  GetMaxLoanAmount():                500000
+  GetLoanInterval():                 10000
+  SetLoanAmount(1):                  false
+  SetLoanAmount(100):                false
+  SetLoanAmount(10000):              true
+  GetLastErrorString():              ERR_NONE
+  GetBankBalance():                  10000
+  GetLoanAmount():                   10000
+  SetMinimumLoanAmount(31337):       true
+  GetBankBalance():                  40000
+  GetLoanAmount():                   40000
+  SetLoanAmount(10000):              true
+  GetBankBalance():                  500000
+  GetLoanAmount():                   500000
+  GetCompanyHQ():                    -1
+  BuildCompanyHQ():                  true
+  GetCompanyHQ():                    33151
+  BuildCompanyHQ():                  true
+  GetCompanyHQ():                    33153
+  BuildCompanyHQ():                  false
+  GetLastErrorString():              ERR_AREA_NOT_CLEAR
+  GetAutoRenewStatus();              false
+  SetAutoRenewStatus(true);          true
+  GetAutoRenewStatus();              true
+  SetAutoRenewStatus(true);          true
+  SetAutoRenewStatus(false);         true
+  GetAutoRenewMonths();              6
+  SetAutoRenewMonths(-12);           true
+  GetAutoRenewMonths();              -12
+  SetAutoRenewMonths(-12);           true
+  SetAutoRenewMonths(6);             true
+  GetAutoRenewMoney();               100000
+  SetAutoRenewMoney(200000);         true
+  GetAutoRenewMoney();               200000
+  SetAutoRenewMoney(200000);         true
+  SetAutoRenewMoney(100000);         true
+  Quarter: -1
+    GetQuarterlyIncome();            -1
+    GetQuarterlyExpenses();          -1
+    GetQuarterlyCargoDelivered();    -1
+    GetQuarterlyPerformanceRating(); -1
+    GetQuarterlyCompanyValue();      -1
+  Quarter: 0
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          -210
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); -1
+    GetQuarterlyCompanyValue();      1
+  Quarter: 1
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 2
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 3
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 4
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 5
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 6
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 7
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 8
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 9
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 10
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 11
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 12
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 13
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 14
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 15
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 16
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 17
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 18
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 19
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 20
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 21
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 22
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 23
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
+  Quarter: 24
+    GetQuarterlyIncome();            0
+    GetQuarterlyExpenses();          0
+    GetQuarterlyCargoDelivered();    0
+    GetQuarterlyPerformanceRating(); 0
+    GetQuarterlyCompanyValue();      0
 
 --AIAirport--
   IsHangarTile():       false
--- a/src/ai/api/ai_changelog.hpp
+++ b/src/ai/api/ai_changelog.hpp
@@ -19,6 +19,17 @@
  *
  * 1.2.0 is not yet released. The following changes are not set in stone yet.
  *
+ * API additions:
+ *
+ * \li AICompany::GetQuarterlyIncome
+ * \li AICompany::GetQuarterlyExpenses
+ * \li AICompany::GetQuarterlyCargoDelivered
+ * \li AICompany::GetQuarterlyPerformanceRating
+ * \li AICompany::GetQuarterlyCompanyValue
+ *
+ * API removals:
+ * \li AICompany::GetCompanyValue, use AICompany::GetQuarterlyCompanyValue instead.
+ *
  * \b 1.1.0
  *
  * API additions:
--- a/src/ai/api/ai_company.cpp
+++ b/src/ai/api/ai_company.cpp
@@ -101,14 +101,65 @@
 	return HasBit(ge, ::GENDER_FEMALE) ? GENDER_FEMALE : GENDER_MALE;
 }
 
-/* static */ Money AICompany::GetCompanyValue(AICompany::CompanyID company)
+/* static */ Money AICompany::GetQuarterlyIncome(AICompany::CompanyID company, uint32 quarter)
+{
+	company = ResolveCompanyID(company);
+	if (company == COMPANY_INVALID) return -1;
+	if (quarter > EARLIEST_QUARTER) return -1;
+
+	if (quarter == CURRENT_QUARTER) {
+		return ::Company::Get((::CompanyID)company)->cur_economy.income;
+	}
+	return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].income;
+}
+
+/* static */ Money AICompany::GetQuarterlyExpenses(AICompany::CompanyID company, uint32 quarter)
+{
+	company = ResolveCompanyID(company);
+	if (company == COMPANY_INVALID) return -1;
+	if (quarter > EARLIEST_QUARTER) return -1;
+
+	if (quarter == CURRENT_QUARTER) {
+		return ::Company::Get((::CompanyID)company)->cur_economy.expenses;
+	}
+	return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].expenses;
+}
+
+/* static */ int32 AICompany::GetQuarterlyCargoDelivered(AICompany::CompanyID company, uint32 quarter)
 {
 	company = ResolveCompanyID(company);
 	if (company == COMPANY_INVALID) return -1;
+	if (quarter > EARLIEST_QUARTER) return -1;
 
-	return ::CalculateCompanyValue(::Company::Get((CompanyID)company));
+	if (quarter == CURRENT_QUARTER) {
+		return ::Company::Get((::CompanyID)company)->cur_economy.delivered_cargo;
+	}
+	return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].delivered_cargo;
 }
 
+/* static */ int32 AICompany::GetQuarterlyPerformanceRating(AICompany::CompanyID company, uint32 quarter)
+{
+	company = ResolveCompanyID(company);
+	if (company == COMPANY_INVALID) return -1;
+	if (quarter > EARLIEST_QUARTER) return -1;
+	if (quarter == CURRENT_QUARTER) return -1;
+
+	return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].performance_history;
+}
+
+/* static */ Money AICompany::GetQuarterlyCompanyValue(AICompany::CompanyID company, uint32 quarter)
+{
+	company = ResolveCompanyID(company);
+	if (company == COMPANY_INVALID) return -1;
+	if (quarter > EARLIEST_QUARTER) return -1;
+
+	if (quarter == CURRENT_QUARTER) {
+		return ::CalculateCompanyValue(::Company::Get((::CompanyID)company));
+	}
+	return ::Company::Get((::CompanyID)company)->old_economy[quarter - 1].company_value;
+}
+
+
 /* static */ Money AICompany::GetBankBalance(AICompany::CompanyID company)
 {
 	company = ResolveCompanyID(company);
--- a/src/ai/api/ai_company.hpp
+++ b/src/ai/api/ai_company.hpp
@@ -22,6 +22,12 @@
 	/** Get the name of this class to identify it towards squirrel. */
 	static const char *GetClassName() { return "AICompany"; }
 
+	/** The range of possible quarters to get company information of. */
+	enum Quarter {
+		CURRENT_QUARTER = 0,                     ///< The current quarter.
+		EARLIEST_QUARTER = MAX_HISTORY_QUARTERS, ///< The earliest quarter company information is available for.
+	};
+
 	/** Different constants related to CompanyID. */
 	enum CompanyID {
 		COMPANY_FIRST   = 0,               ///< The first available company.
@@ -149,14 +155,6 @@
 	static Money GetLoanInterval();
 
 	/**
-	 * Gets the current value of the given company.
-	 * @param company The company to get the company value of.
-	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
-	 * @return The current value of the given company.
-	 */
-	static Money GetCompanyValue(CompanyID company);
-
-	/**
 	 * Gets the bank balance. In other words, the amount of money the given company can spent.
 	 * @param company The company to get the bank balance of.
 	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
@@ -165,6 +163,58 @@
 	static Money GetBankBalance(CompanyID company);
 
 	/**
+	 * Get the income of the company in the given quarter.
+	 * @param company The company to get the quarterly income of.
+	 * @param quarter The quarter to get the income of.
+	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
+	 * @pre quarter <= EARLIEST_QUARTER.
+	 * @return The bruto income of the company in the given quarter.
+	 */
+	static Money GetQuarterlyIncome(CompanyID company, uint32 quarter);
+
+	/**
+	 * Get the expenses of the company in the given quarter.
+	 * @param company The company to get the quarterly expenses of.
+	 * @param quarter The quarter to get the expenses of.
+	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
+	 * @pre quarter <= EARLIEST_QUARTER.
+	 * @return The expenses of the company in the given quarter.
+	 */
+	static Money GetQuarterlyExpenses(CompanyID company, uint32 quarter);
+
+	/**
+	 * Get the amount of cargo delivered by the given company in the given quarter.
+	 * @param company The company to get the amount of delivered cargo of.
+	 * @param quarter The quarter to get the amount of delivered cargo of.
+	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
+	 * @pre quarter <= EARLIEST_QUARTER.
+	 * @return The amount of cargo delivered by the given company in the given quarter.
+	 */
+	static int32 GetQuarterlyCargoDelivered(CompanyID company, uint32 quarter);
+
+	/**
+	 * Get the performance rating of the given company in the given quarter.
+	 * @param company The company to get the performance rating of.
+	 * @param quarter The quarter to get the performance rating of.
+	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
+	 * @pre quarter <= EARLIEST_QUARTER.
+	 * @pre quarter != CURRENT_QUARTER.
+	 * @note The performance rating is calculated after every quarter, so the value for CURRENT_QUARTER is undefined.
+	 * @return The performance rating of the given company in the given quarter.
+	 */
+	static int32 GetQuarterlyPerformanceRating(CompanyID company, uint32 quarter);
+
+	/**
+	 * Get the value of the company in the given quarter.
+	 * @param company The company to get the value of.
+	 * @param quarter The quarter to get the value of.
+	 * @pre ResolveCompanyID(company) != COMPANY_INVALID.
+	 * @pre quarter <= EARLIEST_QUARTER.
+	 * @return The value of the company in the given quarter.
+	 */
+	static Money GetQuarterlyCompanyValue(CompanyID company, uint32 quarter);
+
+	/**
 	 * Build your company's HQ on the given tile.
 	 * @param tile The tile to build your HQ on, this tile is the most nothern tile of your HQ.
 	 * @pre AIMap::IsValidTile(tile).
--- a/src/ai/api/ai_company.hpp.sq
+++ b/src/ai/api/ai_company.hpp.sq
@@ -32,37 +32,43 @@
 	SQAICompany.PreRegister(engine);
 	SQAICompany.AddConstructor<void (AICompany::*)(), 1>(engine, "x");
 
-	SQAICompany.DefSQConst(engine, AICompany::COMPANY_FIRST,   "COMPANY_FIRST");
-	SQAICompany.DefSQConst(engine, AICompany::COMPANY_LAST,    "COMPANY_LAST");
-	SQAICompany.DefSQConst(engine, AICompany::COMPANY_SELF,    "COMPANY_SELF");
-	SQAICompany.DefSQConst(engine, AICompany::COMPANY_INVALID, "COMPANY_INVALID");
-	SQAICompany.DefSQConst(engine, AICompany::GENDER_MALE,     "GENDER_MALE");
-	SQAICompany.DefSQConst(engine, AICompany::GENDER_FEMALE,   "GENDER_FEMALE");
-	SQAICompany.DefSQConst(engine, AICompany::GENDER_INVALID,  "GENDER_INVALID");
+	SQAICompany.DefSQConst(engine, AICompany::CURRENT_QUARTER,  "CURRENT_QUARTER");
+	SQAICompany.DefSQConst(engine, AICompany::EARLIEST_QUARTER, "EARLIEST_QUARTER");
+	SQAICompany.DefSQConst(engine, AICompany::COMPANY_FIRST,    "COMPANY_FIRST");
+	SQAICompany.DefSQConst(engine, AICompany::COMPANY_LAST,     "COMPANY_LAST");
+	SQAICompany.DefSQConst(engine, AICompany::COMPANY_SELF,     "COMPANY_SELF");
+	SQAICompany.DefSQConst(engine, AICompany::COMPANY_INVALID,  "COMPANY_INVALID");
+	SQAICompany.DefSQConst(engine, AICompany::GENDER_MALE,      "GENDER_MALE");
+	SQAICompany.DefSQConst(engine, AICompany::GENDER_FEMALE,    "GENDER_FEMALE");
+	SQAICompany.DefSQConst(engine, AICompany::GENDER_INVALID,   "GENDER_INVALID");
 
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::ResolveCompanyID,     "ResolveCompanyID",     2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::IsMine,               "IsMine",               2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetName,              "SetName",              2, "..");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetName,              "GetName",              2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentName,     "SetPresidentName",     2, "..");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentName,     "GetPresidentName",     2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentGender,   "SetPresidentGender",   2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentGender,   "GetPresidentGender",   2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetLoanAmount,        "SetLoanAmount",        2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetMinimumLoanAmount, "SetMinimumLoanAmount", 2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanAmount,        "GetLoanAmount",        1, ".");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetMaxLoanAmount,     "GetMaxLoanAmount",     1, ".");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanInterval,      "GetLoanInterval",      1, ".");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetCompanyValue,      "GetCompanyValue",      2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetBankBalance,       "GetBankBalance",       2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::BuildCompanyHQ,       "BuildCompanyHQ",       2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetCompanyHQ,         "GetCompanyHQ",         2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewStatus,   "SetAutoRenewStatus",   2, ".b");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewStatus,   "GetAutoRenewStatus",   2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMonths,   "SetAutoRenewMonths",   2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMonths,   "GetAutoRenewMonths",   2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMoney,    "SetAutoRenewMoney",    2, ".i");
-	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMoney,    "GetAutoRenewMoney",    2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::ResolveCompanyID,              "ResolveCompanyID",                2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::IsMine,                        "IsMine",                          2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetName,                       "SetName",                         2, "..");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetName,                       "GetName",                         2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentName,              "SetPresidentName",                2, "..");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentName,              "GetPresidentName",                2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetPresidentGender,            "SetPresidentGender",              2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetPresidentGender,            "GetPresidentGender",              2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetLoanAmount,                 "SetLoanAmount",                   2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetMinimumLoanAmount,          "SetMinimumLoanAmount",            2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanAmount,                 "GetLoanAmount",                   1, ".");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetMaxLoanAmount,              "GetMaxLoanAmount",                1, ".");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetLoanInterval,               "GetLoanInterval",                 1, ".");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyIncome,            "GetQuarterlyIncome",              3, ".ii");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyExpenses,          "GetQuarterlyExpenses",            3, ".ii");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyCargoDelivered,    "GetQuarterlyCargoDelivered",      3, ".ii");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyPerformanceRating, "GetQuarterlyPerformanceRating",   3, ".ii");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetQuarterlyCompanyValue,      "GetQuarterlyCompanyValue",        3, ".ii");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetBankBalance,                "GetBankBalance",                  2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::BuildCompanyHQ,                "BuildCompanyHQ",                  2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetCompanyHQ,                  "GetCompanyHQ",                    2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewStatus,            "SetAutoRenewStatus",              2, ".b");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewStatus,            "GetAutoRenewStatus",              2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMonths,            "SetAutoRenewMonths",              2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMonths,            "GetAutoRenewMonths",              2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::SetAutoRenewMoney,             "SetAutoRenewMoney",               2, ".i");
+	SQAICompany.DefSQStaticMethod(engine, &AICompany::GetAutoRenewMoney,             "GetAutoRenewMoney",               2, ".i");
 
 	SQAICompany.PostRegister(engine);
 }