From d5721005850cc3f6b66ab5609244dcd99536c080 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 14 Nov 2010 21:39:12 +0000 Subject: (svn r21195) -Fix [FS#4230] (r21135): in some corner cases the savegame conversion didn't do the right thing --- src/saveload/afterload.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 6c6458940..7ed394d20 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2346,10 +2346,18 @@ bool AfterLoadGame() byte frame = (vdir == DIAGDIR_NE || vdir == DIAGDIR_NW) ? TILE_SIZE - 1 - pos : pos; extern const byte _tunnel_visibility_frame[DIAGDIR_END]; - if (dir == vdir && !(v->vehstatus & VS_HIDDEN)) { - if (frame < _tunnel_visibility_frame[dir]) continue; - /* Tunnel entrance, make us invisible. */ - v->tile = vtile; + /* Should the vehicle be hidden or not? */ + bool hidden; + if (dir == vdir) { // Entering tunnel + hidden = frame >= _tunnel_visibility_frame[dir]; + } else if (dir == ReverseDiagDir(vdir)) { // Leaving tunnel + hidden = frame < TILE_SIZE - _tunnel_visibility_frame[dir]; + } else { // Something freaky going on? + NOT_REACHED(); + } + v->tile = vtile; + + if (hidden) { v->vehstatus |= VS_HIDDEN; switch (v->type) { @@ -2357,10 +2365,7 @@ bool AfterLoadGame() case VEH_ROAD: RoadVehicle::From(v)->state = RVSB_WORMHOLE; break; default: NOT_REACHED(); } - } else if (dir == ReverseDiagDir(vdir) && (v->vehstatus & VS_HIDDEN)) { - if (frame < TILE_SIZE - _tunnel_visibility_frame[dir]) continue; - /* Tunnel exit, make us visible again. */ - v->tile = vtile; + } else { v->vehstatus &= ~VS_HIDDEN; switch (v->type) { -- cgit v1.2.3-70-g09d2