src/town_cmd.cpp
changeset 6645 289779d21015
parent 6642 ced51f7c19aa
child 6661 1716fce5ad29
equal deleted inserted replaced
6644:327f66bc01c6 6645:289779d21015
   398 
   398 
   399 	t = GetTownByTile(tile);
   399 	t = GetTownByTile(tile);
   400 
   400 
   401 	r = Random();
   401 	r = Random();
   402 
   402 
   403 	if (GB(r, 0, 8) < hs->population) {
   403 	if (HASBIT(hs->callback_mask, CBM_HOUSE_PRODUCE_CARGO)) {
   404 		uint amt = GB(r, 0, 8) / 8 + 1;
   404 		for (uint i = 0; i < 256; i++) {
   405 		uint moved;
   405 			uint16 callback = GetHouseCallback(CBID_HOUSE_PRODUCE_CARGO, i, r, house_id, t, tile);
   406 
   406 
   407 		if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
   407 			if (callback == CALLBACK_FAILED) break;
   408 		t->new_max_pass += amt;
   408 			if (callback == 0x20FF) break;
   409 		moved = MoveGoodsToStation(tile, 1, 1, CT_PASSENGERS, amt);
   409 
   410 		t->new_act_pass += moved;
   410 			CargoID cargo = GetCargoTranslation(GB(callback, 8, 7), hs->grffile);
   411 	}
   411 			if (cargo == CT_INVALID) continue;
   412 
   412 
   413 	if (GB(r, 8, 8) < hs->mail_generation) {
   413 			uint amt = GB(callback, 0, 8);
   414 		uint amt = GB(r, 8, 8) / 8 + 1;
   414 			uint moved = MoveGoodsToStation(tile, 1, 1, cargo, amt);
   415 		uint moved;
   415 
   416 
   416 			const CargoSpec *cs = GetCargo(cargo);
   417 		if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
   417 			switch (cs->town_effect) {
   418 		t->new_max_mail += amt;
   418 				case TE_PASSENGERS:
   419 		moved = MoveGoodsToStation(tile, 1, 1, CT_MAIL, amt);
   419 					t->new_max_pass += amt;
   420 		t->new_act_mail += moved;
   420 					t->new_act_pass += moved;
       
   421 					break;
       
   422 
       
   423 				case TE_MAIL:
       
   424 					t->new_max_mail += amt;
       
   425 					t->new_act_mail += moved;
       
   426 					break;
       
   427 
       
   428 				default:
       
   429 					break;
       
   430 			}
       
   431 		}
       
   432 	} else {
       
   433 		if (GB(r, 0, 8) < hs->population) {
       
   434 			uint amt = GB(r, 0, 8) / 8 + 1;
       
   435 			uint moved;
       
   436 
       
   437 			if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
       
   438 			t->new_max_pass += amt;
       
   439 			moved = MoveGoodsToStation(tile, 1, 1, CT_PASSENGERS, amt);
       
   440 			t->new_act_pass += moved;
       
   441 		}
       
   442 
       
   443 		if (GB(r, 8, 8) < hs->mail_generation) {
       
   444 			uint amt = GB(r, 8, 8) / 8 + 1;
       
   445 			uint moved;
       
   446 
       
   447 			if (_economy.fluct <= 0) amt = (amt + 1) >> 1;
       
   448 			t->new_max_mail += amt;
       
   449 			moved = MoveGoodsToStation(tile, 1, 1, CT_MAIL, amt);
       
   450 			t->new_act_mail += moved;
       
   451 		}
   421 	}
   452 	}
   422 
   453 
   423 	_current_player = OWNER_TOWN;
   454 	_current_player = OWNER_TOWN;
   424 
   455 
   425 	if (hs->building_flags & BUILDING_HAS_1_TILE &&
   456 	if (hs->building_flags & BUILDING_HAS_1_TILE &&