mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-16 11:33:03 +01:00
Added td4 booster check.
Small refactor to use known structures
This commit is contained in:
@@ -298,6 +298,10 @@ enum {
|
||||
RCT1_RIDE_TYPE_LEMONADE_STALL
|
||||
};
|
||||
|
||||
enum{
|
||||
RCT1_TRACK_ELEM_BOOSTER = 100
|
||||
};
|
||||
|
||||
typedef struct{
|
||||
uint8 type; // 0x00
|
||||
uint8 vehicle_type; // 0x01
|
||||
|
||||
@@ -454,6 +454,23 @@ static void read(void *dst, char **src, int length)
|
||||
*src += length;
|
||||
}
|
||||
|
||||
/* rct2: 0x00677530
|
||||
* Returns 1 if it has booster track elements
|
||||
*/
|
||||
uint8 td4_track_has_boosters(rct_track_td6* track_design, uint8* track_elements){
|
||||
if (track_design->type == RCT1_RIDE_TYPE_HEDGE_MAZE)
|
||||
return 0;
|
||||
|
||||
rct_track_element* track_element = (rct_track_element*)track_elements;
|
||||
|
||||
for (; track_element->type != 0xFF; track_element++){
|
||||
if (track_element->type == RCT1_TRACK_ELEM_BOOSTER)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0067726A
|
||||
@@ -535,20 +552,21 @@ rct_track_td6* load_track_design(const char *path)
|
||||
|
||||
// Set any element passed the tracks to 0xFF
|
||||
if (track_design->type == RIDE_TYPE_MAZE) {
|
||||
uint32* maze_element = (uint32*)track_elements;
|
||||
while (*maze_element != 0) {
|
||||
rct_maze_element* maze_element = (rct_maze_element*)track_elements;
|
||||
while (maze_element->all != 0) {
|
||||
maze_element++;
|
||||
}
|
||||
maze_element++;
|
||||
memset(maze_element, 255, final_track_element_location - (uint8*)maze_element);
|
||||
} else {
|
||||
uint8* track_element = track_elements;
|
||||
while (*track_element != 255) {
|
||||
track_element += 2;
|
||||
}
|
||||
track_element++;
|
||||
memset(track_element, 255, final_track_element_location - track_element);
|
||||
}
|
||||
else {
|
||||
rct_track_element* track_element = (rct_track_element*)track_elements;
|
||||
while (track_element->type != 255) {
|
||||
track_element++;
|
||||
}
|
||||
memset(((uint8*)track_element) + 1, 255, final_track_element_location - (uint8*)track_element);
|
||||
|
||||
}
|
||||
|
||||
// Edit the colours to use the new versions
|
||||
// Unsure why it is 67
|
||||
@@ -565,7 +583,9 @@ rct_track_td6* load_track_design(const char *path)
|
||||
// Highest drop height is 1bit = 1/3 a meter in td4
|
||||
// Not sure if this is correct??
|
||||
track_design->highest_drop_height >>= 1;
|
||||
if (0x100 & RCT2_CALLPROC_X(0x00677530, 0, 0, 0, 0, 0, 0, 0))
|
||||
|
||||
// If it has boosters then sadly track has to be discarded.
|
||||
if (td4_track_has_boosters(track_design, track_elements))
|
||||
track_design->type = RIDE_TYPE_NULL;
|
||||
|
||||
if (track_design->type == RCT1_RIDE_TYPE_STEEL_MINI_ROLLER_COASTER)
|
||||
|
||||
Reference in New Issue
Block a user