(svn r201) -Fix: [1025836] Company values bigger dan int32 were put to negative

-Fix: [1025836] Long bridges had negative value
-Fix: Typo in endian_check.c (Zr40)
pull/155/head
truelight 20 years ago
parent ddeae85be4
commit 4ccd84f94b

@ -145,7 +145,9 @@ void ShowBuildBridgeWindow(uint start, uint end, byte bridge_type)
if (CheckBridge_Stuff(bridge_type, bridge_len)) { if (CheckBridge_Stuff(bridge_type, bridge_len)) {
// bridge is accepted, add to list // bridge is accepted, add to list
// add to terraforming & bulldozing costs the cost of the bridge itself (not computed with DC_QUERY_COST) // add to terraforming & bulldozing costs the cost of the bridge itself (not computed with DC_QUERY_COST)
_bridge.costs[j] = ret + (((tot_bridge_len * _price.build_bridge) * _bridge_type_price_mod[bridge_type]) >> 8); _bridge.costs[j] = ret + ((((int64)tot_bridge_len * (int64)_price.build_bridge) * (int64)_bridge_type_price_mod[bridge_type]) >> 8);
if (_bridge.costs[j] < 0)
printf("BLAAT!\n");
_bridge.indexes[j] = bridge_type; _bridge.indexes[j] = bridge_type;
j++; j++;
} }

