1-- Set the namespace according to the map name. 2local ns = {}; 3setmetatable(ns, {__index = _G}); 4layna_village_center_script = ns; 5setfenv(1, ns); 6 7-- The map name, subname and location image 8map_name = "Mountain Village of Layna" 9map_image_filename = "data/story/common/locations/mountain_village.png" 10map_subname = "Village center" 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/Caketown_1-OGA-mat-pablo.ogg" 15 16-- c++ objects instances 17local Map = nil 18local EventManager = nil 19local Effects = nil 20 21local bronann = nil 22local kalya = nil 23 24-- Main npcs 25local orlinn = nil 26local georges = nil 27local carson = nil 28local herth = nil 29local olivia = nil -- Olivia npc, guarding the forest entrance 30 31local well_entrance_rock = nil 32 33-- the main map loading code 34function Load(m) 35 36 Map = m; 37 Effects = Map:GetEffectSupervisor(); 38 EventManager = Map:GetEventSupervisor(); 39 40 Map:SetUnlimitedStamina(true); 41 42 _CreateCharacters(); 43 -- Set the camera focus on Bronann 44 Map:SetCamera(bronann); 45 46 _CreateNPCs(); 47 _CreateObjects(); 48 49 _CreateEvents(); 50 _CreateZones(); 51 52 _TriggerPotentialDialogueAfterFadeIn(); 53 54 -- Add clouds overlay 55 Effects:EnableAmbientOverlay("data/visuals/ambient/clouds.png", 5.0, -5.0, true); 56 57 -- Set the world map current position 58 GlobalManager:GetWorldMapData():SetCurrentLocationId("layna village") 59 60 _HandleCredits(); 61end 62 63-- Handle the display of the new game credits 64function _HandleCredits() 65 -- Handle small credits triggering 66 if (GlobalManager:GetGameEvents():DoesEventExist("game", "Start_Credits") == false) then 67 -- Triggers the small credits display 68 GlobalManager:GetGameEvents():SetEventValue("game", "Start_Credits", 1); 69 end 70 if (GlobalManager:GetGameEvents():DoesEventExist("game", "Credits_shown") == false) then 71 Map:GetScriptSupervisor():AddScript("data/credits/episode1_credits.lua"); 72 end 73end 74 75function Update() 76 -- Check whether the character is in one of the zones 77 _CheckZones(); 78end 79 80-- Character creation 81function _CreateCharacters() 82 bronann = CreateSprite(Map, "Bronann", 12, 63, vt_map.MapMode.GROUND_OBJECT); 83 bronann:SetDirection(vt_map.MapMode.SOUTH); 84 bronann:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED); 85 86 -- set up the position according to the previous map 87 if (GlobalManager:GetMapData():GetPreviousLocation() == "from_riverbank") then 88 bronann:SetPosition(30, 77); 89 bronann:SetDirection(vt_map.MapMode.NORTH); 90 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from_village_south") then 91 bronann:SetPosition(79, 77); 92 bronann:SetDirection(vt_map.MapMode.NORTH); 93 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from_kalya_house_path") then 94 bronann:SetPosition(3, 11); 95 bronann:SetDirection(vt_map.MapMode.EAST); 96 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from_shop") then 97 bronann:SetPosition(94, 72); 98 bronann:SetDirection(vt_map.MapMode.SOUTH); 99 AudioManager:PlaySound("data/sounds/door_close.wav"); 100 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from_secret_path") then 101 bronann:SetPosition(3, 60); 102 bronann:SetDirection(vt_map.MapMode.EAST); 103 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from sophia's house") then 104 AudioManager:PlaySound("data/sounds/door_close.wav"); 105 bronann:SetPosition(22, 20); 106 bronann:SetDirection(vt_map.MapMode.NORTH); 107 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from_layna_forest_entrance") then 108 bronann:SetPosition(115, 37); 109 bronann:SetDirection(vt_map.MapMode.WEST); 110 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from_bronanns_home") then 111 AudioManager:PlaySound("data/sounds/door_close.wav"); 112 elseif (GlobalManager:GetMapData():GetPreviousLocation() == "from_well_undergrounds") then 113 bronann:SetPosition(63, 27.5); 114 bronann:SetDirection(vt_map.MapMode.NORTH); 115 end 116end 117 118function _CreateNPCs() 119 local npc = nil 120 local text = nil 121 local dialogue = nil 122 local event = nil 123 124 kalya = CreateSprite(Map, "Kalya", 42, 18, vt_map.MapMode.GROUND_OBJECT); 125 126 event = vt_map.RandomMoveSpriteEvent.Create("Kalya random move", kalya, 1000, 2000); 127 event:AddEventLinkAtEnd("Kalya random move", 2000); -- Loop on itself 128 129 EventManager:StartEvent("Kalya random move"); 130 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_kalya_wants_to_be_alone"); 131 text = vt_system.Translate("Do you need something, Bronann?"); 132 dialogue:AddLineEmote(text, kalya, "interrogation"); 133 kalya:AddDialogueReference(dialogue); 134 135 orlinn = CreateSprite(Map, "Orlinn", 40, 18, vt_map.MapMode.GROUND_OBJECT); 136 orlinn:SetCollisionMask(vt_map.MapMode.WALL_COLLISION); 137 138 -- Setup Orlinn's state and dialogue depending on the story current context 139 _UpdateOrlinnAndKalyaState(); 140 141 carson = CreateSprite(Map, "Carson", 0, 0, vt_map.MapMode.GROUND_OBJECT); 142 -- Default behaviour - not present on map. 143 carson:SetVisible(false); 144 carson:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 145 146 herth = CreateSprite(Map, "Herth", 0, 0, vt_map.MapMode.GROUND_OBJECT); 147 -- Default behaviour - not present on map. 148 herth:SetVisible(false); 149 herth:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 150 151 npc = CreateNPCSprite(Map, "Old Woman1", vt_system.Translate("Brymir"), 72, 64, vt_map.MapMode.GROUND_OBJECT); 152 npc:SetDirection(vt_map.MapMode.WEST); 153 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_brymir_gossip"); 154 text = vt_system.Translate("Ahh sure! (gossip, gossip)"); 155 dialogue:AddLine(text, npc); 156 npc:AddDialogueReference(dialogue); 157 158 npc = CreateNPCSprite(Map, "Woman1", vt_system.Translate("Martha"), 70, 64, vt_map.MapMode.GROUND_OBJECT); 159 npc:SetDirection(vt_map.MapMode.EAST); 160 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_martha_gossip"); 161 text = vt_system.Translate("Did you hear that? (gossip, gossip)"); 162 dialogue:AddLine(text, npc); 163 npc:AddDialogueReference(dialogue); 164 165 npc = CreateNPCSprite(Map, "Woman2", vt_system.Translate("Sophia"), 22, 38, vt_map.MapMode.GROUND_OBJECT); 166 npc:SetDirection(vt_map.MapMode.SOUTH); 167 if (GlobalManager:GetGameEvents():DoesEventExist("layna_south_entrance", "quest1_orlinn_hide_n_seek1_done") == true and 168 GlobalManager:GetGameEvents():DoesEventExist("layna_riverbank", "quest1_orlinn_hide_n_seek2_done") == false) then 169 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_sophia_hint_about_orlinn"); 170 text = vt_system.Translate("If you're running after Orlinn, I just saw him near your house.") 171 dialogue:AddLine(text, npc) 172 else 173 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_sophia_no_trade"); 174 text = vt_system.Translate("Do you want to trade with me?") 175 dialogue:AddLine(text, npc) 176 dialogue:SetEventAtDialogueEnd("layna: Sophia trades") 177 178 event = vt_map.ShopEvent.Create("layna: Sophia trades", "Layna Sophia Trades"); 179 event:SetShopName(vt_system.UTranslate("Sophia")); 180 181 -- Items 182 event:AddItem(4001, 0); -- (infinite) Escape Smoke 183 -- Trades 184 event:AddTrade(10002, 1); -- Improved Wooden Sword 185 event:AddTrade(11002, 1); -- Improved Arbalest 186 event:AddTrade(40001, 2); -- Prismatic Rings for both 187 188 event:SetPriceLevels(vt_shop.ShopMode.SHOP_PRICE_VERY_GOOD, -- Sophia is a good friend 189 vt_shop.ShopMode.SHOP_PRICE_STANDARD); 190 end 191 192 npc:AddDialogueReference(dialogue); 193 -- Add her cat, Nekko 194 object = CreateObject(Map, "Cat1", 24, 37.6, vt_map.MapMode.GROUND_OBJECT); 195 vt_map.SoundEvent.Create("Nekko says Meoww!", "data/sounds/meow.wav"); 196 object:SetEventWhenTalking("Nekko says Meoww!"); 197 198 georges = CreateNPCSprite(Map, "Man1", vt_system.Translate("Georges"), 42.5, 65, vt_map.MapMode.GROUND_OBJECT); 199 georges:SetDirection(vt_map.MapMode.WEST); 200 _UpdateGeorgesDialogue(georges); 201 202 -- Olivia, guardian of the forest access 203 olivia = CreateNPCSprite(Map, "Girl1", vt_system.Translate("Olivia"), 115, 36, vt_map.MapMode.GROUND_OBJECT) 204 olivia:SetDirection(vt_map.MapMode.SOUTH) 205 olivia:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED) 206 207 -- Needed look at events 208 vt_map.LookAtSpriteEvent.Create("Bronann looks at Olivia", bronann, olivia); 209 vt_map.ChangeDirectionSpriteEvent.Create("Bronann looks south", bronann, vt_map.MapMode.SOUTH); 210 211end 212 213function _CreateObjects() 214 local object = nil 215 216 -- Info sign 217 object = CreateObject(Map, "Wood sign info", 29, 68, vt_map.MapMode.GROUND_OBJECT) 218 object:SetEventWhenTalking("Info about running") 219 dialogue = vt_map.SpriteDialogue.Create(); 220 text = vt_system.VTranslate("Tired of walking?\nYou can run when holding the Cancel (%s) key", InputManager:GetCancelKeyName()); 221 dialogue:AddLine(text, nil); 222 event = vt_map.DialogueEvent.Create("Info about running", dialogue) 223 224 CreateObject(Map, "Tree Big2", 22, 78, vt_map.MapMode.GROUND_OBJECT); 225 CreateObject(Map, "Tree Small1", 22, 16, vt_map.MapMode.GROUND_OBJECT); 226 CreateObject(Map, "Tree Big1", 9, 16, vt_map.MapMode.GROUND_OBJECT); 227 CreateObject(Map, "Tree Big1", 65, 18, vt_map.MapMode.GROUND_OBJECT); 228 CreateObject(Map, "Tree Big2", 74, 20, vt_map.MapMode.GROUND_OBJECT); 229 CreateObject(Map, "Tree Big1", 67, 32, vt_map.MapMode.GROUND_OBJECT); 230 CreateObject(Map, "Tree Big2", 80, 36, vt_map.MapMode.GROUND_OBJECT); 231 CreateObject(Map, "Tree Small1", 92, 22, vt_map.MapMode.GROUND_OBJECT); 232 CreateObject(Map, "Tree Big2", 98, 24, vt_map.MapMode.GROUND_OBJECT); 233 CreateObject(Map, "Tree Small2", 79, 16, vt_map.MapMode.GROUND_OBJECT); 234 CreateObject(Map, "Rock1", 3, 64, vt_map.MapMode.GROUND_OBJECT); 235 CreateObject(Map, "Rock2", 2, 62, vt_map.MapMode.GROUND_OBJECT); 236 CreateObject(Map, "Rock1", 33, 12, vt_map.MapMode.GROUND_OBJECT); 237 CreateObject(Map, "Rock2", 29, 16, vt_map.MapMode.GROUND_OBJECT); 238 CreateObject(Map, "Rock2", 109, 34, vt_map.MapMode.GROUND_OBJECT); 239 CreateObject(Map, "Rock2", 113, 34, vt_map.MapMode.GROUND_OBJECT); 240 CreateObject(Map, "Rock2", 117, 34, vt_map.MapMode.GROUND_OBJECT); 241 CreateObject(Map, "Rock2", 109, 42, vt_map.MapMode.GROUND_OBJECT); 242 CreateObject(Map, "Rock2", 117, 42, vt_map.MapMode.GROUND_OBJECT); 243 CreateObject(Map, "Rock2", 113, 42, vt_map.MapMode.GROUND_OBJECT); 244 245 -- A village with drinkable water 246 CreateObject(Map, "Well", 59.0, 32.0, vt_map.MapMode.GROUND_OBJECT); 247 248 -- collision bug hidders 249 CreateObject(Map, "Barrel1", 14, 38, vt_map.MapMode.GROUND_OBJECT); 250 CreateObject(Map, "Vase1", 15, 39, vt_map.MapMode.GROUND_OBJECT); 251 CreateObject(Map, "Barrel1", 30, 38, vt_map.MapMode.GROUND_OBJECT); 252 253 -- Lights 254 -- big round windows light flares 255 vt_map.Light.Create("data/visuals/lights/sun_flare_light_main.lua", 256 "data/visuals/lights/sun_flare_light_secondary.lua", 257 74.0, 55.0, 258 vt_video.Color(1.0, 1.0, 1.0, 0.6), 259 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 260 261 vt_map.Light.Create("data/visuals/lights/sun_flare_light_main.lua", 262 "data/visuals/lights/sun_flare_light_secondary.lua", 263 86.0, 67.0, 264 vt_video.Color(1.0, 1.0, 1.0, 0.6), 265 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 266 vt_map.Light.Create("data/visuals/lights/sun_flare_light_main.lua", 267 "data/visuals/lights/sun_flare_light_secondary.lua", 268 22.0, 32.0, 269 vt_video.Color(1.0, 1.0, 1.0, 0.6), 270 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 271 272 -- Small door lights 273 vt_map.Light.Create("data/visuals/lights/sun_flare_light_small_main.lua", 274 "data/visuals/lights/sun_flare_light_small_secondary.lua", 275 12.0, 57.5, 276 vt_video.Color(1.0, 1.0, 1.0, 0.6), 277 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 278 vt_map.Light.Create("data/visuals/lights/sun_flare_light_small_main.lua", 279 "data/visuals/lights/sun_flare_light_small_secondary.lua", 280 94.0, 67.5, 281 vt_video.Color(1.0, 1.0, 1.0, 0.6), 282 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 283 284 -- Treasure vase 285 local nekko_vase = CreateTreasure(Map, "layna_center_nekko_vase", "Vase1", 27, 37, vt_map.MapMode.GROUND_OBJECT); 286 nekko_vase:AddItem(11, 1); 287 288 -- Rock hiding the well underground entrance 289 well_entrance_rock = CreateObject(Map, "Rock1", 63, 32, vt_map.MapMode.GROUND_OBJECT) 290 if (GlobalManager:GetGameEvents():DoesEventExist("story", "well_rats_beaten") == true) then 291 -- The rock has moved 292 well_entrance_rock:SetPosition(63, 34) 293 end 294 295 -- Surrounding grass 296 local well_grass = { 297 { "Grass Clump1", 62, 32.5 }, 298 { "Grass Clump1", 64, 33 }, 299 { "Grass Clump1", 58, 33 }, 300 { "Grass Clump1", 60, 33.4 }, 301 { "Grass Clump1", 65, 32 }, 302 { "Grass Clump1", 62, 30.3 }, 303 } 304 305 -- Loads the grass according to the array 306 for my_index, my_array in pairs(well_grass) do 307 --print(my_array[1], my_array[2], my_array[3]); 308 object = CreateObject(Map, my_array[1], my_array[2], my_array[3], vt_map.MapMode.GROUND_OBJECT); 309 object:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 310 end 311end 312 313-- Creates all events and sets up the entire event sequence chain 314function _CreateEvents() 315 local event = nil 316 local text = nil 317 local dialogue = nil 318 319 -- Triggered Events 320 vt_map.MapTransitionEvent.Create("to Bronann's home", "data/story/layna_village/layna_village_bronanns_home_map.lua", 321 "data/story/layna_village/layna_village_bronanns_home_script.lua", "from_village_center"); 322 323 vt_map.MapTransitionEvent.Create("to Riverbank", "data/story/layna_village/layna_village_riverbank_map.lua", 324 "data/story/layna_village/layna_village_riverbank_script.lua", "from_village_center"); 325 326 vt_map.MapTransitionEvent.Create("to Village south entrance", "data/story/layna_village/layna_village_south_entrance_map.lua", 327 "data/story/layna_village/layna_village_south_entrance_script.lua", "from_village_center"); 328 329 vt_map.MapTransitionEvent.Create("to Kalya house path", "data/story/layna_village/layna_village_kalya_house_path_map.lua", 330 "data/story/layna_village/layna_village_kalya_house_path_script.lua", "from_village_center"); 331 332 vt_map.MapTransitionEvent.Create("to Flora's Shop", "data/story/layna_village/layna_village_center_shop_map.lua", 333 "data/story/layna_village/layna_village_center_shop_script.lua", "from_village_center"); 334 335 vt_map.MapTransitionEvent.Create("to sophia house", "data/story/layna_village/layna_village_center_sophia_house_map.lua", 336 "data/story/layna_village/layna_village_center_sophia_house_script.lua", "from_village_center"); 337 338 vt_map.MapTransitionEvent.Create("to secret cliff", "data/story/layna_village/layna_village_riverbank_map.lua", 339 "data/story/layna_village/layna_village_riverbank_script.lua", "from_secret_path"); 340 341 vt_map.MapTransitionEvent.Create("to layna forest entrance", "data/story/layna_forest/layna_forest_entrance_map.lua", 342 "data/story/layna_forest/layna_forest_entrance_script.lua", "from_village_center") 343 344 event = vt_map.MapTransitionEvent.Create("To well underground", "data/story/layna_village/layna_village_well_underground_map.lua", 345 "data/story/layna_village/layna_village_well_underground_script.lua", 346 "from layna village") 347 348 -- Generic events 349 vt_map.ScriptedEvent.Create("Map:PushState(SCENE)", "Map_SceneState", "") 350 vt_map.ScriptedEvent.Create("Map:PopState()", "Map_PopState", "") 351 352 vt_map.ChangeDirectionSpriteEvent.Create("Kalya looks south", kalya, vt_map.MapMode.SOUTH) 353 vt_map.LookAtSpriteEvent.Create("Orlinn looks at Kalya", orlinn, kalya) 354 vt_map.LookAtSpriteEvent.Create("Orlinn looks at Bronann", orlinn, bronann) 355 vt_map.LookAtSpriteEvent.Create("Kalya looks at Orlinn", kalya, orlinn) 356 vt_map.AnimateSpriteEvent.Create("Bronann is sad", bronann, "hero_stance", 1000) 357 vt_map.AnimateSpriteEvent.Create("Bronann is frightened", bronann, "frightened", 600) 358 359 -- Init Olivia Dialogue 360 _UpdateOliviaDialogue(); 361 362 -- Quest events 363 -- Bronann wonders where he can find barley meal 364 event = vt_map.ScriptedEvent.Create("Quest1: Bronann wonders where he can find some barley meal", "Map_SceneState", ""); 365 event:AddEventLinkAtEnd("Quest1: Bronann wants to see Flora for the barley meal", 1000); 366 367 dialogue = vt_map.SpriteDialogue.Create(); 368 text = vt_system.Translate("Hmm, I'll go to Flora's shop. I hope she'll help me."); 369 dialogue:AddLineEmote(text, bronann, "thinking dots"); 370 event = vt_map.DialogueEvent.Create("Quest1: Bronann wants to see Flora for the barley meal", dialogue); 371 event:SetStopCameraMovement(true); 372 event:AddEventLinkAtEnd("Map:PopState()"); 373 374 -- Georges 375 vt_map.ScriptedEvent.Create("Quest1: GeorgesDialogueDone", "Quest1GeorgesDialogueDone", ""); 376 377 -- Orlinn 378 vt_map.ScriptedEvent.Create("Orlinn laughs", "orlinn_laughs", ""); 379 380 event = vt_map.ScriptedEvent.Create("Quest1: Make Orlinn run and hide", "Quest1OrlinnRunAndHide", ""); 381 event:AddEventLinkAtEnd("Quest1: Make Orlinn run"); 382 383 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Make Orlinn run", orlinn, 67, 79, true); 384 event:AddEventLinkAtEnd("Quest1: Make Orlinn disappear"); 385 386 event = vt_map.ScriptedSpriteEvent.Create("Quest1: Make Orlinn disappear", orlinn, "MakeInvisible", ""); 387 event:AddEventLinkAtEnd("Quest1: Make Orlinn run event end"); 388 389 vt_map.ScriptedSpriteEvent.Create("Quest1: Make Orlinn run event end", orlinn, "orlinn_run_event_end", ""); 390 391 -- Kalya calls for Orlinn 392 event = vt_map.ScriptedEvent.Create("Kalya brings back Orlinn event start", "kalya_brings_orlinn_back_start", ""); 393 event:AddEventLinkAtEnd("Kalya tells Bronann to follow her"); 394 395 dialogue = vt_map.SpriteDialogue.Create(); 396 text = vt_system.Translate("As you wish. Follow me."); 397 dialogue:AddLine(text, kalya); 398 event = vt_map.DialogueEvent.Create("Kalya tells Bronann to follow her", dialogue); 399 event:AddEventLinkAtEnd("Kalya goes at the center of village"); 400 event:AddEventLinkAtEnd("Bronann follows Kalya at the center of the village", 1000); 401 402 event = vt_map.PathMoveSpriteEvent.Create("Kalya goes at the center of village", kalya, 52, 47, true); 403 event:AddEventLinkAtEnd("Kalya looks south"); 404 event:AddEventLinkAtEnd("Kalya tells Orlinn to come"); 405 406 event = vt_map.PathMoveSpriteEvent.Create("Bronann follows Kalya at the center of the village", bronann, 48, 47, true); 407 event:AddEventLinkAtEnd("Bronann looks south"); 408 409 dialogue = vt_map.SpriteDialogue.Create(); 410 text = vt_system.Translate("ORLINN! Come here, NOW!"); 411 dialogue:AddLine(text, kalya); 412 event = vt_map.DialogueEvent.Create("Kalya tells Orlinn to come", dialogue); 413 event:AddEventLinkAtEnd("Orlinn comes near Kalya"); 414 415 event = vt_map.PathMoveSpriteEvent.Create("Orlinn comes near Kalya", orlinn, 52, 50, true); 416 event:AddEventLinkAtEnd("Orlinn looks at Kalya"); 417 event:AddEventLinkAtEnd("Kalya tells Orlinn to give the pen"); 418 419 dialogue = vt_map.SpriteDialogue.Create(); 420 text = vt_system.Translate("Orlinn, give back the pen to Bronann or I shall sma..."); 421 dialogue:AddLineEmote(text, kalya, "exclamation"); 422 text = vt_system.Translate("Yea, yes, here it is."); 423 dialogue:AddLineEmote(text, orlinn, "exclamation"); 424 event = vt_map.DialogueEvent.Create("Kalya tells Orlinn to give the pen", dialogue); 425 event:AddEventLinkAtEnd("Orlinn comes near Bronann"); 426 427 event = vt_map.PathMoveSpriteEvent.Create("Orlinn comes near Bronann", orlinn, 48, 50, false); 428 event:AddEventLinkAtEnd("Orlinn looks at Bronann"); 429 event:AddEventLinkAtEnd("Kalya looks at Orlinn"); 430 event:AddEventLinkAtEnd("Orlinn gives the pen to Bronann"); 431 432 event = vt_map.TreasureEvent.Create("Orlinn gives the pen to Bronann"); 433 event:AddItem(70001, 1); -- The ink key item 434 event:AddEventLinkAtEnd("Orlinn apologizes"); 435 436 dialogue = vt_map.SpriteDialogue.Create(); 437 text = vt_system.Translate("I found that pen under a tree near the river. I just wanted to play."); 438 dialogue:AddLineEmote(text, orlinn, "sweat drop"); 439 text = vt_system.Translate("Don't worry about it."); 440 dialogue:AddLine(text, bronann); 441 event = vt_map.DialogueEvent.Create("Orlinn apologizes", dialogue); 442 event:AddEventLinkAtEnd("Orlinn comes back event end"); 443 444 vt_map.ScriptedEvent.Create("Orlinn comes back event end", "orlinn_comes_back_event_end", ""); 445 446 -- Georges event 447 vt_map.ScriptedEvent.Create("Quest1: Georges thanks Bronann", "Quest1GeorgesTellsBronannAboutLilly", ""); 448 449 -- Quest 2: The forest event 450 event = vt_map.ScriptedEvent.Create("Quest2: Forest event", "Prepare_forest_event", ""); 451 event:AddEventLinkAtEnd("Quest2: Forest event - light", 1200); 452 453 event = vt_map.ScriptedEvent.Create("Quest2: Forest event - light", "BrightLightStart", "BrightLightUpdate"); 454 event:AddEventLinkAtEnd("Bronann moves out of the door") 455 456 event = vt_map.PathMoveSpriteEvent.Create("Bronann moves out of the door", bronann, 12, 66, false) 457 event:AddEventLinkAtEnd("Bronann searches") 458 459 vt_map.AnimateSpriteEvent.Create("Bronann searches", bronann, "searching", 1000) 460 event:AddEventLinkAtEnd("Quest2: Bronann wonders what was that", 500) 461 462 dialogue = vt_map.SpriteDialogue.Create(); 463 text = vt_system.Translate("What was this?"); 464 dialogue:AddLineEmote(text, bronann, "interrogation"); 465 text = vt_system.Translate("Bronann! Wait!"); 466 dialogue:AddLine(text, carson); 467 event = vt_map.DialogueEvent.Create("Quest2: Bronann wonders what was that", dialogue); 468 event:SetStopCameraMovement(true); 469 event:AddEventLinkAtEnd("Make Carson Visible") 470 event:AddEventLinkAtEnd("Quest2: Carson moves to Bronann", 100) 471 event:AddEventLinkAtEnd("Quest2: Bronann looks at his father", 100) 472 473 vt_map.ScriptedEvent.Create("Make Carson Visible", "set_carson_visible", "") 474 475 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Carson moves to Bronann", carson, 12, 63, false); 476 event:AddEventLinkAtEnd("Quest2: Carson starts to talk to Bronann"); 477 478 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Bronann looks at his father", bronann, vt_map.MapMode.NORTH) 479 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Bronann looks at Herth", bronann, vt_map.MapMode.EAST) 480 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Herth looks at Carson", herth, vt_map.MapMode.WEST) 481 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Herth looks at Kalya", herth, vt_map.MapMode.EAST) 482 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Carson looks at Herth", carson, vt_map.MapMode.SOUTH) 483 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Carson looks at Kalya", carson, vt_map.MapMode.SOUTH) 484 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Carson looks at Bronann", carson, vt_map.MapMode.SOUTH) 485 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Kalya looks at Carson", kalya, vt_map.MapMode.NORTH) 486 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Kalya looks at Bronann", kalya, vt_map.MapMode.WEST) 487 488 dialogue = vt_map.SpriteDialogue.Create(); 489 text = vt_system.Translate("Bronann, there is something that I have to tell you. We've been fearing for this moment, your mother and I."); 490 dialogue:AddLine(text, carson); 491 text = vt_system.Translate("They're coming!"); 492 dialogue:AddLineEvent(text, herth, "Quest2: Bronann looks at Herth", "Quest2: Carson looks at Herth") 493 event = vt_map.DialogueEvent.Create("Quest2: Carson starts to talk to Bronann", dialogue); 494 event:SetStopCameraMovement(true); 495 event:AddEventLinkAtEnd("Quest2: Herth moves to Carson"); 496 497 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Herth moves to Carson", herth, 17, 71, false); 498 event:AddEventLinkAtEnd("Quest2: Herth looks at Carson"); 499 event:AddEventLinkAtEnd("Quest2: Second part of talk"); 500 501 dialogue = vt_map.SpriteDialogue.Create(); 502 text = vt_system.Translate("Carson, they've crossed the river. They shall be here in no time."); 503 dialogue:AddLine(text, herth); 504 text = vt_system.Translate("..."); 505 dialogue:AddLineEmote(text, carson, "sweat drop"); 506 text = vt_system.Translate("Huh? Hey, what's happening here?!"); 507 dialogue:AddLineEventEmote(text, bronann, "", "Quest2: Carson looks at Bronann", "exclamation"); 508 text = vt_system.Translate("Bronann, I..."); 509 dialogue:AddLine(text, carson); 510 text = vt_system.Translate("Herth!"); 511 dialogue:AddLineEvent(text, kalya, "", "Quest2: Herth looks at Kalya"); 512 event = vt_map.DialogueEvent.Create("Quest2: Second part of talk", dialogue); 513 event:SetStopCameraMovement(true); 514 event:AddEventLinkAtEnd("Quest2: Kalya runs to her father"); 515 516 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya runs to her father", kalya, 21, 71, true); 517 event:AddEventLinkAtEnd("Quest2: Third part of talk"); 518 519 dialogue = vt_map.SpriteDialogue.Create(); 520 text = vt_system.Translate("Herth! Orlinn has disappeared. I saw him taking the forest pathway!"); 521 dialogue:AddLineEvent(text, kalya, "", "Quest2: Carson looks at Herth"); 522 text = vt_system.Translate("Kalya, you were supposed to keep an eye on him!"); 523 dialogue:AddLineEmote(text, herth, "exclamation"); 524 text = vt_system.Translate("I did, but he just slipped through my fingers at the very second that strange light appeared."); 525 dialogue:AddLineEmote(text, kalya, "sweat drop"); 526 text = vt_system.Translate("Kalya, the army is coming. I'll deal with them. You go and find Orlinn as fast as possible."); 527 dialogue:AddLineEmote(text, herth, "thinking dots"); 528 text = vt_system.Translate("But you might get hurt!"); 529 dialogue:AddLineEmote(text, kalya, "exclamation"); 530 text = vt_system.Translate("Don't worry. We'll simply talk to them and they'll move on. You know what you have to do, right?"); 531 dialogue:AddLine(text, herth); 532 text = vt_system.Translate("Herth, we both know it'll likely..."); 533 dialogue:AddLine(text, kalya); 534 text = vt_system.Translate("Do as I say and it'll be alright."); 535 dialogue:AddLine(text, herth); 536 text = vt_system.Translate("But..."); 537 dialogue:AddLineEvent(text, kalya, "", "Quest2: Carson looks at Bronann"); 538 text = vt_system.Translate("Bronann, you should go with her."); 539 dialogue:AddLineEventEmote(text, carson, "Quest2: Bronann looks at his father", "Quest2: Kalya looks at Carson", "thinking dots"); 540 text = vt_system.Translate("What?!"); 541 dialogue:AddLineEmote(text, kalya, "exclamation"); 542 text = vt_system.Translate("Huh?"); 543 dialogue:AddLineEvent(text, bronann, "Bronann is frightened",""); 544 text = vt_system.Translate("Carson is right, Kalya. Bronann shall go with you."); 545 dialogue:AddLineEvent(text, herth, "Quest2: Bronann looks at Herth", "Quest2: Kalya looks at Bronann"); 546 text = vt_system.Translate("But he would just be a burden!"); 547 dialogue:AddLineEvent(text, kalya, "", "Bronann is sad"); 548 text = vt_system.Translate("Huh? Hey! But..."); 549 dialogue:AddLineEmote(text, bronann, "exclamation"); 550 text = vt_system.Translate("He won't slow you down, believe me. Right, Bronann?"); 551 dialogue:AddLineEvent(text, carson, "", "Quest2: Carson looks at Bronann"); 552 text = vt_system.Translate("But Herth!"); 553 dialogue:AddLine(text, kalya); 554 text = vt_system.Translate("Carson is right, Kalya. Bronann shall go with you. It's an order."); 555 dialogue:AddLineEmote(text, herth, "thinking dots"); 556 event = vt_map.DialogueEvent.Create("Quest2: Third part of talk", dialogue); 557 event:AddEventLinkAtEnd("Quest2: Kalya goes back and forth"); 558 559 -- Small event chain making kalya go back and forth. 560 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya goes back and forth", kalya, 19, 71, false); 561 event:AddEventLinkAtEnd("Quest2: Carson looks at Kalya"); 562 event:AddEventLinkAtEnd("Quest2: Kalya goes back and forth 2"); 563 564 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya goes back and forth 2", kalya, 21, 71, false); 565 event:AddEventLinkAtEnd("Quest2: Kalya goes back and forth 3"); 566 567 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya goes back and forth 3", kalya, 19, 71, false); 568 event:AddEventLinkAtEnd("Quest2: Kalya goes back and forth 4"); 569 570 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya goes back and forth 4", kalya, 21, 71, false); 571 event:AddEventLinkAtEnd("Quest2: Fourth part of talk"); 572 573 dialogue = vt_map.SpriteDialogue.Create(); 574 text = vt_system.Translate("Gahh, ok."); 575 dialogue:AddLineEvent(text, kalya, "", "Quest2: Carson looks at Bronann"); 576 text = vt_system.Translate("Now go, my son. I'll explain it to you once it is all finished. I trust you will succeed."); 577 dialogue:AddLineEvent(text, carson, "Quest2: Bronann looks at his father", "") 578 event = vt_map.DialogueEvent.Create("Quest2: Fourth part of talk", dialogue); 579 event:AddEventLinkAtEnd("Quest2: Fifth part of talk"); 580 581 dialogue = vt_map.SpriteDialogue.Create(); 582 text = vt_system.Translate("Thanks dad, we'll find him in no time."); 583 dialogue:AddLine(text, bronann); 584 text = vt_system.Translate("We shall go now. Good luck, both of you."); 585 dialogue:AddLineEvent(text, herth, "Quest2: Bronann looks at Herth", "Quest2: Herth looks at Kalya"); 586 event = vt_map.DialogueEvent.Create("Quest2: Fifth part of talk", dialogue); 587 event:AddEventLinkAtEnd("Quest2: Herth leaves to south"); 588 event:AddEventLinkAtEnd("Quest2: Carson starts to leave to south"); 589 590 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Herth leaves to south", herth, 26, 78, false); 591 event:AddEventLinkAtEnd("Quest2: Herth disappears"); 592 593 vt_map.ScriptedSpriteEvent.Create("Quest2: Herth disappears", herth, "MakeInvisible", ""); 594 595 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Carson starts to leave to south", carson, 26, 74, false); 596 event:AddEventLinkAtEnd("Quest2: Carson talks to Bronann once last time"); 597 event:AddEventLinkAtEnd("Quest2: Carson looks at Bronann from south"); 598 599 vt_map.ChangeDirectionSpriteEvent.Create("Quest2: Carson looks at Bronann from south", carson, vt_map.MapMode.NORTH); 600 601 dialogue = vt_map.SpriteDialogue.Create(); 602 text = vt_system.Translate("Good luck, son."); 603 dialogue:AddLine(text, carson); 604 event = vt_map.DialogueEvent.Create("Quest2: Carson talks to Bronann once last time", dialogue); 605 event:AddEventLinkAtEnd("Quest2: Carson leaves to south"); 606 607 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Carson leaves to south", carson, 26, 78, false); 608 event:AddEventLinkAtEnd("Quest2: Carson disappears"); 609 610 event = vt_map.ScriptedSpriteEvent.Create("Quest2: Carson disappears", carson, "MakeInvisible", ""); 611 event:AddEventLinkAtEnd("Quest2: End part of talk", 1000); 612 613 dialogue = vt_map.SpriteDialogue.Create(); 614 text = vt_system.Translate("Ok, we'll go together. But slow me down and I'll make you regret it."); 615 dialogue:AddLineEvent(text, kalya, "Quest2: Kalya looks at Bronann", ""); 616 text = vt_system.Translate("Don't worry, we'll find him. Ok?"); 617 dialogue:AddLine(text, bronann); 618 text = vt_system.Translate("Ok."); 619 dialogue:AddLine(text, kalya); 620 event = vt_map.DialogueEvent.Create("Quest2: End part of talk", dialogue); 621 event:AddEventLinkAtEnd("Quest2: Kalya joins Bronann's party"); 622 623 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya joins Bronann's party", kalya, 12, 66, false); 624 event:AddEventLinkAtEnd("Quest2: Kalya disappears"); 625 event:AddEventLinkAtEnd("Quest2: Add Kalya to the party"); 626 627 vt_map.ScriptedSpriteEvent.Create("Quest2: Kalya disappears", kalya, "MakeInvisible", ""); 628 629 vt_map.ScriptedEvent.Create("Quest2: Add Kalya to the party", "Add_kalya_to_party", ""); 630 event:AddEventLinkAtEnd("Quest2: Kalya joins speech"); 631 632 dialogue = vt_map.SpriteDialogue.Create(); 633 text = vt_system.Translate("Kalya joins your party!"); 634 dialogue:AddLine(text, kalya); --used for now to show her portrait 635 event = vt_map.DialogueEvent.Create("Quest2: Kalya joins speech", dialogue); 636 event:AddEventLinkAtEnd("Map:PopState()"); 637 638 -- Kalya explains Bronann about dungeons and equipment, 639 event = vt_map.ScriptedEvent.Create("Quest2: Kalya's equipment and dungeons speech start", "Quest2_equip_speech_start", ""); 640 event:AddEventLinkAtEnd("Quest2: Kalya walks off from Bronann"); 641 event:AddEventLinkAtEnd("Quest2: Bronann goes in front of Kalya"); 642 643 vt_map.ChangeDirectionSpriteEvent.Create("Kalya looks east", kalya, vt_map.MapMode.EAST); 644 vt_map.ChangeDirectionSpriteEvent.Create("Bronann looks west", bronann, vt_map.MapMode.WEST); 645 646 vt_map.ScriptedSpriteEvent.Create("Turn Kalya's collisions on", kalya, "Sprite_Collision_on", ""); 647 648 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya walks off from Bronann", kalya, 114, 37, false); 649 event:AddEventLinkAtEnd("Kalya looks east"); 650 event:AddEventLinkAtEnd("Turn Kalya's collisions on"); 651 event:AddEventLinkAtEnd("Quest2: Kalya's speech about equipment and dungeons."); 652 653 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Bronann goes in front of Kalya", bronann, 116, 37, false); 654 event:AddEventLinkAtEnd("Bronann looks west"); 655 656 dialogue = vt_map.SpriteDialogue.Create(); 657 text = vt_system.Translate("By the way, have you ever prepared yourself for something like this before?"); 658 dialogue:AddLine(text, kalya); 659 text = vt_system.Translate("Huh? Well, Orlinn doesn't disappear every day, you know?"); 660 dialogue:AddLineEmote(text, bronann, "thinking dots"); 661 text = vt_system.Translate("I see. Then there are two very important things that you need to know."); 662 dialogue:AddLine(text, kalya); 663 text = vt_system.Translate("First of all, before going there, you might need better equipment. You should visit Flora first, ok?"); 664 dialogue:AddLine(text, kalya); 665 text = vt_system.VTranslate("And I hope that you have already equipped your sword. If you haven't, open your inventory by pressing the menu key (%s), and select 'Equip'. Then you'll be able to select your sword and add it as your main weapon.", InputManager:GetMenuKeyName()); 666 dialogue:AddLine(text, kalya); 667 text = vt_system.Translate("You mean I need to push a key to open my bag?"); 668 dialogue:AddLineEmote(text, bronann, "interrogation"); 669 text = vt_system.Translate("Nevermind that, just do it."); 670 dialogue:AddLine(text, kalya); 671 text = vt_system.Translate("Also, the person in front of the battle line will lead the group in the forest. What I mean by that is the person on the top of the battle formation will actually appear while the others will stay hidden."); 672 dialogue:AddLine(text, kalya); 673 text = vt_system.Translate("Hmm, right. I'm not sure that I fully get what you mean, but..."); 674 dialogue:AddLine(text, bronann); 675 text = vt_system.Translate("Rrrr, Bronann. Just listen."); 676 dialogue:AddLine(text, kalya); 677 text = vt_system.Translate("That will be the case only in certain areas. Here in the village, you'll be the one leading, or at least you may believe that."); 678 dialogue:AddLine(text, kalya); 679 event = vt_map.DialogueEvent.Create("Quest2: Kalya's speech about equipment and dungeons.", dialogue); 680 event:AddEventLinkAtEnd("Quest2: Kalya re-joins Bronann after speech"); 681 682 event = vt_map.PathMoveSpriteEvent.Create("Quest2: Kalya re-joins Bronann after speech", kalya, 116, 37, false); 683 event:AddEventLinkAtEnd("Quest2: Kalya disappears after speech"); 684 685 event = vt_map.ScriptedSpriteEvent.Create("Quest2: Kalya disappears after speech", kalya, "MakeInvisible", ""); 686 event:AddEventLinkAtEnd("Map:PopState()"); 687end 688 689-- zones 690local bronanns_home_entrance_zone = nil 691local to_riverbank_zone = nil 692local to_village_entrance_zone = nil 693local to_kalya_house_path_zone = nil 694local shop_entrance_zone = nil 695local secret_path_zone = nil 696local to_layna_forest_zone = nil 697local sophia_house_entrance_zone = nil 698local to_well_undergrounds_zone = nil 699 700function _CreateZones() 701 -- N.B.: left, right, top, bottom 702 bronanns_home_entrance_zone = vt_map.CameraZone.Create(10, 14, 60, 61); 703 to_riverbank_zone = vt_map.CameraZone.Create(19, 35, 78, 79); 704 to_village_entrance_zone = vt_map.CameraZone.Create(60, 113, 78, 79); 705 to_kalya_house_path_zone = vt_map.CameraZone.Create(0, 1, 8, 15); 706 shop_entrance_zone = vt_map.CameraZone.Create(92, 96, 70, 71); 707 secret_path_zone = vt_map.CameraZone.Create(0, 1, 55, 61); 708 to_layna_forest_zone = vt_map.CameraZone.Create(117, 119, 30, 43); 709 sophia_house_entrance_zone = vt_map.CameraZone.Create(21, 23, 21, 22); 710 to_well_undergrounds_zone = vt_map.CameraZone.Create(62, 64, 29, 30) 711end 712 713function _CheckZones() 714 if (bronanns_home_entrance_zone:IsCameraEntering() == true) then 715 bronann:SetMoving(false); 716 AudioManager:PlaySound("data/sounds/door_open2.wav"); 717 EventManager:StartEvent("to Bronann's home"); 718 elseif (to_riverbank_zone:IsCameraEntering() == true) then 719 bronann:SetMoving(false); 720 EventManager:StartEvent("to Riverbank"); 721 elseif (to_village_entrance_zone:IsCameraEntering() == true) then 722 bronann:SetMoving(false); 723 EventManager:StartEvent("to Village south entrance"); 724 elseif (to_kalya_house_path_zone:IsCameraEntering() == true) then 725 bronann:SetMoving(false); 726 EventManager:StartEvent("to Kalya house path"); 727 elseif (secret_path_zone:IsCameraEntering() == true) then 728 bronann:SetMoving(false); 729 EventManager:StartEvent("to secret cliff"); 730 elseif (to_layna_forest_zone:IsCameraEntering() == true) then 731 bronann:SetMoving(false); 732 if (GlobalManager:GetGameEvents():DoesEventExist("story", "Quest2_forest_event_done") == false) then 733 EventManager:StartEvent("Bronann can't enter the forest so easily"); 734 elseif (GlobalManager:GetGameEvents():DoesEventExist("story", "Quest2_kalya_equip_n_dungeons_speech_done") == false) then 735 EventManager:StartEvent("Quest2: Kalya's equipment and dungeons speech start"); 736 else 737 EventManager:StartEvent("to layna forest entrance"); 738 end 739 elseif (shop_entrance_zone:IsCameraEntering() == true) then 740 bronann:SetMoving(false); 741 AudioManager:PlaySound("data/sounds/door_open2.wav"); 742 EventManager:StartEvent("to Flora's Shop"); 743 elseif (sophia_house_entrance_zone:IsCameraEntering() == true) then 744 bronann:SetMoving(false); 745 EventManager:StartEvent("to sophia house"); 746 AudioManager:PlaySound("data/sounds/door_open2.wav"); 747 elseif (to_well_undergrounds_zone:IsCameraEntering() == true 748 -- cannot enter until the well event is done. 749 and GlobalManager:GetGameEvents():DoesEventExist("story", "well_rats_beaten") == true) then 750 bronann:SetMoving(false) 751 EventManager:StartEvent("To well underground") 752 end 753end 754 755-- Inner custom functions 756function _TriggerPotentialDialogueAfterFadeIn() 757 -- Trigger the forest and Orlinn runaway event 758 if (GlobalManager:GetGameEvents():DoesEventExist("story", "meal_event_done") == true 759 and GlobalManager:GetGameEvents():DoesEventExist("story", "Quest2_forest_event_done") == false) then 760 EventManager:StartEvent("Quest2: Forest event"); 761 GlobalManager:GetGameEvents():SetEventValue("story", "Quest2_forest_event_done", 1); 762 return; 763 end 764 765 if (GlobalManager:GetGameEvents():DoesEventExist("layna_center", "first_time_in_village_center") == false) then 766 EventManager:StartEvent("Quest1: Bronann wonders where he can find some barley meal"); 767 GlobalManager:GetGameEvents():SetEventValue("layna_center", "first_time_in_village_center", 1); 768 return; 769 end 770end 771 772-- Updates Olivia dialogues according to the story events 773function _UpdateOliviaDialogue() 774 local dialogue = nil 775 local text = nil 776 local event = nil 777 778 olivia:ClearDialogueReferences(); 779 780 local default_dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_olivia_no_access_to_forest1"); 781 text = vt_system.Translate("Bronann! Sorry, you know that you can't access the forest without permission."); 782 default_dialogue:AddLineEmote(text, olivia, "exclamation"); 783 text = vt_system.Translate("Aww..."); 784 default_dialogue:AddLineEventEmote(text, bronann, "Bronann looks at Olivia", "", "sweat drop"); 785 786 -- Don't grant access to the forest so easily 787 if (GlobalManager:GetGameEvents():DoesEventExist("story", "Quest2_forest_event_done") == false) then 788 if (GlobalManager:GetGameEvents():DoesEventExist("story", "Carson_wooden_sword_given") == true 789 and GlobalManager:GetGameEvents():DoesEventExist("story", "well_rats_beaten") == false) then 790 -- The well quest dialogue 791 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_olivia_well_quest") 792 text = vt_system.Translate("Hey Bronann. I can see you have your father practice sword. Ready for your first real challenge?") 793 dialogue:AddLine(text, olivia) 794 text = vt_system.Translate("Hey Olivia. I guess so. What is it all about?") 795 dialogue:AddLineEmote(text, bronann, "interrogation") 796 text = vt_system.Translate("Follow me.") 797 dialogue:AddLine(text, olivia) 798 dialogue:SetEventAtDialogueEnd("Olivia goes to well with Bronann") 799 olivia:AddDialogueReference(dialogue) 800 801 -- Event to go to the well. 802 event = vt_map.ScriptedEvent.Create("Olivia goes to well with Bronann", "Well_event_scene_start", "") 803 event:AddEventLinkAtEnd("Olivia moves to the well") 804 event:AddEventLinkAtEnd("Bronann looks at Olivia for a few seconds") 805 event = vt_map.PathMoveSpriteEvent.Create("Olivia moves to the well", olivia, 57, 27, true) 806 event:AddEventLinkAtEnd("Olivia looks at Bronann 1") 807 event = vt_map.LookAtSpriteEvent.Create("Olivia looks at Bronann 1", olivia, bronann) 808 809 event = vt_map.ScriptedEvent.Create("Bronann looks at Olivia for a few seconds", "bronann_watch_olivia_start", "bronann_watch_olivia_update") 810 event:AddEventLinkAtEnd("Bronann moves to the well") 811 812 event = vt_map.PathMoveSpriteEvent.Create("Bronann moves to the well", bronann, 61, 27, true) 813 event:AddEventLinkAtEnd("Olivia looks at Bronann") 814 event = vt_map.LookAtSpriteEvent.Create("Olivia looks at Bronann", olivia, bronann) 815 event:AddEventLinkAtEnd("Olivia opens path to well underground") 816 dialogue = vt_map.SpriteDialogue.Create() 817 text = vt_system.Translate("Here we go!") 818 dialogue:AddLine(text, olivia) 819 event = vt_map.DialogueEvent.Create("Olivia opens path to well underground", dialogue) 820 event:AddEventLinkAtEnd("Olivia moves close to the well") 821 822 event = vt_map.PathMoveSpriteEvent.Create("Olivia moves close to the well", olivia, 59, 28.5, false) 823 event:AddEventLinkAtEnd("Olivia opens well path") 824 event = vt_map.ScriptedEvent.Create("Olivia opens well path", "well_open_trigger_start", "well_open_trigger_update") 825 event:AddEventLinkAtEnd("Olivia speech before entering well") 826 827 dialogue = vt_map.SpriteDialogue.Create() 828 text = vt_system.Translate("Time to dive in, Bronann.") 829 dialogue:AddLine(text, olivia) 830 text = vt_system.Translate("Follow me inside.") 831 dialogue:AddLine(text, olivia) 832 event = vt_map.DialogueEvent.Create("Olivia speech before entering well", dialogue) 833 event:AddEventLinkAtEnd("Olivia enters the well") 834 event = vt_map.PathMoveSpriteEvent.Create("Olivia enters the well", olivia, 63, 32, false) 835 event:AddEventLinkAtEnd("Set Olivia invisible") 836 event = vt_map.ScriptedEvent.Create("Set Olivia invisible", "set_olivia_invisible", "") 837 event:AddEventLinkAtEnd("Bronann enters the well") 838 event = vt_map.PathMoveSpriteEvent.Create("Bronann enters the well", bronann, 63, 32, false) 839 event:AddEventLinkAtEnd("To well underground") -- map transition 840 else 841 olivia:AddDialogueReference(default_dialogue) 842 end 843 844 -- Add the map even to prevent going to the forest 845 event = vt_map.DialogueEvent.Create("Bronann can't enter the forest so easily", default_dialogue) 846 event:SetStopCameraMovement(true) 847 else 848 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_olivia_access_to_forest") 849 text = vt_system.Translate("Good luck Bronann.") 850 dialogue:AddLine(text, olivia) 851 olivia:AddDialogueReference(dialogue) 852 end 853end 854 855-- Updates Georges dialogue depending on how far is the story going. 856function _UpdateGeorgesDialogue() 857 local text = nil 858 local dialogue = nil 859 860 georges:ClearDialogueReferences(); 861 862 if (GlobalManager:GetGameEvents():DoesEventExist("layna_center", "quest1_pen_given_done") == true) then 863 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_georges_default"); 864 text = vt_system.Translate("Ah, the river is so beautiful at this time of the year. I feel like writing some poetry..."); 865 dialogue:AddLine(text, georges); 866 georges:AddDialogueReference(dialogue); 867 elseif (GlobalManager:GetGameEvents():DoesEventExist("layna_riverbank", "quest1_orlinn_hide_n_seek3_done") == true) then 868 -- Give the pen to Georges 869 dialogue = vt_map.SpriteDialogue.Create(); 870 text = vt_system.Translate("Here it is, Georges."); 871 dialogue:AddLine(text, bronann); 872 text = vt_system.Translate("You're the nicest person I know, Bronann. I will tell everyone how brave you..."); 873 dialogue:AddLine(text, georges); 874 text = vt_system.Translate("(sigh)... Georges!"); 875 dialogue:AddLine(text, bronann); 876 text = vt_system.Translate("Ok ok. Just having a bit of spirit, young man."); 877 dialogue:AddLineEvent(text, georges, "", "Quest1: Georges thanks Bronann"); 878 georges:AddDialogueReference(dialogue); 879 return; 880 elseif (GlobalManager:GetGameEvents():DoesEventExist("layna_center", "quest1_georges_dialogue_done") == true) then 881 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_georges_pen_lost_short"); 882 text = vt_system.Translate("You see, I lost my beloved pen. Was it near a tree or next to the waving child of the mountain snow?"); 883 dialogue:AddLine(text, georges); 884 text = vt_system.Translate("Shall you find it, I would be extremely obliged to you!"); 885 dialogue:AddLine(text, georges); 886 text = vt_system.Translate("Inquire our comrades in the settlement, perhaps somebody has laid their eyes on it."); 887 dialogue:AddLine(text, georges); 888 text = vt_system.Translate("(sigh...) Hmm, fine. I'll have a look."); 889 dialogue:AddLine(text, bronann); 890 georges:AddDialogueReference(dialogue); 891 else 892 -- Once talked to him after the shop conversation, just put the end of the dialogue 893 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_georges_pen_lost"); 894 text = vt_system.Translate("Oh Bronann, sad is the poet today."); 895 dialogue:AddLine(text, georges); 896 text = vt_system.Translate("Hi Georges, well, I was just passing by you know, and"); 897 dialogue:AddLine(text, bronann); 898 text = vt_system.Translate("You see, I lost my beloved pen. Was it near a tree or next to the waving child of the mountain snow?"); 899 dialogue:AddLine(text, georges); 900 text = vt_system.Translate("Shall you find it, I would be extremely obliged to you!"); 901 dialogue:AddLine(text, georges); 902 text = vt_system.Translate("Inquire our comrades in the settlement, perhaps somebody has laid their eyes on it."); 903 dialogue:AddLine(text, georges); 904 text = vt_system.Translate("(sigh...) Hmm, fine. I'll have a look."); 905 dialogue:AddLineEvent(text, bronann, "", "Quest1: GeorgesDialogueDone"); 906 georges:AddDialogueReference(dialogue); 907 return; 908 end 909end 910 911-- Updates Orlinn's dialogue and state depending on how far is the story going. 912function _UpdateOrlinnAndKalyaState() 913 local text = nil 914 local dialogue = nil 915 local event = nil 916 917 orlinn:ClearDialogueReferences(); 918 if (GlobalManager:GetGameEvents():DoesEventExist("story", "Quest2_forest_event_done") == true) then 919 -- At that moment, Orlinn has disappeared and Kalya is now in Bronann's party. 920 orlinn:SetVisible(false); 921 orlinn:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 922 kalya:ClearDialogueReferences(); 923 kalya:SetVisible(false); 924 kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 925 EventManager:EndAllEvents(kalya); 926 kalya:SetMoving(false); 927 return; 928 end 929 if (GlobalManager:GetGameEvents():DoesEventExist("layna_riverbank", "quest1_orlinn_hide_n_seek3_done") == true) then 930 -- Bronann got Georges' pen, update orlinn dialogue 931 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_orlinn_wont_bother_again"); 932 text = vt_system.Translate("I promise I won't bother you again."); 933 dialogue:AddLine(text, orlinn); 934 text = vt_system.Translate("Don't worry about that, Orlinn. Ok?"); 935 dialogue:AddLine(text, bronann); 936 orlinn:AddDialogueReference(dialogue); 937 938 -- Update kalya's dialogue too 939 kalya:ClearDialogueReferences(); 940 dialogue = vt_map.SpriteDialogue.Create(); 941 text = vt_system.Translate("..."); 942 dialogue:AddLine(text, kalya); 943 kalya:AddDialogueReference(dialogue); 944 945 elseif (GlobalManager:GetGameEvents():DoesEventExist("layna_center", "quest1_orlinn_dialogue1_done") == true) then 946 -- At that time, Orlinn isn't in the village center anymore. 947 orlinn:SetVisible(false); 948 orlinn:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 949 950 -- Kalya propose to seek him for you 951 kalya:ClearDialogueReferences(); 952 dialogue = vt_map.SpriteDialogue.Create(); 953 text = vt_system.Translate("Kalya, have you seen Orlinn?"); 954 dialogue:AddLine(text, bronann); 955 text = vt_system.Translate("Why? Oh, don't tell me. He's hiding somewhere."); 956 dialogue:AddLineEmote(text, kalya, "thinking dots"); 957 text = vt_system.Translate("Yes, he took Georges pen and I need to give it back to him..."); 958 dialogue:AddLine(text, bronann); 959 text = vt_system.Translate("Hmpf, no surprise. Do you want me to bring him back?"); 960 dialogue:AddLineEmote(text, kalya, "sweat drop"); 961 text = vt_system.Translate("Yes, please."); 962 dialogue:AddOptionEvent(text, 15, "Kalya brings back Orlinn event start"); -- 15 is after the dialogue's end on purpose. 963 text = vt_system.Translate("No, it's not that bad."); 964 dialogue:AddOption(text, 4); 965 text = vt_system.Translate("As you wish."); 966 dialogue:AddLine(text, kalya); 967 kalya:AddDialogueReference(dialogue); 968 969 return; 970 elseif (GlobalManager:GetGameEvents():DoesEventExist("layna_center", "quest1_georges_dialogue_done") == true) then 971 dialogue = vt_map.SpriteDialogue.Create(); 972 text = vt_system.Translate("Hee hee hee!"); 973 dialogue:AddLineEvent(text, orlinn, "Orlinn laughs", ""); 974 text = vt_system.Translate("What are you laughing about, Orlinn?"); 975 dialogue:AddLineEmote(text, bronann, "interrogation"); 976 text = vt_system.Translate("You'll never find it!"); 977 dialogue:AddLine(text, orlinn); 978 text = vt_system.Translate("Huh? Wait! Are you talking about Georges's lost pen?"); 979 dialogue:AddLineEmote(text, bronann, "exclamation"); 980 text = vt_system.Translate("Hee hee hee! Yes!"); 981 dialogue:AddLineEvent(text, orlinn, "Orlinn laughs", ""); 982 text = vt_system.Translate("Please tell me! Have you found it?"); 983 dialogue:AddLine(text, bronann); 984 text = vt_system.Translate("Maybe yes, maybe no!"); 985 dialogue:AddLine(text, orlinn); 986 text = vt_system.Translate("Oh no, please Orlinn! I need it!"); 987 dialogue:AddLineEmote(text, bronann, "sweat drop"); 988 text = vt_system.Translate("Sure, I'll help you. But only if you can catch me!"); 989 dialogue:AddLine(text, orlinn); 990 text = vt_system.Translate("Hee hee! (He'll never find me hiding behind the buildings!)"); 991 dialogue:AddLineEvent(text, orlinn, "Orlinn laughs", "Quest1: Make Orlinn run and hide"); 992 993 orlinn:AddDialogueReference(dialogue); 994 else 995 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_orlinn_wanna_play"); 996 text = vt_system.Translate("Heya bro! Wanna play with me?"); 997 dialogue:AddLine(text, orlinn); 998 orlinn:AddDialogueReference(dialogue); 999 end 1000 1001 -- Default behaviour 1002 EventManager:EndAllEvents(orlinn); 1003 -- Add the default event if it doesn't exist 1004 if (EventManager:DoesEventExist("Orlinn random move") == false) then 1005 event = vt_map.RandomMoveSpriteEvent.Create("Orlinn random move", orlinn, 4000, 2000); 1006 event:AddEventLinkAtEnd("Orlinn random move", 3000); -- Loop on itself 1007 1008 end 1009 EventManager:StartEvent("Orlinn random move"); 1010end 1011 1012-- Helps with the two step fade in the forest event 1013local bright_light_time = 0.0 1014local bright_light_color = vt_video.Color(1.0, 1.0, 1.0, 1.0); 1015 1016-- Bronann watch Olivia event 1017local bronann_watch_time = 0 1018 1019-- move well stone event 1020local well_rock_y_pos = 32 1021 1022-- Map Custom functions 1023map_functions = { 1024 1025 Quest1GeorgesDialogueDone = function() 1026 GlobalManager:GetGameEvents():SetEventValue("layna_center", "quest1_georges_dialogue_done", 1); 1027 -- Makes Orlinn aware that Bronann has talked to Georges. 1028 _UpdateOrlinnAndKalyaState(); 1029 _UpdateGeorgesDialogue(); 1030 GlobalManager:GetGameQuests():AddQuestLog("find_pen"); 1031 end, 1032 1033 Quest1OrlinnRunAndHide = function() 1034 orlinn:SetMoving(false); -- in case he's moving 1035 orlinn:SetMovementSpeed(vt_map.MapMode.VERY_FAST_SPEED); 1036 orlinn:SetCollisionMask(vt_map.MapMode.WALL_COLLISION); 1037 orlinn:ClearDialogueReferences(); 1038 EventManager:EndAllEvents(orlinn); 1039 end, 1040 1041 orlinn_run_event_end = function() 1042 -- Updates Orlinn's state 1043 GlobalManager:GetGameEvents():SetEventValue("layna_center", "quest1_orlinn_dialogue1_done", 1); 1044 GlobalManager:GetGameQuests():AddQuestLog("hide_n_seek_with_orlinn"); 1045 1046 -- Updates Kalya dialogue 1047 _UpdateOrlinnAndKalyaState(); 1048 end, 1049 1050 kalya_brings_orlinn_back_start = function() 1051 -- Use the scene state so that the character can't move by player's input 1052 Map:PushState(vt_map.MapMode.STATE_SCENE); 1053 -- Do it twice to ensure this state during the transition to the next dialogue 1054 Map:PushState(vt_map.MapMode.STATE_SCENE); 1055 -- Place Orlinn for the event 1056 orlinn:SetPosition(67, 78); 1057 orlinn:SetMovementSpeed(vt_map.MapMode.FAST_SPEED); 1058 orlinn:SetCollisionMask(vt_map.MapMode.WALL_COLLISION); 1059 orlinn:SetVisible(true); 1060 -- Makes her stop wandering 1061 EventManager:EndAllEvents(kalya); 1062 end, 1063 1064 orlinn_comes_back_event_end = function() 1065 GlobalManager:GetGameEvents():SetEventValue("layna_riverbank", "quest1_orlinn_hide_n_seek3_done", 1); 1066 Map:PopState(); 1067 -- Remove it twice since we added it twice. 1068 Map:PopState(); 1069 1070 -- Updates Kalya, Orlinn and Georges dialogues 1071 _UpdateOrlinnAndKalyaState(); 1072 _UpdateGeorgesDialogue(); 1073 end, 1074 1075 Quest1GeorgesTellsBronannAboutLilly = function() 1076 GlobalManager:GetGameEvents():SetEventValue("layna_center", "quest1_pen_given_done", 1); 1077 1078 -- Remove the pen key item from inventory 1079 local pen_item_id = 70001; 1080 local inventory_handler = GlobalManager:GetInventoryHandler() 1081 if (inventory_handler:IsItemInInventory(pen_item_id) == true) then 1082 inventory_handler:RemoveFromInventory(pen_item_id); 1083 end 1084 1085 -- Updates Georges dialogue 1086 _UpdateGeorgesDialogue(); 1087 end, 1088 1089 orlinn_laughs = function() 1090 orlinn:SetCustomAnimation("laughing", 700); 1091 end, 1092 1093 Prepare_forest_event = function() 1094 -- Scene event 1095 Map:PushState(vt_map.MapMode.STATE_SCENE); 1096 carson:SetPosition(12, 62); 1097 carson:SetVisible(false); 1098 carson:SetCollisionMask(vt_map.MapMode.ALL_COLLISION); 1099 1100 herth:SetPosition(36, 71); 1101 herth:SetVisible(true); 1102 herth:SetCollisionMask(vt_map.MapMode.ALL_COLLISION); 1103 1104 EventManager:EndAllEvents(kalya); 1105 kalya:SetPosition(36, 66); 1106 kalya:SetMoving(false); 1107 kalya:ClearDialogueReferences(); 1108 1109 -- hide Orlinn has he's into the forest 1110 EventManager:EndAllEvents(orlinn); 1111 orlinn:SetMoving(false); 1112 orlinn:SetVisible(false); 1113 orlinn:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 1114 end, 1115 1116 set_carson_visible = function() 1117 carson:SetVisible(true) 1118 end, 1119 1120 BrightLightStart = function() 1121 bright_light_time = 0.0; 1122 Effects:ShakeScreen(0.6, 6000, vt_mode_manager.EffectSupervisor.SHAKE_FALLOFF_GRADUAL); 1123 AudioManager:PlaySound("data/sounds/rumble.wav"); 1124 AudioManager:FadeOutActiveMusic(2000); 1125 end, 1126 1127 BrightLightUpdate = function() 1128 bright_light_time = bright_light_time + 2.5 * SystemManager:GetUpdateTime(); 1129 1130 if (bright_light_time < 5000.0) then 1131 bright_light_color:SetAlpha(bright_light_time / 5000.0); 1132 Map:GetEffectSupervisor():EnableLightingOverlay(bright_light_color); 1133 return false; 1134 end 1135 1136 if (bright_light_time < 10000) then 1137 bright_light_color:SetAlpha((10000.0 - bright_light_time) / 5000.0); 1138 Map:GetEffectSupervisor():EnableLightingOverlay(bright_light_color); 1139 return false; 1140 end 1141 1142 -- end of the two-step fade in and out 1143 return true; 1144 end, 1145 1146 Add_kalya_to_party = function() 1147 if (GlobalManager:GetGameEvents():DoesEventExist("story", "kalya_has_joined") == false) then 1148 GlobalManager:GetCharacterHandler():AddCharacter(KALYA); 1149 GlobalManager:GetGameEvents():SetEventValue("story", "kalya_has_joined", 1); 1150 GlobalManager:GetGameQuests():AddQuestLog("bring_orlinn_back"); 1151 end 1152 AudioManager:FadeInActiveMusic(2000); 1153 1154 -- Now, the event is done, update Olivia's dialogue as access to the forest is granted 1155 _UpdateOliviaDialogue(); 1156 end, 1157 1158 Quest2_equip_speech_start = function() 1159 Map:PushState(vt_map.MapMode.STATE_SCENE); 1160 bronann:SetMoving(false); 1161 bronann:SetDirection(vt_map.MapMode.WEST); 1162 kalya:SetPosition(bronann:GetXPosition(), bronann:GetYPosition()); 1163 kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 1164 kalya:SetDirection(vt_map.MapMode.WEST); 1165 kalya:SetVisible(true); 1166 kalya:ClearDialogueReferences(); 1167 1168 -- Set the event as done to prevent it to trigger again 1169 GlobalManager:GetGameEvents():SetEventValue("story", "Quest2_kalya_equip_n_dungeons_speech_done", 1) 1170 end, 1171 1172 Sprite_Collision_on = function(sprite) 1173 if (sprite ~= nil) then 1174 sprite:SetCollisionMask(vt_map.MapMode.ALL_COLLISION); 1175 end 1176 end, 1177 1178 Map_SceneState = function() 1179 Map:PushState(vt_map.MapMode.STATE_SCENE); 1180 end, 1181 1182 Map_PopState = function() 1183 Map:PopState(); 1184 end, 1185 1186 MakeInvisible = function(sprite) 1187 if (sprite ~= nil) then 1188 sprite:SetVisible(false); 1189 sprite:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 1190 end 1191 end, 1192 1193 Well_event_scene_start = function() 1194 Map:PushState(vt_map.MapMode.STATE_SCENE) 1195 EventManager:EndAllEvents(olivia) 1196 olivia:SetMoving(false) 1197 bronann:SetMoving(false) 1198 -- Olivia can get stuck because of Bronann start position* 1199 olivia:SetCollisionMask(vt_map.MapMode.WALL_COLLISION) 1200 end, 1201 1202 bronann_watch_olivia_start = function() 1203 bronann:LookAt(olivia) 1204 bronann_watch_time = 0.0 1205 end, 1206 1207 bronann_watch_olivia_update = function() 1208 bronann_watch_time = bronann_watch_time + SystemManager:GetUpdateTime() 1209 if (bronann_watch_time > 1000) then 1210 return true 1211 end 1212 bronann:LookAt(olivia) 1213 return false 1214 end, 1215 1216 well_open_trigger_start = function() 1217 Effects:ShakeScreen(0.6, 1000, vt_mode_manager.EffectSupervisor.SHAKE_FALLOFF_GRADUAL) 1218 AudioManager:PlaySound("data/sounds/cave-in.ogg") 1219 -- Place the stone 1220 well_rock_y_pos = 32 1221 end, 1222 1223 well_open_trigger_update = function() 1224 well_rock_y_pos = well_rock_y_pos + (SystemManager:GetUpdateTime() * 0.01) 1225 well_entrance_rock:SetYPosition(well_rock_y_pos) 1226 if (well_rock_y_pos < 34) then 1227 return false 1228 end 1229 return true 1230 end, 1231 1232 set_olivia_invisible = function() 1233 olivia:SetVisible(false) 1234 end 1235} 1236