mirror of https://github.com/OpenRCT2/OpenRCT2.git
implement ride_set_vehicle_colours_to_random_preset
This commit is contained in:
parent
6451f9d771
commit
064cdf4d06
|
@ -352,7 +352,7 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<StructMemberAlignment>1Byte</StructMemberAlignment>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;_USE_MATH_DEFINES;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;_USE_MATH_DEFINES;CURL_STATICLIB;SDL_MAIN_HANDLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<ObjectFileName>$(IntDir)fake\%(RelativeDir)</ObjectFileName>
|
||||
|
@ -383,7 +383,7 @@ xcopy /YS "$(SolutionDir)\..\Data" "$(TargetDir)\Data"</Command>
|
|||
<OmitFramePointers>
|
||||
</OmitFramePointers>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;_USE_MATH_DEFINES;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;_USE_MATH_DEFINES;CURL_STATICLIB;SDL_MAIN_HANDLED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ObjectFileName>$(IntDir)fake\%(RelativeDir)</ObjectFileName>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
|
@ -423,7 +423,7 @@ xcopy /YS "$(SolutionDir)\..\Data" "$(TargetDir)\Data"</Command>
|
|||
<OmitFramePointers>
|
||||
</OmitFramePointers>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;_USE_MATH_DEFINES;CURL_STATICLIB;ENABLE_TESTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;_USE_MATH_DEFINES;CURL_STATICLIB;SDL_MAIN_HANDLED;ENABLE_TESTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ObjectFileName>$(IntDir)fake\%(RelativeDir)</ObjectFileName>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
</ClCompile>
|
||||
|
|
|
@ -444,8 +444,7 @@ int paint_ride_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dp
|
|||
}
|
||||
|
||||
object_get_localised_text(&chunk, ecx, ebx, 2);
|
||||
// Offset to Unknown struct
|
||||
ride_type->var_1AE = (uint32_t)chunk;
|
||||
ride_type->vehicle_preset_list = (vehicle_colour_preset_list*)chunk;
|
||||
|
||||
// If Unknown struct size is 0xFF then there are 32 3 byte structures
|
||||
uint8 unknown_size = *chunk++;
|
||||
|
@ -723,7 +722,7 @@ int paint_ride_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dp
|
|||
rideVehicleEntry->peep_loading_positions = 0;
|
||||
}
|
||||
|
||||
ride_type->var_1AE = 0;
|
||||
ride_type->vehicle_preset_list = NULL;
|
||||
return flags;
|
||||
}
|
||||
else if ((flags & 0xFF) == 2){
|
||||
|
|
|
@ -145,7 +145,7 @@ static void ride_shop_connected(rct_ride* ride, int ride_idx);
|
|||
static void ride_spiral_slide_update(rct_ride *ride);
|
||||
static void ride_update(int rideIndex);
|
||||
static void ride_update_vehicle_colours(int rideIndex);
|
||||
static void sub_6DE52C(rct_ride *ride);
|
||||
static void ride_set_vehicle_colours_to_random_preset(rct_ride *ride);
|
||||
|
||||
rct_ride_type *ride_get_entry(rct_ride *ride)
|
||||
{
|
||||
|
@ -2864,6 +2864,59 @@ vehicle_colour ride_get_vehicle_colour(rct_ride *ride, int vehicleIndex)
|
|||
return result;
|
||||
}
|
||||
|
||||
static bool ride_does_vehicle_colour_exist(rct_ride *ride, vehicle_colour *vehicleColour)
|
||||
{
|
||||
int i;
|
||||
rct_ride *ride2;
|
||||
FOR_ALL_RIDES(i, ride2) {
|
||||
if (ride2 == ride) continue;
|
||||
if (ride2->subtype != ride->subtype) continue;
|
||||
if (ride2->vehicle_colours[0].body_colour != vehicleColour->main) continue;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static int ride_get_unused_preset_vehicle_colour(rct_ride *ride, vehicle_colour_preset_list *presetList)
|
||||
{
|
||||
for (int attempt = 0; attempt < 200; attempt++) {
|
||||
uint8 numColourConfigurations = presetList->count;
|
||||
int randomConfigIndex = scenario_rand() % numColourConfigurations;
|
||||
vehicle_colour *preset = &presetList->list[randomConfigIndex];
|
||||
|
||||
if (ride_does_vehicle_colour_exist(ride, preset)) {
|
||||
return randomConfigIndex;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006DE52C
|
||||
*/
|
||||
static void ride_set_vehicle_colours_to_random_preset(rct_ride *ride)
|
||||
{
|
||||
rct_ride_type *rideEntry = GET_RIDE_ENTRY(ride->subtype);
|
||||
vehicle_colour_preset_list *presetList = rideEntry->vehicle_preset_list;
|
||||
if (presetList->count != 255) {
|
||||
ride->colour_scheme_type = RIDE_COLOUR_SCHEME_ALL_SAME;
|
||||
int presetIndex = ride_get_unused_preset_vehicle_colour(ride, presetList);
|
||||
vehicle_colour *preset = &presetList->list[presetIndex];
|
||||
ride->vehicle_colours[0].body_colour = preset->main;
|
||||
ride->vehicle_colours[0].trim_colour = preset->additional_1;
|
||||
ride->vehicle_colours_extended[0] = preset->additional_2;
|
||||
} else {
|
||||
ride->colour_scheme_type = RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN;
|
||||
for (int i = 0; i < 32; i++) {
|
||||
vehicle_colour *preset = &presetList->list[i];
|
||||
ride->vehicle_colours[i].body_colour = preset->main;
|
||||
ride->vehicle_colours[i].trim_colour = preset->additional_1;
|
||||
ride->vehicle_colours_extended[i] = preset->additional_2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Reachability
|
||||
|
@ -5059,7 +5112,7 @@ foundRideEntry:
|
|||
ride->num_circuits = 1;
|
||||
ride->mode = ride_get_default_mode(ride);
|
||||
ride->min_max_cars_per_train = (rideEntry->min_cars_in_train << 4) | rideEntry->max_cars_in_train;
|
||||
sub_6DE52C(ride);
|
||||
ride_set_vehicle_colours_to_random_preset(ride);
|
||||
window_invalidate_by_class(WC_RIDE_LIST);
|
||||
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_RIDE_CONSTRUCTION;
|
||||
|
@ -6171,11 +6224,6 @@ void ride_update_max_vehicles(int rideIndex)
|
|||
}
|
||||
}
|
||||
|
||||
static void sub_6DE52C(rct_ride *ride)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x006DE52C, 0, 0, 0, 0, (int)ride, 0, 0);
|
||||
}
|
||||
|
||||
void ride_set_ride_entry(int rideIndex, int rideEntry)
|
||||
{
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, rct_string_id) = STR_RIDE_SET_VEHICLE_TYPE_FAIL;
|
||||
|
@ -6276,7 +6324,7 @@ void game_command_set_ride_vehicles(int *eax, int *ebx, int *ecx, int *edx, int
|
|||
break;
|
||||
case RIDE_SET_VEHICLES_COMMAND_TYPE_RIDE_ENTRY:
|
||||
ride->subtype = value;
|
||||
sub_6DE52C(ride);
|
||||
ride_set_vehicle_colours_to_random_preset(ride);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,28 @@ typedef struct {
|
|||
uint8 entry_index;
|
||||
} ride_list_item;
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional;
|
||||
uint8 supports;
|
||||
} track_colour;
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional_1;
|
||||
uint8 additional_2;
|
||||
} vehicle_colour;
|
||||
|
||||
typedef struct {
|
||||
uint8 count;
|
||||
track_colour list[256];
|
||||
} track_colour_preset_list;
|
||||
|
||||
typedef struct {
|
||||
uint8 count;
|
||||
vehicle_colour list[256];
|
||||
} vehicle_colour_preset_list;
|
||||
|
||||
/**
|
||||
* Ride type vehicle structure.
|
||||
* size: 0x65
|
||||
|
@ -99,38 +121,38 @@ typedef struct{
|
|||
* size: unknown
|
||||
*/
|
||||
typedef struct {
|
||||
rct_string_id name; // 0x000
|
||||
rct_string_id description; // 0x002
|
||||
uint32 images_offset; // 0x004
|
||||
uint32 flags; // 0x008
|
||||
uint8 ride_type[3]; // 0x00C
|
||||
uint8 min_cars_in_train; // 0x00F
|
||||
uint8 max_cars_in_train; // 0x010
|
||||
uint8 cars_per_flat_ride; // 0x011
|
||||
uint8 zero_cars; // 0x012
|
||||
uint8 tab_vehicle; // 0x013
|
||||
uint8 default_vehicle; // 0x014
|
||||
uint8 front_vehicle; // 0x015
|
||||
uint8 second_vehicle; // 0x016
|
||||
uint8 rear_vehicle; // 0x017
|
||||
uint8 third_vehicle; // 0x018
|
||||
rct_string_id name; // 0x000
|
||||
rct_string_id description; // 0x002
|
||||
uint32 images_offset; // 0x004
|
||||
uint32 flags; // 0x008
|
||||
uint8 ride_type[3]; // 0x00C
|
||||
uint8 min_cars_in_train; // 0x00F
|
||||
uint8 max_cars_in_train; // 0x010
|
||||
uint8 cars_per_flat_ride; // 0x011
|
||||
uint8 zero_cars; // 0x012
|
||||
uint8 tab_vehicle; // 0x013
|
||||
uint8 default_vehicle; // 0x014
|
||||
uint8 front_vehicle; // 0x015
|
||||
uint8 second_vehicle; // 0x016
|
||||
uint8 rear_vehicle; // 0x017
|
||||
uint8 third_vehicle; // 0x018
|
||||
uint8 pad_019;
|
||||
rct_ride_type_vehicle vehicles[4]; // 0x1A
|
||||
uint32 var_1AE;
|
||||
sint8 excitement_multipler; // 0x1B2
|
||||
sint8 intensity_multipler; // 0x1B3
|
||||
sint8 nausea_multipler; // 0x1B4
|
||||
uint8 max_height; // 0x1B5
|
||||
rct_ride_type_vehicle vehicles[4]; // 0x01A
|
||||
vehicle_colour_preset_list *vehicle_preset_list; // 0x1AE
|
||||
sint8 excitement_multipler; // 0x1B2
|
||||
sint8 intensity_multipler; // 0x1B3
|
||||
sint8 nausea_multipler; // 0x1B4
|
||||
uint8 max_height; // 0x1B5
|
||||
union {
|
||||
uint64 enabledTrackPieces; // 0x1B6
|
||||
uint64 enabledTrackPieces; // 0x1B6
|
||||
struct {
|
||||
uint32 enabledTrackPiecesA; // 0x1B6
|
||||
uint32 enabledTrackPiecesB; // 0x1BA
|
||||
uint32 enabledTrackPiecesA; // 0x1B6
|
||||
uint32 enabledTrackPiecesB; // 0x1BA
|
||||
};
|
||||
};
|
||||
uint8 category[2]; // 0x1BE
|
||||
uint8 shop_item; // 0x1C0
|
||||
uint8 shop_item_secondary; // 0x1C1
|
||||
uint8 category[2]; // 0x1BE
|
||||
uint8 shop_item; // 0x1C0
|
||||
uint8 shop_item_secondary; // 0x1C1
|
||||
} rct_ride_type;
|
||||
|
||||
/**
|
||||
|
@ -705,23 +727,6 @@ enum {
|
|||
RIDE_INVALIDATE_RIDE_MAINTENANCE = 1 << 5,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional;
|
||||
uint8 supports;
|
||||
} track_colour;
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional_1;
|
||||
uint8 additional_2;
|
||||
} vehicle_colour;
|
||||
|
||||
typedef struct {
|
||||
uint8 count;
|
||||
track_colour list[256];
|
||||
} track_colour_preset_list;
|
||||
|
||||
enum {
|
||||
RIDE_MEASUREMENT_FLAG_RUNNING = 1 << 0,
|
||||
RIDE_MEASUREMENT_FLAG_UNLOADING = 1 << 1,
|
||||
|
|
Loading…
Reference in New Issue