From 4045d0caab0721e1c838030d3e0486f5499fb64d Mon Sep 17 00:00:00 2001 From: J. Tang Date: Thu, 2 Dec 2010 00:06:55 -0500 Subject: [PATCH 2/6] Declare new global variables for disaster settings. Modify Advanced Settings window to let user fine-tune frequency of disasters. Signed-off-by: J. Tang --- src/aircraft_cmd.cpp | 4 ++-- src/lang/english.txt | 45 ++++++++++++++++++++++++++++++++++++++++++++- src/settings_gui.cpp | 17 ++++++++++++++++- src/settings_type.h | 21 ++++++++++++++++++++- src/table/settings.h | 12 +++++++++--- 5 files changed, 91 insertions(+), 8 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 9afad2f..f815ccc 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1160,12 +1160,12 @@ static void CrashAirplane(Aircraft *v) */ static void MaybeCrashAirplane(Aircraft *v) { - if (_settings_game.vehicle.plane_crashes == 0) return; + if (_settings_game.disaster.plane_crashes == 0) return; Station *st = Station::Get(v->targetairport); /* FIXME -- MaybeCrashAirplane -> increase crashing chances of very modern airplanes on smaller than AT_METROPOLITAN airports */ - uint32 prob = (0x4000 << _settings_game.vehicle.plane_crashes); + uint32 prob = (0x4000 << _settings_game.disaster.plane_crashes); if ((st->airport.GetFTA()->flags & AirportFTAClass::SHORT_STRIP) && (AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) { diff --git a/src/lang/english.txt b/src/lang/english.txt index 3af722a..ab38270 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1133,10 +1133,51 @@ STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :{LTBLUE}Allow s STR_CONFIG_SETTING_NONUNIFORM_STATIONS :{LTBLUE}Nonuniform stations: {ORANGE}{STRING1} STR_CONFIG_SETTING_FREIGHT_TRAINS :{LTBLUE}Weight multiplier for freight to simulate heavy trains: {ORANGE}{STRING} STR_CONFIG_SETTING_PLANE_SPEED :{LTBLUE}Plane speed factor: {ORANGE}1 / {STRING1} -STR_CONFIG_SETTING_PLANE_CRASHES :{LTBLUE}Number of plane crashes: {ORANGE}{STRING1} +STR_CONFIG_SETTING_PLANE_CRASHES :{LTBLUE}Plane crashes: {ORANGE}{STRING1} STR_CONFIG_SETTING_PLANE_CRASHES_NONE :none STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :reduced STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normal +STR_CONFIG_SETTING_PLANE_CRASHES_FREQUENT :frequent +STR_CONFIG_SETTING_COALMINE_SUBSIDENCE :{LTBLUE}Coal mine accidents: {ORANGE}{STRING1} +STR_CONFIG_SETTING_COALMINE_SUBSIDENCE_NONE :none +STR_CONFIG_SETTING_COALMINE_SUBSIDENCE_REDUCED :reduced +STR_CONFIG_SETTING_COALMINE_SUBSIDENCE_NORMAL :normal +STR_CONFIG_SETTING_COALMINE_SUBSIDENCE_FREQUENT :frequent +STR_CONFIG_SETTING_FACTORY_EXPLOSION :{LTBLUE}Factory explosions: {ORANGE}{STRING1} +STR_CONFIG_SETTING_FACTORY_EXPLOSION_NONE :none +STR_CONFIG_SETTING_FACTORY_EXPLOSION_REDUCED :reduced +STR_CONFIG_SETTING_FACTORY_EXPLOSION_NORMAL :normal +STR_CONFIG_SETTING_FACTORY_EXPLOSION_FREQUENT :frequent +STR_CONFIG_SETTING_REFINERY_EXPLOSION :{LTBLUE}Refinery explosions: {ORANGE}{STRING1} +STR_CONFIG_SETTING_REFINERY_EXPLOSION_NONE :none +STR_CONFIG_SETTING_REFINERY_EXPLOSION_REDUCED :reduced +STR_CONFIG_SETTING_REFINERY_EXPLOSION_NORMAL :normal +STR_CONFIG_SETTING_REFINERY_EXPLOSION_FREQUENT :frequent +STR_CONFIG_SETTING_ZEPPELINER_CRASHES :{LTBLUE}Zeppeliner crashes: {ORANGE}{STRING1} +STR_CONFIG_SETTING_ZEPPELINER_CRASHES_NONE :none +STR_CONFIG_SETTING_ZEPPELINER_CRASHES_REDUCED :reduced +STR_CONFIG_SETTING_ZEPPELINER_CRASHES_NORMAL :normal +STR_CONFIG_SETTING_ZEPPELINER_CRASHES_FREQUENT :frequent +STR_CONFIG_SETTING_SMALL_UFO :{LTBLUE}Small UFO crashes: {ORANGE}{STRING1} +STR_CONFIG_SETTING_SMALL_UFO_NONE :none +STR_CONFIG_SETTING_SMALL_UFO_REDUCED :reduced +STR_CONFIG_SETTING_SMALL_UFO_NORMAL :normal +STR_CONFIG_SETTING_SMALL_UFO_FREQUENT :frequent +STR_CONFIG_SETTING_BIG_UFO :{LTBLUE}Big UFO crashes: {ORANGE}{STRING1} +STR_CONFIG_SETTING_BIG_UFO_NONE :none +STR_CONFIG_SETTING_BIG_UFO_REDUCED :reduced +STR_CONFIG_SETTING_BIG_UFO_NORMAL :normal +STR_CONFIG_SETTING_BIG_UFO_FREQUENT :frequent +STR_CONFIG_SETTING_SMALL_SUB :{LTBLUE}Small submarine sightings: {ORANGE}{STRING1} +STR_CONFIG_SETTING_SMALL_SUB_NONE :none +STR_CONFIG_SETTING_SMALL_SUB_REDUCED :reduced +STR_CONFIG_SETTING_SMALL_SUB_NORMAL :normal +STR_CONFIG_SETTING_SMALL_SUB_FREQUENT :frequent +STR_CONFIG_SETTING_BIG_SUB :{LTBLUE}Big submarine sightings: {ORANGE}{STRING1} +STR_CONFIG_SETTING_BIG_SUB_NONE :none +STR_CONFIG_SETTING_BIG_SUB_REDUCED :reduced +STR_CONFIG_SETTING_BIG_SUB_NORMAL :normal +STR_CONFIG_SETTING_BIG_SUB_FREQUENT :frequent STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :{LTBLUE}Allow drive-through road stops on town owned roads: {ORANGE}{STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :{LTBLUE}Allow drive-through road stops on roads owned by competitors: {ORANGE}{STRING} STR_CONFIG_SETTING_ADJACENT_STATIONS :{LTBLUE}Allow building adjacent stations: {ORANGE}{STRING} @@ -1327,6 +1368,7 @@ STR_CONFIG_SETTING_CONSTRUCTION :{ORANGE}Constru STR_CONFIG_SETTING_VEHICLES :{ORANGE}Vehicles STR_CONFIG_SETTING_STATIONS :{ORANGE}Stations STR_CONFIG_SETTING_ECONOMY :{ORANGE}Economy +STR_CONFIG_SETTING_DISASTERS :{ORANGE}Disasters STR_CONFIG_SETTING_AI :{ORANGE}Competitors STR_CONFIG_SETTING_DISPLAY_OPTIONS :{ORANGE}Display options STR_CONFIG_SETTING_INTERACTION :{ORANGE}Interaction @@ -1431,6 +1473,7 @@ STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Sub-tropical la STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Toyland landscape STR_CHEAT_CHANGE_DATE :{LTBLUE}Change date: {ORANGE}{DATE_SHORT} STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING1} +STR_CHEAT_DISASTERS :{LTBLUE}Enable changing disaster internal values: {ORANGE}{STRING1} # Livery window STR_LIVERY_CAPTION :{WHITE}New Colour Scheme diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index c0f75b9..e7178ae 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1462,7 +1462,6 @@ static SettingEntry _settings_vehicles[] = { SettingEntry("vehicle.max_aircraft"), SettingEntry("vehicle.max_ships"), SettingEntry("vehicle.plane_speed"), - SettingEntry("vehicle.plane_crashes"), SettingEntry("order.timetabling"), SettingEntry("vehicle.dynamic_engines"), SettingEntry("vehicle.roadveh_acceleration_model"), @@ -1472,12 +1471,28 @@ static SettingEntry _settings_vehicles[] = { /** Vehicles sub-page */ static SettingsPage _settings_vehicles_page = {_settings_vehicles, lengthof(_settings_vehicles)}; +static SettingEntry _settings_disasters[] = { + SettingEntry("disaster.plane_crashes"), + SettingEntry("disaster.coalmine_subsidence"), + SettingEntry("disaster.factory_explosion"), + SettingEntry("disaster.refinery_explosion"), + SettingEntry("disaster.zeppeliner_crash"), + SettingEntry("disaster.small_ufo_landing"), + SettingEntry("disaster.big_ufo_landing"), + SettingEntry("disaster.small_submarine_sighting"), + SettingEntry("disaster.big_submarine_sighting") +}; + +/** Disasters sub-page */ +static SettingsPage _settings_disasters_page = {_settings_disasters, lengthof(_settings_disasters)}; + static SettingEntry _settings_main[] = { SettingEntry(&_settings_ui_page, STR_CONFIG_SETTING_GUI), SettingEntry(&_settings_construction_page, STR_CONFIG_SETTING_CONSTRUCTION), SettingEntry(&_settings_vehicles_page, STR_CONFIG_SETTING_VEHICLES), SettingEntry(&_settings_stations_page, STR_CONFIG_SETTING_STATIONS), SettingEntry(&_settings_economy_page, STR_CONFIG_SETTING_ECONOMY), + SettingEntry(&_settings_disasters_page, STR_CONFIG_SETTING_DISASTERS), SettingEntry(&_settings_ai_page, STR_CONFIG_SETTING_AI), }; diff --git a/src/settings_type.h b/src/settings_type.h index dc66e86..b796b8c 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -348,7 +348,6 @@ struct VehicleSettings { bool never_expire_vehicles; ///< never expire vehicles byte extend_vehicle_life; ///< extend vehicle life by this many years byte road_side; ///< the side of the road vehicles drive on - uint8 plane_crashes; ///< number of plane crashes, 0 = none, 1 = reduced, 2 = normal }; /** Settings related to the economy. */ @@ -385,6 +384,25 @@ struct StationSettings { byte station_spread; ///< amount a station may spread }; +/** Settings related to vehicle, industrial, and other disasters. For + each setting, there are four passible states: 0 = none, 1 = + reduced, 2 = normal, 3 = frequent. */ +struct DisasterSettings { + /* natural disasters */ + /* vehicle disasters */ + uint8 plane_crashes; ///< how often a plane crashes during landing, based upon type of plane and size of airport + /* industry disasters */ + uint8 coalmine_subsidence; ///< coal mine collapse, in a random direction + uint8 factory_explosion; ///< factory explosion from helicopter strike + uint8 refinery_explosion; ///< refinery explosion from fighter strike + /* other disasters */ + uint8 zeppeliner_crash; ///< zeppeliner flies around, possibly crashing at a small airport + uint8 small_ufo_landing; ///< small ufo flies randomly, then blow up a road vehicle + uint8 big_ufo_landing; ///< large ufo lands on a railway, and then is shot down + uint8 small_submarine_sighting; ///< small sub that randomly floats around + uint8 big_submarine_sighting; ///< large sub that randomly floats around +}; + /** Default settings for vehicles. */ struct VehicleDefaultSettings { bool servint_ispercent; ///< service intervals are in percents @@ -416,6 +434,7 @@ struct GameSettings { EconomySettings economy; ///< settings to change the economy StationSettings station; ///< settings related to station management LocaleSettings locale; ///< settings related to used currency/unit system in the current game + DisasterSettings disaster; ///< settings related to disasters }; /** All settings that are only important for the local client. */ diff --git a/src/table/settings.h b/src/table/settings.h index bc37d88..ebe9e97 100644 --- a/src/table/settings.h +++ b/src/table/settings.h @@ -417,8 +417,15 @@ const SettingDesc _settings[] = { SDT_CONDBOOL(GameSettings, order.timetabling, 67, SL_MAX_VERSION, 0, 0, true, STR_CONFIG_SETTING_TIMETABLE_ALLOW, NULL), SDT_CONDVAR(GameSettings, vehicle.plane_speed, SLE_UINT8, 90, SL_MAX_VERSION, 0,NN, 4, 1, 4, 0, STR_CONFIG_SETTING_PLANE_SPEED, NULL), SDT_CONDBOOL(GameSettings, vehicle.dynamic_engines, 95, SL_MAX_VERSION, 0,NN, true, STR_CONFIG_SETTING_DYNAMIC_ENGINES, ChangeDynamicEngines), - SDT_CONDVAR(GameSettings, vehicle.plane_crashes, SLE_UINT8,138, SL_MAX_VERSION, 0,MS, 2, 0, 2, 1, STR_CONFIG_SETTING_PLANE_CRASHES, NULL), - + SDT_CONDVAR(GameSettings, disaster.plane_crashes, SLE_UINT8,138, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_PLANE_CRASHES, NULL), + SDT_CONDVAR(GameSettings, disaster.coalmine_subsidence, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_COALMINE_SUBSIDENCE, NULL), + SDT_CONDVAR(GameSettings, disaster.factory_explosion, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_FACTORY_EXPLOSION, NULL), + SDT_CONDVAR(GameSettings, disaster.refinery_explosion, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_REFINERY_EXPLOSION, NULL), + SDT_CONDVAR(GameSettings, disaster.zeppeliner_crash, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_ZEPPELINER_CRASHES, NULL), + SDT_CONDVAR(GameSettings, disaster.small_ufo_landing, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_SMALL_UFO, NULL), + SDT_CONDVAR(GameSettings, disaster.big_ufo_landing, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_BIG_UFO, NULL), + SDT_CONDVAR(GameSettings, disaster.small_submarine_sighting, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_SMALL_SUB, NULL), + SDT_CONDVAR(GameSettings, disaster.big_submarine_sighting, SLE_UINT8,154, SL_MAX_VERSION, 0,MS, 2, 0, 3, 1, STR_CONFIG_SETTING_BIG_SUB, NULL), SDT_BOOL(GameSettings, station.join_stations, 0, 0, true, STR_CONFIG_SETTING_JOINSTATIONS, NULL), SDTC_CONDBOOL( gui.sg_full_load_any, 22, 92, 0, 0, true, STR_NULL, NULL), SDT_BOOL(GameSettings, order.improved_load, 0,NN, true, STR_CONFIG_SETTING_IMPROVEDLOAD, NULL), @@ -675,7 +682,6 @@ const SettingDesc _settings[] = { /* We might need to emulate a right mouse button on mac */ SDTC_VAR(gui.right_mouse_btn_emulation, SLE_UINT8, S, MS, 0, 0, 2, 0, STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU, NULL), #endif - SDT_END() }; -- 1.7.3.2