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