2019-06-09 00:55:25 +02:00
|
|
|
local Event = require 'utils.event'
|
|
|
|
local Token = require 'utils.token'
|
|
|
|
local Task = require 'utils.task'
|
2019-06-10 15:15:14 +02:00
|
|
|
local Debug = require 'utils.debug'
|
2019-06-09 00:55:25 +02:00
|
|
|
local Cutscene = require 'features.cutscene.cutscene_controller'
|
|
|
|
local Rendering = require 'features.cutscene.renderings'
|
|
|
|
local RS = require 'map_gen.shared.redmew_surface'
|
2019-06-09 13:31:44 +02:00
|
|
|
local Color = require 'resources.color_presets'
|
2019-06-09 23:59:16 +02:00
|
|
|
local PC = require 'features.player_create'
|
2019-06-10 15:15:14 +02:00
|
|
|
local register_rendering = Cutscene.register_rendering_id
|
|
|
|
local play_sound = Cutscene.play_sound
|
|
|
|
local draw_text = Rendering.draw_text
|
|
|
|
local draw_multi_line = Rendering.draw_multi_line_text
|
2019-06-09 00:55:25 +02:00
|
|
|
|
2019-06-10 15:15:14 +02:00
|
|
|
local DiggyCutscene = {}
|
2019-06-09 23:59:16 +02:00
|
|
|
|
2019-06-10 19:10:02 +02:00
|
|
|
local delayed_draw_text =
|
|
|
|
Token.register(
|
|
|
|
function(params)
|
|
|
|
if params.play_sound > 1 then
|
|
|
|
play_sound(params.player, 'utility/list_box_click', 1)
|
|
|
|
end
|
|
|
|
register_rendering(params.player.index, draw_text(params.original_resolution, params.original_zoom, params.player_zoom, params.offset, params.text, params.scale, params.player, params.params, params.draw_background))
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
|
|
|
local function draw_text_auto_replacing(original_resolution, original_zoom, player_zoom, offset, texts, scale, player, params, draw_background, 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
|
2019-06-10 19:29:14 +02:00
|
|
|
if texts[i] ~= '' then
|
|
|
|
Task.set_timeout_in_ticks(
|
|
|
|
time * (i - 1),
|
|
|
|
delayed_draw_text,
|
|
|
|
{original_resolution = original_resolution, original_zoom = original_zoom, player_zoom = player_zoom, offset = offset, text = texts[i], scale = scale, player = player, params = params, draw_background = draw_background, play_sound = i}
|
|
|
|
)
|
|
|
|
end
|
2019-06-10 19:10:02 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-06-09 00:55:25 +02:00
|
|
|
local function cutscene_function(player_index, waypoint_index, params)
|
|
|
|
local cases = {}
|
|
|
|
local player = game.players[player_index]
|
2019-06-09 13:31:44 +02:00
|
|
|
local ttw = params.time_to_wait
|
|
|
|
local zoom = params.zoom
|
2019-06-10 01:04:14 +02:00
|
|
|
if waypoint_index ~= -1 then
|
2019-06-09 23:59:16 +02:00
|
|
|
play_sound(player, 'utility/list_box_click', 1)
|
|
|
|
--play_sound(player, 'utility/inventory_move', 1, 10)
|
|
|
|
end
|
2019-06-09 00:55:25 +02:00
|
|
|
cases[-1] = function()
|
2019-06-09 23:59:16 +02:00
|
|
|
play_sound(player, 'utility/game_won')
|
2019-06-10 19:10:02 +02:00
|
|
|
play_sound(player, 'ambient/first-light', 1, 550)
|
2019-06-10 15:15:14 +02:00
|
|
|
register_rendering(player_index, Rendering.blackout(player, zoom, ttw + 1))
|
|
|
|
register_rendering(player_index, draw_text({height = 1440, width = 2560}, 1, zoom, {x = 0, y = -16}, 'Diggy', 10, player, {time_to_live = ttw, color = Color.yellow}, false))
|
|
|
|
register_rendering(
|
2019-06-09 23:59:16 +02:00
|
|
|
player_index,
|
2019-06-10 16:32:13 +02:00
|
|
|
draw_multi_line({height = 1440, width = 2560}, 1, zoom, {x = 0, y = -5}, {{'diggy.cutscene_case_line2', 'Diggy'}, '---------------------', {'diggy.cutscene_case_line4', 'Redmew'}, {'diggy.cutscene_case_line5', 'www.redmew.com/discord'}}, 5, player, {time_to_live = ttw}, false)
|
2019-06-09 23:59:16 +02:00
|
|
|
)
|
2019-06-10 19:29:14 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 10}, {'', {'diggy.cutscene_case_line6'}}, 3, player, {}, false, ttw, 0)
|
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 16}, {'', '', {'diggy.cutscene_case_line7'}}, 1, player, {}, false, ttw, 0)
|
2019-06-09 00:55:25 +02:00
|
|
|
end
|
|
|
|
cases[0] = function()
|
2019-06-10 19:10:02 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case0_line1'}, {'diggy.cutscene_case0_line3'}}, 2.5, player, {}, true, ttw)
|
2019-06-10 16:32:13 +02:00
|
|
|
local entity = RS.get_surface().find_entities_filtered {position = {0, 0}, radius = 20, name = 'stone-wall', limit = 1}
|
2019-06-09 00:55:25 +02:00
|
|
|
if entity[1] then
|
|
|
|
local position = entity[1].position
|
2019-06-09 13:31:44 +02:00
|
|
|
local waypoint = {
|
2019-06-09 12:26:51 +02:00
|
|
|
-- case 1
|
2019-06-09 00:55:25 +02:00
|
|
|
position = position,
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 275,
|
2019-06-09 00:55:25 +02:00
|
|
|
zoom = 5
|
|
|
|
}
|
2019-06-10 19:29:14 +02:00
|
|
|
Debug.print_position(position, 'position of wall')
|
2019-06-09 12:26:51 +02:00
|
|
|
Cutscene.inject_waypoint(player_index, waypoint, 3, true)
|
2019-06-09 00:55:25 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
cases[1] = function()
|
2019-06-10 19:10:02 +02:00
|
|
|
--play_sound(player, 'utility/build_small', 1, 25)
|
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case1_line1'}}, 2.5, player, {}, true, ttw)
|
2019-06-09 00:55:25 +02:00
|
|
|
end
|
|
|
|
cases[2] = function()
|
2019-06-10 19:10:02 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case2_line1'}, {'diggy.cutscene_case2_line3'}}, 2.5, player, {}, true, ttw)
|
2019-06-09 00:55:25 +02:00
|
|
|
end
|
|
|
|
cases[3] = function()
|
2019-06-10 19:10:02 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case3_line1'}, {'diggy.cutscene_case3_line3'}}, 2.5, player, {}, true, ttw)
|
2019-06-10 15:15:14 +02:00
|
|
|
local radius = 10
|
2019-06-09 23:59:16 +02:00
|
|
|
local entity
|
|
|
|
repeat
|
2019-06-10 16:32:13 +02:00
|
|
|
entity = RS.get_surface().find_entities_filtered {position = {0, 0}, radius = radius, name = 'rock-big', limit = 1}
|
|
|
|
if radius <= 10 then
|
|
|
|
radius = 0
|
|
|
|
end
|
|
|
|
radius = radius + 25
|
2019-06-09 23:59:16 +02:00
|
|
|
until entity[1] or radius >= 200
|
|
|
|
local position = {0, 3.5}
|
|
|
|
local way_zoom = 0.4
|
|
|
|
if entity[1] then
|
|
|
|
position = entity[1].position
|
|
|
|
way_zoom = 5
|
2019-06-10 15:15:14 +02:00
|
|
|
Debug.print_position(position, 'position of rock')
|
2019-06-09 23:59:16 +02:00
|
|
|
end
|
2019-06-09 00:55:25 +02:00
|
|
|
local waypoint = {
|
|
|
|
-- case 4
|
|
|
|
position = position,
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 550,
|
2019-06-09 23:59:16 +02:00
|
|
|
zoom = way_zoom
|
2019-06-09 00:55:25 +02:00
|
|
|
}
|
|
|
|
Cutscene.inject_waypoint(player_index, waypoint, 6)
|
|
|
|
end
|
|
|
|
cases[4] = function()
|
2019-06-09 23:59:16 +02:00
|
|
|
play_sound(player, 'utility/axe_mining_ore', 3, 35)
|
2019-06-10 19:10:02 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case4_line1'}, {'diggy.cutscene_case4_line3'}}, 2.5, player, {}, true, ttw)
|
2019-06-09 00:55:25 +02:00
|
|
|
end
|
|
|
|
cases[5] = function()
|
2019-06-10 15:15:14 +02:00
|
|
|
play_sound(player, 'utility/research_completed', 1, 5)
|
2019-06-10 01:04:14 +02:00
|
|
|
local exp = 2500
|
|
|
|
local text = {'', '[img=item/automation-science-pack] ', {'diggy.float_xp_gained_research', exp}}
|
2019-06-10 16:32:13 +02:00
|
|
|
player.create_local_flying_text {position = params.position, text = text, color = Color.light_sky_blue, time_to_live = ttw / 3}
|
2019-06-10 19:10:02 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case5_line1'}, {'diggy.cutscene_case5_line3'}}, 2.5, player, {}, true, ttw)
|
2019-06-09 00:55:25 +02:00
|
|
|
end
|
|
|
|
cases[6] = function()
|
2019-06-10 01:04:14 +02:00
|
|
|
play_sound(player, 'utility/axe_fighting', 5, 25, 10)
|
|
|
|
play_sound(player, 'worm-sends-biters', 1, 70)
|
2019-06-10 19:10:02 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case6_line1'}, {'diggy.cutscene_case6_line3'}}, 2.5, player, {}, true, ttw)
|
2019-06-10 01:04:14 +02:00
|
|
|
end
|
|
|
|
cases[7] = function()
|
2019-06-10 19:10:02 +02:00
|
|
|
draw_text_auto_replacing({height = 1440, width = 2560}, 1, zoom, {x = 0, y = 18}, {{'diggy.cutscene_case7_line1'}, {'diggy.cutscene_case7_line3'}}, 2.5, player, {}, true, ttw)
|
2019-06-10 01:04:14 +02:00
|
|
|
--play_sound(player, 'utility/tutorial_notice', 1)
|
2019-06-09 00:55:25 +02:00
|
|
|
end
|
|
|
|
local case = cases[waypoint_index]
|
|
|
|
if case then
|
|
|
|
case()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
local waypoints = {
|
|
|
|
{
|
|
|
|
-- case -1
|
|
|
|
position = {x = 0, y = 0},
|
|
|
|
transition_time = 60,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 600,
|
2019-06-09 00:55:25 +02:00
|
|
|
zoom = 0.5
|
|
|
|
},
|
|
|
|
{
|
|
|
|
-- case 0
|
|
|
|
position = {x = 0, y = 0},
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 550,
|
2019-06-09 00:55:25 +02:00
|
|
|
zoom = 1
|
|
|
|
},
|
|
|
|
{
|
|
|
|
-- case 1
|
2019-06-09 12:26:51 +02:00
|
|
|
position = {x = 0, y = 0},
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 275,
|
2019-06-09 12:26:51 +02:00
|
|
|
zoom = 1.5
|
|
|
|
},
|
|
|
|
{
|
|
|
|
-- case 2
|
2019-06-09 00:55:25 +02:00
|
|
|
position = {x = 0.5, y = 3.5},
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 550,
|
2019-06-09 00:55:25 +02:00
|
|
|
zoom = 5
|
|
|
|
},
|
|
|
|
{
|
2019-06-09 12:26:51 +02:00
|
|
|
-- case 3
|
2019-06-09 00:55:25 +02:00
|
|
|
position = {x = 0, y = 0},
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 550,
|
2019-06-09 00:55:25 +02:00
|
|
|
zoom = 2
|
|
|
|
},
|
|
|
|
-- inserting case 4
|
|
|
|
{
|
|
|
|
-- case 5
|
2019-06-10 01:04:14 +02:00
|
|
|
position = {x = 0, y = -2},
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 550,
|
|
|
|
zoom = 1.8
|
2019-06-10 01:04:14 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
-- case 6
|
2019-06-09 00:55:25 +02:00
|
|
|
position = {x = 0, y = 0},
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 550,
|
2019-06-09 00:55:25 +02:00
|
|
|
zoom = 0.3
|
|
|
|
},
|
|
|
|
{
|
2019-06-10 01:04:14 +02:00
|
|
|
-- case 7
|
2019-06-09 00:55:25 +02:00
|
|
|
position = {x = 0, y = 0},
|
|
|
|
transition_time = 120,
|
2019-06-10 19:10:02 +02:00
|
|
|
time_to_wait = 430,
|
2019-06-09 00:55:25 +02:00
|
|
|
zoom = 0.8
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-09 23:59:16 +02:00
|
|
|
local function terminate_function(player_index)
|
2019-06-10 19:10:02 +02:00
|
|
|
local player = game.get_player(player_index)
|
|
|
|
PC.show_start_up(player)
|
|
|
|
player.print({'diggy.replay_cutscene', '/replay'}, Color.yellow)
|
2019-06-09 23:59:16 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
Cutscene.register_cutscene_function('Diggy_Welcome', waypoints, Token.register(cutscene_function), Token.register(terminate_function))
|
2019-06-10 15:15:14 +02:00
|
|
|
Cutscene.register_replay('Diggy_Welcome', 120)
|
2019-06-09 00:55:25 +02:00
|
|
|
|
2019-06-09 13:31:44 +02:00
|
|
|
local start_cutscene =
|
|
|
|
Token.register(
|
|
|
|
function(params)
|
|
|
|
Cutscene.register_running_cutscene(params.event.player_index, 'Diggy_Welcome', 120)
|
|
|
|
end
|
|
|
|
)
|
2019-06-09 00:55:25 +02:00
|
|
|
|
|
|
|
function DiggyCutscene.register()
|
2019-06-09 23:59:16 +02:00
|
|
|
global.config.player_create.cutscene = true
|
|
|
|
|
2019-06-09 00:55:25 +02:00
|
|
|
Event.add(
|
|
|
|
defines.events.on_player_created,
|
|
|
|
function(event)
|
|
|
|
Task.set_timeout_in_ticks(60, start_cutscene, {event = event})
|
|
|
|
end
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
return DiggyCutscene
|