summaryrefslogtreecommitdiff
path: root/oldloader.c
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2005-07-07 22:14:37 +0000
committerDarkvater <Darkvater@openttd.org>2005-07-07 22:14:37 +0000
commit4ae02ddbad08cb4720e8a32be7f11129d6129b7c (patch)
tree2797417aaf1bc04d4ab5d6ba9216675ca92b4f43 /oldloader.c
parent8442562b7ba7e091916043e270186d2a6755613a (diff)
downloadopenttd-4ae02ddbad08cb4720e8a32be7f11129d6129b7c.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
Diffstat (limited to 'oldloader.c')
-rw-r--r--oldloader.c21
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 */
}
}