From 3b04bb3887531eaac26ea3d483cf39e95be3e91d Mon Sep 17 00:00:00 2001 From: hanakocz Date: Wed, 4 Dec 2024 21:20:28 +0100 Subject: [PATCH 1/5] Journey fixes for physical position --- locale/en/journey.cfg | 52 +++++++++++++++---------------- maps/journey/functions.lua | 6 ++-- maps/journey/unique_modifiers.lua | 4 +-- 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/locale/en/journey.cfg b/locale/en/journey.cfg index 7d51f9020..73049f280 100644 --- a/locale/en/journey.cfg +++ b/locale/en/journey.cfg @@ -1,26 +1,26 @@ -[journey] -map_info_main_caption=The Journey -map_info_sub_caption=v 1.9 -map_info_text=The selectors in the mothership, allow you to choose a destination.\nWorlds can be rerolled by spending a satellite at the top selector.\nOnce enough players are on a selector, mothership will start traveling.\n\nA teleporter will be deployed, after reaching the target.\nIt is however, only capable of transfering the subjects body.\n\nWorlds will get more difficult with each jump, stacking the chosen modifiers.\nLaunch uranium fuel cells via rocket cargo, to advance to the next world.\nThe tooltips on the top buttons yield informations about the current world.\nIf the journey ends, an admin can fully reset the map via command "/journey-reset".\n\nHow far will the journey lead? - -tooltip_satellite=Satellites stored: __1__ / __2__\nSatellites are used by Mothership to scout for alternative destinations. -tooltip_nuclear_fuel=Emergency Reactors working: __1__ / __2__\n30 Emergency Reactors are usually damaged by Mothership if the current colony is determined to be lost and Mothership has to leave in a hurry.\nIf teleporter is lost and there is no emergency power, the game is over and run resets. -tooltip_fuel=Fuel requirement to advance to next world:\n__1__\n\nNuclear Fuel Cells in Mothership Cargo:\n__2__ -tooltip_delivery=Orbital Station Delivery: __1__ / __2__\nStation pays with one random starting item roll per time threshold.\nTimes: 120min, 240min, 480min, 960min, 1920min, 3840min\nCurrent time: __3__ minutes. - -beacon_hp=HP: __1__/10000 -teleporter=Personal Teleporter - -chunks_delete=Deleting chunks.. __1__ -mothership_format=[font=heading-1][color=255,155,155] [/color][/font][font=default-game][color=200,200,200]__1__[/color][/font] -world=World __1__ | __2__ -world_tooltip=__1__\n\n__2__\nCapsules:\n__3__ -tooltip_modifier=__1__ - __2__%\n -tooltip_capsule= __1__x [item=__2__] -tooltip_capsule2= __1__x [item=__2__]\n - -message_rocket_launched=Launching a rocket with __1__x [item=__2__] at [gps=__3__,__4__,nauvis]. -message_min_players=The minimal amount of players to vote for new world is set to __1__. -message_delivery_done=[img=item/__1__] Orbital Station delivery completed in __2__ minutes, granting __3__ loot rolls! -message_delivered=Delivered from Orbital Station: __2__x [img=item/__1__] added to capsule storage. -cmd_server_restarting=Server is restarting to apply updates to the scenario...Please reconnect in a minute. +[journey] +map_info_main_caption=The Journey +map_info_sub_caption=v 1.9 +map_info_text=The selectors in the mothership, allow you to choose a destination.\nWorlds can be rerolled by spending a satellite at the top selector.\nOnce enough players are on a selector, mothership will start traveling.\n\nA teleporter will be deployed, after reaching the target.\nIt is however, only capable of transfering the subjects body.\n\nWorlds will get more difficult with each jump, stacking the chosen modifiers.\nLaunch uranium fuel cells via rocket cargo, to advance to the next world.\nThe tooltips on the top buttons yield informations about the current world.\nIf the journey ends, an admin can fully reset the map via command "/journey-reset".\n\nHow far will the journey lead? + +tooltip_satellite=Satellites stored: __1__ / __2__\nSatellites are used by Mothership to scout for alternative destinations. +tooltip_nuclear_fuel=Emergency Reactors working: __1__ / __2__\n3 Emergency Reactors are usually damaged by Mothership if the current colony is determined to be lost and Mothership has to leave in a hurry.\nIf teleporter is lost and there is no emergency power, the game is over and run resets. +tooltip_fuel=Fuel requirement to advance to next world:\n__1__\n\nNuclear Fuel Cells in Mothership Cargo:\n__2__ +tooltip_delivery=Orbital Station Delivery: __1__ / __2__\nStation pays with one random starting item roll per time threshold.\nTimes: 120min, 240min, 480min, 960min, 1920min, 3840min\nCurrent time: __3__ minutes. + +beacon_hp=HP: __1__/10000 +teleporter=Personal Teleporter + +chunks_delete=Deleting chunks.. __1__ +mothership_format=[font=heading-1][color=255,155,155] [/color][/font][font=default-game][color=200,200,200]__1__[/color][/font] +world=World __1__ | __2__ +world_tooltip=__1__\n\n__2__\nCapsules:\n__3__ +tooltip_modifier=__1__ - __2__%\n +tooltip_capsule= __1__x [item=__2__] +tooltip_capsule2= __1__x [item=__2__]\n + +message_rocket_launched=Launching a rocket with __1__x [item=__2__] at [gps=__3__,__4__,nauvis]. +message_min_players=The minimal amount of players to vote for new world is set to __1__. +message_delivery_done=[img=item/__1__] Orbital Station delivery completed in __2__ minutes, granting __3__ loot rolls! +message_delivered=Delivered from Orbital Station: __2__x [img=item/__1__] added to capsule storage. +cmd_server_restarting=Server is restarting to apply updates to the scenario...Please reconnect in a minute. diff --git a/maps/journey/functions.lua b/maps/journey/functions.lua index 66fe43cac..e2c198354 100644 --- a/maps/journey/functions.lua +++ b/maps/journey/functions.lua @@ -130,7 +130,7 @@ local function drop_player_items(journey, player) end local surface = player.surface - local spill_blockage = surface.create_entity { name = 'oil-refinery', position = journey.beacon_objective.position or player.position } + local spill_blockage = surface.create_entity { name = 'oil-refinery', position = journey.beacon_objective.position or player.physical_position } for _, define in pairs({ defines.inventory.character_main, defines.inventory.character_guns, defines.inventory.character_ammo, defines.inventory.character_armor, defines.inventory.character_vehicle, defines.inventory.character_trash }) do local inventory = character.get_inventory(define) @@ -138,7 +138,7 @@ local function drop_player_items(journey, player) for i = 1, #inventory, 1 do local slot = inventory[i] if slot.valid and slot.valid_for_read then - surface.spill_item_stack({ position = player.position, stack = slot, enable_looted = true, allow_belts = false }) + surface.spill_item_stack({ position = player.physical_position, stack = slot, enable_looted = true, allow_belts = false }) end end inventory.clear() @@ -1573,7 +1573,7 @@ function Public.teleporters(journey, player) return end local surface = player.surface - local tile = surface.get_tile(player.position) + local tile = surface.get_tile(player.physical_position) if tile.name ~= Constants.teleporter_tile and tile.hidden_tile ~= Constants.teleporter_tile then return end diff --git a/maps/journey/unique_modifiers.lua b/maps/journey/unique_modifiers.lua index c716790eb..6189e9ab8 100644 --- a/maps/journey/unique_modifiers.lua +++ b/maps/journey/unique_modifiers.lua @@ -425,10 +425,10 @@ Public.volcanic = { if surface.index ~= 1 then return end - if solid_tiles[surface.get_tile(player.position.x, player.position.y).name] then + if solid_tiles[surface.get_tile(player.physical_position.x, player.physical_position.y).name] then return end - surface.create_entity({ name = 'fire-flame', position = player.position }) + surface.create_entity({ name = 'fire-flame', position = player.physical_position }) end, on_world_start = function (journey) local surface = game.surfaces.nauvis From cbfd787f6f05ebf199e8f300e3b08a0c2d5d67ec Mon Sep 17 00:00:00 2001 From: hanakocz Date: Wed, 4 Dec 2024 23:09:50 +0100 Subject: [PATCH 2/5] Journey more fixes --- maps/journey/functions.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/maps/journey/functions.lua b/maps/journey/functions.lua index e2c198354..4b43913f2 100644 --- a/maps/journey/functions.lua +++ b/maps/journey/functions.lua @@ -1076,7 +1076,7 @@ function Public.set_world_selectors(journey) Server.to_discord_embed('World ' .. journey.world_number + 1 .. ' selection has started!') Public.set_minimum_to_vote(journey) journey.importing = false - + game.forces.player.set_surface_hidden(game.surfaces.nauvis, true) journey.game_state = 'delete_nauvis_chunks' end @@ -1397,6 +1397,7 @@ function Public.place_teleporter_into_world(journey) surface.request_to_generate_chunks({ x = 0, y = 0 }, 3) surface.force_generate_chunk_requests() place_teleporter(journey, surface, Constants.mothership_teleporter_position, true) + game.forces.player.set_surface_hidden(surface, false) journey.game_state = 'make_it_night' end @@ -1572,8 +1573,11 @@ function Public.teleporters(journey, player) if not player.character.valid then return end - local surface = player.surface + local surface = player.physical_surface local tile = surface.get_tile(player.physical_position) + if not tile or not tile.valid then + return + end if tile.name ~= Constants.teleporter_tile and tile.hidden_tile ~= Constants.teleporter_tile then return end From 02e3fcb229fb13c7bfd5a35715346f81f52e45e3 Mon Sep 17 00:00:00 2001 From: hanakocz Date: Sun, 8 Dec 2024 19:01:23 +0100 Subject: [PATCH 3/5] Journey small fix; --- maps/journey/functions.lua | 4 ++-- maps/journey/main.lua | 4 ++++ maps/journey/unique_modifiers.lua | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/maps/journey/functions.lua b/maps/journey/functions.lua index 4b43913f2..514e2b08d 100644 --- a/maps/journey/functions.lua +++ b/maps/journey/functions.lua @@ -696,7 +696,7 @@ function Public.draw_mothership(journey) only_in_alt_mode = false } - for k, item_name in pairs({ 'arithmetic-combinator', 'constant-combinator', 'decider-combinator', 'programmable-speaker', 'small-lamp', 'substation', 'pipe', 'gate', 'stone-wall', 'transport-belt' }) do + for k, item_name in pairs({ 'arithmetic-combinator', 'constant-combinator', 'decider-combinator', 'selector-combinator', 'display-panel', 'programmable-speaker', 'small-lamp', 'substation', 'pipe', 'gate', 'stone-wall', 'transport-belt' }) do local chest = surface.create_entity({ name = 'infinity-chest', position = { -7 + k, Constants.mothership_radius - 3 }, force = 'player' }) if not chest or not chest.valid then break end chest.set_infinity_container_filter(1, { name = item_name, count = prototypes.item[item_name].stack_size, index = 1 }) @@ -905,7 +905,7 @@ function Public.set_world_selectors(journey) world_selector.modifiers = {} world_selector.bonus_goods = {} world_selector.world_trait = unique_world_traits[k] - world_selector.fuel_requirement = Math.random(25, 50) + world_selector.fuel_requirement = Math.random(5, 10) end local position = Constants.world_selector_areas[k].left_top local texts = world_selector.texts diff --git a/maps/journey/main.lua b/maps/journey/main.lua index d429b3f6f..f8bbc19b1 100644 --- a/maps/journey/main.lua +++ b/maps/journey/main.lua @@ -188,6 +188,10 @@ local function on_rocket_launched(event) end rocket_inventory.clear() rocket_inventory.insert({name = 'space-science-pack', count = 200}) + local force = event.rocket.force + force.technologies['space-science-pack'].researched = true + force.print('[technology=space-science-pack] researched.') + force.play_sound({path = 'utility/research_completed'}) Functions.draw_gui(journey) end diff --git a/maps/journey/unique_modifiers.lua b/maps/journey/unique_modifiers.lua index 6189e9ab8..8dad649ba 100644 --- a/maps/journey/unique_modifiers.lua +++ b/maps/journey/unique_modifiers.lua @@ -764,9 +764,9 @@ Public.crazy_science = { on_research_finished = function (event, journey) local name = 'technology_price_multiplier' local force = event.research.force - journey.world_specials[name] = math.max(0.1, journey.world_specials[name] * 0.95) + journey.world_specials[name] = math.max(0.1, journey.world_specials[name] * 0.96) game.difficulty_settings.technology_price_multiplier = journey.world_modifiers[name] * (journey.world_specials[name] or 1) - force.laboratory_productivity_bonus = math.max(0.1, force.laboratory_productivity_bonus * 0.95) + force.laboratory_productivity_bonus = math.max(0.1, force.laboratory_productivity_bonus * 0.96) end } From d939797fa38a08c5179908b68c15e3c420ba3b5c Mon Sep 17 00:00:00 2001 From: hanakocz Date: Sun, 8 Dec 2024 19:32:52 +0100 Subject: [PATCH 4/5] Journey fix for oceanic + wasteland --- maps/journey/constants.lua | 2 ++ maps/journey/unique_modifiers.lua | 20 +++++--------------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/maps/journey/constants.lua b/maps/journey/constants.lua index 769aa7947..5592781a5 100644 --- a/maps/journey/constants.lua +++ b/maps/journey/constants.lua @@ -203,6 +203,8 @@ Public.build_type_whitelist = { ['arithmetic-combinator'] = true, ['constant-combinator'] = true, ['decider-combinator'] = true, + ['selector-combinator'] = true, + ['display-panel'] = true, ['electric-energy-interface'] = true, ['electric-pole'] = true, ['gate'] = true, diff --git a/maps/journey/unique_modifiers.lua b/maps/journey/unique_modifiers.lua index 8dad649ba..5bb6b82f1 100644 --- a/maps/journey/unique_modifiers.lua +++ b/maps/journey/unique_modifiers.lua @@ -346,25 +346,18 @@ Public.wasteland = { local surface = game.surfaces.nauvis local mgs = surface.map_gen_settings mgs.terrain_segmentation = 2.7 - mgs.water = mgs.water + 1 surface.map_gen_settings = mgs surface.clear(true) end, - clear = function (journey) - local surface = game.surfaces.nauvis - local mgs = surface.map_gen_settings - mgs.water = mgs.water - 1 - surface.map_gen_settings = mgs + set_specials = function (journey) + journey.world_specials['water'] = 2 end } Public.oceanic = { on_world_start = function (journey) local surface = game.surfaces.nauvis - local mgs = surface.map_gen_settings - mgs.terrain_segmentation = 0.5 - mgs.water = mgs.water + 6 - surface.map_gen_settings = mgs + surface.clear(true) end, on_robot_built_entity = function (event) @@ -391,11 +384,8 @@ Public.oceanic = { entity.die() end end, - clear = function (journey) - local surface = game.surfaces.nauvis - local mgs = surface.map_gen_settings - mgs.water = mgs.water - 6 - surface.map_gen_settings = mgs + set_specials = function (journey) + journey.world_specials['water'] = 6 end } From 1b6a2dc2c02dc3ad79b1f0d11f065bab5e854b29 Mon Sep 17 00:00:00 2001 From: hanakocz Date: Mon, 9 Dec 2024 01:32:31 +0100 Subject: [PATCH 5/5] Journey more fixes + dump_env helpers fix --- maps/journey/constants.lua | 1 + maps/journey/functions.lua | 14 ++++++------- maps/journey/main.lua | 2 +- maps/journey/unique_modifiers.lua | 34 +++++++++++++++---------------- utils/dump_env.lua | 2 +- 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/maps/journey/constants.lua b/maps/journey/constants.lua index 5592781a5..ac84c9a8f 100644 --- a/maps/journey/constants.lua +++ b/maps/journey/constants.lua @@ -105,6 +105,7 @@ Public.modifiers = { ['cliff_continuity'] = { min = 1, max = 10, base = 8, dmin = -30, dmax = -15, name = 'Cliff Continuity' }, ['cliff_frequency'] = { min = 5, max = 80, base = 60, dmin = -30, dmax = -15, name = 'Cliff Frequency' }, ['water'] = { min = 0.01, max = 10, base = 1, dmin = -20, dmax = -10, name = 'Water' }, + ['scale'] = { min = 1, max = 1, base = 1, dmin = 0, dmax = 0, name = 'Landmass scale', static = true}, ['coal'] = { min = 0.01, max = 10, base = 1, dmin = -20, dmax = -10, name = 'Coal' }, ['stone'] = { min = 0.01, max = 10, base = 1, dmin = -20, dmax = -10, name = 'Stone' }, ['iron-ore'] = { min = 0.01, max = 10, base = 1, dmin = -20, dmax = -10, name = 'Iron Ore' }, diff --git a/maps/journey/functions.lua b/maps/journey/functions.lua index 514e2b08d..fa09e524c 100644 --- a/maps/journey/functions.lua +++ b/maps/journey/functions.lua @@ -196,10 +196,11 @@ local function set_map_modifiers(journey) mgs.autoplace_controls['enemy-base'].richness = calc_modifier(journey, 'enemy_base_richness') mgs.autoplace_controls['enemy-base'].size = calc_modifier(journey, 'enemy_base_size') mgs.autoplace_controls['enemy-base'].frequency = calc_modifier(journey, 'enemy_base_frequency') + mgs.autoplace_controls['water'].size = calc_modifier(journey, 'water') + mgs.autoplace_controls['water'].frequency = calc_modifier(journey, 'scale') mgs.starting_area = calc_modifier(journey, 'starting_area') mgs.cliff_settings.cliff_elevation_interval = calc_modifier(journey, 'cliff_frequency') mgs.cliff_settings.richness = calc_modifier(journey, 'cliff_continuity') - mgs.water = calc_modifier(journey, 'water') game.map_settings.enemy_evolution['time_factor'] = calc_modifier(journey, 'time_factor') game.map_settings.enemy_evolution['destroy_factor'] = calc_modifier(journey, 'destroy_factor') game.map_settings.enemy_evolution['pollution_factor'] = calc_modifier(journey, 'pollution_factor') @@ -325,14 +326,11 @@ local function cargo_gui(name, itemname, tooltip, value, hidden) sprite.style.maximal_height = 28 sprite.style.margin = 0 sprite.style.padding = 0 - local progressbar = frame.add({ type = 'progressbar', name = name .. '_progressbar', value = 0 }) - progressbar.style = 'achievement_progressbar' - local progressbar_style = progressbar.style --[[@as LuaGuiElementStyle]] + local progressbar = frame.add({ type = 'progressbar', name = name .. '_progressbar', value = 0, style = 'achievement_progressbar' }) + local progressbar_style = progressbar.style progressbar_style.minimal_width = 100 progressbar_style.maximal_width = 100 - ---@diagnostic disable-next-line: inject-field progressbar_style.top_margin = 2 - ---@diagnostic disable-next-line: inject-field progressbar_style.right_margin = 6 progressbar_style.height = 20 end @@ -1270,8 +1268,9 @@ function Public.create_the_world(journey) local surface = game.surfaces.nauvis local mgs = surface.map_gen_settings mgs.seed = Math.random(1, 4294967295) - mgs.terrain_segmentation = Math.random(10, 20) * 0.1 + journey.world_modifiers['scale'] = Math.random(10, 20) * 0.1 mgs.peaceful_mode = false + surface.map_gen_settings = mgs local modifiers = journey.world_selectors[journey.selected_world].modifiers for _, modifier in pairs(modifiers) do @@ -1280,7 +1279,6 @@ function Public.create_the_world(journey) local extremes = { Constants.modifiers[name].min, Constants.modifiers[name].max } journey.world_modifiers[name] = math.round(math.min(extremes[2], math.max(extremes[1], journey.world_modifiers[name] * m)) * 100000, 5) / 100000 end - surface.map_gen_settings = mgs journey.world_trait = journey.world_selectors[journey.selected_world].world_trait local unique_modifier = Unique_modifiers[journey.world_trait] diff --git a/maps/journey/main.lua b/maps/journey/main.lua index f8bbc19b1..3515b1906 100644 --- a/maps/journey/main.lua +++ b/maps/journey/main.lua @@ -264,7 +264,7 @@ local function cmd_handler() end if player and not player.admin then p('You are not an admin!') - return false + return false, nil, p end return true, player or {name = 'Server'}, p end diff --git a/maps/journey/unique_modifiers.lua b/maps/journey/unique_modifiers.lua index 5bb6b82f1..e6c04b55a 100644 --- a/maps/journey/unique_modifiers.lua +++ b/maps/journey/unique_modifiers.lua @@ -220,7 +220,9 @@ Public.replicant_fauna = { return end if cause.force.index == 2 then - cause.surface.create_entity({ name = BiterRaffle.roll('mixed', game.forces.enemy.evolution_factor), position = entity.position, force = 'enemy' }) + local surface = entity.surface + local force = game.forces.enemy + surface.create_entity({ name = BiterRaffle.roll('mixed', force.get_evolution_factor(surface)), position = entity.position, force = force }) end end } @@ -279,6 +281,7 @@ Public.tarball = { Public.swamps = { set_specials = function (journey) journey.world_specials['water'] = 2 + journey.world_specials['scale'] = 0.5 end, on_chunk_generated = function (event, journey) local surface = event.surface @@ -326,7 +329,7 @@ Public.wasteland = { if math_random(1, 3) ~= 1 then return end - for _ = 1, math_random(0, 5), 1 do + for _ = 1, math_random(0, 8), 1 do local name = wrecks[math_random(1, size_of_wrecks)] local position = surface.find_non_colliding_position(name, { left_top_x + math_random(0, 31), left_top_y + math_random(0, 31) }, 16, 1) if position then @@ -342,24 +345,13 @@ Public.wasteland = { end end end, - on_world_start = function (journey) - local surface = game.surfaces.nauvis - local mgs = surface.map_gen_settings - mgs.terrain_segmentation = 2.7 - surface.map_gen_settings = mgs - surface.clear(true) - end, set_specials = function (journey) journey.world_specials['water'] = 2 + journey.world_specials['scale'] = 2.7 end } Public.oceanic = { - on_world_start = function (journey) - local surface = game.surfaces.nauvis - - surface.clear(true) - end, on_robot_built_entity = function (event) local entity = event.entity if not entity.valid then @@ -386,6 +378,8 @@ Public.oceanic = { end, set_specials = function (journey) journey.world_specials['water'] = 6 + journey.world_specials['scale'] = 0.5 + journey.world_specials['stone'] = 2 end } @@ -490,7 +484,9 @@ Public.infested = { if entity.type ~= 'simple-entity' and entity.type ~= 'tree' then return end - entity.surface.create_entity({ name = BiterRaffle.roll('mixed', game.forces.enemy.evolution_factor + 0.1), position = entity.position, force = 'enemy' }) + local surface = entity.surface + local force = game.forces.enemy + surface.create_entity({ name = BiterRaffle.roll('mixed', force.get_evolution_factor(surface) + 0.1), position = entity.position, force = force }) end, on_player_mined_entity = function (event) if math_random(1, 2) == 1 then @@ -506,7 +502,9 @@ Public.infested = { if entity.type ~= 'simple-entity' and entity.type ~= 'tree' then return end - entity.surface.create_entity({ name = BiterRaffle.roll('mixed', game.forces.enemy.evolution_factor + 0.1), position = entity.position, force = 'enemy' }) + local surface = entity.surface + local force = game.forces.enemy + surface.create_entity({ name = BiterRaffle.roll('mixed', force.get_evolution_factor(surface) + 0.1), position = entity.position, force = force }) end, on_robot_mined_entity = function (event) local entity = event.entity @@ -519,7 +517,9 @@ Public.infested = { if entity.type ~= 'simple-entity' and entity.type ~= 'tree' then return end - entity.surface.create_entity({ name = BiterRaffle.roll('mixed', game.forces.enemy.evolution_factor + 0.1), position = entity.position, force = 'enemy' }) + local surface = entity.surface + local force = game.forces.enemy + surface.create_entity({ name = BiterRaffle.roll('mixed', force.get_evolution_factor(surface) + 0.1), position = entity.position, force = force }) end } diff --git a/utils/dump_env.lua b/utils/dump_env.lua index cb5df9b07..991d1f55d 100644 --- a/utils/dump_env.lua +++ b/utils/dump_env.lua @@ -23,7 +23,7 @@ local function player_joined(event) local dump_string = inspect(_ENV, {process = filter}) if dump_string then local s = string.format('tick on join: %s\n%s', event.tick, dump_string) - game.write_file(filename, s) + helpers.write_file(filename, s) game.print('_ENV dumped into ' .. filename) else game.print('_ENV not dumped, dump_string was nil')