983 } |
983 } |
984 |
984 |
985 uint32 VehicleEnter_Railway_Bridge(Vehicle *v, TileIndex tile, int x, int y) |
985 uint32 VehicleEnter_Railway_Bridge(Vehicle *v, TileIndex tile, int x, int y) |
986 { |
986 { |
987 DiagDirection dir; |
987 DiagDirection dir; |
|
988 uint8 dxy; |
988 assert(IsBridgeTile(v->tile)); |
989 assert(IsBridgeTile(v->tile)); |
989 dir = GetBridgeRampDirection(v->tile); |
990 dir = GetBridgeRampDirection(v->tile); |
990 v->u.rail.track = 0x40; |
991 v->u.rail.track = 0x40; |
991 v->direction = DiagDirToDir(dir); |
992 v->direction = DiagDirToDir(dir); |
992 CLRBIT(v->u.rail.flags, VRF_GOINGUP); |
993 CLRBIT(v->u.rail.flags, VRF_GOINGUP); |
993 CLRBIT(v->u.rail.flags, VRF_GOINGDOWN); |
994 CLRBIT(v->u.rail.flags, VRF_GOINGDOWN); |
|
995 |
|
996 switch (dir) { |
|
997 default: NOT_REACHED(); |
|
998 case DIAGDIR_NE: dxy = 0xF8; break; |
|
999 case DIAGDIR_SE: dxy = 0x80; break; |
|
1000 case DIAGDIR_SW: dxy = 0x08; break; |
|
1001 case DIAGDIR_NW: dxy = 0x8F; break; |
|
1002 } |
|
1003 SB(x, 0, 4, GB(dxy, 4, 4)); |
|
1004 SB(y, 0, 4, GB(dxy, 0, 4)); |
|
1005 v->x_pos = x; |
|
1006 v->y_pos = y; |
994 return 0; |
1007 return 0; |
995 } |
1008 } |
996 |
1009 |
997 static uint32 VehicleEnter_Railway_BridgeRamp(Vehicle *v, TileIndex tile, int x, int y) |
1010 static uint32 VehicleEnter_Railway_BridgeRamp(Vehicle *v, TileIndex tile, int x, int y) |
998 { |
1011 { |