Fix incorrect signal offsets in GetAndClearLastBridgeEntranceSetSignalIndex

Fixes #65
This commit is contained in:
Jonathan G Rennison
2018-08-21 04:22:33 +01:00
parent 53acbd57b1
commit a0ef4ea760

View File

@@ -2224,7 +2224,7 @@ static bool CheckTrainStayInDepot(Train *v)
static int GetAndClearLastBridgeEntranceSetSignalIndex(TileIndex bridge_entrance)
{
uint16 m = _m[bridge_entrance].m2;
if (m & 0x8000) {
if (m & BRIDGE_M2_SIGNAL_STATE_EXT_FLAG) {
auto it = _long_bridge_signal_sim_map.find(bridge_entrance);
if (it != _long_bridge_signal_sim_map.end()) {
LongBridgeSignalStorage &lbss = it->second;
@@ -2235,13 +2235,14 @@ static int GetAndClearLastBridgeEntranceSetSignalIndex(TileIndex bridge_entrance
if (slot_bits) {
uint8 i = FindLastBit(slot_bits);
ClrBit(slot_bits, i);
return 1 + 15 + (64 * slot) + i;
return 1 + BRIDGE_M2_SIGNAL_STATE_COUNT + (64 * slot) + i;
}
}
}
}
if (m & 0x7FFF) {
uint8 i = FindLastBit(m & 0x7FFF);
uint16 m_masked = GB(m & (~BRIDGE_M2_SIGNAL_STATE_EXT_FLAG), BRIDGE_M2_SIGNAL_STATE_OFFSET, BRIDGE_M2_SIGNAL_STATE_FIELD_SIZE);
if (m_masked) {
uint8 i = FindLastBit(m_masked);
ClrBit(_m[bridge_entrance].m2, i);
return 1 + i;
}