changeset 10480:649ba332458f draft

(svn r14735) -Codechange: remove a bit of bit-waste in the map array (without changing the map array) and make the CompanyIDs contiguous. -Note: 15 should be enough for now... making it any more means adding more bytes to the map array and thus wasting more bits instead of reducing the bit waste.
author rubidium <rubidium@openttd.org>
date Wed, 24 Dec 2008 09:53:15 +0000
parents 605b63342569
children 707e6caea231
files src/company_base.h src/company_cmd.cpp src/company_type.h src/engine.cpp src/graph_gui.cpp src/network/network_gui.cpp src/oldloader.cpp src/openttd.cpp src/saveload.cpp src/town_cmd.cpp
diffstat 10 files changed, 75 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/src/company_base.h
+++ b/src/company_base.h
@@ -28,7 +28,7 @@
  * otherwise more (or less) companies will be allowed to be
  * created than what MAX_COMPANIES specifies!
  */
-DECLARE_OLD_POOL(Company, Company, 1, MAX_COMPANIES >> 1)
+DECLARE_OLD_POOL(Company, Company, 1, (MAX_COMPANIES + 1) >> 1)
 
 struct Company : PoolItem<Company, CompanyByte, &_Company_pool> {
 	Company(uint16 name_1 = 0, bool is_ai = false);
@@ -86,7 +86,7 @@
 
 static inline bool IsValidCompanyID(CompanyID company)
 {
-	return (uint)company < GetCompanyPoolSize() && GetCompany(company)->IsValid();
+	return company < MAX_COMPANIES && (uint)company < GetCompanyPoolSize() && GetCompany(company)->IsValid();
 }
 
 #define FOR_ALL_COMPANIES_FROM(d, start) for (d = GetCompany(start); d != NULL; d = (d->index + 1U < GetCompanyPoolSize()) ? GetCompany(d->index + 1U) : NULL) if (d->IsValid())
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -1135,7 +1135,8 @@
 	    SLE_VAR(Company, num_valid_stat_ent,    SLE_UINT8),
 
 	    SLE_VAR(Company, quarters_of_bankrupcy, SLE_UINT8),
-	    SLE_VAR(Company, bankrupt_asked,        SLE_UINT8),
+	SLE_CONDVAR(Company, bankrupt_asked,        SLE_FILE_U8  | SLE_VAR_U16,  0, 103),
+	SLE_CONDVAR(Company, bankrupt_asked,        SLE_UINT16,                104, SL_MAX_VERSION),
 	    SLE_VAR(Company, bankrupt_timeout,      SLE_INT16),
 	SLE_CONDVAR(Company, bankrupt_value,        SLE_VAR_I64 | SLE_FILE_I32,  0, 64),
 	SLE_CONDVAR(Company, bankrupt_value,        SLE_INT64,                  65, SL_MAX_VERSION),
--- a/src/company_type.h
+++ b/src/company_type.h
@@ -15,7 +15,7 @@
 	 * companies, above, they are special, computer controlled 'companies' */
 	OWNER_BEGIN     = 0x00, ///< First owner
 	COMPANY_FIRST   = 0x00, ///< First company, same as owner
-	MAX_COMPANIES   = 0x08, ///< Maximum number of companies
+	MAX_COMPANIES   = 0x0F, ///< Maximum number of companies
 	OWNER_TOWN      = 0x0F, ///< A town owns the tile, or a town is expanding
 	OWNER_NONE      = 0x10, ///< The tile has no ownership
 	OWNER_WATER     = 0x11, ///< The tile/execution is done by "water"
@@ -44,7 +44,7 @@
 typedef Owner CompanyID;
 typedef OwnerByte CompanyByte;
 
-typedef uint8 CompanyMask;
+typedef uint16 CompanyMask;
 
 struct Company;
 typedef uint32 CompanyManagerFace; ///< Company manager face bits, info see in company_manager_face.h
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -633,7 +633,8 @@
 	    SLE_VAR(Engine, preview_company_rank,SLE_UINT8),
 	    SLE_VAR(Engine, preview_wait,        SLE_UINT8),
 	SLE_CONDNULL(1, 0, 44),
-	    SLE_VAR(Engine, company_avail,       SLE_UINT8),
+	SLE_CONDVAR(Engine, company_avail,       SLE_FILE_U8  | SLE_VAR_U16,  0, 103),
+	SLE_CONDVAR(Engine, company_avail,       SLE_UINT16,                104, SL_MAX_VERSION),
 	SLE_CONDSTR(Engine, name,                SLE_STR, 0,                 84, SL_MAX_VERSION),
 
 	/* reserve extra space in savegame here. (currently 16 bytes) */
--- a/src/graph_gui.cpp
+++ b/src/graph_gui.cpp
@@ -82,7 +82,7 @@
 static const Widget _graph_legend_widgets[] = {
 {   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_GREY,     0,    10,     0,    13, STR_00C5,                       STR_018B_CLOSE_WINDOW},
 {    WWT_CAPTION,   RESIZE_NONE,  COLOUR_GREY,    11,   249,     0,    13, STR_704E_KEY_TO_COMPANY_GRAPHS, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   249,    14,   113, 0x0,                            STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   249,    14,   195, 0x0,                            STR_NULL},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,    16,    27, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,    28,    39, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,    40,    51, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
@@ -91,11 +91,18 @@
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,    76,    87, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,    88,    99, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   100,   111, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   112,   123, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   124,   135, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   136,   147, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   148,   159, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   160,   171, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   172,   183, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,   247,   184,   195, 0x0,                            STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {   WIDGETS_END},
 };
 
 static const WindowDesc _graph_legend_desc = {
-	WDP_AUTO, WDP_AUTO, 250, 114, 250, 114,
+	WDP_AUTO, WDP_AUTO, 250, 198, 250, 198,
 	WC_GRAPH_LEGEND, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 	_graph_legend_widgets,
@@ -832,15 +839,15 @@
 
 
 static const Widget _company_league_widgets[] = {
-{   WWT_CLOSEBOX, RESIZE_NONE,  COLOUR_GREY,   0,  10,  0, 13, STR_00C5,                      STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION, RESIZE_NONE,  COLOUR_GREY,  11, 387,  0, 13, STR_7053_COMPANY_LEAGUE_TABLE, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{  WWT_STICKYBOX, RESIZE_NONE,  COLOUR_GREY, 388, 399,  0, 13, STR_NULL,                      STR_STICKY_BUTTON},
-{      WWT_PANEL, RESIZE_NONE,  COLOUR_GREY,   0, 399, 14, 96, 0x0,                           STR_NULL},
+{   WWT_CLOSEBOX, RESIZE_NONE,  COLOUR_GREY,   0,  10,  0,  13, STR_00C5,                      STR_018B_CLOSE_WINDOW},
+{    WWT_CAPTION, RESIZE_NONE,  COLOUR_GREY,  11, 387,  0,  13, STR_7053_COMPANY_LEAGUE_TABLE, STR_018C_WINDOW_TITLE_DRAG_THIS},
+{  WWT_STICKYBOX, RESIZE_NONE,  COLOUR_GREY, 388, 399,  0,  13, STR_NULL,                      STR_STICKY_BUTTON},
+{      WWT_PANEL, RESIZE_NONE,  COLOUR_GREY,   0, 399, 14, 166, 0x0,                           STR_NULL},
 {   WIDGETS_END},
 };
 
 static const WindowDesc _company_league_desc = {
-	WDP_AUTO, WDP_AUTO, 400, 97, 400, 97,
+	WDP_AUTO, WDP_AUTO, 400, 167, 400, 167,
 	WC_COMPANY_LEAGUE, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
 	_company_league_widgets,
@@ -896,7 +903,7 @@
 	virtual void OnPaint()
 	{
 		byte x;
-		uint16 y = 14;
+		uint16 y = 27;
 		int total_score = 0;
 		int color_done, color_notdone;
 
@@ -952,7 +959,7 @@
 			}
 
 			x = (i == company) ? 1 : 0;
-			DrawCompanyIcon(i, i * 37 + 13 + x, 16 + x);
+			DrawCompanyIcon(i, (i % 8) * 37 + 13 + x, (i < 8 ? 0 : 13) + 16 + x);
 		}
 
 		/* The colors used to show how the progress is going */
@@ -1053,18 +1060,18 @@
 static const Widget _performance_rating_detail_widgets[] = {
 {   WWT_CLOSEBOX,   RESIZE_NONE,  COLOUR_GREY,     0,    10,     0,    13, STR_00C5,               STR_018B_CLOSE_WINDOW},
 {    WWT_CAPTION,   RESIZE_NONE,  COLOUR_GREY,    11,   298,     0,    13, STR_PERFORMANCE_DETAIL, STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    14,    27, 0x0,                    STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    14,    40, 0x0,                    STR_NULL},
 
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    28,    47, 0x0,                    STR_PERFORMANCE_DETAIL_VEHICLES_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    48,    67, 0x0,                    STR_PERFORMANCE_DETAIL_STATIONS_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    68,    87, 0x0,                    STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    88,   107, 0x0,                    STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   108,   127, 0x0,                    STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   128,   147, 0x0,                    STR_PERFORMANCE_DETAIL_DELIVERED_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   148,   167, 0x0,                    STR_PERFORMANCE_DETAIL_CARGO_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   168,   187, 0x0,                    STR_PERFORMANCE_DETAIL_MONEY_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   188,   207, 0x0,                    STR_PERFORMANCE_DETAIL_LOAN_TIP},
-{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   208,   227, 0x0,                    STR_PERFORMANCE_DETAIL_TOTAL_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    41,    60, 0x0,                    STR_PERFORMANCE_DETAIL_VEHICLES_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    61,    80, 0x0,                    STR_PERFORMANCE_DETAIL_STATIONS_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,    81,   100, 0x0,                    STR_PERFORMANCE_DETAIL_MIN_PROFIT_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   101,   120, 0x0,                    STR_PERFORMANCE_DETAIL_MIN_INCOME_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   121,   140, 0x0,                    STR_PERFORMANCE_DETAIL_MAX_INCOME_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   141,   160, 0x0,                    STR_PERFORMANCE_DETAIL_DELIVERED_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   161,   180, 0x0,                    STR_PERFORMANCE_DETAIL_CARGO_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   181,   200, 0x0,                    STR_PERFORMANCE_DETAIL_MONEY_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   201,   220, 0x0,                    STR_PERFORMANCE_DETAIL_LOAN_TIP},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     0,   298,   221,   240, 0x0,                    STR_PERFORMANCE_DETAIL_TOTAL_TIP},
 
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,    38,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,    39,    75,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
@@ -1074,11 +1081,18 @@
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,   187,   223,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,   224,   260,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,   261,   297,    14,    26, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,     2,    38,    27,    39, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,    39,    75,    27,    39, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,    76,   112,    27,    39, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,   113,   149,    27,    39, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,   150,   186,    27,    39, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,   187,   223,    27,    39, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
+{      WWT_PANEL,   RESIZE_NONE,  COLOUR_GREY,   224,   260,    27,    39, 0x0,                    STR_704F_CLICK_HERE_TO_TOGGLE_COMPANY},
 {   WIDGETS_END},
 };
 
 static const WindowDesc _performance_rating_detail_desc = {
-	WDP_AUTO, WDP_AUTO, 299, 228, 299, 228,
+	WDP_AUTO, WDP_AUTO, 299, 241, 299, 241,
 	WC_PERFORMANCE_DETAIL, WC_NONE,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 	_performance_rating_detail_widgets,
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -1189,6 +1189,8 @@
 		SetDParamStr(0, gi->server_name);
 		this->DrawWidgets();
 
+		SetVScrollCount(this, gi->companies_on);
+
 		/* Draw company list */
 		pos = this->vscroll.pos;
 		while (pos < gi->companies_on) {
@@ -1207,7 +1209,7 @@
 
 			pos++;
 			y += NET_PRC__SIZE_OF_ROW;
-			if (pos >= this->vscroll.cap) break;
+			if (pos >= this->vscroll.pos + this->vscroll.cap) break;
 		}
 
 		/* Draw info about selected company when it is selected in the left window */
--- a/src/oldloader.cpp
+++ b/src/oldloader.cpp
@@ -466,10 +466,10 @@
 	OCL_SVAR( OC_UINT16, Town, ratings[6] ),
 	OCL_SVAR( OC_UINT16, Town, ratings[7] ),
 
-	/* XXX - This is pretty odd.. we read 32bit, but only write 8bit.. sure there is
+	/* XXX - This is pretty odd.. we read 32bit, but only write 16bit.. sure there is
 	nothing changed ? ? */
-	OCL_SVAR( OC_FILE_U32 | OC_VAR_U8, Town, have_ratings ),
-	OCL_SVAR( OC_FILE_U32 | OC_VAR_U8, Town, statues ),
+	OCL_SVAR( OC_FILE_U32 | OC_VAR_U16, Town, have_ratings ),
+	OCL_SVAR( OC_FILE_U32 | OC_VAR_U16, Town, statues ),
 	OCL_NULL( 2 ),         ///< num_houses,        no longer in use
 	OCL_SVAR(  OC_UINT8, Town, time_until_rebuild ),
 	OCL_SVAR(  OC_UINT8, Town, growth_rate ),
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -2621,6 +2621,23 @@
 				v->engine_type = v->First()->engine_type;
 			}
 		}
