economy.c
changeset 1093 4fdc46eaf423
parent 1067 3ba7987a004e
child 1098 dac6a13ff91d
equal deleted inserted replaced
1092:e3b4a131db7c 1093:4fdc46eaf423
   582 
   582 
   583 	/* useless, but avoids compiler warning this way */
   583 	/* useless, but avoids compiler warning this way */
   584 	return 0;
   584 	return 0;
   585 }
   585 }
   586 
   586 
   587 static void PlayersGenStatistics()
   587 static void PlayersGenStatistics(void)
   588 {
   588 {
   589 	Station *st;
   589 	Station *st;
   590 	Player *p;
   590 	Player *p;
   591 
   591 
   592 	FOR_ALL_STATIONS(st) {
   592 	FOR_ALL_STATIONS(st) {
   631 	tmp = BIGMULS(*value, amt);
   631 	tmp = BIGMULS(*value, amt);
   632 	*frac = (uint16)(low = (uint16)tmp + *frac);
   632 	*frac = (uint16)(low = (uint16)tmp + *frac);
   633 	*value += (int32)(tmp >> 16) + (low >> 16);
   633 	*value += (int32)(tmp >> 16) + (low >> 16);
   634 }
   634 }
   635 
   635 
   636 static void AddInflation()
   636 static void AddInflation(void)
   637 {
   637 {
   638 	int i;
   638 	int i;
   639 	int32 inf = _economy.infl_amount * 54;
   639 	int32 inf = _economy.infl_amount * 54;
   640 
   640 
   641 	for(i=0; i!=NUM_PRICES; i++) {
   641 	for(i=0; i!=NUM_PRICES; i++) {
   659 	InvalidateWindowClasses(WC_BUILD_VEHICLE);
   659 	InvalidateWindowClasses(WC_BUILD_VEHICLE);
   660 	InvalidateWindowClasses(WC_VEHICLE_DETAILS);
   660 	InvalidateWindowClasses(WC_VEHICLE_DETAILS);
   661 	InvalidateWindow(WC_PAYMENT_RATES, 0);
   661 	InvalidateWindow(WC_PAYMENT_RATES, 0);
   662 }
   662 }
   663 
   663 
   664 static void PlayersPayInterest()
   664 static void PlayersPayInterest(void)
   665 {
   665 {
   666 	Player *p;
   666 	Player *p;
   667 	int interest = _economy.interest_rate * 54;
   667 	int interest = _economy.interest_rate * 54;
   668 
   668 
   669 	FOR_ALL_PLAYERS(p) {
   669 	FOR_ALL_PLAYERS(p) {
   678 		SET_EXPENSES_TYPE(EXPENSES_OTHER);
   678 		SET_EXPENSES_TYPE(EXPENSES_OTHER);
   679 		SubtractMoneyFromPlayer(_price.station_value >> 2);
   679 		SubtractMoneyFromPlayer(_price.station_value >> 2);
   680 	}
   680 	}
   681 }
   681 }
   682 
   682 
   683 static void HandleEconomyFluctuations()
   683 static void HandleEconomyFluctuations(void)
   684 {
   684 {
   685 	if (_opt.diff.economy == 0)
   685 	if (_opt.diff.economy == 0)
   686 		return;
   686 		return;
   687 
   687 
   688 	if (--_economy.fluct == 0) {
   688 	if (--_economy.fluct == 0) {
   754 	1600,		// roadveh_running
   754 	1600,		// roadveh_running
   755 	5600,		// ship_running
   755 	5600,		// ship_running
   756 	1000000, // build_industry
   756 	1000000, // build_industry
   757 };
   757 };
   758 
   758 
   759 void StartupEconomy()
   759 void StartupEconomy(void)
   760 {
   760 {
   761 	int i;
   761 	int i;
   762 
   762 
   763 	assert(sizeof(_price) == NUM_PRICES * sizeof(int32));
   763 	assert(sizeof(_price) == NUM_PRICES * sizeof(int32));
   764 
   764 
   986 	AddNewsItem(STR_2030_SERVICE_SUBSIDY_OFFERED, NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0), pair.a, pair.b);
   986 	AddNewsItem(STR_2030_SERVICE_SUBSIDY_OFFERED, NEWS_FLAGS(NM_NORMAL, NF_TILE, NT_SUBSIDIES, 0), pair.a, pair.b);
   987 
   987 
   988 	InvalidateWindow(WC_SUBSIDIES_LIST, 0);
   988 	InvalidateWindow(WC_SUBSIDIES_LIST, 0);
   989 }
   989 }
   990 
   990 
   991 static void SubsidyMonthlyHandler()
   991 static void SubsidyMonthlyHandler(void)
   992 {
   992 {
   993 	Subsidy *s;
   993 	Subsidy *s;
   994 	Pair pair;
   994 	Pair pair;
   995 	Station *st;
   995 	Station *st;
   996 	uint n;
   996 	uint n;
  1066 	SLE_CONDVAR(Subsidy,to,				SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
  1066 	SLE_CONDVAR(Subsidy,to,				SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
  1067 	SLE_CONDVAR(Subsidy,to,				SLE_UINT16, 5, 255),
  1067 	SLE_CONDVAR(Subsidy,to,				SLE_UINT16, 5, 255),
  1068 	SLE_END()
  1068 	SLE_END()
  1069 };
  1069 };
  1070 
  1070 
  1071 static void Save_SUBS()
  1071 static void Save_SUBS(void)
  1072 {
  1072 {
  1073 	int i;
  1073 	int i;
  1074 	Subsidy *s;
  1074 	Subsidy *s;
  1075 
  1075 
  1076 	for(i=0; i!=lengthof(_subsidies); i++) {
  1076 	for(i=0; i!=lengthof(_subsidies); i++) {
  1080 			SlObject(s, _subsidies_desc);
  1080 			SlObject(s, _subsidies_desc);
  1081 		}
  1081 		}
  1082 	}
  1082 	}
  1083 }
  1083 }
  1084 
  1084 
  1085 static void Load_SUBS()
  1085 static void Load_SUBS(void)
  1086 {
  1086 {
  1087 	int index;
  1087 	int index;
  1088 	while ((index = SlIterateArray()) != -1)
  1088 	while ((index = SlIterateArray()) != -1)
  1089 		SlObject(&_subsidies[index], _subsidies_desc);
  1089 		SlObject(&_subsidies[index], _subsidies_desc);
  1090 }
  1090 }
  1471 
  1471 
  1472 	_current_player = old_player;
  1472 	_current_player = old_player;
  1473 	return result;
  1473 	return result;
  1474 }
  1474 }
  1475 
  1475 
  1476 void PlayersMonthlyLoop()
  1476 void PlayersMonthlyLoop(void)
  1477 {
  1477 {
  1478 	PlayersGenStatistics();
  1478 	PlayersGenStatistics();
  1479 	if (_patches.inflation)
  1479 	if (_patches.inflation)
  1480 		AddInflation();
  1480 		AddInflation();
  1481 	PlayersPayInterest();
  1481 	PlayersPayInterest();
  1609 	}
  1609 	}
  1610 	return p->bankrupt_value;
  1610 	return p->bankrupt_value;
  1611 }
  1611 }
  1612 
  1612 
  1613 // Prices
  1613 // Prices
  1614 static void SaveLoad_PRIC()
  1614 static void SaveLoad_PRIC(void)
  1615 {
  1615 {
  1616 	SlArray(&_price, NUM_PRICES, SLE_INT32);
  1616 	SlArray(&_price, NUM_PRICES, SLE_INT32);
  1617 	SlArray(&_price_frac, NUM_PRICES, SLE_UINT16);
  1617 	SlArray(&_price_frac, NUM_PRICES, SLE_UINT16);
  1618 }
  1618 }
  1619 
  1619 
  1620 // Cargo payment rates
  1620 // Cargo payment rates
  1621 static void SaveLoad_CAPR()
  1621 static void SaveLoad_CAPR(void)
  1622 {
  1622 {
  1623 	SlArray(&_cargo_payment_rates, NUM_CARGO, SLE_INT32);
  1623 	SlArray(&_cargo_payment_rates, NUM_CARGO, SLE_INT32);
  1624 	SlArray(&_cargo_payment_rates_frac, NUM_CARGO, SLE_UINT16);
  1624 	SlArray(&_cargo_payment_rates_frac, NUM_CARGO, SLE_UINT16);
  1625 }
  1625 }
  1626 
  1626 
  1633 	SLE_VAR(Economy,infl_amount_pr,			SLE_UINT8),
  1633 	SLE_VAR(Economy,infl_amount_pr,			SLE_UINT8),
  1634 	SLE_END()
  1634 	SLE_END()
  1635 };
  1635 };
  1636 
  1636 
  1637 // Economy variables
  1637 // Economy variables
  1638 static void SaveLoad_ECMY()
  1638 static void SaveLoad_ECMY(void)
  1639 {
  1639 {
  1640 	SlObject(&_economy, &_economy_desc);
  1640 	SlObject(&_economy, &_economy_desc);
  1641 }
  1641 }
  1642 
  1642 
  1643 const ChunkHandler _economy_chunk_handlers[] = {
  1643 const ChunkHandler _economy_chunk_handlers[] = {