mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-24 07:14:31 +01:00
implement more sub_6DAB4C
This commit is contained in:
@@ -2385,33 +2385,16 @@ int track_delete()
|
||||
int track_is_connected_by_shape(rct_map_element *a, rct_map_element *b)
|
||||
{
|
||||
int trackType, aBank, aAngle, bBank, bAngle;
|
||||
rct_ride *ride;
|
||||
|
||||
ride = GET_RIDE(a->properties.track.ride_index);
|
||||
trackType = a->properties.track.type;
|
||||
aBank = gTrackDefinitions[trackType].bank_end;
|
||||
aAngle = gTrackDefinitions[trackType].vangle_end;
|
||||
if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_3) {
|
||||
if (a->properties.track.colour & 4) {
|
||||
if (aBank == TRACK_BANK_NONE)
|
||||
aBank = TRACK_BANK_UPSIDE_DOWN;
|
||||
else if (aBank == TRACK_BANK_UPSIDE_DOWN)
|
||||
aBank = TRACK_BANK_NONE;
|
||||
}
|
||||
}
|
||||
aBank = track_get_actual_bank(a, aBank);
|
||||
|
||||
ride = GET_RIDE(b->properties.track.ride_index);
|
||||
trackType = b->properties.track.type;
|
||||
bBank = gTrackDefinitions[trackType].bank_start;
|
||||
bAngle = gTrackDefinitions[trackType].vangle_start;
|
||||
if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_3) {
|
||||
if (b->properties.track.colour & 4) {
|
||||
if (bBank == TRACK_BANK_NONE)
|
||||
bBank = TRACK_BANK_UPSIDE_DOWN;
|
||||
else if (bBank == TRACK_BANK_UPSIDE_DOWN)
|
||||
bBank = TRACK_BANK_NONE;
|
||||
}
|
||||
}
|
||||
bBank = track_get_actual_bank(b, bBank);
|
||||
|
||||
return aBank == bBank && aAngle == bAngle;
|
||||
}
|
||||
@@ -4957,3 +4940,24 @@ void track_element_set_cable_lift(rct_map_element *trackElement) {
|
||||
void track_element_clear_cable_lift(rct_map_element *trackElement) {
|
||||
trackElement->properties.track.colour &= ~TRACK_ELEMENT_COLOUR_FLAG_CABLE_LIFT;
|
||||
}
|
||||
|
||||
int track_get_actual_bank(rct_map_element *mapElement, int bank)
|
||||
{
|
||||
rct_ride *ride = GET_RIDE(mapElement->properties.track.ride_index);
|
||||
int trackColour = mapElement->properties.track.colour;
|
||||
return track_get_actual_bank_2(ride->type, trackColour, bank);
|
||||
}
|
||||
|
||||
int track_get_actual_bank_2(int rideType, int trackColour, int bank)
|
||||
{
|
||||
if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_3) {
|
||||
if (trackColour & 4) {
|
||||
if (bank == TRACK_BANK_NONE) {
|
||||
bank = TRACK_BANK_UPSIDE_DOWN;
|
||||
} else if (bank == TRACK_BANK_UPSIDE_DOWN) {
|
||||
bank = TRACK_BANK_NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return bank;
|
||||
}
|
||||
|
||||
@@ -553,4 +553,7 @@ bool track_element_is_cable_lift(rct_map_element *trackElement);
|
||||
void track_element_set_cable_lift(rct_map_element *trackElement);
|
||||
void track_element_clear_cable_lift(rct_map_element *trackElement);
|
||||
|
||||
int track_get_actual_bank(rct_map_element *mapElement, int bank);
|
||||
int track_get_actual_bank_2(int rideType, int trackColour, int bank);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -840,6 +840,33 @@ static void vehicle_update_scenery_door(rct_vehicle *vehicle)
|
||||
RCT2_CALLPROC_X(0x006DEE93, 0, 0, 0, 0, (int)vehicle, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006DB38B
|
||||
*/
|
||||
static bool loc_6DB38B(rct_vehicle *vehicle, rct_map_element *mapElement)
|
||||
{
|
||||
uint8 colourThingToXor = (vehicle->update_flags >> 9) & 8;
|
||||
int trackType = mapElement->properties.track.type;
|
||||
|
||||
// Get bank
|
||||
int rideType = GET_RIDE(mapElement->properties.track.ride_index)->type;
|
||||
int trackColour = mapElement->properties.track.colour ^ colourThingToXor;
|
||||
int bankStart = gTrackDefinitions[trackType].bank_start;
|
||||
bankStart = track_get_actual_bank_2(rideType, trackColour, bankStart);
|
||||
|
||||
// Get vangle
|
||||
int vangleStart = gTrackDefinitions[trackType].vangle_start;
|
||||
|
||||
// ?
|
||||
uint16 angleAndBank = vangleStart | (bankStart << 8);
|
||||
if (angleAndBank != RCT2_GLOBAL(0x00F64E36, uint16)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006DAB4C
|
||||
@@ -1054,14 +1081,22 @@ loc_6DB358:
|
||||
}
|
||||
}
|
||||
|
||||
// loc_6DB38B:
|
||||
regs.esi = vehicle;
|
||||
regs.edi = mapElement;
|
||||
RCT2_CALLFUNC_Y(0x006DB38B, ®s);
|
||||
goto end;
|
||||
if (!loc_6DB38B(vehicle, mapElement)) {
|
||||
goto loc_6DB94A;
|
||||
}
|
||||
|
||||
// Update VEHICLE_UPDATE_FLAG_11 flag
|
||||
vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_11;
|
||||
int rideType = GET_RIDE(mapElement->properties.track.ride_index)->type;
|
||||
if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_3) {
|
||||
if (mapElement->properties.track.colour & 4) {
|
||||
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_11;
|
||||
}
|
||||
}
|
||||
|
||||
loc_6DB41D:
|
||||
regs.esi = vehicle;
|
||||
regs.edi = mapElement;
|
||||
RCT2_CALLFUNC_Y(0x006DB41D, ®s);
|
||||
goto end;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user