From fe6f9e9a658be8198b3ee149d8f50c6e2900111d Mon Sep 17 00:00:00 2001 From: celestar Date: Thu, 17 Feb 2005 10:56:19 +0000 Subject: [PATCH] (svn r1881) -Fix: [ 1119308 ] Max passengers / mail variables are now 32 bit --- ai_new.c | 2 +- functions.h | 1 + lang/english.txt | 4 ++-- town.h | 16 ++++++++-------- town_cmd.c | 27 ++++++++++++++++++--------- ttd.c | 7 +++++++ 6 files changed, 37 insertions(+), 20 deletions(-) diff --git a/ai_new.c b/ai_new.c index 3d28f7f9bc..f1d43742fc 100644 --- a/ai_new.c +++ b/ai_new.c @@ -190,7 +190,7 @@ static bool AiNew_Check_City_or_Industry(Player *p, int ic, byte type) { if (type == AI_CITY) { Town *t = GetTown(ic); Station *st; - int count = 0; + uint count = 0; int j = 0; // We don't like roadconstructions, don't even true such a city diff --git a/functions.h b/functions.h index 032c279c65..4e6681680b 100644 --- a/functions.h +++ b/functions.h @@ -23,6 +23,7 @@ void AnimateTile(uint tile); void ClickTile(uint tile); void GetTileDesc(uint tile, TileDesc *td); void DrawTile(TileInfo *ti); +void UpdateTownMaxPass(Town *t); bool IsValidTile(uint tile); diff --git a/lang/english.txt b/lang/english.txt index d91046ca0c..4f5011547d 100644 --- a/lang/english.txt +++ b/lang/english.txt @@ -1509,8 +1509,8 @@ STR_2009_LOCAL_AUTHORITY_REFUSES :{WHITE}{TOWN} local authority refuses to al STR_200A_TOWN_NAMES_CLICK_ON_NAME :{BLACK}Town names - click on name to centre view on town STR_200B_CENTER_THE_MAIN_VIEW_ON :{BLACK}Centre the main view on town location STR_200C_CHANGE_TOWN_NAME :{BLACK}Change town name -STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passengers last month: {ORANGE}{COMMA16}{BLACK} max: {ORANGE}{COMMA16} -STR_200E_MAIL_LAST_MONTH_MAX :{BLACK}Mail last month: {ORANGE}{COMMA16}{BLACK} max: {ORANGE}{COMMA16} +STR_200D_PASSENGERS_LAST_MONTH_MAX :{BLACK}Passengers last month: {ORANGE}{COMMA32}{BLACK} max: {ORANGE}{COMMA32} +STR_200E_MAIL_LAST_MONTH_MAX :{BLACK}Mail last month: {ORANGE}{COMMA32}{BLACK} max: {ORANGE}{COMMA32} STR_200F_TALL_OFFICE_BLOCK :Tall office block STR_2010_OFFICE_BLOCK :Office block STR_2011_SMALL_BLOCK_OF_FLATS :Small block of flats diff --git a/town.h b/town.h index ddd30b960b..b4a588de1c 100644 --- a/town.h +++ b/town.h @@ -35,14 +35,14 @@ struct Town { int16 ratings[MAX_PLAYERS]; // Maximum amount of passengers and mail that can be transported. - uint16 max_pass; - uint16 max_mail; - uint16 new_max_pass; - uint16 new_max_mail; - uint16 act_pass; - uint16 act_mail; - uint16 new_act_pass; - uint16 new_act_mail; + uint32 max_pass; + uint32 max_mail; + uint32 new_max_pass; + uint32 new_max_mail; + uint32 act_pass; + uint32 act_mail; + uint32 new_act_pass; + uint32 new_act_mail; // Amount of passengers that were transported. byte pct_pass_transported; diff --git a/town_cmd.c b/town_cmd.c index 43cdd61f51..104f2ca068 100644 --- a/town_cmd.c +++ b/town_cmd.c @@ -898,7 +898,7 @@ restart: } } -static void UpdateTownMaxPass(Town *t) +void UpdateTownMaxPass(Town *t) { t->max_pass = t->population >> 3; t->max_mail = t->population >> 4; @@ -1926,14 +1926,23 @@ static const byte _town_desc[] = { // failed bribe attempts are stored since savegame format 4 SLE_CONDARR(Town,unwanted, SLE_INT8, 8, 4,255), - SLE_VAR(Town,max_pass, SLE_UINT16), - SLE_VAR(Town,max_mail, SLE_UINT16), - SLE_VAR(Town,new_max_pass,SLE_UINT16), - SLE_VAR(Town,new_max_mail,SLE_UINT16), - SLE_VAR(Town,act_pass, SLE_UINT16), - SLE_VAR(Town,act_mail, SLE_UINT16), - SLE_VAR(Town,new_act_pass,SLE_UINT16), - SLE_VAR(Town,new_act_mail,SLE_UINT16), + 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), + SLE_CONDVAR(Town,new_max_pass,SLE_FILE_U16 | SLE_VAR_U32, 0, 8), + SLE_CONDVAR(Town,new_max_mail,SLE_FILE_U16 | SLE_VAR_U32, 0, 8), + SLE_CONDVAR(Town,act_pass, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), + SLE_CONDVAR(Town,act_mail, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), + SLE_CONDVAR(Town,new_act_pass,SLE_FILE_U16 | SLE_VAR_U32, 0, 8), + SLE_CONDVAR(Town,new_act_mail,SLE_FILE_U16 | SLE_VAR_U32, 0, 8), + + SLE_CONDVAR(Town,max_pass, SLE_UINT32, 9, 255), + SLE_CONDVAR(Town,max_mail, SLE_UINT32, 9, 255), + SLE_CONDVAR(Town,new_max_pass,SLE_UINT32, 9, 255), + SLE_CONDVAR(Town,new_max_mail,SLE_UINT32, 9, 255), + SLE_CONDVAR(Town,act_pass, SLE_UINT32, 9, 255), + SLE_CONDVAR(Town,act_mail, SLE_UINT32, 9, 255), + SLE_CONDVAR(Town,new_act_pass,SLE_UINT32, 9, 255), + SLE_CONDVAR(Town,new_act_mail,SLE_UINT32, 9, 255), SLE_VAR(Town,pct_pass_transported,SLE_UINT8), SLE_VAR(Town,pct_mail_transported,SLE_UINT8), diff --git a/ttd.c b/ttd.c index e2aa21f058..7484626b44 100644 --- a/ttd.c +++ b/ttd.c @@ -1345,6 +1345,13 @@ bool AfterLoadGame(uint version) } END_TILE_LOOP(tile, MapSizeX(), MapSizeY(), 0); } + if (version < 0x900) { + Town *t; + FOR_ALL_TOWNS(t) { + UpdateTownMaxPass(t); + } + } + return true; }