diff --git a/src/ai/api/ai_marine.cpp b/src/ai/api/ai_marine.cpp index fb9bba8823..a883b69066 100644 --- a/src/ai/api/ai_marine.cpp +++ b/src/ai/api/ai_marine.cpp @@ -55,13 +55,13 @@ DiagDirection to_other_tile = (TileX(t1) == TileX(t2)) ? DIAGDIR_SE : DIAGDIR_SW; /* Determine the reachable tracks from the shared edge */ - TrackBits gtts2 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t2, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile); - if (gtts2 == TRACK_BIT_NONE) return false; + TrackBits gtts1 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t1, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile); + if (gtts1 == TRACK_BIT_NONE) return false; to_other_tile = ReverseDiagDir(to_other_tile); - TrackBits gtts1 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t1, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile); + TrackBits gtts2 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t2, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile); - return gtts1 != TRACK_BIT_NONE; + return gtts2 != TRACK_BIT_NONE; } /* static */ bool AIMarine::BuildWaterDepot(TileIndex tile, TileIndex front) diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index bf9f3df06a..a8b325a603 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -469,8 +469,8 @@ bool OBGFileScanner::AddFile(const char *filename, size_t basepath_length) } if (duplicate != NULL) { /* The more complete graphics set takes precedence over the version number. */ - if ((duplicate->files == graphics->files && duplicate->version >= graphics->version) || - duplicate->files > graphics->files) { + if ((duplicate->found_grfs == graphics->found_grfs && duplicate->version >= graphics->version) || + duplicate->found_grfs > graphics->found_grfs) { DEBUG(grf, 1, "Not adding %s (%i) as base graphics set (duplicate)", graphics->name, graphics->version); delete graphics; } else { diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index ae4cf474d2..b00ca1688f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -238,7 +238,8 @@ static bool InitializeWindowsAndCaches() typedef void (CDECL *SignalHandlerPointer)(int); static SignalHandlerPointer _prev_segfault = NULL; -static SignalHandlerPointer _prev_abort = NULL; +static SignalHandlerPointer _prev_abort = NULL; +static SignalHandlerPointer _prev_fpe = NULL; static void CDECL HandleSavegameLoadCrash(int signum); @@ -249,7 +250,8 @@ static void CDECL HandleSavegameLoadCrash(int signum); static void SetSignalHandlers() { _prev_segfault = signal(SIGSEGV, HandleSavegameLoadCrash); - _prev_abort = signal(SIGABRT, HandleSavegameLoadCrash); + _prev_abort = signal(SIGABRT, HandleSavegameLoadCrash); + _prev_fpe = signal(SIGFPE, HandleSavegameLoadCrash); } /** @@ -259,6 +261,7 @@ static void ResetSignalHandlers() { signal(SIGSEGV, _prev_segfault); signal(SIGABRT, _prev_abort); + signal(SIGFPE, _prev_fpe); } /** @@ -301,7 +304,13 @@ static void CDECL HandleSavegameLoadCrash(int signum) ShowInfo(buffer); - SignalHandlerPointer call = signum == SIGSEGV ? _prev_segfault : _prev_abort; + SignalHandlerPointer call = NULL; + switch (signum) { + case SIGSEGV: call = _prev_segfault; break; + case SIGABRT: call = _prev_abort; break; + case SIGFPE: call = _prev_fpe; break; + default: NOT_REACHED(); + } if (call != NULL) call(signum); } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 756f8d91f8..c26b27724b 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2387,7 +2387,7 @@ static bool CheckTrainStayInDepot(Vehicle *v) } /* We are leaving a depot, but have to go to the exact same one; re-enter */ - if (v->tile == v->dest_tile) { + if (v->current_order.IsType(OT_GOTO_DEPOT) && v->tile == v->dest_tile) { /* We need to have a reservation for this to work. */ if (GetDepotWaypointReservation(v->tile)) return true; SetDepotWaypointReservation(v->tile, true);