diff options
author | Darkvater <darkvater@openttd.org> | 2005-07-07 22:14:37 +0000 |
---|---|---|
committer | Darkvater <darkvater@openttd.org> | 2005-07-07 22:14:37 +0000 |
commit | edcccb6ab2eeb2e1c586ee8dc66d4cb89fc9bc3f (patch) | |
tree | 2797417aaf1bc04d4ab5d6ba9216675ca92b4f43 | |
parent | 86d6cebb5353ddeaab3ef22a78ad248bf9695c08 (diff) | |
download | openttd-edcccb6ab2eeb2e1c586ee8dc66d4cb89fc9bc3f.tar.xz |
(svn r2528) - Fix: TTDPatch games had garbage in _map3[hi]&0xF0 which interfered with OpenTTD PBS functionality; fixed in oldloader
- Fix: TTD AI internals are still a puzzle and the AI in state 'SellVehicle' doesn't have a valid vehicle, so change the state to something harmless. Both fixed make sure that Megarail TTD scenario works
-rw-r--r-- | oldloader.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/oldloader.c b/oldloader.c index 3f85161df..052885c14 100644 --- a/oldloader.c +++ b/oldloader.c @@ -1069,6 +1069,12 @@ static bool LoadOldPlayer(LoadgameState *ls, int num) if (p->location_of_house == 0xFFFF) p->location_of_house = 0; + /* State 20 for AI players is sell vehicle. Since the AI struct is not + * really figured out as of now, p->ai.cur_veh; needed for 'sell vehicle' + * is NULL and the function will crash. To fix this, just change the state + * to some harmless state, like 'loop vehicle'; 1 */ + if (!IS_HUMAN_PLAYER(num) && p->ai.state == 20) p->ai.state = 1; + return true; } @@ -1567,13 +1573,16 @@ static bool LoadOldMain(LoadgameState *ls) } for (i = 0; i < OLD_MAP_SIZE; i ++) { - /* We save presignals different from TTDPatch, convert them */ - if (IsTileType(i, MP_RAILWAY) && (_map5[i] & 0xC0) == 0x40) { - /* This byte is always zero in TTD for this type of tile */ - if (_map3_hi[i]) { - /* Convert the presignals to our own format */ - _map3_hi[i] = (_map3_hi[i] >> 1) & 7; + if (IsTileType(i, MP_RAILWAY)) { + /* We save presignals different from TTDPatch, convert them */ + if ((_map5[i] & 0xC0) == 0x40) { + /* This byte is always zero in TTD for this type of tile */ + if (_map3_hi[i]) /* Convert the presignals to our own format */ + _map3_hi[i] = (_map3_hi[i] >> 1) & 7; } + /* TTDPatch stores PBS things in L6 and all elsewhere; so we'll just + * clear it for ourselves and let OTTD's rebuild PBS itself */ + _map3_hi[i] &= 0xF; /* Only keep the lower four bits; upper four is PBS */ } } |