diff --git a/maps/mountain_fortress_v3/functions.lua b/maps/mountain_fortress_v3/functions.lua index 71121023..d4d3f18a 100644 --- a/maps/mountain_fortress_v3/functions.lua +++ b/maps/mountain_fortress_v3/functions.lua @@ -763,6 +763,21 @@ function Public.remove_offline_players() end end +local function calc_players() + local players = game.connected_players + local total = 0 + for i = 1, #players do + local player = players[i] + if player.afk_time < 36000 then + total = total + 1 + end + end + if total <= 0 then + total = 1 + end + return total +end + function Public.set_difficulty() local game_lost = WPT.get('game_lost') if game_lost then @@ -773,6 +788,10 @@ function Public.set_difficulty() local collapse_amount = WPT.get('collapse_amount') local collapse_speed = WPT.get('collapse_speed') local player_count = #game.connected_players + local check_afk_players = WPT.get('check_afk_players') + if check_afk_players then + player_count = calc_players() + end if not Diff.difficulty_vote_value then Diff.difficulty_vote_value = 0.1 end @@ -786,7 +805,8 @@ function Public.set_difficulty() -- threat gain / wave wave_defense_table.threat_gain_multiplier = 1.2 + player_count * Diff.difficulty_vote_value * 0.1 - local amount = player_count * 0.40 + 2 + -- local amount = player_count * 0.40 + 2 -- too high? + local amount = player_count * 0.25 + 2 amount = floor(amount) if amount > 20 then amount = 20 @@ -818,9 +838,14 @@ end function Public.render_direction(surface) local counter = WPT.get('soft_reset_counter') + local winter_mode = WPT.get('winter_mode') + local text = 'Welcome to Mountain Fortress v3!' + if winter_mode then + text = 'Welcome to Wintery Mountain Fortress v3!' + end if counter then rendering.draw_text { - text = 'Welcome to Mountain Fortress v3!\nRun: ' .. counter, + text = text .. '\nRun: ' .. counter, surface = surface, target = {-0, 10}, color = {r = 0.98, g = 0.66, b = 0.22}, @@ -831,7 +856,7 @@ function Public.render_direction(surface) } else rendering.draw_text { - text = 'Welcome to Mountain Fortress v3!', + text = text, surface = surface, target = {-0, 10}, color = {r = 0.98, g = 0.66, b = 0.22}, diff --git a/maps/mountain_fortress_v3/generate.lua b/maps/mountain_fortress_v3/generate.lua index 06653e23..33608201 100644 --- a/maps/mountain_fortress_v3/generate.lua +++ b/maps/mountain_fortress_v3/generate.lua @@ -15,6 +15,13 @@ local queue_task = Task.queue_task local tiles_per_call = 8 local total_calls = ceil(1024 / tiles_per_call) local regen_decoratives = false +local wintery_type = { + ['simple-entity'] = true, + ['tree'] = true, + ['fish'] = true, + ['locomotive'] = true, + ['cargo-wagon'] = true +} -- Set to false by modules that want to control the on_chunk_generated event themselves. Public.enable_register_events = true @@ -266,6 +273,44 @@ local function do_place_buildings(data) end end +local function wintery(ent, extra_lights) + local winter_mode = WPT.get('winter_mode') + if not winter_mode then + return false + end + local colors = {{255, 0, 0}, {0, 255, 0}, {0, 0, 255}} + local function add_light(e) + local color = colors[math.random(1, 3)] + local scale = extra_lights or 1 + rendering.draw_light( + { + sprite = 'utility/light_small', + orientation = 1, + scale = scale, + intensity = 1, + minimum_darkness = 0, + oriented = false, + color = color, + target = e, + target_offset = {0, -0.5}, + surface = e.surface + } + ) + end + if not (ent and ent.valid) then + return + end + if wintery_type[ent.type] then + if ent.type == 'simple-entity' then + if random(1, 8) ~= 1 then + return + end + end + add_light(ent) + end + return true +end + local function do_place_entities(data) local surface = data.surface local entity @@ -274,6 +319,7 @@ local function do_place_entities(data) if e.collision then if surface.can_place_entity(e) then entity = surface.create_entity(e) + wintery(entity) if entity and e.direction then entity.direction = e.direction end @@ -297,6 +343,7 @@ local function do_place_entities(data) end else entity = surface.create_entity(e) + wintery(entity) if entity and e.direction then entity.direction = e.direction end @@ -528,4 +575,6 @@ end Event.add(defines.events.on_chunk_generated, on_chunk) +Public.wintery = wintery + return Public diff --git a/maps/mountain_fortress_v3/locomotive.lua b/maps/mountain_fortress_v3/locomotive.lua index a1ce0cec..5ee3bef0 100644 --- a/maps/mountain_fortress_v3/locomotive.lua +++ b/maps/mountain_fortress_v3/locomotive.lua @@ -1,6 +1,7 @@ local Event = require 'utils.event' --local Power = require 'maps.mountain_fortress_v3.power' local Market = require 'maps.mountain_fortress_v3.basic_markets' +local Generate = require 'maps.mountain_fortress_v3.generate' local ICW = require 'maps.mountain_fortress_v3.icw.main' local WPT = require 'maps.mountain_fortress_v3.table' local WD = require 'modules.wave_defense.table' @@ -1840,35 +1841,42 @@ function Public.locomotive_spawn(surface, position) this.locomotive_cargo = surface.create_entity({name = 'cargo-wagon', position = {position.x, position.y + 3}, force = 'player'}) this.locomotive_cargo.get_inventory(defines.inventory.cargo_wagon).insert({name = 'raw-fish', count = 8}) - rendering.draw_light( - { - sprite = 'utility/light_medium', - scale = 5.5, - intensity = 1, - minimum_darkness = 0, - oriented = true, - color = {255, 255, 255}, - target = this.locomotive, - surface = surface, - visible = true, - only_in_alt_mode = false - } - ) + local winter_mode_locomotive = Generate.wintery(this.locomotive, 5.5) + if not winter_mode_locomotive then + rendering.draw_light( + { + sprite = 'utility/light_medium', + scale = 5.5, + intensity = 1, + minimum_darkness = 0, + oriented = true, + color = {255, 255, 255}, + target = this.locomotive, + surface = surface, + visible = true, + only_in_alt_mode = false + } + ) + end - rendering.draw_light( - { - sprite = 'utility/light_medium', - scale = 5.5, - intensity = 1, - minimum_darkness = 0, - oriented = true, - color = {255, 255, 255}, - target = this.locomotive_cargo, - surface = surface, - visible = true, - only_in_alt_mode = false - } - ) + local winter_mode_cargo = Generate.wintery(this.locomotive_cargo, 5.5) + + if not winter_mode_cargo then + rendering.draw_light( + { + sprite = 'utility/light_medium', + scale = 5.5, + intensity = 1, + minimum_darkness = 0, + oriented = true, + color = {255, 255, 255}, + target = this.locomotive_cargo, + surface = surface, + visible = true, + only_in_alt_mode = false + } + ) + end local data = { surface = surface, diff --git a/maps/mountain_fortress_v3/main.lua b/maps/mountain_fortress_v3/main.lua index 4b1e0d0f..abe46fb4 100644 --- a/maps/mountain_fortress_v3/main.lua +++ b/maps/mountain_fortress_v3/main.lua @@ -134,6 +134,10 @@ function Public.reset_map() local surface = game.surfaces[this.active_surface_index] + if this.winter_mode then + surface.daytime = 0.45 + end + Explosives.set_surface_whitelist({[surface.name] = true}) game.forces.player.set_spawn_position({-27, 25}, surface) diff --git a/maps/mountain_fortress_v3/table.lua b/maps/mountain_fortress_v3/table.lua index 71d43d4d..3c96ebc0 100644 --- a/maps/mountain_fortress_v3/table.lua +++ b/maps/mountain_fortress_v3/table.lua @@ -193,6 +193,8 @@ function Public.reset_table() -- this.void_or_tile = 'lab-dark-2' this.void_or_tile = 'out-of-map' this.validate_spider = {} + this.check_afk_players = true + this.winter_mode = true --!reset player tables for _, player in pairs(this.players) do diff --git a/maps/mountain_fortress_v3/terrain.lua b/maps/mountain_fortress_v3/terrain.lua index 558928ca..419d5631 100644 --- a/maps/mountain_fortress_v3/terrain.lua +++ b/maps/mountain_fortress_v3/terrain.lua @@ -2427,6 +2427,11 @@ Event.add( return end + local winter_mode = WPT.get('winter_mode') + if winter_mode then + rendering.draw_sprite({sprite = "tile/lab-white", x_scale = 32, y_scale = 32, target = left_top, surface = surface, tint = {r = 0.6, g = 0.6, b = 0.6, a = 0.6}, render_layer = "ground"}) + end + if left_top.y == -128 and left_top.x == -128 then local pl = WPT.get().locomotive.position for _, entity in pairs(surface.find_entities_filtered({area = {{pl.x - 5, pl.y - 6}, {pl.x + 5, pl.y + 10}}, type = 'simple-entity'})) do diff --git a/modules/rpg/settings.lua b/modules/rpg/settings.lua index d80c97ee..2f1efaf8 100644 --- a/modules/rpg/settings.lua +++ b/modules/rpg/settings.lua @@ -123,7 +123,7 @@ function Public.extra_settings(player) reset_gui_input.tooltip = ({'rpg_settings.not_trusted'}) goto continue end - if rpg_t[player.index].level <= 50 then + if rpg_t[player.index].level < 50 then reset_gui_input.enabled = false reset_gui_input.tooltip = ({'rpg_settings.low_level', 50}) reset_label.tooltip = ({'rpg_settings.low_level', 50}) @@ -157,10 +157,7 @@ function Public.extra_settings(player) magic_pickup_input_style.height = 35 magic_pickup_input_style.vertical_align = 'center' local reach_mod - if - player_modifiers.disabled_modifier[player.index] and - player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus - then + if player_modifiers.disabled_modifier[player.index] and player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus then reach_mod = not player_modifiers.disabled_modifier[player.index].character_item_pickup_distance_bonus else reach_mod = true @@ -187,10 +184,7 @@ function Public.extra_settings(player) movement_speed_input_style.height = 35 movement_speed_input_style.vertical_align = 'center' local speed_mod - if - player_modifiers.disabled_modifier[player.index] and - player_modifiers.disabled_modifier[player.index].character_running_speed_modifier - then + if player_modifiers.disabled_modifier[player.index] and player_modifiers.disabled_modifier[player.index].character_running_speed_modifier then speed_mod = not player_modifiers.disabled_modifier[player.index].character_running_speed_modifier else speed_mod = true @@ -232,7 +226,7 @@ function Public.extra_settings(player) end stone_path_gui_input = create_input_element(stone_path_input, 'boolean', stone_path) - if rpg_t[player.index].level <= 20 then + if rpg_t[player.index].level < 20 then stone_path_gui_input.enabled = false stone_path_gui_input.tooltip = ({'rpg_settings.low_level', 20}) stone_path_label.tooltip = ({'rpg_settings.low_level', 20}) @@ -274,7 +268,7 @@ function Public.extra_settings(player) one_punch_gui_input.enabled = false one_punch_gui_input.tooltip = ({'rpg_settings.one_punch_globally'}) else - if rpg_t[player.index].level <= 30 then + if rpg_t[player.index].level < 30 then one_punch_gui_input.enabled = false one_punch_gui_input.tooltip = ({'rpg_settings.low_level', 30}) else @@ -312,7 +306,7 @@ function Public.extra_settings(player) flame_boots_gui_input = create_input_element(flame_boots_input, 'boolean', flame_mod) if rpg_t[player.index].mana > 50 then - if rpg_t[player.index].level <= 100 then + if rpg_t[player.index].level < 100 then flame_boots_gui_input.enabled = false flame_boots_gui_input.tooltip = ({'rpg_settings.low_level', 100}) flame_boots_label.tooltip = ({'rpg_settings.low_level', 100})