Remove scenario ticks and adjust export/import

Co-authored-by: Ted John <ted@brambles.org>
This commit is contained in:
ζeh Matt 2021-09-18 01:46:42 +03:00
parent 77141f57b0
commit 74e8988dd8
No known key found for this signature in database
GPG Key ID: 18CE582C71A225B0
18 changed files with 60 additions and 50 deletions

View File

@ -1426,7 +1426,7 @@ void window_guest_stats_paint(rct_window* w, rct_drawpixelinfo* dpi)
int32_t guestEntryTime = peep->GetParkEntryTime();
if (guestEntryTime != -1)
{
int32_t timeInPark = (gScenarioTicks - guestEntryTime) >> 11;
int32_t timeInPark = (gCurrentTicks - guestEntryTime) >> 11;
auto ft = Formatter();
ft.Add<uint16_t>(timeInPark & 0xFFFF);
DrawTextBasic(dpi, screenCoords, STR_GUEST_STAT_TIME_IN_PARK, ft);
@ -1496,7 +1496,7 @@ void window_guest_rides_update(rct_window* w)
}
// Every 2048 ticks do a full window_invalidate
int32_t number_of_ticks = gScenarioTicks - guest->GetParkEntryTime();
int32_t number_of_ticks = gCurrentTicks - guest->GetParkEntryTime();
if (!(number_of_ticks & 0x7FF))
w->Invalidate();

View File

