From 53452ef9a78af5c4b0cdc63cef0e156b83d21abc Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sat, 10 Mar 2007 16:21:29 +0000 Subject: (svn r9102) -Codechange: (NewGRF) Apply cargo translation table to vehicle refit masks --- src/newgrf.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 7b0e7ba4f..9edf93195 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3757,7 +3757,31 @@ static void CalculateRefitMasks() uint32 mask = 0; uint32 not_mask = 0; - uint32 xor_mask = _engine_info[engine].refit_mask; + uint32 xor_mask = 0; + + if (_engine_info[engine].refit_mask != 0) { + const GRFFile *file = GetEngineGRF(engine); + if (file != NULL && file->cargo_max != 0) { + /* Apply cargo translation table to the refit mask */ + uint num_cargo = min(32, file->cargo_max); + for (uint i = 0; i < num_cargo; i++) { + if (!HASBIT(_engine_info[engine].refit_mask, i)) continue; + + CargoID c = GetCargoIDByLabel(file->cargo_list[i]); + if (c == CT_INVALID) continue; + + SETBIT(xor_mask, c); + } + } else { + /* No cargo table, so use the cargo bitnum values */ + for (CargoID c = 0; c < NUM_CARGO; c++) { + const CargoSpec *cs = GetCargo(c); + if (!cs->IsValid()) continue; + + if (HASBIT(_engine_info[engine].refit_mask, cs->bitnum)) SETBIT(xor_mask, c); + } + } + } if (cargo_allowed[engine] != 0) { // Build up the list of cargo types from the set cargo classes. -- cgit v1.2.3-54-g00ecf