398 case 0x48: { // Accepted cargo types |
398 case 0x48: { // Accepted cargo types |
399 CargoID cargo_type; |
399 CargoID cargo_type; |
400 uint32 value = 0; |
400 uint32 value = 0; |
401 |
401 |
402 for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) { |
402 for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) { |
403 if (HASBIT(st->goods[cargo_type].waiting_acceptance, 15)) SETBIT(value, cargo_type); |
403 if (st->goods[cargo_type].acceptance) SETBIT(value, cargo_type); |
404 } |
404 } |
405 return value; |
405 return value; |
406 } |
406 } |
407 case 0x49: return GetPlatformInfoHelper(tile, false, true, false); |
407 case 0x49: return GetPlatformInfoHelper(tile, false, true, false); |
408 |
408 |
429 |
429 |
430 if (c == CT_INVALID) return 0; |
430 if (c == CT_INVALID) return 0; |
431 const GoodsEntry *ge = &st->goods[c]; |
431 const GoodsEntry *ge = &st->goods[c]; |
432 |
432 |
433 switch (variable) { |
433 switch (variable) { |
434 case 0x60: return GB(ge->waiting_acceptance, 0, 12); |
434 case 0x60: return min(ge->cargo.Count(), 4095); |
435 case 0x61: return ge->days_since_pickup; |
435 case 0x61: return ge->days_since_pickup; |
436 case 0x62: return ge->rating; |
436 case 0x62: return ge->rating; |
437 case 0x63: return ge->enroute_time; |
437 case 0x63: return ge->cargo.DaysInTransit(); |
438 case 0x64: return ge->last_speed | (ge->last_age << 8); |
438 case 0x64: return ge->last_speed | (ge->last_age << 8); |
439 case 0x65: return GB(ge->waiting_acceptance, 12, 4); |
439 case 0x65: return ge->acceptance << 3; |
440 } |
440 } |
441 } |
441 } |
442 |
442 |
443 /* Handle cargo variables (deprecated) */ |
443 /* Handle cargo variables (deprecated) */ |
444 if (variable >= 0x8C && variable <= 0xEC) { |
444 if (variable >= 0x8C && variable <= 0xEC) { |
445 const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)]; |
445 const GoodsEntry *g = &st->goods[GB(variable - 0x8C, 3, 4)]; |
446 switch (GB(variable - 0x8C, 0, 3)) { |
446 switch (GB(variable - 0x8C, 0, 3)) { |
447 case 0: return g->waiting_acceptance; |
447 case 0: return g->cargo.Count(); |
448 case 1: return GB(g->waiting_acceptance, 8, 8); |
448 case 1: return GB(min(g->cargo.Count(), 4095), 0, 4) | (g->acceptance << 7); |
449 case 2: return g->days_since_pickup; |
449 case 2: return g->days_since_pickup; |
450 case 3: return g->rating; |
450 case 3: return g->rating; |
451 case 4: return g->enroute_from; |
451 case 4: return g->cargo.Source(); |
452 case 5: return g->enroute_time; |
452 case 5: return g->cargo.DaysInTransit(); |
453 case 6: return g->last_speed; |
453 case 6: return g->last_speed; |
454 case 7: return g->last_age; |
454 case 7: return g->last_age; |
455 } |
455 } |
456 } |
456 } |
457 |
457 |
482 cargo = 0; |
482 cargo = 0; |
483 break; |
483 break; |
484 |
484 |
485 case CT_DEFAULT: |
485 case CT_DEFAULT: |
486 for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) { |
486 for (cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) { |
487 cargo += GB(st->goods[cargo_type].waiting_acceptance, 0, 12); |
487 cargo += st->goods[cargo_type].cargo.Count(); |
488 } |
488 } |
489 break; |
489 break; |
490 |
490 |
491 default: |
491 default: |
492 cargo = GB(st->goods[cargo_type].waiting_acceptance, 0, 12); |
492 cargo = st->goods[cargo_type].cargo.Count(); |
493 break; |
493 break; |
494 } |
494 } |
495 |
495 |
496 if (HASBIT(statspec->flags, 1)) cargo /= (st->trainst_w + st->trainst_h); |
496 if (HASBIT(statspec->flags, 1)) cargo /= (st->trainst_w + st->trainst_h); |
497 cargo = min(0xfff, cargo); |
497 cargo = min(0xfff, cargo); |
543 } else { |
543 } else { |
544 /* Pick the first cargo that we have waiting */ |
544 /* Pick the first cargo that we have waiting */ |
545 for (CargoID cargo = 0; cargo < NUM_CARGO; cargo++) { |
545 for (CargoID cargo = 0; cargo < NUM_CARGO; cargo++) { |
546 const CargoSpec *cs = GetCargo(cargo); |
546 const CargoSpec *cs = GetCargo(cargo); |
547 if (cs->IsValid() && object->u.station.statspec->spritegroup[cargo] != NULL && |
547 if (cs->IsValid() && object->u.station.statspec->spritegroup[cargo] != NULL && |
548 GB(object->u.station.st->goods[cargo].waiting_acceptance, 0, 12) != 0) { |
548 !object->u.station.st->goods[cargo].cargo.Empty()) { |
549 ctype = cargo; |
549 ctype = cargo; |
550 break; |
550 break; |
551 } |
551 } |
552 } |
552 } |
553 } |
553 } |