OpenLoco/src/OpenLoco/Scenario.h

116 lines
3.2 KiB
C++

#pragma once
#include "Localisation/FormatArguments.hpp"
#include <cstdint>
namespace OpenLoco::Scenario
{
enum flags
{
landscape_generation_done = (1 << 0),
hills_edge_of_map = (1 << 1),
};
enum industry_flags
{
disallow_industries_close_down = (1 << 0),
disallow_industries_start_up = (1 << 1),
};
enum objective_flags : uint8_t
{
be_top_company = (1 << 0),
be_within_top_three_companies = (1 << 1),
within_time_limit = (1 << 2),
flag_3 = (1 << 3),
flag_4 = (1 << 4),
};
enum objective_type : uint8_t
{
company_value,
vehicle_profit,
performance_index,
cargo_delivery,
};
enum class Season : uint8_t
{
autumn = 0,
winter = 1,
spring = 2,
summer = 3,
};
// NB: min_year has been changed to 1800 in OpenLoco; Locomotion uses 1900.
constexpr uint16_t min_year = 1800;
constexpr uint16_t max_year = 2100;
constexpr uint8_t min_objective_year_limit = 2;
constexpr uint8_t max_objective_year_limit = 100;
constexpr uint32_t min_objective_company_value = 100000;
constexpr uint32_t max_objective_company_value = 200000000;
constexpr uint32_t min_objective_monthly_profit_from_vehicles = 1000;
constexpr uint32_t max_objective_monthly_profit_from_vehicles = 1000000;
constexpr uint32_t min_objective_performance_index = 10;
constexpr uint32_t max_objective_performance_index = 100;
constexpr uint32_t min_objective_delivered_cargo = 100;
constexpr uint32_t max_objective_delivered_cargo = 200000000;
constexpr uint8_t min_competing_companies = 0;
constexpr uint8_t max_competing_companies = 14;
constexpr uint8_t min_competitor_start_delay = 0;
constexpr uint8_t max_competitor_start_delay = 240;
constexpr uint16_t min_start_loan_units = 50;
constexpr uint16_t max_start_loan_units = 1250;
constexpr uint16_t min_loan_size_units = 50;
constexpr uint16_t max_loan_size_units = 5000;
constexpr uint16_t min_loan_interest_units = 5;
constexpr uint16_t max_loan_interest_units = 25;
constexpr uint8_t min_sea_level = 0;
constexpr uint8_t max_sea_level = 28;
constexpr uint8_t min_base_land_height = 0;
constexpr uint8_t max_base_land_height = 15;
constexpr uint8_t min_hill_density = 0;
constexpr uint8_t max_hill_density = 100;
constexpr uint16_t min_num_forests = 0;
constexpr uint16_t max_num_forests = 990;
constexpr uint8_t min_forest_radius = 4;
constexpr uint8_t max_forest_radius = 40;
constexpr uint8_t min_forest_density = 1;
constexpr uint8_t max_forest_density = 7;
constexpr uint16_t min_num_trees = 0;
constexpr uint16_t max_num_trees = 20000;
constexpr uint8_t min_altitude_trees = 0;
constexpr uint8_t max_altitude_trees = 40;
Season nextSeason(Season season);
void initialiseSnowLine();
void updateSnowLine(int32_t currentDayOfYear);
void reset();
void sub_4748D4();
void eraseLandscape();
void generateLandscape();
void initialiseDate(uint16_t year);
void start(const char* filename = nullptr);
void registerHooks();
void formatChallengeArguments(FormatArguments& args);
void sub_46115C();
}