@ -41,9 +41,9 @@ void UpdatePlayerHouse(Player *p, uint score)
MarkTileDirtyByTile(tile + TILE_XY(1,1)); MarkTileDirtyByTile(tile + TILE_XY(1,1));
} }
uint32 CalculateCompanyValue(Player *p) { int64 CalculateCompanyValue(Player *p) {
byte owner = p->index; byte owner = p->index;
uint32 value; int64 value;
{ {
Station *st; Station *st;
@ -340,7 +340,7 @@ extern void DeletePlayerWindows(int pi);
static void PlayersCheckBankrupt(Player *p) static void PlayersCheckBankrupt(Player *p)
{ {
int owner; int owner;
uint32 val; int64 val;
if (p->player_money >= 0) { if (p->player_money >= 0) {
p->quarters_of_bankrupcy = 0; p->quarters_of_bankrupcy = 0;
@ -1313,7 +1313,7 @@ static void DoAcquireCompany(Player *p)
{ {
Player *owner; Player *owner;
int i,pi; int i,pi;
int32 value; int64 value;
SET_DPARAM16(0, p->name_1); SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2); SET_DPARAM32(1, p->name_2);
@ -1347,7 +1347,7 @@ static void DoAcquireCompany(Player *p)
int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2) int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{ {
Player *p; Player *p;
int32 cost; int64 cost;
byte *b; byte *b;
int i; int i;
@ -1375,7 +1375,7 @@ int32 CmdBuyShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
int32 CmdSellShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2) int32 CmdSellShareInCompany(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{ {
Player *p; Player *p;
int32 cost; int64 cost;
byte *b; byte *b;
SET_EXPENSES_TYPE(EXPENSES_OTHER); SET_EXPENSES_TYPE(EXPENSES_OTHER);

@ -2,7 +2,7 @@
// This pretty simple file checks if the system is LITTLE_ENDIAN or BIG_ENDIAN // This pretty simple file checks if the system is LITTLE_ENDIAN or BIG_ENDIAN
// it does that by putting a 1 and a 0 in an array, and read it out as one // it does that by putting a 1 and a 0 in an array, and read it out as one
// number. If it is 1, it is LITTLE_ENDIAN, if it is 256, it is BIG_ENDINA // number. If it is 1, it is LITTLE_ENDIAN, if it is 256, it is BIG_ENDIAN
// //
// After that it outputs the contents of an include files (endian.h) // After that it outputs the contents of an include files (endian.h)
// that says or TTD_LITTLE_ENDIAN, or TTD_BIG_ENDIAN. Makefile takes // that says or TTD_LITTLE_ENDIAN, or TTD_BIG_ENDIAN. Makefile takes

@ -1932,7 +1932,7 @@ STR_RELOCATE_HQ :{BLACK}Relocate HQ
STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps! STR_7073_WORLD_RECESSION_FINANCIAL :{BIGFONT}{BLACK}World Recession!{}{}Financial experts fear worst as economy slumps!
STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens! STR_7074_RECESSION_OVER_UPTURN_IN :{BIGFONT}{BLACK}Recession Over!{}{}Upturn in trade gives confidence to industries as economy strengthens!
STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toggle large/small window size STR_7075_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Toggle large/small window size
STR_7076_COMPANY_VALUE :{GOLD}Company value: {WHITE}{CURRENCY} STR_7076_COMPANY_VALUE :{GOLD}Company value: {WHITE}{CURRENCY64}
STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Buy 25% share in company STR_7077_BUY_25_SHARE_IN_COMPANY :{BLACK}Buy 25% share in company
STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sell 25% share in company STR_7078_SELL_25_SHARE_IN_COMPANY :{BLACK}Sell 25% share in company
STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Buy 25% share in this company STR_7079_BUY_25_SHARE_IN_THIS_COMPANY :{BLACK}Buy 25% share in this company

@ -8,7 +8,7 @@ typedef struct PlayerEconomyEntry {
int32 expenses; int32 expenses;
int32 delivered_cargo; int32 delivered_cargo;
int32 performance_history; // player score (scale 0-1000) int32 performance_history; // player score (scale 0-1000)
int32 company_value; int64 company_value;
} PlayerEconomyEntry; } PlayerEconomyEntry;
typedef struct AiBuildRec { typedef struct AiBuildRec {
@ -188,7 +188,7 @@ typedef struct Player {
void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player); void ChangeOwnershipOfPlayerItems(byte old_player, byte new_player);
void GetNameOfOwner(byte owner, uint tile); void GetNameOfOwner(byte owner, uint tile);
uint32 CalculateCompanyValue(Player *p); int64 CalculateCompanyValue(Player *p);
void InvalidatePlayerWindows(Player *p); void InvalidatePlayerWindows(Player *p);
void AiDoGameLoop(Player *p); void AiDoGameLoop(Player *p);
void UpdatePlayerMoney32(Player *p); void UpdatePlayerMoney32(Player *p);

@ -25,7 +25,7 @@ static void DrawPlayerEconomyStats(Player *p, byte mode)
for(i=0; i!=13; i++) for(i=0; i!=13; i++)
DrawString(2, 27 + i*10, STR_7011_CONSTRUCTION + i, 0); DrawString(2, 27 + i*10, STR_7011_CONSTRUCTION + i, 0);
DrawStringRightAligned(111, 27 + 10*13 + 2, STR_7020_TOTAL, 0); DrawStringRightAligned(111, 27 + 10*13 + 2, STR_7020_TOTAL, 0);
/* draw the price columns */ /* draw the price columns */
year = _cur_year - 2; year = _cur_year - 2;
j = 3; j = 3;
@ -41,7 +41,7 @@ static void DrawPlayerEconomyStats(Player *p, byte mode)
cost = (*tbl)[i]; cost = (*tbl)[i];
if (cost != 0) { if (cost != 0) {
sum += cost; sum += cost;
str = STR_701E; str = STR_701E;
if (cost < 0) { cost = -cost; str++; } if (cost < 0) { cost = -cost; str++; }
SET_DPARAM64(0, cost); SET_DPARAM64(0, cost);
@ -53,7 +53,7 @@ static void DrawPlayerEconomyStats(Player *p, byte mode)
if (sum < 0) { sum = -sum; str++; } if (sum < 0) { sum = -sum; str++; }
SET_DPARAM64(0, sum); SET_DPARAM64(0, sum);
DrawStringRightAligned(x, 27 + 13*10 + 2, str, 0); DrawStringRightAligned(x, 27 + 13*10 + 2, str, 0);
GfxFillRect(x - 75, 27 + 10*13, x, 27 + 10*13, 215); GfxFillRect(x - 75, 27 + 10*13, x, 27 + 10*13, 215);
x += 95; x += 95;
} }
@ -134,7 +134,7 @@ static void PlayerFinancesWndProc(Window *w, WindowEvent *e)
switch(e->event) { switch(e->event) {
case WE_PAINT: { case WE_PAINT: {
Player *p = DEREF_PLAYER(w->window_number); Player *p = DEREF_PLAYER(w->window_number);
w->disabled_state = p->current_loan != 0 ? 0 : (1 << 6); w->disabled_state = p->current_loan != 0 ? 0 : (1 << 6);
SET_DPARAM16(0, p->name_1); SET_DPARAM16(0, p->name_1);
@ -241,7 +241,7 @@ static void SelectPlayerColorWndProc(Window *w, WindowEvent *e)
WP(w,def_d).data_1 = used_colors; WP(w,def_d).data_1 = used_colors;
SetVScrollCount(w, num_free); SetVScrollCount(w, num_free);
DrawWindowWidgets(w); DrawWindowWidgets(w);
x = 2; x = 2;
y = 17; y = 17;
pos = w->vscroll.pos; pos = w->vscroll.pos;
@ -255,7 +255,7 @@ static void SelectPlayerColorWndProc(Window *w, WindowEvent *e)
used_colors >>= 1; used_colors >>= 1;
} }
} break; } break;
case WE_CLICK: case WE_CLICK:
if (e->click.widget == 2) { if (e->click.widget == 2) {
int item = (e->click.pt.y - 13) / 14; int item = (e->click.pt.y - 13) / 14;
@ -266,7 +266,7 @@ static void SelectPlayerColorWndProc(Window *w, WindowEvent *e)
return; return;
item += w->vscroll.pos; item += w->vscroll.pos;
used_colors = WP(w,def_d).data_1; used_colors = WP(w,def_d).data_1;
for(i=0; i!=16; i++) { for(i=0; i!=16; i++) {
if (!(used_colors & 1) && --item < 0) { if (!(used_colors & 1) && --item < 0) {
DoCommandP(0, w->window_number, i, NULL, CMD_SET_PLAYER_COLOR); DoCommandP(0, w->window_number, i, NULL, CMD_SET_PLAYER_COLOR);
@ -310,7 +310,7 @@ static void SelectPlayerFaceWndProc(Window *w, WindowEvent *e)
case WE_CLICK: case WE_CLICK:
switch(e->click.widget) { switch(e->click.widget) {
case 3: DeleteWindow(w); break; case 3: DeleteWindow(w); break;
case 4: /* ok click */ case 4: /* ok click */
DoCommandP(0, w->window_number, WP(w,facesel_d).face, NULL, CMD_SET_PLAYER_FACE); DoCommandP(0, w->window_number, WP(w,facesel_d).face, NULL, CMD_SET_PLAYER_FACE);
DeleteWindow(w); DeleteWindow(w);
break; break;
@ -394,7 +394,7 @@ static void DrawPlayerVehiclesAmount(int player)
int y = 72; int y = 72;
Vehicle *v; Vehicle *v;
uint train,road,air,ship; uint train,road,air,ship;
DrawString(x, y, STR_7039_VEHICLES, 0); DrawString(x, y, STR_7039_VEHICLES, 0);
train = road = air = ship = 0; train = road = air = ship = 0;
@ -445,9 +445,9 @@ static void DrawPlayerVehiclesAmount(int player)
static int GetAmountOwnedBy(Player *p, byte owner) static int GetAmountOwnedBy(Player *p, byte owner)
{ {
return (p->share_owners[0] == owner) + return (p->share_owners[0] == owner) +
(p->share_owners[1] == owner) + (p->share_owners[1] == owner) +
(p->share_owners[2] == owner) + (p->share_owners[2] == owner) +
(p->share_owners[3] == owner); (p->share_owners[3] == owner);
} }
@ -483,7 +483,7 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
if (w->widget != _other_player_company_widgets) if (w->widget != _other_player_company_widgets)
w->widget = (p->location_of_house != 0) ? _my_player_company_bh_widgets : _my_player_company_widgets; w->widget = (p->location_of_house != 0) ? _my_player_company_bh_widgets : _my_player_company_widgets;
SET_DPARAM16(0, p->name_1); SET_DPARAM16(0, p->name_1);
SET_DPARAM32(1, p->name_2); SET_DPARAM32(1, p->name_2);
SET_DPARAM16(2, GetPlayerNameString((byte)w->window_number, 3)); SET_DPARAM16(2, GetPlayerNameString((byte)w->window_number, 3));
@ -509,7 +509,7 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
SET_DPARAM32(1, p->president_name_2); SET_DPARAM32(1, p->president_name_2);
DrawStringMultiCenter(48, 141, STR_7037_PRESIDENT, 94); DrawStringMultiCenter(48, 141, STR_7037_PRESIDENT, 94);
SET_DPARAM32(0, CalculateCompanyValue(p)); SET_DPARAM64(0, CalculateCompanyValue(p));
DrawString(110, 114, STR_7076_COMPANY_VALUE, 0); DrawString(110, 114, STR_7076_COMPANY_VALUE, 0);
DrawCompanyOwnerText(p); DrawCompanyOwnerText(p);
@ -557,7 +557,7 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
SetTileSelectSize(2, 2); SetTileSelectSize(2, 2);
} else { } else {
ScrollMainWindowToTile(tile); ScrollMainWindowToTile(tile);
} }
} break; } break;
case 8: /* relocate HQ */ case 8: /* relocate HQ */

@ -383,7 +383,7 @@ not_valid_below:;
if (_current_player < MAX_PLAYERS && !(_is_ai_player && !_patches.ainew_active)) if (_current_player < MAX_PLAYERS && !(_is_ai_player && !_patches.ainew_active))
bridge_len = CalcBridgeLenCostFactor(bridge_len); bridge_len = CalcBridgeLenCostFactor(bridge_len);
cost += ((bridge_len * _price.build_bridge) * _bridge_type_price_mod[bridge_type]) >> 8; cost += (((int64)bridge_len * (int64)_price.build_bridge) * (int64)_bridge_type_price_mod[bridge_type]) >> 8;
} }
return cost; return cost;

Loading…
Cancel
Save