Change: Make ships stop in locks to move up/down instead of following the slope.
This commit is contained in:

committed by
Charles Pigott

parent
8e7fe3973f
commit
0b10678050
@@ -55,6 +55,7 @@
|
||||
#include "../order_backup.h"
|
||||
#include "../error.h"
|
||||
#include "../disaster_vehicle.h"
|
||||
#include "../ship.h"
|
||||
|
||||
|
||||
#include "saveload_internal.h"
|
||||
@@ -3045,6 +3046,42 @@ bool AfterLoadGame()
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSavegameVersionBefore(SLV_SHIPS_STOP_IN_LOCKS)) {
|
||||
/* Move ships from lock slope to upper or lower position. */
|
||||
Ship *s;
|
||||
FOR_ALL_SHIPS(s) {
|
||||
/* Suitable tile? */
|
||||
if (!IsTileType(s->tile, MP_WATER) || !IsLock(s->tile) || GetLockPart(s->tile) != LOCK_PART_MIDDLE) continue;
|
||||
|
||||
/* We don't need to adjust position when at the tile centre */
|
||||
int x = s->x_pos & 0xF;
|
||||
int y = s->y_pos & 0xF;
|
||||
if (x == 8 && y == 8) continue;
|
||||
|
||||
/* Test if ship is on the second half of the tile */
|
||||
bool second_half;
|
||||
DiagDirection shipdiagdir = DirToDiagDir(s->direction);
|
||||
switch (shipdiagdir) {
|
||||
default: NOT_REACHED();
|
||||
case DIAGDIR_NE: second_half = x < 8; break;
|
||||
case DIAGDIR_NW: second_half = y < 8; break;
|
||||
case DIAGDIR_SW: second_half = x > 8; break;
|
||||
case DIAGDIR_SE: second_half = y > 8; break;
|
||||
}
|
||||
|
||||
DiagDirection slopediagdir = GetInclinedSlopeDirection(GetTileSlope(s->tile));
|
||||
|
||||
/* Heading up slope == passed half way */
|
||||
if ((shipdiagdir == slopediagdir) == second_half) {
|
||||
/* On top half of lock */
|
||||
s->z_pos = GetTileMaxZ(s->tile) * (int)TILE_HEIGHT;
|
||||
} else {
|
||||
/* On lower half of lock */
|
||||
s->z_pos = GetTileZ(s->tile) * (int)TILE_HEIGHT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Station acceptance is some kind of cache */
|
||||
if (IsSavegameVersionBefore(SLV_127)) {
|
||||
Station *st;
|
||||
|
@@ -289,6 +289,7 @@ enum SaveLoadVersion : uint16 {
|
||||
SLV_SHIP_ROTATION, ///< 204 PR#7065 Add extra rotation stages for ships.
|
||||
|
||||
SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries.
|
||||
SLV_SHIPS_STOP_IN_LOCKS, ///< 206 PR#7150 Ship/lock movement changes.
|
||||
|
||||
SL_MAX_VERSION, ///< Highest possible saveload version
|
||||
};
|
||||
|
Reference in New Issue
Block a user