changeset 17208:464eb74cd181 draft

(svn r21947) -Fix (r21195): crash when converting a savegame with vehicles crashed in a tunnel entry, or with vehicles reversing there
author smatz <smatz@openttd.org>
date Wed, 02 Feb 2011 22:20:48 +0000
parents 96ef7a5b4f3a
children c5b47377431a
files src/saveload/afterload.cpp
diffstat 1 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -2390,12 +2390,19 @@
 			bool hidden;
 			if (dir == vdir) { // Entering tunnel
 				hidden = frame >= _tunnel_visibility_frame[dir];
+				v->tile = vtile;
 			} else if (dir == ReverseDiagDir(vdir)) { // Leaving tunnel
 				hidden = frame < TILE_SIZE - _tunnel_visibility_frame[dir];
-			} else { // Something freaky going on?
-				NOT_REACHED();
+				/* v->tile changes at the moment when the vehicle leaves the tunnel. */
+				v->tile = hidden ? GetOtherTunnelBridgeEnd(vtile) : vtile;
+			} else {
+				/* We could get here in two cases:
+				 * - for road vehicles, it is reversing at the end of the tunnel
+				 * - it is crashed in the tunnel entry (both train or RV destroyed by UFO)
+				 * Whatever case it is, do not change anything and use the old values.
+				 * Especially changing RV's state would break its reversing in the middle. */
+				continue;
 			}
-			v->tile = vtile;
 
 			if (hidden) {
 				v->vehstatus |= VS_HIDDEN;