+
+		/* More companies ... */
+		Company *c;
+		FOR_ALL_COMPANIES(c) {
+			if (c->bankrupt_asked == 0xFF) c->bankrupt_asked = 0xFFFF;
+		}
+
+		Engine *e;
+		FOR_ALL_ENGINES(e) {
+			if (e->company_avail == 0xFF) e->company_avail = 0xFFFF;
+		}
+
+		Town *t;
+		FOR_ALL_TOWNS(t) {
+			if (t->have_ratings == 0xFF) t->have_ratings = 0xFFFF;
+			for (uint i = 8; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL;
+		}
 	}
 
 	GamelogPrintDebug(1);
--- a/src/saveload.cpp
+++ b/src/saveload.cpp
@@ -37,7 +37,7 @@
 
 #include "table/strings.h"
 
-extern const uint16 SAVEGAME_VERSION = 103;
+extern const uint16 SAVEGAME_VERSION = 104;
 
 SavegameType _savegame_type; ///< type of savegame we are loading
 
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -2682,14 +2682,18 @@
 	SLE_CONDSTR(Town, name,                  SLE_STR, 0, 84, SL_MAX_VERSION),
 
 	    SLE_VAR(Town, flags12,               SLE_UINT8),
-	    SLE_VAR(Town, statues,               SLE_UINT8),
+	SLE_CONDVAR(Town, statues,               SLE_FILE_U8  | SLE_VAR_U16, 0, 103),
+	SLE_CONDVAR(Town, statues,               SLE_UINT16,               104, SL_MAX_VERSION),
 
 	SLE_CONDNULL(1, 0, 1),                   ///< sort_index, no longer in use
 
-	    SLE_VAR(Town, have_ratings,          SLE_UINT8),
-	    SLE_ARR(Town, ratings,               SLE_INT16, 8),
+	SLE_CONDVAR(Town, have_ratings,          SLE_FILE_U8  | SLE_VAR_U16, 0, 103),
+	SLE_CONDVAR(Town, have_ratings,          SLE_UINT16,               104, SL_MAX_VERSION),
+	SLE_CONDARR(Town, ratings,               SLE_INT16, 8,               0, 103),
+	SLE_CONDARR(Town, ratings,               SLE_INT16, MAX_COMPANIES, 104, SL_MAX_VERSION),
 	/* failed bribe attempts are stored since savegame format 4 */
-	SLE_CONDARR(Town, unwanted,              SLE_INT8, 8, 4, SL_MAX_VERSION),
+	SLE_CONDARR(Town, unwanted,              SLE_INT8,  8,               4, 103),
+	SLE_CONDARR(Town, unwanted,              SLE_INT8,  MAX_COMPANIES, 104, SL_MAX_VERSION),
 
 	SLE_CONDVAR(Town, max_pass,              SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 	SLE_CONDVAR(Town, max_mail,              SLE_FILE_U16 | SLE_VAR_U32, 0, 8),