--- NPE Scenario Story Table -- @module story -- storage for the story table, and event handler for conditions.lua local story = require('story_2') local action = require 'story-action' local condition = require 'story-condition' local init = require 'story-init' local update = require 'story-update' local scene = require 'story-nodes' local pollution = require(mod_name .. ".lualib.pollution") local misc = require(mod_name .. '.lualib.misc') local cutscenes = { compi_build_iron_cutscene = require('cutscenes.compi_build_iron_cutscene'), biters_revealed = require('cutscenes.biters_revealed'), biters_close_in = require('cutscenes.biters_close_in'), base_destroyed_east_revealed = require('cutscenes.base_destroyed_east_revealed') } local story_table = {} local main_quest = function(name) local quest_node = { name = name, init = init[name] or nil, condition = condition[name] or nil, update = update[name] or nil, action = action[name] or nil } return quest_node end local story_nodes local get_story_nodes = function() if story_nodes == nil then story_nodes = {} local add = function(data) if data[1] then -- data is a table of multiple nodes for _, node in pairs(data) do table.insert(story_nodes, node) end else -- data is just one node table.insert(story_nodes, data) end end add(scene.get('intro-screen')) add(main_quest('explore')) add(scene.get('congrats', "explore")) add(main_quest('handmining')) add(scene.get('congrats', "handmining")) add(main_quest('smelting')) add(scene.get('congrats', "smelting")) add(main_quest('automining')) add(scene.get('congrats', "automining")) add(main_quest('handcrafting')) add(scene.get('congrats', "handcrafting")) add(main_quest('trigger-build')) add(cutscenes.compi_build_iron_cutscene.generate_cutscene()) add(main_quest('repair-assembler')) add(scene.get('congrats', "repair-assembler")) add(main_quest('repair-lab')) add(scene.get('congrats', "repair-lab")) add(main_quest('load-lab')) add(scene.get('congrats', "load-lab")) add(main_quest('electronics')) add(scene.get('congrats', "electronics")) add(main_quest('build-radar')) add(scene.get('congrats', "build-radar")) add(main_quest('trigger-radar')) add(cutscenes.biters_revealed.generate_cutscene()) add(scene.get('intermission', "west-expansion")) add(main_quest('scan-wreck')) add(scene.get('congrats', "scan-wreck")) add(main_quest('trigger-attacks')) add(cutscenes.biters_close_in.generate_cutscene()) add(scene.get('intermission', 'biters-close-in')) add(misc.generate_screenshot_area_node('demo_17_1', 'starting-area', 'a')) add(main_quest('prepare')) add(scene.get('congrats', "prepare")) add(main_quest('leave')) add(scene.get('congrats', "leave")) add(cutscenes.base_destroyed_east_revealed.generate_cutscene()) add(scene.get('intermission', 'east-expansion')) add(main_quest('reach-pond')) add(scene.get('congrats', "reach-pond")) add(main_quest('rebuild')) add(scene.get('congrats', "rebuild")) add(main_quest('military')) add(scene.get('congrats', "military")) add(main_quest('entrench')) add(scene.get('congrats', "entrench")) add(main_quest('trigger-second-wave')) add(scene.get('biters-from-east')) add(scene.get('intermission', 'biters-from-east')) add(main_quest('fortify')) add(misc.generate_screenshot_area_node('demo_17_1', 'second-base-area','b')) add(scene.get('congrats', "fortify")) add(scene.get('intermission', 'fortify')) add(main_quest('survive')) add(misc.generate_screenshot_area_node('demo_17_1', 'second-base-area','c')) add(scene.get('congrats', 'survive')) add(scene.get('victory-screen')) add(scene.get('victory')) add(scene.get('intermission', 'victory')) add(scene.get('final-expansion')) add(scene.get('intermission', 'final-expansion')) add(scene.get('freeplay')) end return story_nodes end local check_story_and_pollution = function(event) if active_player() then story.update("main_story", event) end pollution.check_pollution() end local on_entity_damaged = function(event) if event.cause and event.cause.name == 'small-biter' then game.players[1].add_alert(event.entity,defines.alert_type.entity_under_attack) end end local on_entity_died = function(event) if event.cause and event.cause.name == 'small-biter' then game.players[1].add_alert(event.entity,defines.alert_type.entity_destroyed) end end story_table.init = function() print("ON_INIT: storytable") story.init("main_story", get_story_nodes()) end story_table.on_load = function() print("ON_LOAD: storytable") story.on_load("main_story", get_story_nodes()) end story_table.events = { [defines.events.on_tick] = check_story_and_pollution, [defines.events.on_built_entity] = check_story_and_pollution, [defines.events.on_entity_damaged] = on_entity_damaged, [defines.events.on_entity_died] = on_entity_died, } return story_table