1-- Set the namespace according to the map name.
2local ns = {};
3setmetatable(ns, {__index = _G});
4mt_elbrus_shrine_basement_script = ns;
5setfenv(1, ns);
6
7-- The map name, subname and location image
8map_name = "Mt. Elbrus"
9map_image_filename = "data/story/common/locations/mt_elbrus.png"
10map_subname = "?"
11
12-- The music file used as default background music on this map.
13-- Other musics will have to handled through scripting.
14music_filename = "data/music/icy_wind.ogg"
15
16-- c++ objects instances
17local Map = nil
18local EventManager = nil
19
20-- the main character handler
21local hero = nil
22
23-- Forest dialogue secondary hero
24local bronann = nil
25local kalya = nil
26local orlinn = nil
27local andromalius = nil
28
29-- the main map loading code
30function Load(m)
31
32    Map = m;
33    EventManager = Map:GetEventSupervisor();
34    Map:SetUnlimitedStamina(true);
35
36    _CreateCharacters();
37    _CreateObjects();
38
39    -- Set the camera focus on hero
40    Map:SetCamera(hero);
41    -- This is a dungeon map, we'll use the front battle member sprite as default sprite.
42    Map:SetPartyMemberVisibleSprite(hero);
43
44    _CreateEvents();
45    _CreateZones();
46
47    -- Add a mediumly dark overlay when necessary
48    Map:GetEffectSupervisor():EnableAmbientOverlay("data/visuals/ambient/dark.png", 0.0, 0.0, false);
49
50    -- Preload sounds
51    AudioManager:LoadSound("data/sounds/heavy_bump.wav", Map);
52
53    -- Place Orlinn for the final boss scene
54    if (GlobalManager:GetGameEvents():GetEventValue("story", "mt_elbrus_ep1_final_boss_beaten") == 0) then
55        orlinn:SetPosition(19, 13);
56        orlinn:SetVisible(true);
57        orlinn:SetDirection(vt_map.MapMode.WEST);
58
59        andromalius:SetPosition(15, 13);
60        andromalius:SetVisible(true);
61        andromalius:SetDirection(vt_map.MapMode.EAST);
62    end
63
64    -- When falling from above, the heroes start by falling
65    if (GlobalManager:GetMapData():GetPreviousLocation() == "from_shrine_stairs1") then
66        hero:SetMoving(false);
67        EventManager:StartEvent("Falls from above event", 200);
68    end
69
70    -- Loads the pre-boss music
71    AudioManager:LoadMusic("data/music/dont_close_your_eyes.ogg", Map);
72end
73
74-- the map update function handles checks done on each game tick.
75function Update()
76    -- Check whether the character is in one of the zones
77    _CheckZones();
78end
79
80-- Character creation
81function _CreateCharacters()
82    -- Default hero and position (from falling point)
83    hero = CreateSprite(Map, "Bronann", 57, 0, vt_map.MapMode.GROUND_OBJECT);
84    hero:SetDirection(vt_map.MapMode.SOUTH);
85    hero:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED);
86
87    if (GlobalManager:GetMapData():GetPreviousLocation() == "from_shrine_north_exit") then
88        hero:SetPosition(3.5, 22.0)
89        hero:SetDirection(vt_map.MapMode.EAST);
90    end
91
92    -- Create secondary characters
93    bronann = CreateSprite(Map, "Bronann", 0, 0, vt_map.MapMode.GROUND_OBJECT);
94    bronann:SetDirection(vt_map.MapMode.NORTH);
95    bronann:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED);
96    bronann:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
97    bronann:SetVisible(false);
98
99    kalya = CreateSprite(Map, "Kalya", 0, 0, vt_map.MapMode.GROUND_OBJECT);
100    kalya:SetDirection(vt_map.MapMode.EAST);
101    kalya:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED);
102    kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
103    kalya:SetVisible(false);
104
105    orlinn = CreateSprite(Map, "Orlinn", 0, 0, vt_map.MapMode.GROUND_OBJECT);
106    orlinn:SetDirection(vt_map.MapMode.EAST);
107    orlinn:SetMovementSpeed(vt_map.MapMode.FAST_SPEED);
108    orlinn:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
109    orlinn:SetVisible(false);
110
111    andromalius = CreateSprite(Map, "Andromalius", 0, 0, vt_map.MapMode.GROUND_OBJECT);
112    andromalius:SetName(vt_system.Translate("Andromalius"));
113    andromalius:SetDirection(vt_map.MapMode.EAST);
114    andromalius:SetMovementSpeed(vt_map.MapMode.FAST_SPEED);
115    andromalius:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
116    andromalius:SetVisible(false);
117end
118
119function _CreateObjects()
120    local object = nil
121    local npc = nil
122    local dialogue = nil
123    local text = nil
124    local event = nil
125
126    vt_map.Halo.Create("data/visuals/lights/torch_light_mask.lua", 0, 28,
127        vt_video.Color(1.0, 1.0, 1.0, 0.8));
128
129    vt_map.Halo.Create("data/visuals/lights/right_ray_light.lua", 0, 28,
130            vt_video.Color(1.0, 1.0, 1.0, 0.8));
131
132    object = CreateTreasure(Map, "mt_shrine_basement_chest1", "Wood_Chest1", 20, 36, vt_map.MapMode.GROUND_OBJECT);
133    object:AddItem(2, 3); -- Medium potion x 3
134end
135
136-- Special event references which destinations must be updated just before being called.
137local kalya_move_next_to_hero_event1 = nil
138
139-- Creates all events and sets up the entire event sequence chain
140function _CreateEvents()
141    local event = nil
142    local dialogue = nil
143    local text = nil
144
145    vt_map.MapTransitionEvent.Create("to mountain shrine exit", "data/story/mt_elbrus/mt_elbrus_north_east_exit_map.lua",
146                                     "data/story/mt_elbrus/mt_elbrus_north_east_exit_script.lua", "from_shrine_basement");
147
148    -- Generic events
149    vt_map.ChangeDirectionSpriteEvent.Create("Orlinn looks north", orlinn, vt_map.MapMode.NORTH);
150    vt_map.ChangeDirectionSpriteEvent.Create("Orlinn looks west", orlinn, vt_map.MapMode.WEST);
151    vt_map.ChangeDirectionSpriteEvent.Create("Orlinn looks south", orlinn, vt_map.MapMode.SOUTH);
152    vt_map.ChangeDirectionSpriteEvent.Create("Bronann looks north", bronann, vt_map.MapMode.NORTH);
153    vt_map.ChangeDirectionSpriteEvent.Create("Bronann looks south", bronann, vt_map.MapMode.SOUTH);
154    vt_map.ChangeDirectionSpriteEvent.Create("Kalya looks north", kalya, vt_map.MapMode.NORTH);
155    vt_map.ChangeDirectionSpriteEvent.Create("Kalya looks west", kalya, vt_map.MapMode.WEST);
156    vt_map.ChangeDirectionSpriteEvent.Create("Kalya looks east", kalya, vt_map.MapMode.EAST);
157    vt_map.ChangeDirectionSpriteEvent.Create("Kalya looks south", kalya, vt_map.MapMode.SOUTH);
158    vt_map.ChangeDirectionSpriteEvent.Create("Hero looks west", hero, vt_map.MapMode.WEST);
159    vt_map.ChangeDirectionSpriteEvent.Create("Hero looks east", hero, vt_map.MapMode.EAST);
160    vt_map.LookAtSpriteEvent.Create("Kalya looks at Bronann", kalya, bronann);
161    vt_map.LookAtSpriteEvent.Create("Kalya looks at Orlinn", kalya, orlinn);
162    vt_map.LookAtSpriteEvent.Create("Bronann looks at Kalya", bronann, kalya);
163    vt_map.LookAtSpriteEvent.Create("Bronann looks at Orlinn", bronann, orlinn);
164    vt_map.LookAtSpriteEvent.Create("Orlinn looks at Kalya", orlinn, kalya);
165    vt_map.LookAtSpriteEvent.Create("Orlinn looks at Bronann", orlinn, bronann);
166
167    -- Falling event
168    event = vt_map.ScriptedEvent.Create("Falls from above event", "fall_event_start", "fall_event_update");
169    event:AddEventLinkAtEnd("After the fall event start", 1500);
170
171    event = vt_map.ScriptedEvent.Create("After the fall event start", "after_fall_event_start", "");
172    event:AddEventLinkAtEnd("Kalya moves next to Bronann1");
173
174    -- NOTE: The actual destination is set just before the actual start call
175    kalya_move_next_to_hero_event1 = vt_map.PathMoveSpriteEvent.Create("Kalya moves next to Bronann1", kalya, 0, 0, false);
176    kalya_move_next_to_hero_event1:AddEventLinkAtEnd("Where is Orlinn? dialogue");
177    kalya_move_next_to_hero_event1:AddEventLinkAtEnd("Kalya looks at Bronann");
178    kalya_move_next_to_hero_event1:AddEventLinkAtEnd("Bronann looks at Kalya");
179
180    dialogue = vt_map.SpriteDialogue.Create();
181    text = vt_system.Translate("Wow, what a fall. I didn't see that one coming.");
182    dialogue:AddLineEmote(text, kalya, "sweat drop");
183    text = vt_system.Translate("Are you alright, Kalya?");
184    dialogue:AddLineEmote(text, bronann, "sweat drop");
185    text = vt_system.Translate("I should be fine, but we should heal just in case.");
186    dialogue:AddLine(text, kalya);
187    text = vt_system.Translate("Wait...");
188    dialogue:AddLineEventEmote(text, kalya, "Kalya looks west", "", "thinking dots");
189    text = vt_system.Translate("Where is Orlinn?");
190    dialogue:AddLineEventEmote(text, kalya, "Kalya looks east", "Bronann looks south", "interrogation");
191    text = vt_system.Translate("Orlinn? Orlinn!");
192    dialogue:AddLineEventEmote(text, bronann, "Kalya looks south", "Bronann looks north", "exclamation");
193    text = vt_system.Translate("Let's find him, once more, before something bad happens.");
194    dialogue:AddLineEmote(text, kalya, "sweat drop");
195    event = vt_map.DialogueEvent.Create("Where is Orlinn? dialogue", dialogue);
196    event:AddEventLinkAtEnd("Kalya moves back to party1");
197
198    event = vt_map.PathMoveSpriteEvent.Create("Kalya moves back to party1", kalya, bronann, false);
199    event:AddEventLinkAtEnd("After the fall event end");
200
201    vt_map.ScriptedEvent.Create("After the fall event end", "after_fall_event_end", "");
202
203    -- Hero sees the exit
204    dialogue = vt_map.SpriteDialogue.Create();
205    text = vt_system.Translate("This is the blocked passage to the shrine entrance.");
206    dialogue:AddLineEventEmote(text, bronann, "Hero looks east", "", "thinking dots");
207    text = vt_system.Translate("This can only mean we're near the exit!");
208    dialogue:AddLineEventEmote(text, bronann, "Hero looks west", "", "exclamation");
209    vt_map.DialogueEvent.Create("See exit dialogue", dialogue);
210
211    -- Orlinn screams
212    dialogue = vt_map.SpriteDialogue.Create();
213    text = vt_system.Translate("Help!");
214    dialogue:AddLine(text, orlinn);
215    text = vt_system.Translate("Orlinn!");
216    dialogue:AddLineEmote(text, kalya, "exclamation");
217    vt_map.DialogueEvent.Create("Orlinn screams dialogue", dialogue);
218
219    -- Final boss event
220    event = vt_map.ScriptedEvent.Create("Final boss battle event start", "final_boss_event_start", "");
221    event:AddEventLinkAtEnd("Bronann move to the scene start point");
222    event:AddEventLinkAtEnd("Kalya moves next to Bronann2");
223
224    event = vt_map.PathMoveSpriteEvent.Create("Bronann move to the scene start point", bronann, 25, 13, true);
225    event:AddEventLinkAtEnd("Bronann looks at Orlinn");
226
227    event = vt_map.PathMoveSpriteEvent.Create("Kalya moves next to Bronann2", kalya, 24, 16, true);
228    event:AddEventLinkAtEnd("Before boss dialogue");
229    event:AddEventLinkAtEnd("Kalya looks at Orlinn");
230
231    dialogue = vt_map.SpriteDialogue.Create();
232    text = vt_system.Translate("Help!");
233    dialogue:AddLineEmote(text, orlinn, "exclamation");
234    text = vt_system.Translate("Orlinn! Back off!");
235    dialogue:AddLineEmote(text, kalya, "exclamation");
236    text = vt_system.Translate("I, I...");
237    dialogue:AddLineEmote(text, orlinn, "sweat drop");
238    text = vt_system.Translate("Orlinn! NOW!");
239    dialogue:AddLineEmote(text, bronann, "exclamation");
240    event = vt_map.DialogueEvent.Create("Before boss dialogue", dialogue);
241    event:AddEventLinkAtEnd("Orlinn back off");
242
243    event = vt_map.PathMoveSpriteEvent.Create("Orlinn back off", orlinn, 29, 12, true);
244    event:AddEventLinkAtEnd("Orlinn looks at Bronann");
245    event:AddEventLinkAtEnd("Before boss dialogue2");
246
247    dialogue = vt_map.SpriteDialogue.Create();
248    text = vt_system.Translate("You shall not leave this place without my consent.");
249    dialogue:AddLine(text, andromalius);
250    text = vt_system.Translate("And you shall not touch my brother without mine.");
251    dialogue:AddLineEmote(text, kalya, "exclamation");
252    text = vt_system.Translate("You have made it through the holy ordeal alive. I shall not let you survive.");
253    dialogue:AddLine(text, andromalius);
254    text = vt_system.Translate("Let's fight for our lives then!");
255    dialogue:AddLineEmote(text, bronann, "exclamation");
256    event = vt_map.DialogueEvent.Create("Before boss dialogue2", dialogue);
257    event:AddEventLinkAtEnd("Battle with the boss");
258
259    event = vt_map.BattleEncounterEvent.Create("Battle with the boss");
260    event:SetMusic("data/music/accion-OGA-djsaryon.ogg");
261    event:SetBackground("data/battles/battle_scenes/desert_cave/desert_cave.png");
262    event:AddScript("data/battles/battle_scenes/desert_cave_battle_anim.lua");
263    event:SetBoss(true);
264    event:AddEnemy(21, 812, 312);
265    event:AddEnemy(20, 512, 512);
266    event:AddEventLinkAtEnd("Make the boss invisible");
267    event:AddEventLinkAtEnd("Bronann runs to Orlinn", 1000);
268    event:AddEventLinkAtEnd("Kalya runs to Orlinn", 1000);
269    event:AddEventLinkAtEnd("Play default music");
270
271    vt_map.ScriptedEvent.Create("Play default music", "play_default_music", "");
272
273    vt_map.ScriptedEvent.Create("Make the boss invisible", "make_boss_invisible", "");
274
275    event = vt_map.PathMoveSpriteEvent.Create("Bronann runs to Orlinn", bronann, 27, 11, true);
276    event:AddEventLinkAtEnd("Bronann looks at Orlinn");
277
278    event = vt_map.PathMoveSpriteEvent.Create("Kalya runs to Orlinn", kalya, 27, 13, true);
279    event:AddEventLinkAtEnd("Kalya looks at Orlinn");
280    event:AddEventLinkAtEnd("Dialogue with Orlinn");
281
282    dialogue = vt_map.SpriteDialogue.Create();
283    text = vt_system.Translate("Orlinn, are you alright?");
284    dialogue:AddLineEmote(text, kalya, "sweat drop");
285    text = vt_system.Translate("Yes. I'm sorry I wasn't able to protect myself, sis.");
286    dialogue:AddLineEmote(text, orlinn, "sweat drop");
287    text = vt_system.Translate("Don't you worry about that, brother. Never leave me like that again, ok?");
288    dialogue:AddLine(text, kalya);
289    text = vt_system.Translate("I promise I didn't do it this time. I just fell in front of this hideous green head.");
290    dialogue:AddLine(text, orlinn);
291    text = vt_system.Translate("Well, let's leave this place before another one wants our lives again.");
292    dialogue:AddLineEmote(text, bronann, "sweat drop");
293    text = vt_system.Translate("I couldn't agree more.");
294    dialogue:AddLineEvent(text, kalya, "Kalya looks at Bronann", "");
295    event = vt_map.DialogueEvent.Create("Dialogue with Orlinn", dialogue);
296    event:AddEventLinkAtEnd("Kalya moves back to party2");
297    event:AddEventLinkAtEnd("Orlinn moves back to party2");
298
299    event = vt_map.PathMoveSpriteEvent.Create("Kalya moves back to party2", kalya, bronann, false);
300    event:AddEventLinkAtEnd("Final boss event end");
301
302    vt_map.PathMoveSpriteEvent.Create("Orlinn moves back to party2", orlinn, bronann, false);
303
304    vt_map.ScriptedEvent.Create("Final boss event end", "final_boss_event_end", "");
305end
306
307-- zones
308local see_exit_zone = nil
309local orlinn_screams_zone = nil
310local final_boss_zone = nil
311local to_mountain_exit_zone = nil
312
313-- Create the different map zones triggering events
314function _CreateZones()
315    -- N.B.: left, right, top, bottom
316    orlinn_screams_zone = vt_map.CameraZone.Create(36, 40, 36, 48);
317    see_exit_zone = vt_map.CameraZone.Create(56, 61, 40, 45);
318    final_boss_zone = vt_map.CameraZone.Create(21, 36, 3, 22);
319    to_mountain_exit_zone = vt_map.CameraZone.Create(0, 2, 15, 34);
320end
321
322-- Booleans preventing from starting the even more than once.
323local heard_orlinn_screaming = false;
324local saw_exit = false;
325
326-- Check whether the active camera has entered a zone. To be called within Update()
327function _CheckZones()
328    if (to_mountain_exit_zone:IsCameraEntering() == true) then
329        EventManager:StartEvent("to mountain shrine exit");
330        hero:SetMoving(false);
331
332    elseif (final_boss_zone:IsCameraEntering() == true and Map:CurrentState() == vt_map.MapMode.STATE_EXPLORE) then
333        if (GlobalManager:GetGameEvents():GetEventValue("story", "mt_elbrus_ep1_final_boss_beaten") == 0) then
334            hero:SetMoving(false);
335            EventManager:StartEvent("Final boss battle event start");
336        end
337    elseif (heard_orlinn_screaming == false and orlinn_screams_zone:IsCameraEntering() == true and Map:CurrentState() == vt_map.MapMode.STATE_EXPLORE) then
338        if (GlobalManager:GetGameEvents():GetEventValue("story", "mt_elbrus_ep1_final_boss_beaten") == 0) then
339            hero:SetMoving(false);
340            EventManager:StartEvent("Orlinn screams dialogue");
341            heard_orlinn_screaming = true;
342        end
343    elseif (saw_exit == false and see_exit_zone:IsCameraEntering() == true and Map:CurrentState() == vt_map.MapMode.STATE_EXPLORE) then
344        if (GlobalManager:GetGameEvents():GetEventValue("story", "mt_elbrus_ep1_final_boss_beaten") == 0) then
345            hero:SetMoving(false);
346            EventManager:StartEvent("See exit dialogue");
347            saw_exit = true;
348        end
349    end
350end
351
352-- Trigger damages on the characters present on the battle front.
353function _TriggerPartyDamage(damage)
354    -- Adds an effect on map
355    local x_pos = Map:GetScreenXCoordinate(hero:GetXPosition());
356    local y_pos = Map:GetScreenYCoordinate(hero:GetYPosition());
357    local map_indicator = Map:GetIndicatorSupervisor();
358    map_indicator:AddDamageIndicator(x_pos, y_pos, damage, vt_video.TextStyle("text22", vt_video.Color(1.0, 0.0, 0.0, 0.9)), true);
359
360    local index = 0;
361    for index = 0, 3 do
362        local char = GlobalManager:GetCharacterHandler():GetCharacter(index);
363        if (char ~= nil) then
364            -- Do not kill characters. though
365            local hp_damage = damage;
366            if (hp_damage >= char:GetHitPoints()) then
367                hp_damage = char:GetHitPoints() - 1;
368            end
369            if (hp_damage > 0) then
370                char:SubtractHitPoints(hp_damage);
371            end
372        end
373    end
374end
375
376-- Map Custom functions
377-- Used through scripted events
378map_functions = {
379
380    fall_event_start = function()
381        Map:PushState(vt_map.MapMode.STATE_SCENE);
382        hero:SetMoving(false);
383        -- place the character and make it fall
384        hero:SetDirection(vt_map.MapMode.SOUTH);
385        hero:SetPosition(57.0, 0.0);
386        hero:SetCustomAnimation("frightened_fixed", 0); -- 0 means forever
387    end,
388
389    fall_event_update = function()
390        if (hero:GetYPosition() >= 8.0) then
391            AudioManager:PlaySound("data/sounds/heavy_bump.wav");
392            Map:GetEffectSupervisor():ShakeScreen(0.6, 600, vt_mode_manager.EffectSupervisor.SHAKE_FALLOFF_GRADUAL);
393            hero:SetCustomAnimation("hurt", 600);
394            _TriggerPartyDamage(math.random(15, 30));
395            return true;
396        end
397
398        -- Push the character down.
399        local update_time = SystemManager:GetUpdateTime();
400        local movement_diff = 0.011 * update_time;
401        hero:SetYPosition(hero:GetYPosition() + movement_diff);
402        return false;
403    end,
404
405    after_fall_event_start = function()
406        bronann:SetPosition(hero:GetXPosition(), hero:GetYPosition());
407        bronann:SetDirection(hero:GetDirection());
408        bronann:SetVisible(true);
409        Map:SetCamera(bronann);
410
411        hero:SetPosition(0, 0);
412
413        kalya:SetPosition(bronann:GetXPosition(), bronann:GetYPosition());
414        kalya:SetVisible(true);
415        kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
416
417        kalya_move_next_to_hero_event1:SetDestination(bronann:GetXPosition(), bronann:GetYPosition() - 2.0, false);
418    end,
419
420    after_fall_event_end = function()
421        Map:PopState();
422        kalya:SetPosition(0, 0);
423        kalya:SetVisible(false);
424        kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
425
426        hero:SetPosition(bronann:GetXPosition(), bronann:GetYPosition());
427        hero:SetDirection(bronann:GetDirection());
428        hero:SetVisible(true);
429        Map:SetCamera(hero);
430
431        bronann:SetPosition(0, 0);
432        bronann:SetVisible(false);
433        bronann:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
434    end,
435
436    final_boss_event_start = function()
437        Map:PushState(vt_map.MapMode.STATE_SCENE);
438        hero:SetMoving(false);
439
440        bronann:SetPosition(hero:GetXPosition(), hero:GetYPosition());
441        bronann:SetDirection(hero:GetDirection());
442        bronann:SetVisible(true);
443        Map:SetCamera(bronann);
444
445        hero:SetPosition(0, 0);
446
447        kalya:SetPosition(bronann:GetXPosition(), bronann:GetYPosition());
448        kalya:SetVisible(true);
449        kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
450
451        -- Start the pre-boss music
452        AudioManager:PlayMusic("data/music/dont_close_your_eyes.ogg")
453    end,
454
455    play_default_music = function()
456        AudioManager:PlayMusic("data/music/icy_wind.ogg")
457    end,
458
459    make_boss_invisible = function()
460        andromalius:SetPosition(0, 0);
461        andromalius:SetVisible(false);
462    end,
463
464    final_boss_event_end = function()
465        Map:PopState();
466        kalya:SetPosition(0, 0);
467        kalya:SetVisible(false);
468        kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
469        orlinn:SetPosition(0, 0);
470        orlinn:SetVisible(false);
471        orlinn:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
472
473        hero:SetPosition(bronann:GetXPosition(), bronann:GetYPosition());
474        hero:SetDirection(bronann:GetDirection());
475        hero:SetVisible(true);
476        Map:SetCamera(hero);
477
478        bronann:SetPosition(0, 0);
479        bronann:SetVisible(false);
480        bronann:SetCollisionMask(vt_map.MapMode.NO_COLLISION);
481
482        -- Set event as done
483        GlobalManager:GetGameEvents():SetEventValue("story", "mt_elbrus_ep1_final_boss_beaten", 1);
484    end,
485}
486