mirror of https://github.com/OpenRCT2/OpenRCT2.git
Refactor research - spike 1
This involves refactoring gResearchedRideTypes and gResearchedRideEntries and the functions involved. Also renames some functions in order to better express what they do.
This commit is contained in:
parent
c7417e11a4
commit
31bf792538
|
@ -144,7 +144,7 @@ rct_window * window_editor_bottom_toolbar_open()
|
|||
(1 << WIDX_NEXT_IMAGE);
|
||||
|
||||
window_init_scroll_widgets(window);
|
||||
reset_researched_scenery_items();
|
||||
set_all_scenery_items_invented();
|
||||
|
||||
return window;
|
||||
}
|
||||
|
@ -165,7 +165,7 @@ void window_editor_bottom_toolbar_jump_back_to_object_selection() {
|
|||
*/
|
||||
void window_editor_bottom_toolbar_jump_back_to_landscape_editor() {
|
||||
window_close_all();
|
||||
reset_researched_scenery_items();
|
||||
set_all_scenery_items_invented();
|
||||
scenery_set_default_placement_configuration();
|
||||
gS6Info.editor_step = EDITOR_STEP_LANDSCAPE_EDITOR;
|
||||
context_open_window(WC_MAP);
|
||||
|
@ -227,12 +227,12 @@ void window_editor_bottom_toolbar_jump_forward_from_object_selection()
|
|||
return;
|
||||
|
||||
if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) {
|
||||
reset_researched_ride_types_and_entries();
|
||||
set_every_ride_entry_invented();
|
||||
context_open_window(WC_CONSTRUCT_RIDE);
|
||||
gS6Info.editor_step = EDITOR_STEP_ROLLERCOASTER_DESIGNER;
|
||||
gfx_invalidate_screen();
|
||||
} else {
|
||||
reset_researched_scenery_items();
|
||||
set_all_scenery_items_invented();
|
||||
scenery_set_default_placement_configuration();
|
||||
gS6Info.editor_step = EDITOR_STEP_LANDSCAPE_EDITOR;
|
||||
context_open_window(WC_MAP);
|
||||
|
|
|
@ -1234,7 +1234,7 @@ static sint32 get_object_from_object_selection(uint8 object_type, sint32 y)
|
|||
*/
|
||||
static void window_editor_object_selection_manage_tracks()
|
||||
{
|
||||
reset_researched_ride_types_and_entries();
|
||||
set_every_ride_entry_invented();
|
||||
|
||||
gS6Info.editor_step = EDITOR_STEP_TRACK_DESIGNS_MANAGER;
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "NewsItem.h"
|
||||
#include "Finance.h"
|
||||
#include "Research.h"
|
||||
#include "../core/Memory.hpp"
|
||||
|
||||
const sint32 _researchRate[] = {0, 160, 250, 400};
|
||||
|
||||
|
@ -53,8 +54,8 @@ rct_research_item gResearchItems[MAX_RESEARCH_ITEMS];
|
|||
// 0x00EE787C
|
||||
uint8 gResearchUncompletedCategories;
|
||||
|
||||
uint32 gResearchedRideTypes[MAX_RESEARCHED_RIDE_TYPES];
|
||||
uint32 gResearchedRideEntries[MAX_RESEARCHED_RIDE_ENTRIES];
|
||||
bool gResearchedRideTypes[RIDE_TYPE_COUNT];
|
||||
bool gResearchedRideEntries[MAX_RIDE_OBJECTS];
|
||||
uint32 gResearchedSceneryItems[MAX_RESEARCHED_SCENERY_ITEMS];
|
||||
|
||||
bool gSilentResearch = false;
|
||||
|
@ -413,15 +414,7 @@ void research_reset_current_item()
|
|||
ebp->category = cat;
|
||||
}
|
||||
|
||||
for (auto &researchedRideType : gResearchedRideTypes)
|
||||
{
|
||||
researchedRideType = 0;
|
||||
}
|
||||
|
||||
for (auto &researchedRideEntry : gResearchedRideEntries)
|
||||
{
|
||||
researchedRideEntry = 0;
|
||||
}
|
||||
set_every_ride_entry_not_invented();
|
||||
|
||||
for (auto &researchedSceneryItem : gResearchedSceneryItems)
|
||||
{
|
||||
|
@ -756,18 +749,12 @@ void research_insert_scenery_group_entry(uint8 entryIndex, bool researched)
|
|||
|
||||
bool ride_type_is_invented(sint32 rideType)
|
||||
{
|
||||
sint32 quadIndex = rideType >> 5;
|
||||
sint32 bitIndex = rideType & 0x1F;
|
||||
bool invented = (gResearchedRideTypes[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
return invented;
|
||||
return gResearchedRideTypes[rideType];
|
||||
}
|
||||
|
||||
bool ride_entry_is_invented(sint32 rideEntryIndex)
|
||||
{
|
||||
sint32 quadIndex = rideEntryIndex >> 5;
|
||||
sint32 bitIndex = rideEntryIndex & 0x1F;
|
||||
bool invented = (gResearchedRideEntries[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
return invented;
|
||||
return gResearchedRideEntries[rideEntryIndex];
|
||||
}
|
||||
|
||||
bool track_piece_is_available_for_ride_type(uint8 rideType, sint32 trackType)
|
||||
|
@ -777,16 +764,12 @@ bool track_piece_is_available_for_ride_type(uint8 rideType, sint32 trackType)
|
|||
|
||||
static void ride_type_set_invented(sint32 rideType)
|
||||
{
|
||||
sint32 quadIndex = rideType >> 5;
|
||||
sint32 bitIndex = rideType & 0x1F;
|
||||
gResearchedRideTypes[quadIndex] |= (uint32) 1 << bitIndex;
|
||||
gResearchedRideTypes[rideType] = true;
|
||||
}
|
||||
|
||||
static void ride_entry_set_invented(sint32 rideEntryIndex)
|
||||
{
|
||||
sint32 quadIndex = rideEntryIndex >> 5;
|
||||
sint32 bitIndex = rideEntryIndex & 0x1F;
|
||||
gResearchedRideEntries[quadIndex] |= (uint32) 1 << bitIndex;
|
||||
gResearchedRideEntries[rideEntryIndex] = true;
|
||||
}
|
||||
|
||||
bool scenery_is_invented(uint16 sceneryItem)
|
||||
|
@ -823,7 +806,7 @@ bool scenery_group_is_invented(sint32 sgIndex)
|
|||
return invented;
|
||||
}
|
||||
|
||||
void reset_researched_scenery_items()
|
||||
void set_all_scenery_items_invented()
|
||||
{
|
||||
for (auto &researchedSceneryItem : gResearchedSceneryItems)
|
||||
{
|
||||
|
@ -831,18 +814,16 @@ void reset_researched_scenery_items()
|
|||
}
|
||||
}
|
||||
|
||||
void reset_researched_ride_types_and_entries()
|
||||
void set_every_ride_entry_invented()
|
||||
{
|
||||
// Iteration endpoint used to be 4 for unknown reasons, likely a mistake
|
||||
for (auto &researchedRideType : gResearchedRideTypes)
|
||||
{
|
||||
researchedRideType = 0xFFFFFFFF;
|
||||
}
|
||||
Memory::Set(gResearchedRideTypes, true, sizeof(gResearchedRideTypes));
|
||||
Memory::Set(gResearchedRideEntries, true, sizeof(gResearchedRideEntries));
|
||||
}
|
||||
|
||||
for (auto &researchedRideEntry : gResearchedRideEntries)
|
||||
{
|
||||
researchedRideEntry = 0xFFFFFFFF;
|
||||
}
|
||||
void set_every_ride_entry_not_invented()
|
||||
{
|
||||
Memory::Set(gResearchedRideTypes, false, sizeof(gResearchedRideTypes));
|
||||
Memory::Set(gResearchedRideEntries, false, sizeof(gResearchedRideEntries));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -995,4 +976,4 @@ void research_fix()
|
|||
research_insert_scenery_group_entry(i, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#pragma once
|
||||
|
||||
#include "../common.h"
|
||||
#include "../object/ObjectLimits.h"
|
||||
#include "../ride/Ride.h"
|
||||
|
||||
typedef struct rct_ride_entry rct_ride_entry;
|
||||
|
||||
|
@ -43,8 +45,6 @@ enum{
|
|||
|
||||
#define MAX_RESEARCH_ITEMS 500
|
||||
#define MAX_RESEARCHED_SCENERY_ITEMS 56
|
||||
#define MAX_RESEARCHED_RIDE_TYPES 8 // Really 256, since there are 32 bits per uint32.
|
||||
#define MAX_RESEARCHED_RIDE_ENTRIES 8 // Really 256, since there are 32 bits per uint32.
|
||||
#define MAX_RESEARCHED_TRACK_TYPES 128
|
||||
|
||||
#define RESEARCH_ENTRY_RIDE_MASK 0x10000
|
||||
|
@ -92,8 +92,8 @@ extern uint32 gResearchNextItem;
|
|||
|
||||
extern rct_research_item gResearchItems[MAX_RESEARCH_ITEMS];
|
||||
extern uint8 gResearchUncompletedCategories;
|
||||
extern uint32 gResearchedRideTypes[MAX_RESEARCHED_RIDE_TYPES];
|
||||
extern uint32 gResearchedRideEntries[MAX_RESEARCHED_RIDE_ENTRIES];
|
||||
extern bool gResearchedRideTypes[RIDE_TYPE_COUNT];
|
||||
extern bool gResearchedRideEntries[MAX_RIDE_OBJECTS];
|
||||
extern uint32 gResearchedSceneryItems[MAX_RESEARCHED_SCENERY_ITEMS];
|
||||
extern bool gSilentResearch;
|
||||
|
||||
|
@ -120,8 +120,9 @@ bool ride_entry_is_invented(sint32 rideEntryIndex);
|
|||
bool track_piece_is_available_for_ride_type(uint8 rideType, sint32 trackType);
|
||||
bool scenery_group_is_invented(sint32 sgIndex);
|
||||
bool scenery_is_invented(uint16 sceneryItem);
|
||||
void reset_researched_scenery_items();
|
||||
void reset_researched_ride_types_and_entries();
|
||||
void set_all_scenery_items_invented();
|
||||
void set_every_ride_entry_invented();
|
||||
void set_every_ride_entry_not_invented();
|
||||
rct_string_id research_item_get_name(uint32 researchItem);
|
||||
uint8 research_get_ride_base_type(sint32 researchItem);
|
||||
rct_string_id research_get_friendly_base_ride_type_name(uint8 trackType, rct_ride_entry * rideEntry);
|
||||
|
|
|
@ -22,19 +22,21 @@
|
|||
#include "common.h"
|
||||
#include "rct12.h"
|
||||
|
||||
#define RCT2_MAX_RIDES_IN_PARK 255
|
||||
#define RCT2_MAX_STAFF 200
|
||||
#define RCT2_MAX_BANNERS_IN_PARK 250
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE 32
|
||||
#define RCT2_MAX_CARS_PER_TRAIN 32
|
||||
#define RCT2_MAX_CATEGORIES_PER_RIDE 2
|
||||
#define RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY 3
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE_ENTRY 4
|
||||
#define RCT2_DOWNTIME_HISTORY_SIZE 8
|
||||
#define RCT2_CUSTOMER_HISTORY_SIZE 10
|
||||
#define RCT2_MAX_SPRITES 10000
|
||||
#define RCT2_MAX_RIDES_IN_PARK 255
|
||||
#define RCT2_MAX_STAFF 200
|
||||
#define RCT2_MAX_BANNERS_IN_PARK 250
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE 32
|
||||
#define RCT2_MAX_CARS_PER_TRAIN 32
|
||||
#define RCT2_MAX_CATEGORIES_PER_RIDE 2
|
||||
#define RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY 3
|
||||
#define RCT2_MAX_VEHICLES_PER_RIDE_ENTRY 4
|
||||
#define RCT2_DOWNTIME_HISTORY_SIZE 8
|
||||
#define RCT2_CUSTOMER_HISTORY_SIZE 10
|
||||
#define RCT2_MAX_SPRITES 10000
|
||||
#define RCT2_MAX_TILE_ELEMENTS 0x30000
|
||||
#define RCT2_MAX_ANIMATED_OBJECTS 2000
|
||||
#define RCT2_MAX_ANIMATED_OBJECTS 2000
|
||||
#define RCT2_MAX_RESEARCHED_RIDE_TYPE_QUADS 8 // With 32 bits per uint32, this means there is room for 256 types.
|
||||
#define RCT2_MAX_RESEARCHED_RIDE_ENTRY_QUADS 8 // With 32 bits per uint32, this means there is room for 256 entries.
|
||||
|
||||
|
||||
typedef struct rct2_install_info {
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "../management/NewsItem.h"
|
||||
#include "../management/Research.h"
|
||||
#include "../object/Object.h"
|
||||
#include "../object/ObjectLimits.h"
|
||||
#include "../OpenRCT2.h"
|
||||
#include "../peep/Staff.h"
|
||||
#include "../ride/Ride.h"
|
||||
|
@ -216,10 +217,11 @@ void S6Exporter::Export()
|
|||
_s6.guest_count_change_modifier = gGuestChangeModifier;
|
||||
_s6.current_research_level = gResearchFundingLevel;
|
||||
// pad_01357400
|
||||
memcpy(_s6.researched_ride_types, gResearchedRideTypes, sizeof(_s6.researched_ride_types));
|
||||
memcpy(_s6.researched_ride_entries, gResearchedRideEntries, sizeof(_s6.researched_ride_entries));
|
||||
ExportResearchedRideTypes();
|
||||
ExportResearchedRideEntries();
|
||||
// Not used by OpenRCT2 any more, but left in to keep RCT2 export working.
|
||||
for (uint8 i = 0; i < Util::CountOf(RideTypePossibleTrackConfigurations); i++) {
|
||||
for (uint8 i = 0; i < Util::CountOf(RideTypePossibleTrackConfigurations); i++)
|
||||
{
|
||||
researchedTrackPiecesA[i] = (RideTypePossibleTrackConfigurations[i] ) & 0xFFFFFFFFULL;
|
||||
researchedTrackPiecesB[i] = (RideTypePossibleTrackConfigurations[i] >> 32ULL) & 0xFFFFFFFFULL;
|
||||
}
|
||||
|
@ -652,6 +654,36 @@ void S6Exporter::ExportRide(rct2_ride * dst, const Ride * src)
|
|||
// pad_208[0x58];
|
||||
}
|
||||
|
||||
void S6Exporter::ExportResearchedRideTypes()
|
||||
{
|
||||
Memory::Set(_s6.researched_ride_types, false, sizeof(_s6.researched_ride_types));
|
||||
|
||||
for (sint32 rideType = 0; rideType < RIDE_TYPE_COUNT; rideType++)
|
||||
{
|
||||
if (ride_type_is_invented(rideType))
|
||||
{
|
||||
sint32 quadIndex = rideType >> 5;
|
||||
sint32 bitIndex = rideType & 0x1F;
|
||||
_s6.researched_ride_types[quadIndex] |= (uint32) 1 << bitIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void S6Exporter::ExportResearchedRideEntries()
|
||||
{
|
||||
Memory::Set(_s6.researched_ride_entries, false, sizeof(_s6.researched_ride_entries));
|
||||
|
||||
for (sint32 rideEntryIndex = 0; rideEntryIndex < MAX_RIDE_OBJECTS; rideEntryIndex++)
|
||||
{
|
||||
if (ride_entry_is_invented(rideEntryIndex))
|
||||
{
|
||||
sint32 quadIndex = rideEntryIndex >> 5;
|
||||
sint32 bitIndex = rideEntryIndex & 0x1F;
|
||||
_s6.researched_ride_entries[quadIndex] |= (uint32) 1 << bitIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"
|
||||
{
|
||||
enum {
|
||||
|
|
|
@ -51,6 +51,8 @@ private:
|
|||
|
||||
void Save(IStream * stream, bool isScenario);
|
||||
static uint32 GetLoanHash(money32 initialCash, money32 bankLoan, uint32 maxBankLoan);
|
||||
void ExportResearchedRideTypes();
|
||||
void ExportResearchedRideEntries();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
#include "../core/String.hpp"
|
||||
#include "../management/Award.h"
|
||||
#include "../network/network.h"
|
||||
#include "../object/ObjectLimits.h"
|
||||
#include "../object/ObjectManager.h"
|
||||
#include "../object/ObjectRepository.h"
|
||||
#include "../object/ObjectManager.h"
|
||||
#include "../ParkImporter.h"
|
||||
#include "../rct12/SawyerChunkReader.h"
|
||||
#include "../rct12/SawyerEncoding.h"
|
||||
|
@ -235,8 +235,8 @@ public:
|
|||
gGuestChangeModifier = _s6.guest_count_change_modifier;
|
||||
gResearchFundingLevel = _s6.current_research_level;
|
||||
// pad_01357400
|
||||
memcpy(gResearchedRideTypes, _s6.researched_ride_types, sizeof(_s6.researched_ride_types));
|
||||
memcpy(gResearchedRideEntries, _s6.researched_ride_entries, sizeof(_s6.researched_ride_entries));
|
||||
ImportResearchedRideTypes();
|
||||
ImportResearchedRideEntries();
|
||||
// _s6.researched_track_types_a
|
||||
// _s6.researched_track_types_b
|
||||
|
||||
|
@ -699,6 +699,35 @@ public:
|
|||
// pad_208[0x58];
|
||||
}
|
||||
|
||||
void ImportResearchedRideTypes()
|
||||
{
|
||||
Memory::Set(gResearchedRideTypes, false, sizeof(gResearchedRideTypes));
|
||||
|
||||
for (sint32 rideType = 0; rideType < RIDE_TYPE_COUNT; rideType++)
|
||||
{
|
||||
sint32 quadIndex = rideType >> 5;
|
||||
sint32 bitIndex = rideType & 0x1F;
|
||||
bool invented = (_s6.researched_ride_types[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
|
||||
gResearchedRideTypes[rideType] = invented;
|
||||
}
|
||||
}
|
||||
|
||||
void ImportResearchedRideEntries()
|
||||
{
|
||||
Memory::Set(gResearchedRideEntries, false, sizeof(gResearchedRideEntries));
|
||||
|
||||
for (sint32 rideEntryIndex = 0; rideEntryIndex < MAX_RIDE_OBJECTS; rideEntryIndex++)
|
||||
{
|
||||
sint32 quadIndex = rideEntryIndex >> 5;
|
||||
sint32 bitIndex = rideEntryIndex & 0x1F;
|
||||
bool invented = (_s6.researched_ride_entries[quadIndex] & ((uint32) 1 << bitIndex));
|
||||
|
||||
gResearchedRideEntries[rideEntryIndex] = invented;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Initialise()
|
||||
{
|
||||
game_init_all(_s6.map_size);
|
||||
|
|
|
@ -131,8 +131,8 @@ typedef struct rct_s6_data {
|
|||
uint8 guest_count_change_modifier;
|
||||
uint8 current_research_level;
|
||||
uint8 pad_01357400[4];
|
||||
uint32 researched_ride_types[8];
|
||||
uint32 researched_ride_entries[8];
|
||||
uint32 researched_ride_types[RCT2_MAX_RESEARCHED_RIDE_TYPE_QUADS];
|
||||
uint32 researched_ride_entries[RCT2_MAX_RESEARCHED_RIDE_ENTRY_QUADS];
|
||||
uint32 researched_track_types_a[128];
|
||||
uint32 researched_track_types_b[128];
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "../Cheats.h"
|
||||
#include "../config/Config.h"
|
||||
#include "../core/Math.hpp"
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../core/Util.hpp"
|
||||
#include "../Game.h"
|
||||
#include "../interface/colour.h"
|
||||
|
@ -108,10 +109,9 @@ void park_init()
|
|||
research_reset_items();
|
||||
finance_init();
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
gResearchedRideTypes[i] = 0;
|
||||
Memory::Set(gResearchedRideTypes, false, sizeof(gResearchedRideTypes));
|
||||
|
||||
reset_researched_scenery_items();
|
||||
set_all_scenery_items_invented();
|
||||
|
||||
gParkEntranceFee = MONEY(10, 00);
|
||||
gPeepSpawns[0].x = PEEP_SPAWN_UNDEFINED;
|
||||
|
|
Loading…
Reference in New Issue