mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
Started implementing track_save
This commit is contained in:
@@ -713,12 +713,12 @@ void load_track_scenery_objects(){
|
||||
|
||||
if (track_design->type == RIDE_TYPE_MAZE){
|
||||
// Skip all of the maze track elements
|
||||
while (*(uint32*)track_elements != 0)track_elements += 4;
|
||||
track_elements += 4;
|
||||
while (*(uint32*)track_elements != 0)track_elements += sizeof(rct_maze_element);
|
||||
track_elements += sizeof(rct_maze_element);
|
||||
}
|
||||
else{
|
||||
// Skip track_elements
|
||||
while (*track_elements != 255) track_elements += 2;
|
||||
while (*track_elements != 255) track_elements += sizeof(rct_track_element);
|
||||
track_elements++;
|
||||
|
||||
// Skip entrance exit elements
|
||||
@@ -727,11 +727,13 @@ void load_track_scenery_objects(){
|
||||
}
|
||||
|
||||
while (*track_elements != 255){
|
||||
if (!find_object_in_entry_group((rct_object_entry*)track_elements, &entry_type, &entry_index)){
|
||||
object_load(-1, (rct_object_entry*)track_elements, 0);
|
||||
rct_track_scenery* scenery_entry = (rct_track_scenery*)track_elements;
|
||||
|
||||
if (!find_object_in_entry_group(&scenery_entry->scenery_object, &entry_type, &entry_index)){
|
||||
object_load(-1, &scenery_entry->scenery_object, 0);
|
||||
}
|
||||
// Skip object and location/direction/colour
|
||||
track_elements += sizeof(rct_object_entry) + 6;
|
||||
scenery_entry += sizeof(rct_track_scenery);
|
||||
}
|
||||
|
||||
sub_6A9FC0();
|
||||
@@ -1166,3 +1168,53 @@ int track_is_connected_by_shape(rct_map_element *a, rct_map_element *b)
|
||||
|
||||
return aBank == bBank && aAngle == bAngle;
|
||||
}
|
||||
|
||||
|
||||
void sub_6D2804(int al, rct_window* w){
|
||||
|
||||
if (al == 0){
|
||||
//6d2808
|
||||
return;
|
||||
}
|
||||
|
||||
rct_ride* ride = GET_RIDE(w->number);
|
||||
|
||||
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED)){
|
||||
//6d2ad4
|
||||
return;
|
||||
}
|
||||
|
||||
if (ride->ratings.excitement == 0xFFFF){
|
||||
//6d2ad4
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(RCT2_ADDRESS(0x0097CF40, uint32)[ride->type] & 0x10000000)){
|
||||
//6d2ad4
|
||||
return;
|
||||
}
|
||||
|
||||
if (RCT2_CALLPROC_X(0x006CE44F, 0, 0, 0, w->number, 0, 0, 0) & 0x100){
|
||||
//6d2ad4
|
||||
return;
|
||||
}
|
||||
|
||||
rct_track_scenery* edi = (rct_track_scenery*)(RCT2_GLOBAL(0x00F44058, uint8*)--);
|
||||
rct_track_scenery* esi = RCT2_ADDRESS(0x009DA193, rct_track_scenery);
|
||||
|
||||
while (1){
|
||||
int ebx = 0;
|
||||
memcpy(edi, esi, sizeof(rct_track_scenery));
|
||||
if ((edi->scenery_object.flags & 0xFF) == 0xFF) break;
|
||||
if ((edi->scenery_object.flags & 0xF) == 5){
|
||||
//6d28F4
|
||||
}
|
||||
else if ((edi->scenery_object.flags & 0xF) == 3){
|
||||
//6d28dd
|
||||
}
|
||||
else {
|
||||
//6d28ba
|
||||
}
|
||||
//6d292f
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +69,17 @@ typedef struct{
|
||||
uint8 flags;
|
||||
}rct_track_element;
|
||||
|
||||
/* Track Scenery entry size: 0x16 */
|
||||
typedef struct{
|
||||
rct_object_entry scenery_object; // 0x00
|
||||
uint8 x; // 0x10
|
||||
uint8 y; // 0x11
|
||||
uint8 z; // 0x12
|
||||
uint8 flags; // 0x13 direction quadrant tertiary colour
|
||||
uint8 primary_colour; // 0x14
|
||||
uint8 secondary_colour; // 0x15
|
||||
}rct_track_scenery;
|
||||
|
||||
enum{
|
||||
TRACK_ELEMENT_FLAG_CHAIN_LIFT = (1<<7),
|
||||
TRACK_ELEMENT_FLAG_INVERTED = (1<<6),
|
||||
@@ -216,5 +227,6 @@ int track_delete();
|
||||
void reset_track_list_cache();
|
||||
int track_is_connected_by_shape(rct_map_element *a, rct_map_element *b);
|
||||
int sub_6D01B3(int bl, int x, int y, int z);
|
||||
void sub_6D2804(int al, rct_window* w);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user