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 && |