@ -807,7 +807,7 @@ private:
bool IsRefreshOfGroupsRequired()
{
uint32_t tick256 = floor2(gScenarioTicks, 256);
uint32_t tick256 = floor2(gCurrentTicks, 256);
if (_selectedView == _lastFindGroupsSelectedView)
{
if (_lastFindGroupsWait != 0 || _lastFindGroupsTick == tick256)
@ -834,7 +834,7 @@ private:
void RefreshGroups()
{
_lastFindGroupsTick = floor2(gScenarioTicks, 256);
_lastFindGroupsTick = floor2(gCurrentTicks, 256);
_lastFindGroupsSelectedView = _selectedView;
_lastFindGroupsWait = 320;
_groups.clear();

View File

@ -495,7 +495,7 @@ namespace OpenRCT2
#endif
}
gScenarioTicks = 0;
gCurrentTicks = 0;
input_reset_place_obj_modifier();
viewport_init_all();

View File

@ -56,6 +56,7 @@ GameState::GameState()
void GameState::InitAll(int32_t mapSize)
{
gInMapInitCode = true;
gCurrentTicks = 0;
map_init(mapSize);
_park->Initialise();
@ -367,7 +368,6 @@ void GameState::UpdateLogic(LogicTimings* timings)
report_time(LogicTimePart::NetworkFlush);
gCurrentTicks++;
gScenarioTicks++;
gSavedAge++;
#ifdef ENABLE_SCRIPTING

View File

@ -9,6 +9,7 @@
#include "Weather.h"
#include "../Game.h"
#include "../config/Config.h"
#include "../interface/Viewport.h"
#include "../ride/TrackDesign.h"
@ -77,15 +78,15 @@ void DrawWeather(rct_drawpixelinfo* dpi, IWeatherDrawer* weatherDrawer)
*/
static void DrawLightRain(IWeatherDrawer* weatherDrawer, int32_t left, int32_t top, int32_t width, int32_t height)
{
int32_t x_start = -static_cast<int32_t>(gScenarioTicks) + 8;
int32_t y_start = (gScenarioTicks * 3) + 7;
int32_t x_start = -static_cast<int32_t>(gCurrentTicks) + 8;
int32_t y_start = (gCurrentTicks * 3) + 7;
y_start = -y_start;
x_start += left;
y_start += top;
weatherDrawer->Draw(left, top, width, height, x_start, y_start, RainPattern);
x_start = -static_cast<int32_t>(gScenarioTicks) + 0x18;
y_start = (gScenarioTicks * 4) + 0x0D;
x_start = -static_cast<int32_t>(gCurrentTicks) + 0x18;
y_start = (gCurrentTicks * 4) + 0x0D;
y_start = -y_start;
x_start += left;
y_start += top;
@ -98,29 +99,29 @@ static void DrawLightRain(IWeatherDrawer* weatherDrawer, int32_t left, int32_t t
*/
static void DrawHeavyRain(IWeatherDrawer* weatherDrawer, int32_t left, int32_t top, int32_t width, int32_t height)
{
int32_t x_start = -static_cast<int32_t>(gScenarioTicks);
int32_t y_start = gScenarioTicks * 5;
int32_t x_start = -static_cast<int32_t>(gCurrentTicks);
int32_t y_start = gCurrentTicks * 5;
y_start = -y_start;
x_start += left;
y_start += top;
weatherDrawer->Draw(left, top, width, height, x_start, y_start, RainPattern);
x_start = -static_cast<int32_t>(gScenarioTicks) + 0x10;
y_start = (gScenarioTicks * 6) + 5;
x_start = -static_cast<int32_t>(gCurrentTicks) + 0x10;
y_start = (gCurrentTicks * 6) + 5;
y_start = -y_start;
x_start += left;
y_start += top;
weatherDrawer->Draw(left, top, width, height, x_start, y_start, RainPattern);
x_start = -static_cast<int32_t>(gScenarioTicks) + 8;
y_start = (gScenarioTicks * 3) + 7;
x_start = -static_cast<int32_t>(gCurrentTicks) + 8;
y_start = (gCurrentTicks * 3) + 7;
y_start = -y_start;
x_start += left;
y_start += top;
weatherDrawer->Draw(left, top, width, height, x_start, y_start, RainPattern);
x_start = -static_cast<int32_t>(gScenarioTicks) + 0x18;
y_start = (gScenarioTicks * 4) + 0x0D;
x_start = -static_cast<int32_t>(gCurrentTicks) + 0x18;
y_start = (gCurrentTicks * 4) + 0x0D;
y_start = -y_start;
x_start += left;
y_start += top;
@ -129,9 +130,9 @@ static void DrawHeavyRain(IWeatherDrawer* weatherDrawer, int32_t left, int32_t t
static void DrawLightSnow(IWeatherDrawer* weatherDrawer, int32_t left, int32_t top, int32_t width, int32_t height)
{
const uint32_t t = gScenarioTicks / 2;
const uint32_t t = gCurrentTicks / 2;
const int32_t negT = -static_cast<int32_t>(t);
const double cosTick = static_cast<double>(gScenarioTicks) * 0.05;
const double cosTick = static_cast<double>(gCurrentTicks) * 0.05;
int32_t x_start = negT + 1 + (cos(1.0 + cosTick) * 6);
int32_t y_start = t + 1;
@ -150,29 +151,29 @@ static void DrawLightSnow(IWeatherDrawer* weatherDrawer, int32_t left, int32_t t
static void DrawHeavySnow(IWeatherDrawer* weatherDrawer, int32_t left, int32_t top, int32_t width, int32_t height)
{
int32_t x_start = -static_cast<int32_t>(gScenarioTicks * 3) + 1;
int32_t y_start = gScenarioTicks + 23;
int32_t x_start = -static_cast<int32_t>(gCurrentTicks * 3) + 1;
int32_t y_start = gCurrentTicks + 23;
y_start = -y_start;
x_start += left;
y_start += top;
weatherDrawer->Draw(left, top, width, height, x_start, y_start, SnowPattern);
x_start = -static_cast<int32_t>(gScenarioTicks * 4) + 6;
y_start = gScenarioTicks + 5;
x_start = -static_cast<int32_t>(gCurrentTicks * 4) + 6;
y_start = gCurrentTicks + 5;
y_start = -y_start;
x_start += left;
y_start += top;
weatherDrawer->Draw(left, top, width, height, x_start, y_start, SnowPattern);
x_start = -static_cast<int32_t>(gScenarioTicks * 2) + 11;
y_start = gScenarioTicks + 18;
x_start = -static_cast<int32_t>(gCurrentTicks * 2) + 11;
y_start = gCurrentTicks + 18;
y_start = -y_start;
x_start += left;
y_start += top;
weatherDrawer->Draw(left, top, width, height, x_start, y_start, SnowPattern);
x_start = -static_cast<int32_t>(gScenarioTicks * 3) + 17;
y_start = gScenarioTicks + 11;
x_start = -static_cast<int32_t>(gCurrentTicks * 3) + 17;
y_start = gCurrentTicks + 11;
y_start = -y_start;
x_start += left;
y_start += top;

View File

@ -61,7 +61,6 @@ void date_reset()
{
gDateMonthsElapsed = 0;
gDateMonthTicks = 0;
gCurrentTicks = 0;
gCurrentRealTimeTicks = 0;
}

View File

@ -315,7 +315,7 @@ void research_update()
return;
}
if (gScenarioTicks % 32 != 0)
if (gCurrentTicks % 32 != 0)
{
return;
}

View File

@ -989,7 +989,7 @@ void Guest::Tick128UpdateGuest(int32_t index)
if (State == PeepState::Walking && !OutsideOfPark && !(PeepFlags & PEEP_FLAGS_LEAVING_PARK) && GuestNumRides == 0
&& GuestHeadingToRideId == RIDE_ID_NULL)
{
uint32_t time_duration = gScenarioTicks - ParkEntryTime;
uint32_t time_duration = gCurrentTicks - ParkEntryTime;
time_duration /= 2048;
if (time_duration >= 5)
@ -5583,7 +5583,7 @@ void Guest::UpdateEnteringPark()
SetState(PeepState::Falling);
OutsideOfPark = false;
ParkEntryTime = gScenarioTicks;
ParkEntryTime = gCurrentTicks;
increment_guests_in_park();
decrement_guests_heading_for_park();
auto intent = Intent(INTENT_ACTION_UPDATE_GUEST_COUNT);

View File

@ -2091,7 +2091,7 @@ namespace RCT1
void ImportParkFlags()
{
// Date and srand
gScenarioTicks = _s4.ticks;
gCurrentTicks = _s4.ticks;
scenario_rand_seed(_s4.random_a, _s4.random_b);
gDateMonthsElapsed = static_cast<int32_t>(_s4.month);
gDateMonthTicks = _s4.day;

View File

@ -316,7 +316,7 @@ void S6Exporter::Export()
_s6.elapsed_months = static_cast<uint16_t>(gDateMonthsElapsed);
_s6.current_day = gDateMonthTicks;
_s6.scenario_ticks = gScenarioTicks;
_s6.scenario_ticks = gCurrentTicks;
auto state = scenario_rand_state();
_s6.scenario_srand_0 = state.s0;

View File

@ -225,7 +225,7 @@ public:
gDateMonthsElapsed = static_cast<int32_t>(_s6.elapsed_months);
gDateMonthTicks = _s6.current_day;
gScenarioTicks = _s6.scenario_ticks;
gCurrentTicks = _s6.game_ticks_1;
scenario_rand_seed(_s6.scenario_srand_0, _s6.scenario_srand_1);
@ -401,7 +401,6 @@ public:
String::Set(gScenarioFileName, sizeof(gScenarioFileName), _s6.scenario_filename);
}
std::memcpy(gScenarioExpansionPacks, _s6.saved_expansion_pack_names, sizeof(_s6.saved_expansion_pack_names));
gCurrentTicks = _s6.game_ticks_1;
gCurrentRealTimeTicks = 0;
ImportRides();
@ -480,6 +479,7 @@ public:
research_determine_first_of_type();
}
void FixLandOwnership() const
{
if (String::Equals(_s6.scenario_filename, "Europe - European Cultural Festival.SC6"))
@ -1727,6 +1727,15 @@ template<> void S6Importer::ImportEntity<Vehicle>(const RCT12SpriteBase& baseSrc
dst->IsCrashedVehicle = src->flags & RCT12_SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE;
}
static uint32_t AdjustScenarioToCurrentTicks(const rct_s6_data& s6, uint32_t tick)
{
// Previously gScenarioTicks was used as a time point, now it's gCurrentTicks.
// gCurrentTicks and gScenarioTicks are now exported as the same, older saves that have a different
// scenario tick must account for the difference between the two.
uint32_t ticksElapsed = s6.scenario_ticks - tick;
return s6.game_ticks_1 - ticksElapsed;
}
template<> void S6Importer::ImportEntity<Guest>(const RCT12SpriteBase& baseSrc)
{
auto dst = CreateEntityAt<Guest>(baseSrc.sprite_index);
@ -1759,7 +1768,7 @@ template<> void S6Importer::ImportEntity<Guest>(const RCT12SpriteBase& baseSrc)
dst->TimeInQueue = src->time_in_queue;
dst->CashInPocket = src->cash_in_pocket;
dst->CashSpent = src->cash_spent;
dst->ParkEntryTime = src->park_entry_time;
dst->ParkEntryTime = AdjustScenarioToCurrentTicks(_s6, src->park_entry_time);
dst->RejoinQueueTimeout = src->rejoin_queue_timeout;
dst->PreviousRide = RCT12RideIdToOpenRCT2RideId(src->previous_ride);
dst->PreviousRideTimeOut = src->previous_ride_time_out;
@ -1809,6 +1818,7 @@ template<> void S6Importer::ImportEntity<Staff>(const RCT12SpriteBase& baseSrc)
dst->AssignedStaffType = StaffType(src->staff_type);
dst->MechanicTimeSinceCall = src->mechanic_time_since_call;
dst->HireDate = src->park_entry_time;
dst->StaffId = src->staff_id;
dst->StaffOrders = src->staff_orders;
@ -1927,7 +1937,7 @@ template<> void S6Importer::ImportEntity<Litter>(const RCT12SpriteBase& baseSrc)
auto src = static_cast<const RCT12SpriteLitter*>(&baseSrc);
ImportEntityCommonProperties(dst, src);
dst->SubType = Litter::Type(src->type);
dst->creationTick = src->creationTick;
dst->creationTick = AdjustScenarioToCurrentTicks(_s6, src->creationTick);
}
void S6Importer::ImportEntity(const RCT12SpriteBase& src)

View File

@ -1885,7 +1885,7 @@ static void ride_measurement_update(Ride& ride, RideMeasurement& measurement)
gForces.VerticalG = std::clamp(gForces.VerticalG / 8, -127, 127);
gForces.LateralG = std::clamp(gForces.LateralG / 8, -127, 127);
if (gScenarioTicks & 1)
if (gCurrentTicks & 1)
{
gForces.VerticalG = (gForces.VerticalG + measurement.vertical[measurement.current_item]) / 2;
gForces.LateralG = (gForces.LateralG + measurement.lateral[measurement.current_item]) / 2;
@ -1898,7 +1898,7 @@ static void ride_measurement_update(Ride& ride, RideMeasurement& measurement)
auto velocity = std::min(std::abs((vehicle->velocity * 5) >> 16), 255);
auto altitude = std::min(vehicle->z / 8, 255);
if (gScenarioTicks & 1)
if (gCurrentTicks & 1)
{
velocity = (velocity + measurement.velocity[measurement.current_item]) / 2;
altitude = (altitude + measurement.altitude[measurement.current_item]) / 2;
@ -1907,7 +1907,7 @@ static void ride_measurement_update(Ride& ride, RideMeasurement& measurement)
measurement.velocity[measurement.current_item] = velocity & 0xFF;
measurement.altitude[measurement.current_item] = altitude & 0xFF;
if (gScenarioTicks & 1)
if (gCurrentTicks & 1)
{
measurement.current_item++;
measurement.num_items = std::max(measurement.num_items, measurement.current_item);
@ -2010,7 +2010,7 @@ std::pair<RideMeasurement*, OpenRCT2String> Ride::GetMeasurement()
assert(measurement != nullptr);
}
measurement->last_use_tick = gScenarioTicks;
measurement->last_use_tick = gCurrentTicks;
if (measurement->flags & 1)
{
return { measurement.get(), { STR_EMPTY, {} } };

View File

@ -9,6 +9,7 @@
#include "TrackPaint.h"
#include "../Game.h"
#include "../config/Config.h"
#include "../drawing/Drawing.h"
#include "../drawing/LightFX.h"
@ -2048,7 +2049,7 @@ void track_paint_util_left_quarter_turn_1_tile_tunnel(
void track_paint_util_spinning_tunnel_paint(paint_session* session, int8_t thickness, int16_t height, Direction direction)
{
int32_t frame = gScenarioTicks >> 2 & 3;
int32_t frame = gCurrentTicks >> 2 & 3;
uint32_t colourFlags = session->TrackColours[SCHEME_SUPPORTS];
uint32_t colourFlags2 = session->TrackColours[SCHEME_TRACK];

View File

@ -676,7 +676,7 @@ static void paint_river_rapids_track_waterfall(
{
uint32_t imageId;
uint16_t frameNum = (gScenarioTicks / 2) & 7;
uint16_t frameNum = (gCurrentTicks / 2) & 7;
if (direction & 1)
{
@ -739,7 +739,7 @@ static void paint_river_rapids_track_rapids(
{
uint32_t imageId;
uint16_t frameNum = (gScenarioTicks / 2) & 7;
uint16_t frameNum = (gCurrentTicks / 2) & 7;
if (direction & 1)
{
@ -790,7 +790,7 @@ static void paint_river_rapids_track_whirlpool(
{
uint32_t imageId;
uint8_t frameNum = (gScenarioTicks / 4) % 16;
uint8_t frameNum = (gCurrentTicks / 4) % 16;
if (direction & 1)
{

View File

@ -68,7 +68,6 @@ bool gFirstTimeSaving = true;
uint16_t gSavedAge;
uint32_t gLastAutoSaveUpdate = 0;
uint32_t gScenarioTicks;
random_engine_t gScenarioRand;
Objective gScenarioObjective;

View File

@ -149,7 +149,6 @@ static constexpr money64 COMPANY_VALUE_ON_FAILED_OBJECTIVE = 0x8000000000000001;
extern const rct_string_id ScenarioCategoryStringIds[SCENARIO_CATEGORY_COUNT];
extern uint32_t gScenarioTicks;
extern random_engine_t gScenarioRand;
extern Objective gScenarioObjective;

View File

@ -1,6 +1,7 @@
#include "Litter.h"
#include "../Cheats.h"
#include "../Game.h"
#include "../localisation/StringIds.h"
#include "../scenario/Scenario.h"
#include "EntityList.h"
@ -77,7 +78,7 @@ void Litter::Create(const CoordsXYZD& litterPos, Type type)
litter->sprite_height_positive = 3;
litter->SubType = type;
litter->MoveTo(offsetLitterPos);
litter->creationTick = gScenarioTicks;
litter->creationTick = gCurrentTicks;
}
/**

View File

@ -468,7 +468,7 @@ int32_t Park::CalculateParkRating() const
for (auto litter : EntityList<Litter>())
{
// Ignore recently dropped litter
if (litter->creationTick - gScenarioTicks >= 7680)
if (litter->creationTick - gCurrentTicks >= 7680)
{
litterCount++;
}