src/tunnelbridge_cmd.cpp
changeset 6326 c904c7ea1c8d
parent 6319 27e68b914d3d
child 6336 16879925b259
equal deleted inserted replaced
6325:f03f94f4d8fc 6326:c904c7ea1c8d
  1248 static const byte _tunnel_fractcoord_1[4]    = {0x8E, 0x18, 0x81, 0xE8};
  1248 static const byte _tunnel_fractcoord_1[4]    = {0x8E, 0x18, 0x81, 0xE8};
  1249 static const byte _tunnel_fractcoord_2[4]    = {0x81, 0x98, 0x87, 0x38};
  1249 static const byte _tunnel_fractcoord_2[4]    = {0x81, 0x98, 0x87, 0x38};
  1250 static const byte _tunnel_fractcoord_3[4]    = {0x82, 0x88, 0x86, 0x48};
  1250 static const byte _tunnel_fractcoord_3[4]    = {0x82, 0x88, 0x86, 0x48};
  1251 static const byte _exit_tunnel_track[4]      = {1, 2, 1, 2};
  1251 static const byte _exit_tunnel_track[4]      = {1, 2, 1, 2};
  1252 
  1252 
  1253 static const byte _road_exit_tunnel_state[4] = {8, 9, 0, 1};
  1253 /** Get the trackdir of the exit of a tunnel */
       
  1254 static const Trackdir _road_exit_tunnel_state[DIAGDIR_END] = {
       
  1255 	TRACKDIR_X_SW, TRACKDIR_Y_NW, TRACKDIR_X_NE, TRACKDIR_Y_SE
       
  1256 };
  1254 static const byte _road_exit_tunnel_frame[4] = {2, 7, 9, 4};
  1257 static const byte _road_exit_tunnel_frame[4] = {2, 7, 9, 4};
  1255 
  1258 
  1256 static const byte _tunnel_fractcoord_4[4]    = {0x52, 0x85, 0x98, 0x29};
  1259 static const byte _tunnel_fractcoord_4[4]    = {0x52, 0x85, 0x98, 0x29};
  1257 static const byte _tunnel_fractcoord_5[4]    = {0x92, 0x89, 0x58, 0x25};
  1260 static const byte _tunnel_fractcoord_5[4]    = {0x92, 0x89, 0x58, 0x25};
  1258 static const byte _tunnel_fractcoord_6[4]    = {0x92, 0x89, 0x56, 0x45};
  1261 static const byte _tunnel_fractcoord_6[4]    = {0x92, 0x89, 0x56, 0x45};
  1302 			fc = (x & 0xF) + (y << 4);
  1305 			fc = (x & 0xF) + (y << 4);
  1303 			dir = GetTunnelDirection(tile);
  1306 			dir = GetTunnelDirection(tile);
  1304 			vdir = DirToDiagDir(v->direction);
  1307 			vdir = DirToDiagDir(v->direction);
  1305 
  1308 
  1306 			// Enter tunnel?
  1309 			// Enter tunnel?
  1307 			if (v->u.road.state != 0xFF && dir == vdir) {
  1310 			if (v->u.road.state != RVSB_WORMHOLE && dir == vdir) {
  1308 				if (fc == _tunnel_fractcoord_4[dir] ||
  1311 				if (fc == _tunnel_fractcoord_4[dir] ||
  1309 						fc == _tunnel_fractcoord_5[dir]) {
  1312 						fc == _tunnel_fractcoord_5[dir]) {
  1310 					v->tile = tile;
  1313 					v->tile = tile;
  1311 					v->u.road.state = 0xFF;
  1314 					v->u.road.state = RVSB_WORMHOLE;
  1312 					v->vehstatus |= VS_HIDDEN;
  1315 					v->vehstatus |= VS_HIDDEN;
  1313 					return VETSB_ENTERED_WORMHOLE;
  1316 					return VETSB_ENTERED_WORMHOLE;
  1314 				} else {
  1317 				} else {
  1315 					return VETSB_CONTINUE;
  1318 					return VETSB_CONTINUE;
  1316 				}
  1319 				}
  1352 			if (v->type == VEH_Train) {
  1355 			if (v->type == VEH_Train) {
  1353 				v->u.rail.track = TRACK_BIT_WORMHOLE;
  1356 				v->u.rail.track = TRACK_BIT_WORMHOLE;
  1354 				CLRBIT(v->u.rail.flags, VRF_GOINGUP);
  1357 				CLRBIT(v->u.rail.flags, VRF_GOINGUP);
  1355 				CLRBIT(v->u.rail.flags, VRF_GOINGDOWN);
  1358 				CLRBIT(v->u.rail.flags, VRF_GOINGDOWN);
  1356 			} else {
  1359 			} else {
  1357 				v->u.road.state = 0xFF;
  1360 				v->u.road.state = RVSB_WORMHOLE;
  1358 			}
  1361 			}
  1359 			return VETSB_ENTERED_WORMHOLE;
  1362 			return VETSB_ENTERED_WORMHOLE;
  1360 		} else if (DirToDiagDir(v->direction) == ReverseDiagDir(dir)) {
  1363 		} else if (DirToDiagDir(v->direction) == ReverseDiagDir(dir)) {
  1361 			v->tile = tile;
  1364 			v->tile = tile;
  1362 			if (v->type == VEH_Train) {
  1365 			if (v->type == VEH_Train) {
  1363 				if (v->u.rail.track == TRACK_BIT_WORMHOLE) {
  1366 				if (v->u.rail.track == TRACK_BIT_WORMHOLE) {
  1364 					v->u.rail.track = (DiagDirToAxis(dir) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y);
  1367 					v->u.rail.track = (DiagDirToAxis(dir) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y);
  1365 					return VETSB_ENTERED_WORMHOLE;
  1368 					return VETSB_ENTERED_WORMHOLE;
  1366 				}
  1369 				}
  1367 			} else {
  1370 			} else {
  1368 				if (v->u.road.state == 0xFF) {
  1371 				if (v->u.road.state == RVSB_WORMHOLE) {
  1369 					v->u.road.state = _road_exit_tunnel_state[dir];
  1372 					v->u.road.state = _road_exit_tunnel_state[dir];
  1370 					v->u.road.frame = 0;
  1373 					v->u.road.frame = 0;
  1371 					return VETSB_ENTERED_WORMHOLE;
  1374 					return VETSB_ENTERED_WORMHOLE;
  1372 				}
  1375 				}
  1373 			}
  1376 			}