From 80ba14762b50d03a7cb6d258ab790d13756c0453 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:01:33 -0500 Subject: [PATCH 01/36] Added cutscene outpost --- map_gen/maps/crash_site/scenario.lua | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index ef3eddae..6d66553a 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -1,6 +1,7 @@ require 'map_gen.maps.crash_site.blueprint_extractor' require 'map_gen.maps.crash_site.entity_died_events' require 'map_gen.maps.crash_site.weapon_balance' +require 'map_gen.maps.crash_site.cutscene' local b = require 'map_gen.shared.builders' local Global = require('utils.global') @@ -135,12 +136,57 @@ local spawn_callback = end ) +local function cutscene_builder(name, x, y) + game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} +end +local function cutscene_loot() + for i = -2, 2 do + for j = 3, 5 do + local box = game.surfaces.cutscene.create_entity{name = 'steel-chest', position = {i, j}, force = game.forces.enemy} + box.insert{name = "iron-plate", count = 50} + end + end +end +local function cutscene_outpost() + local tiles = {} + for i = -11, 12 do + for j = -11, 12 do + table.insert(tiles, {name = "stone-path", position = {i, j}}) + end + end + for i = 0, 22 do + cutscene_builder('stone-wall', -11, -10+i) + cutscene_builder('stone-wall', -12, -10+i) + cutscene_builder('stone-wall', -12+i, -11) + cutscene_builder('stone-wall', -12+i, -12) + cutscene_builder('stone-wall', 11, -12+i) + cutscene_builder('stone-wall', 12, -12+i) + cutscene_builder('stone-wall', -10+i, 11) + cutscene_builder('stone-wall', -10+i, 12) + if i%4 == 0 and i ~= 20 and i ~= 0 then + cutscene_builder('gun-turret', -8, -8+i) + cutscene_builder('gun-turret', 10, -8+i) + cutscene_builder('gun-turret', -9+i, -8) + cutscene_builder('gun-turret', -9+i, 10) + end + end + cutscene_loot() + game.surfaces.cutscene.create_entity{name = "market", position = {-4, 0}, force = game.forces.enemy} + game.surfaces.cutscene.create_entity{name = "electric-furnace", position = {4, 0}, force = game.forces.enemy} + game.surfaces.cutscene.set_tiles(tiles) +end + local function init() local on_init = (_LIFECYCLE == _STAGE.init) local outpost_random = Random.new(outpost_seed, outpost_seed * 2) local outpost_builder = OutpostBuilder.new(outpost_random) + + game.create_surface('cutscene') + game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) + game.surfaces.cutscene.force_generate_chunk_requests() + cutscene_outpost() local stage1a = { small_iron_plate_factory, From e768989bf393af9c813bf68cd1f5cc6622f99dde Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:03:52 -0500 Subject: [PATCH 02/36] crashsite cutscene strings --- locale/en/redmew_maps.cfg | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/locale/en/redmew_maps.cfg b/locale/en/redmew_maps.cfg index 692f05b0..8cc89dd7 100644 --- a/locale/en/redmew_maps.cfg +++ b/locale/en/redmew_maps.cfg @@ -65,6 +65,30 @@ cutscene_case7_line1=This concludes the introduction cutscene_case7_line3=Have fun and keep digging! replay_cutscene=To replay the introduction, use the __1__ command +# locale linked to the crashsite scenario +[crashsite] +cutscene1_case_line2=Welcome to __1__ +cutscene1_case_line4=This is a custom scenario developed by __1__ +cutscene1_case_line5=Join us at __1__ +cutscene1_case_line6=The following introduction will help you get started! +cutscene1_case1_line1=This is the starting area. It has a market and a coin mint. +cutscene1_case1_line2=The coin mint produces coins at a limited rate. +cutscene1_case1_line3=Coins can also be obtained by killing biters,spitters,worms and spawners. +cutscene1_case2_line1=Coins are used to buy items at the market. +cutscene1_case3_line1=This concludes the introduction. + +cutscene2_case_line1=This is an "Outpost". +cutscene2_case_line2=You will find many structures similar to this dotted across the map. +cutscene2_case0_line1=It is defended by enemy turrets. +cutscene2_case0_line2=You must capture the outpost by destroying them all. +cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters. +cutscene2_case2_line1=Magic Crafters require no input or electricity, it will produce items for free. This one makes Iron plates. +cutscene2_case3_line1=You can upgrade the item production speed at the market with coins. +cutscene2_case4_line1=Biters evolve fast and sometimes multiply when killed hence keep pollution to a minimum by utilizing the free items. +cutscene2_case5_line1=Goal of this scenario is to eliminate all biters on the limited size map. +cutscene2_case5_line2=lets go back to spawn. Good luck and have fun! +replay_cutscene=To replay the introduction, use the __1__ command + # locale linked to the quadrants scenario [quadrants] on=ON From 94159211ee4e1910f940d7ccaba7ee5e53c035a3 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:13:36 -0500 Subject: [PATCH 03/36] Create cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 287 +++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 map_gen/maps/crash_site/cutscene.lua diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua new file mode 100644 index 00000000..b2411aab --- /dev/null +++ b/map_gen/maps/crash_site/cutscene.lua @@ -0,0 +1,287 @@ +local Event = require 'utils.event' +local Token = require 'utils.token' +local Task = require 'utils.task' +local Cutscene = require 'features.cutscene.cutscene_controller' +local CS_Rendering = require 'features.cutscene.rendering' +local Color = require 'resources.color_presets' +local PC = require 'features.player_create' +local register_rendering = Cutscene.register_rendering_id +local play_sound = Cutscene.play_sound +local draw_text = CS_Rendering.draw_text +local draw_multi_line = CS_Rendering.draw_multi_line_text +local rad = math.rad +local Rendering = require 'utils.rendering' + +local CrashsiteCutscene = {} + +local delayed_draw_text = + Token.register( + function(params) + local tick = params.tick + local player = params.player + if params.play_sound > 1 then + play_sound(tick, player, 'utility/list_box_click', 1) + end + register_rendering(player.index, tick, draw_text(params.settings, params.offset, params.text, params.player, params.params, params.draw_background, params.fit_to_edge)) + end +) +local function draw_text_auto_replacing(tick, settings, offset, texts, player, params, draw_background, fit_to_edge, time, between_time) + time = time or 400 + time = time / #texts + between_time = between_time or 30 + params.time_to_live = time - between_time + if params.background then + params.background.time_to_live = time - between_time + end + for i = 1, #texts do + if texts[i] ~= '' then + Task.set_timeout_in_ticks(time * (i - 1), delayed_draw_text, {tick = tick, settings = settings, offset = offset, text = texts[i], player = player, params = params, draw_background = draw_background, fit_to_edge = fit_to_edge, play_sound = i}) + end + end +end + +local delayed_draw_arrow = + Token.register( + function(params) + local player = params.player + local tick = params.tick + params = params.params + local rendering_parmas = params.params + local id = CS_Rendering.draw_arrow(params.settings, params.offset, player, rendering_parmas, params.fit_to_edge) + register_rendering(player.index, tick, id) + Rendering.blink(id, 20, rendering_parmas.time_to_live) + end +) +local function delayed_function(func, player, tick, params, offset_time) + Task.set_timeout_in_ticks(offset_time, func, {player = player, tick = tick, params = params}) +end + +local original_resolution = {height = 1440, width = 2560} +local original_zoom = 1 + +local function cutscene_function_redmew(player_index, waypoint_index, params) + local cases = {} + local player = game.players[player_index] + local ttw = params.time_to_wait + local zoom = params.zoom + local tick = params.tick + local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} + + if waypoint_index ~= -1 then + play_sound(tick, player, 'utility/list_box_click', 1) + end + cases[-1] = function() + play_sound(tick, player, 'ambient/pollution', 1, 550) + register_rendering(player_index, tick, CS_Rendering.blackout(player, zoom, ttw + 10)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -16}, 'Crashsite', player, {scale = 10, time_to_live = ttw, color = Color.red}, false, false)) + register_rendering( + player_index, + tick, + draw_multi_line(settings, {x = 0, y = -5}, {{'crashsite.cutscene1_case_line2', 'Crashsite'}, '---------------------', {'crashsite.cutscene1_case_line4', 'Redmew'}, {'crashsite.cutscene1_case_line5', 'www.redmew.com/discord'}}, player, {scale = 5, time_to_live = ttw}, false) + ) + draw_text_auto_replacing(tick, settings, {x = 0, y = 10}, {'', {'crashsite.cutscene1_case_line6'}}, player, {scale = 3}, false, false, ttw, 0) + end + cases[0] = function() + register_rendering(player_index, tick, CS_Rendering.blackout(player, zoom, ttw + 1)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = 0}, 'Redmew - Crashsite', player, {scale = 10, time_to_live = ttw - 60, color = Color.red}, false, false)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -5}, 'Introduction', player, {scale = 5, time_to_live = ttw - 60}, false, false)) + + delayed_function(delayed_draw_arrow, player, tick, {settings = settings, offset = {x = 7, y = 2.5}, params = {rotation = rad(-45), time_to_live = 275 * 3 - 30}, fit_to_edge = true}, 0) + + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'This is our toolbar!'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275) + + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', "Here you'll find a wide range of tools and informations about us!"}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 2) + + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', '', 'Hover your mouse over them for more information'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 3) + + delayed_function(delayed_draw_arrow, player, tick, {settings = settings, offset = {x = 1, y = 2.5}, params = {rotation = rad(-45), time_to_live = 275 - 30}, fit_to_edge = true}, 275 * 3) + + draw_text_auto_replacing(tick, settings, {x = 2.5, y = 3}, {'', '', '', 'You can toggle our toolbar with this button'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 4) + end + cases[1] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case1_line1'}, {'crashsite.cutscene1_case1_line2'}, {'crashsite.cutscene1_case1_line3'}}, player, {scale = 2.5}, true, false, 400 * 3) + end + cases[2] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case2_line1'}}, player, {scale = 2.5}, true, false, 300) + end + cases[3] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case3_line1'}}, player, {scale = 3}, true, false, 300) + end + local case = cases[waypoint_index] + if case then + case() + end +end + +local waypoints_redmew = { + { + -- case -1 + position = {x = 0, y = 0}, + transition_time = 60, + time_to_wait = 600, + zoom = 0.5 + }, + { + -- case 0 + position = {x = 0, y = 0}, + transition_time = 0, + time_to_wait = 300 * 4, + zoom = 0.5 + }, + { + -- case 1 + position = {x = 0, y = -5}, + transition_time = 120, + time_to_wait = 400 * 3, + zoom = 1.2 + }, + { + -- case 2 + position = {x = -3, y = -5}, + transition_time = 90, + time_to_wait = 300, + zoom = 1.6 + }, + { + -- case 3 + position = {x = 0, y = 0}, + transition_time = 60, + time_to_wait = 120, + zoom = 0.7 + } +} + +local function cutscene_function_outpost(player_index, waypoint_index, params) + local cases = {} + local player = game.players[player_index] + local ttw = params.time_to_wait + local zoom = params.zoom + local tick = params.tick + local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} + + if waypoint_index ~= -1 then + play_sound(tick, player, 'utility/list_box_click', 1) + end + + cases[-1] = function() + play_sound(tick, player, 'utility/scenario_message') + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case_line1'}, {'crashsite.cutscene2_case_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375 * 2) + end + cases[0] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case0_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375) + end + cases[1] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case1_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 500) + end + cases[2] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case2_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 600) + end + cases[3] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case3_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 500) + end + cases[4] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case4_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 600) + end + cases[5] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case5_line1'}, {'crashsite.cutscene2_case5_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 400 * 2) + end + local case = cases[waypoint_index] + if case then + case() + end +end + +local waypoints_outpost = { + { + -- case -1 + position = {x = 0, y = 0}, + transition_time = 90, + time_to_wait = 375 * 2, + zoom = 0.5 + }, + { + -- case 0 + position = {x = 0, y = -10}, + transition_time = 120, + time_to_wait = 375, + zoom = 1.5 + }, + { + -- case 1 + position = {x = 0, y = 0}, + transition_time = 120, + time_to_wait = 500, + zoom = 1 + }, + { + -- case 2 + position = {x = 4, y = 0}, + transition_time = 90, + time_to_wait = 600, + zoom = 2.5 + }, + { + -- case 3 + position = {x = -4, y = 0}, + transition_time = 90, + time_to_wait = 500, + zoom = 2.5 + }, + { + -- case 4 + position = {x = 0, y = 0}, + transition_time = 60, + time_to_wait = 600, + zoom = 2 + }, + { + -- case 5 + position = {x = 0, y = 25}, + transition_time = 60, + time_to_wait = 400 * 2, + zoom = 1.5 + } +} + +local start_cutscene_outpost = + Token.register( + function(player_index) + local player = game.get_player(player_index) + player.teleport({0, 30}, 'cutscene') + Cutscene.register_running_cutscene(player_index, 'Crashsite_Outpost', 60) + end +) +local function terminate_function_redmew(player_index) + Task.set_timeout_in_ticks(1, start_cutscene_outpost, player_index) +end + +local function terminate_function_outpost(player_index) + local player = game.get_player(player_index) + player.teleport({0, 0}, 'redmew') + PC.show_start_up(player) + player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) +end + +Cutscene.register_cutscene_function('Crashsite_Welcome', waypoints_redmew, Token.register(cutscene_function_redmew), Token.register(terminate_function_redmew)) +Cutscene.register_cutscene_function('Crashsite_Outpost', waypoints_outpost, Token.register(cutscene_function_outpost), Token.register(terminate_function_outpost)) + +Cutscene.register_replay('Crashsite_Welcome', 120) + +local start_cutscene = + Token.register( + function(params) + Cutscene.register_running_cutscene(params.event.player_index, 'Crashsite_Welcome', 120) + end +) +function CrashsiteCutscene.register() + global.config.player_create.cutscene = true + + Event.add( + defines.events.on_player_created, + function(event) + Task.set_timeout_in_ticks(60, start_cutscene, {event = event}) + end +) +end + +return CrashsiteCutscene From 7785099753d3b2ed2a73a74500e6f4f839a37c81 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:32:20 -0500 Subject: [PATCH 04/36] Update cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index b2411aab..d7abba0a 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -154,7 +154,6 @@ local waypoints_redmew = { local function cutscene_function_outpost(player_index, waypoint_index, params) local cases = {} local player = game.players[player_index] - local ttw = params.time_to_wait local zoom = params.zoom local tick = params.tick local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} From 899d938174c36021a691b0d7c1cff4201d5a0eec Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:34:07 -0500 Subject: [PATCH 05/36] Update scenario.lua --- map_gen/maps/crash_site/scenario.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index 6d66553a..7364d038 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -182,7 +182,7 @@ local function init() local outpost_random = Random.new(outpost_seed, outpost_seed * 2) local outpost_builder = OutpostBuilder.new(outpost_random) - + game.create_surface('cutscene') game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) game.surfaces.cutscene.force_generate_chunk_requests() From 42a4c90b205e0afb5384d8fca0f0a65656b2dfce Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Mon, 18 Nov 2019 00:08:27 -0500 Subject: [PATCH 06/36] Update cutscene.lua minor addition --- map_gen/maps/crash_site/cutscene.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index d7abba0a..ebd8e117 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -167,7 +167,7 @@ local function cutscene_function_outpost(player_index, waypoint_index, params) draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case_line1'}, {'crashsite.cutscene2_case_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375 * 2) end cases[0] = function() - draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case0_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375) + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case0_line1'}, {'crashsite.cutscene2_case0_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375 * 2) end cases[1] = function() draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case1_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 500) @@ -202,7 +202,7 @@ local waypoints_outpost = { -- case 0 position = {x = 0, y = -10}, transition_time = 120, - time_to_wait = 375, + time_to_wait = 375 * 2, zoom = 1.5 }, { From d4cb84610cfbb22273ed04643ec2bfb06b84c3f5 Mon Sep 17 00:00:00 2001 From: theorangeangle <36866626+theorangeangle@users.noreply.github.com> Date: Sun, 17 Nov 2019 23:21:50 -0600 Subject: [PATCH 07/36] small changes to improve grammar and flow --- locale/en/redmew_maps.cfg | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/locale/en/redmew_maps.cfg b/locale/en/redmew_maps.cfg index 8cc89dd7..1e021316 100644 --- a/locale/en/redmew_maps.cfg +++ b/locale/en/redmew_maps.cfg @@ -70,24 +70,24 @@ replay_cutscene=To replay the introduction, use the __1__ command cutscene1_case_line2=Welcome to __1__ cutscene1_case_line4=This is a custom scenario developed by __1__ cutscene1_case_line5=Join us at __1__ -cutscene1_case_line6=The following introduction will help you get started! +cutscene1_case_line6=The following introduction will help you get started playing! cutscene1_case1_line1=This is the starting area. It has a market and a coin mint. -cutscene1_case1_line2=The coin mint produces coins at a limited rate. +cutscene1_case1_line2=The coin mint produces coins at a limited rate, upgradable at the market. cutscene1_case1_line3=Coins can also be obtained by killing biters,spitters,worms and spawners. cutscene1_case2_line1=Coins are used to buy items at the market. -cutscene1_case3_line1=This concludes the introduction. +cutscene1_case3_line1=This, along with the ore patches and wall, is your spawn. Onto the outposts. -cutscene2_case_line1=This is an "Outpost". +cutscene2_case_line1=This is an "Outpost". They come in many shapes and sizes, with everything from Iron Plates to MK2 Armor. cutscene2_case_line2=You will find many structures similar to this dotted across the map. -cutscene2_case0_line1=It is defended by enemy turrets. -cutscene2_case0_line2=You must capture the outpost by destroying them all. -cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters. -cutscene2_case2_line1=Magic Crafters require no input or electricity, it will produce items for free. This one makes Iron plates. -cutscene2_case3_line1=You can upgrade the item production speed at the market with coins. -cutscene2_case4_line1=Biters evolve fast and sometimes multiply when killed hence keep pollution to a minimum by utilizing the free items. -cutscene2_case5_line1=Goal of this scenario is to eliminate all biters on the limited size map. -cutscene2_case5_line2=lets go back to spawn. Good luck and have fun! -replay_cutscene=To replay the introduction, use the __1__ command +cutscene2_case0_line1=Outposts are defended by enemy turrets and walls. Turret strength scales with the rewards inside. +cutscene2_case0_line2=To "capture" an outpost, you must destroy all turrets. +cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters (assemblers or chemical plants). +cutscene2_case2_line1=Magic Crafters require no input or electricity, it will produce items for free. (This one makes Iron Plates.) +cutscene2_case3_line1=You can upgrade the crafting speed at the (local) market with coins. Some markets contain additional items. +cutscene2_case4_line1=Biters evolve fast (and sometimes multiply when killed!). Tip: keep pollution to a minimum by utilizing the free items. +cutscene2_case5_line1=The goal of this scenario is to eliminate all biters and launch a rocket on the limited size map. +cutscene2_case5_line2=This concludes the tour. Good luck and have fun! +replay_cutscene=To replay the introduction, use the __1__ command. You can also press the information icon for a text summary. # locale linked to the quadrants scenario [quadrants] From e9c7bb0ce0ea99dfb37873b637073ddfabbbc801 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Mon, 18 Nov 2019 18:22:14 -0500 Subject: [PATCH 08/36] Added cutscene init --- map_gen/maps/crash_site/scenario.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index 7364d038..efe41802 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -1,7 +1,6 @@ require 'map_gen.maps.crash_site.blueprint_extractor' require 'map_gen.maps.crash_site.entity_died_events' require 'map_gen.maps.crash_site.weapon_balance' -require 'map_gen.maps.crash_site.cutscene' local b = require 'map_gen.shared.builders' local Global = require('utils.global') @@ -15,6 +14,7 @@ local table = require 'utils.table' local RS = require 'map_gen.shared.redmew_surface' local MGSP = require 'resources.map_gen_settings' local RedmewConfig = require 'config' +local Cutscene = require 'map_gen.maps.crash_site.cutscene' local degrees = math.degrees @@ -187,6 +187,7 @@ local function init() game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) game.surfaces.cutscene.force_generate_chunk_requests() cutscene_outpost() + Cutscene.register() local stage1a = { small_iron_plate_factory, From 9bea5a443979196542e0bd56a8db9d190d4bb6ac Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Mon, 18 Nov 2019 18:47:07 -0500 Subject: [PATCH 09/36] Timing tweaks for the new strings. --- map_gen/maps/crash_site/cutscene.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index ebd8e117..82399e1c 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -105,7 +105,7 @@ local function cutscene_function_redmew(player_index, waypoint_index, params) draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case2_line1'}}, player, {scale = 2.5}, true, false, 300) end cases[3] = function() - draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case3_line1'}}, player, {scale = 3}, true, false, 300) + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case3_line1'}}, player, {scale = 3}, true, false, 400) end local case = cases[waypoint_index] if case then @@ -145,9 +145,9 @@ local waypoints_redmew = { { -- case 3 position = {x = 0, y = 0}, - transition_time = 60, - time_to_wait = 120, - zoom = 0.7 + transition_time = 90, + time_to_wait = 400, + zoom = 0.2 } } From ba6cdf9c49ef6b55f2e96ec26942347427fbdbed Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 20 Nov 2019 22:20:49 -0500 Subject: [PATCH 10/36] Added player valid check --- map_gen/maps/crash_site/cutscene.lua | 31 +++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index 82399e1c..2975e1e3 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -14,11 +14,18 @@ local Rendering = require 'utils.rendering' local CrashsiteCutscene = {} +local function valid(entity) + return entity and entity.valid +end + local delayed_draw_text = Token.register( function(params) - local tick = params.tick local player = params.player + if (not valid(player)) then + return + end + local tick = params.tick if params.play_sound > 1 then play_sound(tick, player, 'utility/list_box_click', 1) end @@ -44,6 +51,9 @@ local delayed_draw_arrow = Token.register( function(params) local player = params.player + if (not valid(player)) then + return + end local tick = params.tick params = params.params local rendering_parmas = params.params @@ -53,6 +63,9 @@ local delayed_draw_arrow = end ) local function delayed_function(func, player, tick, params, offset_time) + if (not valid(player)) then + return + end Task.set_timeout_in_ticks(offset_time, func, {player = player, tick = tick, params = params}) end @@ -60,8 +73,11 @@ local original_resolution = {height = 1440, width = 2560} local original_zoom = 1 local function cutscene_function_redmew(player_index, waypoint_index, params) - local cases = {} local player = game.players[player_index] + if (not valid(player)) then + return + end + local cases = {} local ttw = params.time_to_wait local zoom = params.zoom local tick = params.tick @@ -152,8 +168,11 @@ local waypoints_redmew = { } local function cutscene_function_outpost(player_index, waypoint_index, params) - local cases = {} local player = game.players[player_index] + if (not valid(player)) then + return + end + local cases = {} local zoom = params.zoom local tick = params.tick local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} @@ -246,6 +265,9 @@ local start_cutscene_outpost = Token.register( function(player_index) local player = game.get_player(player_index) + if (not valid(player)) then + return + end player.teleport({0, 30}, 'cutscene') Cutscene.register_running_cutscene(player_index, 'Crashsite_Outpost', 60) end @@ -256,6 +278,9 @@ end local function terminate_function_outpost(player_index) local player = game.get_player(player_index) + if (not valid(player)) then + return + end player.teleport({0, 0}, 'redmew') PC.show_start_up(player) player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) From 0659a9a3fcea0de86c6ef5bf7ce28debfc99435e Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 20 Nov 2019 22:43:03 -0500 Subject: [PATCH 11/36] Condensed code --- map_gen/maps/crash_site/scenario.lua | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index efe41802..14cf5f06 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -139,14 +139,7 @@ local spawn_callback = local function cutscene_builder(name, x, y) game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} end -local function cutscene_loot() - for i = -2, 2 do - for j = 3, 5 do - local box = game.surfaces.cutscene.create_entity{name = 'steel-chest', position = {i, j}, force = game.forces.enemy} - box.insert{name = "iron-plate", count = 50} - end - end -end + local function cutscene_outpost() local tiles = {} for i = -11, 12 do @@ -170,9 +163,14 @@ local function cutscene_outpost() cutscene_builder('gun-turret', -9+i, 10) end end - cutscene_loot() - game.surfaces.cutscene.create_entity{name = "market", position = {-4, 0}, force = game.forces.enemy} - game.surfaces.cutscene.create_entity{name = "electric-furnace", position = {4, 0}, force = game.forces.enemy} + for i = -2, 2 do + for j = 3, 5 do + local loot_box = cutscene_builder('steel-chest', i, j) + loot_box.insert{name = "iron-plate", count = 50} + end + end + cutscene_builder('market', -4, 0) + cutscene_builder('electric-furnace', 4, 0) game.surfaces.cutscene.set_tiles(tiles) end From a7eede93263e7fd7b88ca7239a53766d940b2d7e Mon Sep 17 00:00:00 2001 From: grilledham Date: Sun, 24 Nov 2019 11:37:52 +0000 Subject: [PATCH 12/36] missing entity + desync fixes --- map_gen/maps/crash_site/cutscene.lua | 10 +++++-- map_gen/maps/crash_site/scenario.lua | 45 +++++++++++++++------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index 2975e1e3..eccff389 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -297,15 +297,19 @@ local start_cutscene = Cutscene.register_running_cutscene(params.event.player_index, 'Crashsite_Welcome', 120) end ) -function CrashsiteCutscene.register() - global.config.player_create.cutscene = true +function CrashsiteCutscene.on_init() + global.config.player_create.cutscene = true + CrashsiteCutscene.on_load() +end + +function CrashsiteCutscene.on_load() Event.add( defines.events.on_player_created, function(event) Task.set_timeout_in_ticks(60, start_cutscene, {event = event}) end -) + ) end return CrashsiteCutscene diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index 14cf5f06..a82ec886 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -137,7 +137,7 @@ local spawn_callback = ) local function cutscene_builder(name, x, y) - game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} + return game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} end local function cutscene_outpost() @@ -148,19 +148,19 @@ local function cutscene_outpost() end end for i = 0, 22 do - cutscene_builder('stone-wall', -11, -10+i) - cutscene_builder('stone-wall', -12, -10+i) - cutscene_builder('stone-wall', -12+i, -11) - cutscene_builder('stone-wall', -12+i, -12) - cutscene_builder('stone-wall', 11, -12+i) - cutscene_builder('stone-wall', 12, -12+i) - cutscene_builder('stone-wall', -10+i, 11) - cutscene_builder('stone-wall', -10+i, 12) - if i%4 == 0 and i ~= 20 and i ~= 0 then - cutscene_builder('gun-turret', -8, -8+i) - cutscene_builder('gun-turret', 10, -8+i) - cutscene_builder('gun-turret', -9+i, -8) - cutscene_builder('gun-turret', -9+i, 10) + cutscene_builder('stone-wall', -11, -10 + i) + cutscene_builder('stone-wall', -12, -10 + i) + cutscene_builder('stone-wall', -12 + i, -11) + cutscene_builder('stone-wall', -12 + i, -12) + cutscene_builder('stone-wall', 11, -12 + i) + cutscene_builder('stone-wall', 12, -12 + i) + cutscene_builder('stone-wall', -10 + i, 11) + cutscene_builder('stone-wall', -10 + i, 12) + if i % 4 == 0 and i ~= 20 and i ~= 0 then + cutscene_builder('gun-turret', -8, -8 + i) + cutscene_builder('gun-turret', 10, -8 + i) + cutscene_builder('gun-turret', -9 + i, -8) + cutscene_builder('gun-turret', -9 + i, 10) end end for i = -2, 2 do @@ -170,7 +170,8 @@ local function cutscene_outpost() end end cutscene_builder('market', -4, 0) - cutscene_builder('electric-furnace', 4, 0) + local furnace = cutscene_builder('electric-furnace', 4, 0) + furnace.insert('iron-ore') game.surfaces.cutscene.set_tiles(tiles) end @@ -181,11 +182,15 @@ local function init() local outpost_builder = OutpostBuilder.new(outpost_random) - game.create_surface('cutscene') - game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) - game.surfaces.cutscene.force_generate_chunk_requests() - cutscene_outpost() - Cutscene.register() + if on_init then + game.create_surface('cutscene') + game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) + game.surfaces.cutscene.force_generate_chunk_requests() + cutscene_outpost() + Cutscene.on_init() + else + Cutscene.on_load() + end local stage1a = { small_iron_plate_factory, From cad7d9b78424ebec0a20734ac9514d3374b1cad7 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Tue, 26 Nov 2019 14:25:43 -0500 Subject: [PATCH 13/36] one skip btn press needed Added supporting changes to cutscene_controller.lua --- map_gen/maps/crash_site/cutscene.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index eccff389..448f776d 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -272,7 +272,16 @@ local start_cutscene_outpost = Cutscene.register_running_cutscene(player_index, 'Crashsite_Outpost', 60) end ) -local function terminate_function_redmew(player_index) +local function terminate_function_redmew(player_index,skip_btn_flag) + if skip_btn_flag then + local player = game.get_player(player_index) + if (not valid(player)) then + return + end + PC.show_start_up(player) + player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) + return + end Task.set_timeout_in_ticks(1, start_cutscene_outpost, player_index) end From 43c2617171b6e10260e7d355f8e47c884ea73c74 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Tue, 26 Nov 2019 17:18:00 -0500 Subject: [PATCH 14/36] Prevent character collision --- map_gen/maps/crash_site/cutscene.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index 448f776d..f3d32b9a 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -290,7 +290,8 @@ local function terminate_function_outpost(player_index) if (not valid(player)) then return end - player.teleport({0, 0}, 'redmew') + local pos = game.surfaces.cutscene.find_non_colliding_position('character', {0, 0}, 0, 1) + player.teleport(pos, 'redmew') PC.show_start_up(player) player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) end From d66b62c19a49a0007a17ad07c6140bf248e62a9e Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:01:33 -0500 Subject: [PATCH 15/36] Added cutscene outpost --- map_gen/maps/crash_site/scenario.lua | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index ef3eddae..6d66553a 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -1,6 +1,7 @@ require 'map_gen.maps.crash_site.blueprint_extractor' require 'map_gen.maps.crash_site.entity_died_events' require 'map_gen.maps.crash_site.weapon_balance' +require 'map_gen.maps.crash_site.cutscene' local b = require 'map_gen.shared.builders' local Global = require('utils.global') @@ -135,12 +136,57 @@ local spawn_callback = end ) +local function cutscene_builder(name, x, y) + game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} +end +local function cutscene_loot() + for i = -2, 2 do + for j = 3, 5 do + local box = game.surfaces.cutscene.create_entity{name = 'steel-chest', position = {i, j}, force = game.forces.enemy} + box.insert{name = "iron-plate", count = 50} + end + end +end +local function cutscene_outpost() + local tiles = {} + for i = -11, 12 do + for j = -11, 12 do + table.insert(tiles, {name = "stone-path", position = {i, j}}) + end + end + for i = 0, 22 do + cutscene_builder('stone-wall', -11, -10+i) + cutscene_builder('stone-wall', -12, -10+i) + cutscene_builder('stone-wall', -12+i, -11) + cutscene_builder('stone-wall', -12+i, -12) + cutscene_builder('stone-wall', 11, -12+i) + cutscene_builder('stone-wall', 12, -12+i) + cutscene_builder('stone-wall', -10+i, 11) + cutscene_builder('stone-wall', -10+i, 12) + if i%4 == 0 and i ~= 20 and i ~= 0 then + cutscene_builder('gun-turret', -8, -8+i) + cutscene_builder('gun-turret', 10, -8+i) + cutscene_builder('gun-turret', -9+i, -8) + cutscene_builder('gun-turret', -9+i, 10) + end + end + cutscene_loot() + game.surfaces.cutscene.create_entity{name = "market", position = {-4, 0}, force = game.forces.enemy} + game.surfaces.cutscene.create_entity{name = "electric-furnace", position = {4, 0}, force = game.forces.enemy} + game.surfaces.cutscene.set_tiles(tiles) +end + local function init() local on_init = (_LIFECYCLE == _STAGE.init) local outpost_random = Random.new(outpost_seed, outpost_seed * 2) local outpost_builder = OutpostBuilder.new(outpost_random) + + game.create_surface('cutscene') + game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) + game.surfaces.cutscene.force_generate_chunk_requests() + cutscene_outpost() local stage1a = { small_iron_plate_factory, From 0d455ac94ea64dc6573ec433eecd45c328dabe23 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:03:52 -0500 Subject: [PATCH 16/36] crashsite cutscene strings --- locale/en/redmew_maps.cfg | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/locale/en/redmew_maps.cfg b/locale/en/redmew_maps.cfg index 692f05b0..8cc89dd7 100644 --- a/locale/en/redmew_maps.cfg +++ b/locale/en/redmew_maps.cfg @@ -65,6 +65,30 @@ cutscene_case7_line1=This concludes the introduction cutscene_case7_line3=Have fun and keep digging! replay_cutscene=To replay the introduction, use the __1__ command +# locale linked to the crashsite scenario +[crashsite] +cutscene1_case_line2=Welcome to __1__ +cutscene1_case_line4=This is a custom scenario developed by __1__ +cutscene1_case_line5=Join us at __1__ +cutscene1_case_line6=The following introduction will help you get started! +cutscene1_case1_line1=This is the starting area. It has a market and a coin mint. +cutscene1_case1_line2=The coin mint produces coins at a limited rate. +cutscene1_case1_line3=Coins can also be obtained by killing biters,spitters,worms and spawners. +cutscene1_case2_line1=Coins are used to buy items at the market. +cutscene1_case3_line1=This concludes the introduction. + +cutscene2_case_line1=This is an "Outpost". +cutscene2_case_line2=You will find many structures similar to this dotted across the map. +cutscene2_case0_line1=It is defended by enemy turrets. +cutscene2_case0_line2=You must capture the outpost by destroying them all. +cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters. +cutscene2_case2_line1=Magic Crafters require no input or electricity, it will produce items for free. This one makes Iron plates. +cutscene2_case3_line1=You can upgrade the item production speed at the market with coins. +cutscene2_case4_line1=Biters evolve fast and sometimes multiply when killed hence keep pollution to a minimum by utilizing the free items. +cutscene2_case5_line1=Goal of this scenario is to eliminate all biters on the limited size map. +cutscene2_case5_line2=lets go back to spawn. Good luck and have fun! +replay_cutscene=To replay the introduction, use the __1__ command + # locale linked to the quadrants scenario [quadrants] on=ON From f1e89119680bbf961866ce25c848638541c046f4 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:13:36 -0500 Subject: [PATCH 17/36] Create cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 287 +++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 map_gen/maps/crash_site/cutscene.lua diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua new file mode 100644 index 00000000..b2411aab --- /dev/null +++ b/map_gen/maps/crash_site/cutscene.lua @@ -0,0 +1,287 @@ +local Event = require 'utils.event' +local Token = require 'utils.token' +local Task = require 'utils.task' +local Cutscene = require 'features.cutscene.cutscene_controller' +local CS_Rendering = require 'features.cutscene.rendering' +local Color = require 'resources.color_presets' +local PC = require 'features.player_create' +local register_rendering = Cutscene.register_rendering_id +local play_sound = Cutscene.play_sound +local draw_text = CS_Rendering.draw_text +local draw_multi_line = CS_Rendering.draw_multi_line_text +local rad = math.rad +local Rendering = require 'utils.rendering' + +local CrashsiteCutscene = {} + +local delayed_draw_text = + Token.register( + function(params) + local tick = params.tick + local player = params.player + if params.play_sound > 1 then + play_sound(tick, player, 'utility/list_box_click', 1) + end + register_rendering(player.index, tick, draw_text(params.settings, params.offset, params.text, params.player, params.params, params.draw_background, params.fit_to_edge)) + end +) +local function draw_text_auto_replacing(tick, settings, offset, texts, player, params, draw_background, fit_to_edge, time, between_time) + time = time or 400 + time = time / #texts + between_time = between_time or 30 + params.time_to_live = time - between_time + if params.background then + params.background.time_to_live = time - between_time + end + for i = 1, #texts do + if texts[i] ~= '' then + Task.set_timeout_in_ticks(time * (i - 1), delayed_draw_text, {tick = tick, settings = settings, offset = offset, text = texts[i], player = player, params = params, draw_background = draw_background, fit_to_edge = fit_to_edge, play_sound = i}) + end + end +end + +local delayed_draw_arrow = + Token.register( + function(params) + local player = params.player + local tick = params.tick + params = params.params + local rendering_parmas = params.params + local id = CS_Rendering.draw_arrow(params.settings, params.offset, player, rendering_parmas, params.fit_to_edge) + register_rendering(player.index, tick, id) + Rendering.blink(id, 20, rendering_parmas.time_to_live) + end +) +local function delayed_function(func, player, tick, params, offset_time) + Task.set_timeout_in_ticks(offset_time, func, {player = player, tick = tick, params = params}) +end + +local original_resolution = {height = 1440, width = 2560} +local original_zoom = 1 + +local function cutscene_function_redmew(player_index, waypoint_index, params) + local cases = {} + local player = game.players[player_index] + local ttw = params.time_to_wait + local zoom = params.zoom + local tick = params.tick + local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} + + if waypoint_index ~= -1 then + play_sound(tick, player, 'utility/list_box_click', 1) + end + cases[-1] = function() + play_sound(tick, player, 'ambient/pollution', 1, 550) + register_rendering(player_index, tick, CS_Rendering.blackout(player, zoom, ttw + 10)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -16}, 'Crashsite', player, {scale = 10, time_to_live = ttw, color = Color.red}, false, false)) + register_rendering( + player_index, + tick, + draw_multi_line(settings, {x = 0, y = -5}, {{'crashsite.cutscene1_case_line2', 'Crashsite'}, '---------------------', {'crashsite.cutscene1_case_line4', 'Redmew'}, {'crashsite.cutscene1_case_line5', 'www.redmew.com/discord'}}, player, {scale = 5, time_to_live = ttw}, false) + ) + draw_text_auto_replacing(tick, settings, {x = 0, y = 10}, {'', {'crashsite.cutscene1_case_line6'}}, player, {scale = 3}, false, false, ttw, 0) + end + cases[0] = function() + register_rendering(player_index, tick, CS_Rendering.blackout(player, zoom, ttw + 1)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = 0}, 'Redmew - Crashsite', player, {scale = 10, time_to_live = ttw - 60, color = Color.red}, false, false)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -5}, 'Introduction', player, {scale = 5, time_to_live = ttw - 60}, false, false)) + + delayed_function(delayed_draw_arrow, player, tick, {settings = settings, offset = {x = 7, y = 2.5}, params = {rotation = rad(-45), time_to_live = 275 * 3 - 30}, fit_to_edge = true}, 0) + + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'This is our toolbar!'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275) + + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', "Here you'll find a wide range of tools and informations about us!"}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 2) + + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', '', 'Hover your mouse over them for more information'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 3) + + delayed_function(delayed_draw_arrow, player, tick, {settings = settings, offset = {x = 1, y = 2.5}, params = {rotation = rad(-45), time_to_live = 275 - 30}, fit_to_edge = true}, 275 * 3) + + draw_text_auto_replacing(tick, settings, {x = 2.5, y = 3}, {'', '', '', 'You can toggle our toolbar with this button'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 4) + end + cases[1] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case1_line1'}, {'crashsite.cutscene1_case1_line2'}, {'crashsite.cutscene1_case1_line3'}}, player, {scale = 2.5}, true, false, 400 * 3) + end + cases[2] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case2_line1'}}, player, {scale = 2.5}, true, false, 300) + end + cases[3] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case3_line1'}}, player, {scale = 3}, true, false, 300) + end + local case = cases[waypoint_index] + if case then + case() + end +end + +local waypoints_redmew = { + { + -- case -1 + position = {x = 0, y = 0}, + transition_time = 60, + time_to_wait = 600, + zoom = 0.5 + }, + { + -- case 0 + position = {x = 0, y = 0}, + transition_time = 0, + time_to_wait = 300 * 4, + zoom = 0.5 + }, + { + -- case 1 + position = {x = 0, y = -5}, + transition_time = 120, + time_to_wait = 400 * 3, + zoom = 1.2 + }, + { + -- case 2 + position = {x = -3, y = -5}, + transition_time = 90, + time_to_wait = 300, + zoom = 1.6 + }, + { + -- case 3 + position = {x = 0, y = 0}, + transition_time = 60, + time_to_wait = 120, + zoom = 0.7 + } +} + +local function cutscene_function_outpost(player_index, waypoint_index, params) + local cases = {} + local player = game.players[player_index] + local ttw = params.time_to_wait + local zoom = params.zoom + local tick = params.tick + local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} + + if waypoint_index ~= -1 then + play_sound(tick, player, 'utility/list_box_click', 1) + end + + cases[-1] = function() + play_sound(tick, player, 'utility/scenario_message') + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case_line1'}, {'crashsite.cutscene2_case_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375 * 2) + end + cases[0] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case0_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375) + end + cases[1] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case1_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 500) + end + cases[2] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case2_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 600) + end + cases[3] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case3_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 500) + end + cases[4] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case4_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 600) + end + cases[5] = function() + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case5_line1'}, {'crashsite.cutscene2_case5_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 400 * 2) + end + local case = cases[waypoint_index] + if case then + case() + end +end + +local waypoints_outpost = { + { + -- case -1 + position = {x = 0, y = 0}, + transition_time = 90, + time_to_wait = 375 * 2, + zoom = 0.5 + }, + { + -- case 0 + position = {x = 0, y = -10}, + transition_time = 120, + time_to_wait = 375, + zoom = 1.5 + }, + { + -- case 1 + position = {x = 0, y = 0}, + transition_time = 120, + time_to_wait = 500, + zoom = 1 + }, + { + -- case 2 + position = {x = 4, y = 0}, + transition_time = 90, + time_to_wait = 600, + zoom = 2.5 + }, + { + -- case 3 + position = {x = -4, y = 0}, + transition_time = 90, + time_to_wait = 500, + zoom = 2.5 + }, + { + -- case 4 + position = {x = 0, y = 0}, + transition_time = 60, + time_to_wait = 600, + zoom = 2 + }, + { + -- case 5 + position = {x = 0, y = 25}, + transition_time = 60, + time_to_wait = 400 * 2, + zoom = 1.5 + } +} + +local start_cutscene_outpost = + Token.register( + function(player_index) + local player = game.get_player(player_index) + player.teleport({0, 30}, 'cutscene') + Cutscene.register_running_cutscene(player_index, 'Crashsite_Outpost', 60) + end +) +local function terminate_function_redmew(player_index) + Task.set_timeout_in_ticks(1, start_cutscene_outpost, player_index) +end + +local function terminate_function_outpost(player_index) + local player = game.get_player(player_index) + player.teleport({0, 0}, 'redmew') + PC.show_start_up(player) + player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) +end + +Cutscene.register_cutscene_function('Crashsite_Welcome', waypoints_redmew, Token.register(cutscene_function_redmew), Token.register(terminate_function_redmew)) +Cutscene.register_cutscene_function('Crashsite_Outpost', waypoints_outpost, Token.register(cutscene_function_outpost), Token.register(terminate_function_outpost)) + +Cutscene.register_replay('Crashsite_Welcome', 120) + +local start_cutscene = + Token.register( + function(params) + Cutscene.register_running_cutscene(params.event.player_index, 'Crashsite_Welcome', 120) + end +) +function CrashsiteCutscene.register() + global.config.player_create.cutscene = true + + Event.add( + defines.events.on_player_created, + function(event) + Task.set_timeout_in_ticks(60, start_cutscene, {event = event}) + end +) +end + +return CrashsiteCutscene From 20bc8cb5cb05bbacfa682c89539fe56a55ad7b8a Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:32:20 -0500 Subject: [PATCH 18/36] Update cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index b2411aab..d7abba0a 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -154,7 +154,6 @@ local waypoints_redmew = { local function cutscene_function_outpost(player_index, waypoint_index, params) local cases = {} local player = game.players[player_index] - local ttw = params.time_to_wait local zoom = params.zoom local tick = params.tick local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} From 8a0873f68fb8fbae8a6e640760c2e69a2098d7cb Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Sun, 17 Nov 2019 23:34:07 -0500 Subject: [PATCH 19/36] Update scenario.lua --- map_gen/maps/crash_site/scenario.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index 6d66553a..7364d038 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -182,7 +182,7 @@ local function init() local outpost_random = Random.new(outpost_seed, outpost_seed * 2) local outpost_builder = OutpostBuilder.new(outpost_random) - + game.create_surface('cutscene') game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) game.surfaces.cutscene.force_generate_chunk_requests() From 5f456347b2cab99330984985770b7f468c09610f Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Mon, 18 Nov 2019 00:08:27 -0500 Subject: [PATCH 20/36] Update cutscene.lua minor addition --- map_gen/maps/crash_site/cutscene.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index d7abba0a..ebd8e117 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -167,7 +167,7 @@ local function cutscene_function_outpost(player_index, waypoint_index, params) draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case_line1'}, {'crashsite.cutscene2_case_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375 * 2) end cases[0] = function() - draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case0_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375) + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case0_line1'}, {'crashsite.cutscene2_case0_line2'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 375 * 2) end cases[1] = function() draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene2_case1_line1'}}, player, {scale = 2.5, surface = "cutscene"}, true, false, 500) @@ -202,7 +202,7 @@ local waypoints_outpost = { -- case 0 position = {x = 0, y = -10}, transition_time = 120, - time_to_wait = 375, + time_to_wait = 375 * 2, zoom = 1.5 }, { From 903947cd6de766d25d36a083406c0325ecff1781 Mon Sep 17 00:00:00 2001 From: theorangeangle <36866626+theorangeangle@users.noreply.github.com> Date: Sun, 17 Nov 2019 23:21:50 -0600 Subject: [PATCH 21/36] small changes to improve grammar and flow --- locale/en/redmew_maps.cfg | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/locale/en/redmew_maps.cfg b/locale/en/redmew_maps.cfg index 8cc89dd7..1e021316 100644 --- a/locale/en/redmew_maps.cfg +++ b/locale/en/redmew_maps.cfg @@ -70,24 +70,24 @@ replay_cutscene=To replay the introduction, use the __1__ command cutscene1_case_line2=Welcome to __1__ cutscene1_case_line4=This is a custom scenario developed by __1__ cutscene1_case_line5=Join us at __1__ -cutscene1_case_line6=The following introduction will help you get started! +cutscene1_case_line6=The following introduction will help you get started playing! cutscene1_case1_line1=This is the starting area. It has a market and a coin mint. -cutscene1_case1_line2=The coin mint produces coins at a limited rate. +cutscene1_case1_line2=The coin mint produces coins at a limited rate, upgradable at the market. cutscene1_case1_line3=Coins can also be obtained by killing biters,spitters,worms and spawners. cutscene1_case2_line1=Coins are used to buy items at the market. -cutscene1_case3_line1=This concludes the introduction. +cutscene1_case3_line1=This, along with the ore patches and wall, is your spawn. Onto the outposts. -cutscene2_case_line1=This is an "Outpost". +cutscene2_case_line1=This is an "Outpost". They come in many shapes and sizes, with everything from Iron Plates to MK2 Armor. cutscene2_case_line2=You will find many structures similar to this dotted across the map. -cutscene2_case0_line1=It is defended by enemy turrets. -cutscene2_case0_line2=You must capture the outpost by destroying them all. -cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters. -cutscene2_case2_line1=Magic Crafters require no input or electricity, it will produce items for free. This one makes Iron plates. -cutscene2_case3_line1=You can upgrade the item production speed at the market with coins. -cutscene2_case4_line1=Biters evolve fast and sometimes multiply when killed hence keep pollution to a minimum by utilizing the free items. -cutscene2_case5_line1=Goal of this scenario is to eliminate all biters on the limited size map. -cutscene2_case5_line2=lets go back to spawn. Good luck and have fun! -replay_cutscene=To replay the introduction, use the __1__ command +cutscene2_case0_line1=Outposts are defended by enemy turrets and walls. Turret strength scales with the rewards inside. +cutscene2_case0_line2=To "capture" an outpost, you must destroy all turrets. +cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters (assemblers or chemical plants). +cutscene2_case2_line1=Magic Crafters require no input or electricity, it will produce items for free. (This one makes Iron Plates.) +cutscene2_case3_line1=You can upgrade the crafting speed at the (local) market with coins. Some markets contain additional items. +cutscene2_case4_line1=Biters evolve fast (and sometimes multiply when killed!). Tip: keep pollution to a minimum by utilizing the free items. +cutscene2_case5_line1=The goal of this scenario is to eliminate all biters and launch a rocket on the limited size map. +cutscene2_case5_line2=This concludes the tour. Good luck and have fun! +replay_cutscene=To replay the introduction, use the __1__ command. You can also press the information icon for a text summary. # locale linked to the quadrants scenario [quadrants] From 46ccb4c277296369303c25a794d296a39e47882e Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Mon, 18 Nov 2019 18:22:14 -0500 Subject: [PATCH 22/36] Added cutscene init --- map_gen/maps/crash_site/scenario.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index 7364d038..efe41802 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -1,7 +1,6 @@ require 'map_gen.maps.crash_site.blueprint_extractor' require 'map_gen.maps.crash_site.entity_died_events' require 'map_gen.maps.crash_site.weapon_balance' -require 'map_gen.maps.crash_site.cutscene' local b = require 'map_gen.shared.builders' local Global = require('utils.global') @@ -15,6 +14,7 @@ local table = require 'utils.table' local RS = require 'map_gen.shared.redmew_surface' local MGSP = require 'resources.map_gen_settings' local RedmewConfig = require 'config' +local Cutscene = require 'map_gen.maps.crash_site.cutscene' local degrees = math.degrees @@ -187,6 +187,7 @@ local function init() game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) game.surfaces.cutscene.force_generate_chunk_requests() cutscene_outpost() + Cutscene.register() local stage1a = { small_iron_plate_factory, From 99a7657681bc279951812518b306ffc93026a066 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Mon, 18 Nov 2019 18:47:07 -0500 Subject: [PATCH 23/36] Timing tweaks for the new strings. --- map_gen/maps/crash_site/cutscene.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index ebd8e117..82399e1c 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -105,7 +105,7 @@ local function cutscene_function_redmew(player_index, waypoint_index, params) draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case2_line1'}}, player, {scale = 2.5}, true, false, 300) end cases[3] = function() - draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case3_line1'}}, player, {scale = 3}, true, false, 300) + draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case3_line1'}}, player, {scale = 3}, true, false, 400) end local case = cases[waypoint_index] if case then @@ -145,9 +145,9 @@ local waypoints_redmew = { { -- case 3 position = {x = 0, y = 0}, - transition_time = 60, - time_to_wait = 120, - zoom = 0.7 + transition_time = 90, + time_to_wait = 400, + zoom = 0.2 } } From 3afde6617b3959c99110e7b8127e2cbb1cbc61c9 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 20 Nov 2019 22:20:49 -0500 Subject: [PATCH 24/36] Added player valid check --- map_gen/maps/crash_site/cutscene.lua | 31 +++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index 82399e1c..2975e1e3 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -14,11 +14,18 @@ local Rendering = require 'utils.rendering' local CrashsiteCutscene = {} +local function valid(entity) + return entity and entity.valid +end + local delayed_draw_text = Token.register( function(params) - local tick = params.tick local player = params.player + if (not valid(player)) then + return + end + local tick = params.tick if params.play_sound > 1 then play_sound(tick, player, 'utility/list_box_click', 1) end @@ -44,6 +51,9 @@ local delayed_draw_arrow = Token.register( function(params) local player = params.player + if (not valid(player)) then + return + end local tick = params.tick params = params.params local rendering_parmas = params.params @@ -53,6 +63,9 @@ local delayed_draw_arrow = end ) local function delayed_function(func, player, tick, params, offset_time) + if (not valid(player)) then + return + end Task.set_timeout_in_ticks(offset_time, func, {player = player, tick = tick, params = params}) end @@ -60,8 +73,11 @@ local original_resolution = {height = 1440, width = 2560} local original_zoom = 1 local function cutscene_function_redmew(player_index, waypoint_index, params) - local cases = {} local player = game.players[player_index] + if (not valid(player)) then + return + end + local cases = {} local ttw = params.time_to_wait local zoom = params.zoom local tick = params.tick @@ -152,8 +168,11 @@ local waypoints_redmew = { } local function cutscene_function_outpost(player_index, waypoint_index, params) - local cases = {} local player = game.players[player_index] + if (not valid(player)) then + return + end + local cases = {} local zoom = params.zoom local tick = params.tick local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} @@ -246,6 +265,9 @@ local start_cutscene_outpost = Token.register( function(player_index) local player = game.get_player(player_index) + if (not valid(player)) then + return + end player.teleport({0, 30}, 'cutscene') Cutscene.register_running_cutscene(player_index, 'Crashsite_Outpost', 60) end @@ -256,6 +278,9 @@ end local function terminate_function_outpost(player_index) local player = game.get_player(player_index) + if (not valid(player)) then + return + end player.teleport({0, 0}, 'redmew') PC.show_start_up(player) player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) From 4244afd8c5137d4e73039e653f58b96e12a0a3d6 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 20 Nov 2019 22:43:03 -0500 Subject: [PATCH 25/36] Condensed code --- map_gen/maps/crash_site/scenario.lua | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index efe41802..14cf5f06 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -139,14 +139,7 @@ local spawn_callback = local function cutscene_builder(name, x, y) game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} end -local function cutscene_loot() - for i = -2, 2 do - for j = 3, 5 do - local box = game.surfaces.cutscene.create_entity{name = 'steel-chest', position = {i, j}, force = game.forces.enemy} - box.insert{name = "iron-plate", count = 50} - end - end -end + local function cutscene_outpost() local tiles = {} for i = -11, 12 do @@ -170,9 +163,14 @@ local function cutscene_outpost() cutscene_builder('gun-turret', -9+i, 10) end end - cutscene_loot() - game.surfaces.cutscene.create_entity{name = "market", position = {-4, 0}, force = game.forces.enemy} - game.surfaces.cutscene.create_entity{name = "electric-furnace", position = {4, 0}, force = game.forces.enemy} + for i = -2, 2 do + for j = 3, 5 do + local loot_box = cutscene_builder('steel-chest', i, j) + loot_box.insert{name = "iron-plate", count = 50} + end + end + cutscene_builder('market', -4, 0) + cutscene_builder('electric-furnace', 4, 0) game.surfaces.cutscene.set_tiles(tiles) end From a98aea7b49b12c6876935b157c73f5e4904f81a1 Mon Sep 17 00:00:00 2001 From: grilledham Date: Sun, 24 Nov 2019 11:37:52 +0000 Subject: [PATCH 26/36] missing entity + desync fixes --- map_gen/maps/crash_site/cutscene.lua | 10 +++++-- map_gen/maps/crash_site/scenario.lua | 45 +++++++++++++++------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index 2975e1e3..eccff389 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -297,15 +297,19 @@ local start_cutscene = Cutscene.register_running_cutscene(params.event.player_index, 'Crashsite_Welcome', 120) end ) -function CrashsiteCutscene.register() - global.config.player_create.cutscene = true +function CrashsiteCutscene.on_init() + global.config.player_create.cutscene = true + CrashsiteCutscene.on_load() +end + +function CrashsiteCutscene.on_load() Event.add( defines.events.on_player_created, function(event) Task.set_timeout_in_ticks(60, start_cutscene, {event = event}) end -) + ) end return CrashsiteCutscene diff --git a/map_gen/maps/crash_site/scenario.lua b/map_gen/maps/crash_site/scenario.lua index 14cf5f06..a82ec886 100644 --- a/map_gen/maps/crash_site/scenario.lua +++ b/map_gen/maps/crash_site/scenario.lua @@ -137,7 +137,7 @@ local spawn_callback = ) local function cutscene_builder(name, x, y) - game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} + return game.surfaces.cutscene.create_entity{name = name, position = {x, y}, force = game.forces.enemy} end local function cutscene_outpost() @@ -148,19 +148,19 @@ local function cutscene_outpost() end end for i = 0, 22 do - cutscene_builder('stone-wall', -11, -10+i) - cutscene_builder('stone-wall', -12, -10+i) - cutscene_builder('stone-wall', -12+i, -11) - cutscene_builder('stone-wall', -12+i, -12) - cutscene_builder('stone-wall', 11, -12+i) - cutscene_builder('stone-wall', 12, -12+i) - cutscene_builder('stone-wall', -10+i, 11) - cutscene_builder('stone-wall', -10+i, 12) - if i%4 == 0 and i ~= 20 and i ~= 0 then - cutscene_builder('gun-turret', -8, -8+i) - cutscene_builder('gun-turret', 10, -8+i) - cutscene_builder('gun-turret', -9+i, -8) - cutscene_builder('gun-turret', -9+i, 10) + cutscene_builder('stone-wall', -11, -10 + i) + cutscene_builder('stone-wall', -12, -10 + i) + cutscene_builder('stone-wall', -12 + i, -11) + cutscene_builder('stone-wall', -12 + i, -12) + cutscene_builder('stone-wall', 11, -12 + i) + cutscene_builder('stone-wall', 12, -12 + i) + cutscene_builder('stone-wall', -10 + i, 11) + cutscene_builder('stone-wall', -10 + i, 12) + if i % 4 == 0 and i ~= 20 and i ~= 0 then + cutscene_builder('gun-turret', -8, -8 + i) + cutscene_builder('gun-turret', 10, -8 + i) + cutscene_builder('gun-turret', -9 + i, -8) + cutscene_builder('gun-turret', -9 + i, 10) end end for i = -2, 2 do @@ -170,7 +170,8 @@ local function cutscene_outpost() end end cutscene_builder('market', -4, 0) - cutscene_builder('electric-furnace', 4, 0) + local furnace = cutscene_builder('electric-furnace', 4, 0) + furnace.insert('iron-ore') game.surfaces.cutscene.set_tiles(tiles) end @@ -181,11 +182,15 @@ local function init() local outpost_builder = OutpostBuilder.new(outpost_random) - game.create_surface('cutscene') - game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) - game.surfaces.cutscene.force_generate_chunk_requests() - cutscene_outpost() - Cutscene.register() + if on_init then + game.create_surface('cutscene') + game.surfaces.cutscene.request_to_generate_chunks({0,0}, 2) + game.surfaces.cutscene.force_generate_chunk_requests() + cutscene_outpost() + Cutscene.on_init() + else + Cutscene.on_load() + end local stage1a = { small_iron_plate_factory, From 9ea33b63032ac289e4432ae66e8a98688b814b0f Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Tue, 26 Nov 2019 14:25:43 -0500 Subject: [PATCH 27/36] one skip btn press needed Added supporting changes to cutscene_controller.lua --- map_gen/maps/crash_site/cutscene.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index eccff389..448f776d 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -272,7 +272,16 @@ local start_cutscene_outpost = Cutscene.register_running_cutscene(player_index, 'Crashsite_Outpost', 60) end ) -local function terminate_function_redmew(player_index) +local function terminate_function_redmew(player_index,skip_btn_flag) + if skip_btn_flag then + local player = game.get_player(player_index) + if (not valid(player)) then + return + end + PC.show_start_up(player) + player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) + return + end Task.set_timeout_in_ticks(1, start_cutscene_outpost, player_index) end From e17c3d28f76476bc69723b014d00f87058e100c3 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Tue, 26 Nov 2019 17:18:00 -0500 Subject: [PATCH 28/36] Prevent character collision --- map_gen/maps/crash_site/cutscene.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index 448f776d..f3d32b9a 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -290,7 +290,8 @@ local function terminate_function_outpost(player_index) if (not valid(player)) then return end - player.teleport({0, 0}, 'redmew') + local pos = game.surfaces.cutscene.find_non_colliding_position('character', {0, 0}, 0, 1) + player.teleport(pos, 'redmew') PC.show_start_up(player) player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) end From b0354cdb39c9a2eaa3c8c97208d428a6f6c6730d Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Tue, 3 Dec 2019 21:01:01 -0500 Subject: [PATCH 29/36] Update cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index f3d32b9a..a4297179 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -82,7 +82,8 @@ local function cutscene_function_redmew(player_index, waypoint_index, params) local zoom = params.zoom local tick = params.tick local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} - + + player.game_view_settings.show_entity_info = true if waypoint_index ~= -1 then play_sound(tick, player, 'utility/list_box_click', 1) end @@ -177,6 +178,7 @@ local function cutscene_function_outpost(player_index, waypoint_index, params) local tick = params.tick local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} + player.game_view_settings.show_entity_info = true if waypoint_index ~= -1 then play_sound(tick, player, 'utility/list_box_click', 1) end @@ -268,7 +270,8 @@ local start_cutscene_outpost = if (not valid(player)) then return end - player.teleport({0, 30}, 'cutscene') + local pos = game.surfaces.cutscene.find_non_colliding_position('character', {0, 30}, 0, 1) + player.teleport(pos, 'cutscene') Cutscene.register_running_cutscene(player_index, 'Crashsite_Outpost', 60) end ) @@ -290,7 +293,7 @@ local function terminate_function_outpost(player_index) if (not valid(player)) then return end - local pos = game.surfaces.cutscene.find_non_colliding_position('character', {0, 0}, 0, 1) + local pos = game.surfaces.redmew.find_non_colliding_position('character', {0, 0}, 0, 1) player.teleport(pos, 'redmew') PC.show_start_up(player) player.print({'crashsite.replay_cutscene', '/replay'}, Color.yellow) From 51b89e8989c28c5ecb9a11b6a5fdfa6d247c261f Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Tue, 3 Dec 2019 21:36:58 -0500 Subject: [PATCH 30/36] Enhancements to enable multi-surface cutscenes The setting of the skip_btn_flag to true will... 1. Enable one press to skip cutscene while in multiple. 2. Code paths updated to ensure the Player doesn't get locked out of the game while in a multi-surface cutscene. 3. Do different things depending on which cutscene was canceled in a multi-surface cutscene. --- features/cutscene/cutscene_controller.lua | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/features/cutscene/cutscene_controller.lua b/features/cutscene/cutscene_controller.lua index 9325f1f2..46e9a857 100644 --- a/features/cutscene/cutscene_controller.lua +++ b/features/cutscene/cutscene_controller.lua @@ -348,7 +348,7 @@ local reconnect_character = player.exit_cutscene() player.set_controller {type = defines.controllers.character, character = character} if func then - Token.get(func)(player_index) + Token.get(func)(player_index, params.skip_btn_flag) end Token.get(remove_renderings)(running_cutscene.rendering) running_cutscene.btn.destroy() @@ -357,20 +357,25 @@ local reconnect_character = end ) -function Public.terminate_cutscene(player_index, ticks) +function Public.terminate_cutscene(player_index, ticks,skip_btn_flag) local running_cutscene = running_cutscenes[player_index] if not running_cutscene then return end ticks = ticks and ticks or 1 debug_print('Terminating cutscene in ' .. ticks .. ' Ticks') + if skip_btn_flag == nil then + skip_btn_flag = false + end + debug_print('Is terminate_func ignored = ' .. tostring(skip_btn_flag)) set_timeout_in_ticks( ticks, reconnect_character, { player_index = player_index, - running_cutscene = running_cutscene + running_cutscene = running_cutscene, + skip_btn_flag = skip_btn_flag } ) end @@ -460,7 +465,7 @@ function Public.goTo(player_index, waypoint_index) end local function restore(event) - Public.terminate_cutscene(event.player_index) + Public.terminate_cutscene(event.player_index, 1, true) end Event.add(defines.events.on_cutscene_waypoint_reached, handler) @@ -497,7 +502,7 @@ local function skip_cutscene(_, player) return end if player.controller_type == defines.controllers.cutscene then - Public.terminate_cutscene(player.index) + Public.terminate_cutscene(player.index, 1, true) end end From db66b17314f18ad099c52a033e02ec62de2c98b6 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Tue, 3 Dec 2019 21:38:51 -0500 Subject: [PATCH 31/36] Update cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index a4297179..ff1e4028 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -82,7 +82,7 @@ local function cutscene_function_redmew(player_index, waypoint_index, params) local zoom = params.zoom local tick = params.tick local settings = {original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = zoom} - + player.game_view_settings.show_entity_info = true if waypoint_index ~= -1 then play_sound(tick, player, 'utility/list_box_click', 1) From 8bd484c7675cd3e846f8adf742105d878d98a67b Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 4 Dec 2019 15:51:07 -0500 Subject: [PATCH 32/36] Update redmew_maps.cfg --- locale/en/redmew_maps.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/en/redmew_maps.cfg b/locale/en/redmew_maps.cfg index 1e021316..4dedc7e0 100644 --- a/locale/en/redmew_maps.cfg +++ b/locale/en/redmew_maps.cfg @@ -73,7 +73,7 @@ cutscene1_case_line5=Join us at __1__ cutscene1_case_line6=The following introduction will help you get started playing! cutscene1_case1_line1=This is the starting area. It has a market and a coin mint. cutscene1_case1_line2=The coin mint produces coins at a limited rate, upgradable at the market. -cutscene1_case1_line3=Coins can also be obtained by killing biters,spitters,worms and spawners. +cutscene1_case1_line3=Coins can also be obtained by killing biters, spitters, worms and spawners. cutscene1_case2_line1=Coins are used to buy items at the market. cutscene1_case3_line1=This, along with the ore patches and wall, is your spawn. Onto the outposts. @@ -81,7 +81,7 @@ cutscene2_case_line1=This is an "Outpost". They come in many shapes and sizes, w cutscene2_case_line2=You will find many structures similar to this dotted across the map. cutscene2_case0_line1=Outposts are defended by enemy turrets and walls. Turret strength scales with the rewards inside. cutscene2_case0_line2=To "capture" an outpost, you must destroy all turrets. -cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters (assemblers or chemical plants). +cutscene2_case1_line1=The Outpost contains a Market, Loot Chests and Magic Crafters (assemblers, chemical plants, etc). cutscene2_case2_line1=Magic Crafters require no input or electricity, it will produce items for free. (This one makes Iron Plates.) cutscene2_case3_line1=You can upgrade the crafting speed at the (local) market with coins. Some markets contain additional items. cutscene2_case4_line1=Biters evolve fast (and sometimes multiply when killed!). Tip: keep pollution to a minimum by utilizing the free items. From 6a43accf8552f90d06e86131d0a8dced925d1ebb Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 4 Dec 2019 16:07:51 -0500 Subject: [PATCH 33/36] Update cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index ff1e4028..952c19ef 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -101,19 +101,19 @@ local function cutscene_function_redmew(player_index, waypoint_index, params) cases[0] = function() register_rendering(player_index, tick, CS_Rendering.blackout(player, zoom, ttw + 1)) register_rendering(player_index, tick, draw_text(settings, {x = 0, y = 0}, 'Redmew - Crashsite', player, {scale = 10, time_to_live = ttw - 60, color = Color.red}, false, false)) - register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -5}, 'Introduction', player, {scale = 5, time_to_live = ttw - 60}, false, false)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -5}, {{'crashsite.cutscene1_case0_line2'}}, player, {scale = 5, time_to_live = ttw - 60}, false, false)) delayed_function(delayed_draw_arrow, player, tick, {settings = settings, offset = {x = 7, y = 2.5}, params = {rotation = rad(-45), time_to_live = 275 * 3 - 30}, fit_to_edge = true}, 0) - draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'This is our toolbar!'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275) + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {{'crashsite.cutscene1_case0_line3'}}, player, {scale = 2.5, alignment = 'left'}, false, true, 275) - draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', "Here you'll find a wide range of tools and informations about us!"}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 2) + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', {'crashsite.cutscene1_case0_line4'}}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 2) - draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', '', 'Hover your mouse over them for more information'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 3) + draw_text_auto_replacing(tick, settings, {x = 8.5, y = 3}, {'', '', {'crashsite.cutscene1_case0_line5'}}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 3) delayed_function(delayed_draw_arrow, player, tick, {settings = settings, offset = {x = 1, y = 2.5}, params = {rotation = rad(-45), time_to_live = 275 - 30}, fit_to_edge = true}, 275 * 3) - draw_text_auto_replacing(tick, settings, {x = 2.5, y = 3}, {'', '', '', 'You can toggle our toolbar with this button'}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 4) + draw_text_auto_replacing(tick, settings, {x = 2.5, y = 3}, {'', '', '', {'crashsite.cutscene1_case0_line6'}}, player, {scale = 2.5, alignment = 'left'}, false, true, 275 * 4) end cases[1] = function() draw_text_auto_replacing(tick, settings, {x = 0, y = 18}, {{'crashsite.cutscene1_case1_line1'}, {'crashsite.cutscene1_case1_line2'}, {'crashsite.cutscene1_case1_line3'}}, player, {scale = 2.5}, true, false, 400 * 3) From 5fabae91574e706d63db1012d5fd91b5c8b1c402 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 4 Dec 2019 16:08:47 -0500 Subject: [PATCH 34/36] Update redmew_maps.cfg --- locale/en/redmew_maps.cfg | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/locale/en/redmew_maps.cfg b/locale/en/redmew_maps.cfg index 4dedc7e0..b7083030 100644 --- a/locale/en/redmew_maps.cfg +++ b/locale/en/redmew_maps.cfg @@ -71,6 +71,11 @@ cutscene1_case_line2=Welcome to __1__ cutscene1_case_line4=This is a custom scenario developed by __1__ cutscene1_case_line5=Join us at __1__ cutscene1_case_line6=The following introduction will help you get started playing! +cutscene1_case0_line2=Introduction +cutscene1_case0_line3=This is our toolbar! +cutscene1_case0_line4=Here you'll find a wide range of tools and informations about us! +cutscene1_case0_line5=Hover your mouse over them for more information +cutscene1_case0_line6=You can toggle our toolbar with this button cutscene1_case1_line1=This is the starting area. It has a market and a coin mint. cutscene1_case1_line2=The coin mint produces coins at a limited rate, upgradable at the market. cutscene1_case1_line3=Coins can also be obtained by killing biters, spitters, worms and spawners. From 67478950bcefe127427a1d3479a101f038658519 Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 4 Dec 2019 16:47:00 -0500 Subject: [PATCH 35/36] Update redmew_maps.cfg --- locale/en/redmew_maps.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/locale/en/redmew_maps.cfg b/locale/en/redmew_maps.cfg index b7083030..e87208a1 100644 --- a/locale/en/redmew_maps.cfg +++ b/locale/en/redmew_maps.cfg @@ -71,7 +71,6 @@ cutscene1_case_line2=Welcome to __1__ cutscene1_case_line4=This is a custom scenario developed by __1__ cutscene1_case_line5=Join us at __1__ cutscene1_case_line6=The following introduction will help you get started playing! -cutscene1_case0_line2=Introduction cutscene1_case0_line3=This is our toolbar! cutscene1_case0_line4=Here you'll find a wide range of tools and informations about us! cutscene1_case0_line5=Hover your mouse over them for more information From 734693a19fe13db25a192f3b1657fba0346d457d Mon Sep 17 00:00:00 2001 From: Zahir Khan Date: Wed, 4 Dec 2019 16:48:26 -0500 Subject: [PATCH 36/36] Update cutscene.lua --- map_gen/maps/crash_site/cutscene.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/map_gen/maps/crash_site/cutscene.lua b/map_gen/maps/crash_site/cutscene.lua index 952c19ef..5eb5a780 100644 --- a/map_gen/maps/crash_site/cutscene.lua +++ b/map_gen/maps/crash_site/cutscene.lua @@ -101,7 +101,7 @@ local function cutscene_function_redmew(player_index, waypoint_index, params) cases[0] = function() register_rendering(player_index, tick, CS_Rendering.blackout(player, zoom, ttw + 1)) register_rendering(player_index, tick, draw_text(settings, {x = 0, y = 0}, 'Redmew - Crashsite', player, {scale = 10, time_to_live = ttw - 60, color = Color.red}, false, false)) - register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -5}, {{'crashsite.cutscene1_case0_line2'}}, player, {scale = 5, time_to_live = ttw - 60}, false, false)) + register_rendering(player_index, tick, draw_text(settings, {x = 0, y = -5}, 'Introduction', player, {scale = 5, time_to_live = ttw - 60}, false, false)) delayed_function(delayed_draw_arrow, player, tick, {settings = settings, offset = {x = 7, y = 2.5}, params = {rotation = rad(-45), time_to_live = 275 * 3 - 30}, fit_to_edge = true}, 0)