1-- Set the namespace according to the map name. 2local ns = {}; 3setmetatable(ns, {__index = _G}); 4layna_village_riverbank_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 = "Riverbank" 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 19 20local bronann = nil 21local kalya = nil 22local orlinn = nil 23local orlinn_dialogue_npc = nil 24local lilly = nil 25 26-- the main map loading code 27function Load(m) 28 29 Map = m; 30 EventManager = Map:GetEventSupervisor(); 31 32 Map:SetUnlimitedStamina(true); 33 34 _CreateCharacters(); 35 -- Set the camera focus on Bronann 36 Map:SetCamera(bronann); 37 38 _CreateNPCs(); 39 _CreateObjects(); 40 41 _CreateEvents(); 42 _CreateZones(); 43 44 -- Add clouds overlay 45 Map:GetEffectSupervisor():EnableAmbientOverlay("data/visuals/ambient/clouds.png", 5.0, -5.0, true); 46 47 _HandleCredits(); 48 49 -- Once everything is created, we set up Orlinn and Lilly behaviour 50 _SetOrlinnState(); 51 _SetLillyState(); 52end 53 54-- Handle the display of the new game credits 55function _HandleCredits() 56 -- Handle small credits triggering 57 if (GlobalManager:GetGameEvents():DoesEventExist("game", "Start_Credits") == false) then 58 -- Triggers the small credits display 59 GlobalManager:GetGameEvents():SetEventValue("game", "Start_Credits", 1); 60 end 61 if (GlobalManager:GetGameEvents():DoesEventExist("game", "Credits_shown") == false) then 62 Map:GetScriptSupervisor():AddScript("data/credits/episode1_credits.lua"); 63 end 64end 65 66function Update() 67 -- Check whether the character is in one of the zones 68 _CheckZones(); 69end 70 71-- Character creation 72function _CreateCharacters() 73 bronann = CreateSprite(Map, "Bronann", 97, 4, vt_map.MapMode.GROUND_OBJECT); 74 bronann:SetDirection(vt_map.MapMode.SOUTH); 75 bronann:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED); 76 77 -- set up the position according to the previous map and location 78 if (GlobalManager:GetMapData():GetPreviousLocation() == "from_village_south") then 79 bronann:SetPosition(117, 18); 80 bronann:SetDirection(vt_map.MapMode.WEST); 81 end 82 83 if (GlobalManager:GetMapData():GetPreviousLocation() == "from_secret_path") then 84 bronann:SetPosition(65, 4); 85 bronann:SetDirection(vt_map.MapMode.SOUTH); 86 end 87 88 if (GlobalManager:GetMapData():GetPreviousLocation() == "from_riverbank_house") then 89 bronann:SetPosition(98, 48); 90 bronann:SetDirection(vt_map.MapMode.SOUTH); 91 AudioManager:PlaySound("data/sounds/door_close.wav"); 92 end 93end 94 95function _CreateNPCs() 96 local text = nil 97 local dialogue = nil 98 local event = nil 99 100 lilly = CreateNPCSprite(Map, "Woman3", vt_system.Translate("Lilly"), 67, 40, vt_map.MapMode.GROUND_OBJECT); 101 102 local object = CreateObject(Map, "Dog1", 66, 42, vt_map.MapMode.GROUND_OBJECT); 103 event = vt_map.SoundEvent.Create("Lilly's dog barks", "data/sounds/dog_barking.wav"); 104 105 object:SetEventWhenTalking("Lilly's dog barks"); 106 107 kalya = CreateSprite(Map, "Kalya", 2, 2, vt_map.MapMode.GROUND_OBJECT); 108 kalya:SetDirection(vt_map.MapMode.SOUTH); 109 kalya:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED); 110 kalya:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 111 kalya:SetVisible(false); 112 113 orlinn = CreateSprite(Map, "Orlinn", 82, 5, vt_map.MapMode.GROUND_OBJECT); 114 orlinn:SetDirection(vt_map.MapMode.SOUTH); 115 orlinn:SetMovementSpeed(vt_map.MapMode.VERY_FAST_SPEED); 116 117 -- Create an invisible doppelganger to permit triggering dialogues when the kid is on the cliff. 118 orlinn_dialogue_npc = CreateSprite(Map, "Orlinn", 82, 8, vt_map.MapMode.GROUND_OBJECT); 119 orlinn_dialogue_npc:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 120 orlinn_dialogue_npc:SetVisible(false); 121end 122 123function _CreateObjects() 124 local object = nil 125 126 CreateObject(Map, "Tree Big2", 70, 6, vt_map.MapMode.GROUND_OBJECT); 127 128 -- Add hill treasure chest 129 local hill_chest = CreateTreasure(Map, "riverbank_secret_hill_chest", "Wood_Chest1", 72, 5, vt_map.MapMode.GROUND_OBJECT); 130 hill_chest:AddItem(1, 3); -- 3 small potions 131 132 -- trees around the house 133 CreateObject(Map, "Tree Big2", 92, 10, vt_map.MapMode.GROUND_OBJECT); 134 CreateObject(Map, "Tree Small1", 82, 17, vt_map.MapMode.GROUND_OBJECT); 135 CreateObject(Map, "Tree Big1", 75, 20, vt_map.MapMode.GROUND_OBJECT); 136 CreateObject(Map, "Tree Big2", 72, 35, vt_map.MapMode.GROUND_OBJECT); 137 CreateObject(Map, "Tree Big1", 74, 48, vt_map.MapMode.GROUND_OBJECT); 138 CreateObject(Map, "Tree Big2", 76, 50, vt_map.MapMode.GROUND_OBJECT); 139 CreateObject(Map, "Barrel1", 56.3, 56.5, vt_map.MapMode.GROUND_OBJECT); 140 141 -- grass array, used to hide defects 142 local map_grass = { 143 { "Grass Clump1", 111, 7 }, 144 { "Grass Clump1", 108, 6 }, 145 { "Grass Clump1", 64, 15 }, 146 { "Grass Clump1", 62, 13 }, 147 { "Grass Clump1", 61, 6.2 }, 148 { "Grass Clump1", 65, 7 }, 149 { "Grass Clump1", 68, 10 }, 150 { "Grass Clump1", 72, 8.2 }, 151 { "Grass Clump1", 76, 8 }, 152 } 153 154 -- Loads the trees according to the array 155 for my_index, my_array in pairs(map_grass) do 156 --print(my_array[1], my_array[2], my_array[3]); 157 object = CreateObject(Map, my_array[1], my_array[2], my_array[3], vt_map.MapMode.GROUND_OBJECT); 158 object:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 159 end 160 161 -- Lights 162 -- big round windows light flares 163 vt_map.Light.Create("data/visuals/lights/sun_flare_light_main.lua", 164 "data/visuals/lights/sun_flare_light_secondary.lua", 165 94.0, 40.0, 166 vt_video.Color(1.0, 1.0, 1.0, 0.6), 167 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 168 vt_map.Light.Create("data/visuals/lights/sun_flare_light_main.lua", 169 "data/visuals/lights/sun_flare_light_secondary.lua", 170 102.0, 40.0, 171 vt_video.Color(1.0, 1.0, 1.0, 0.6), 172 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 173 -- Small door lights 174 vt_map.Light.Create("data/visuals/lights/sun_flare_light_small_main.lua", 175 "data/visuals/lights/sun_flare_light_small_secondary.lua", 176 98.0, 43.5, 177 vt_video.Color(1.0, 1.0, 1.0, 0.6), 178 vt_video.Color(1.0, 1.0, 0.85, 0.3)); 179 180 vt_map.SoundObject.Create("data/sounds/gentle_stream.ogg", 61.0, 27.0, 20.0); 181 vt_map.SoundObject.Create("data/sounds/gentle_stream.ogg", 61.0, 47.0, 20.0); 182 vt_map.SoundObject.Create("data/sounds/gentle_stream.ogg", 61.0, 67.0, 20.0); 183 vt_map.SoundObject.Create("data/sounds/gentle_stream.ogg", 81.0, 67.0, 20.0); 184 vt_map.SoundObject.Create("data/sounds/gentle_stream.ogg", 101.0, 67.0, 20.0); 185end 186 187-- Creates all events and sets up the entire event sequence chain 188function _CreateEvents() 189 local event = nil 190 local dialogue = nil 191 local text = nil 192 193 -- Map change Events 194 vt_map.MapTransitionEvent.Create("to Village center", "data/story/layna_village/layna_village_center_map.lua", 195 "data/story/layna_village/layna_village_center_script.lua", "from_riverbank"); 196 197 vt_map.MapTransitionEvent.Create("to Village south entrance", "data/story/layna_village/layna_village_south_entrance_map.lua", 198 "data/story/layna_village/layna_village_south_entrance_script.lua", "from_riverbank"); 199 200 vt_map.MapTransitionEvent.Create("to Riverbank house", "data/story/layna_village/layna_village_riverbank_house_map.lua", 201 "data/story/layna_village/layna_village_riverbank_house_script.lua", "from_riverbank"); 202 203 vt_map.MapTransitionEvent.Create("to secret path entrance", "data/story/layna_village/layna_village_center_map.lua", 204 "data/story/layna_village/layna_village_center_script.lua", "from_secret_path"); 205 206 vt_map.ScriptedEvent.Create("Orlinn laughs", "orlinn_laughs", ""); 207 208 -- Quest events - Hide and seek 2 209 dialogue = vt_map.SpriteDialogue.Create(); 210 text = vt_system.Translate("Wow! You found me!"); 211 dialogue:AddLineEmote(text, orlinn, "exclamation"); 212 text = vt_system.Translate("But I'm not done yet!"); 213 dialogue:AddLine(text, orlinn); 214 text = vt_system.Translate("You'll never find me hiding behind the..."); 215 dialogue:AddLine(text, orlinn); 216 text = vt_system.Translate("Hey, why would I tell you my hiding spots?!"); 217 dialogue:AddLineEmote(text, orlinn, "exclamation"); 218 219 event = vt_map.DialogueEvent.Create("Quest1: Orlinn starts hide and seek3 speech", dialogue); 220 event:SetStopCameraMovement(true); 221 event:AddEventLinkAtEnd("Quest1: Hide and seek2: Make Orlinn run"); 222 223 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and seek2: Make Orlinn run", orlinn, 72, 2, true); 224 event:AddEventLinkAtEnd("Quest1: Hide and seek2: Make Orlinn disappear"); 225 226 event = vt_map.ScriptedSpriteEvent.Create("Quest1: Hide and seek2: Make Orlinn disappear", orlinn, "MakeInvisible", ""); 227 event:AddEventLinkAtEnd("Quest1: Hide and seek2: Bronann end speech"); 228 229 dialogue = vt_map.SpriteDialogue.Create(); 230 text = vt_system.Translate("That kid is pretty quick. This is going to take all day."); 231 dialogue:AddLineEmote(text, bronann, "sweat drop"); 232 233 event = vt_map.DialogueEvent.Create("Quest1: Hide and seek2: Bronann end speech", dialogue); 234 event:SetStopCameraMovement(true); 235 event:AddEventLinkAtEnd("Map:PopState()"); 236 237 vt_map.ScriptedEvent.Create("Map:PopState()", "Map_PopState", ""); 238 239 -- Final hide and seek (3) 240 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn goes top-right", orlinn, 70, 42, false); 241 event:AddEventLinkAtEnd("Hide n Seek3: Orlinn looks south"); 242 243 event = vt_map.ChangeDirectionSpriteEvent.Create("Hide n Seek3: Orlinn looks south", orlinn, vt_map.MapMode.SOUTH); 244 event:AddEventLinkAtEnd("Hide n Seek3: Orlinn looks north", 800); 245 246 event = vt_map.ChangeDirectionSpriteEvent.Create("Hide n Seek3: Orlinn looks north", orlinn, vt_map.MapMode.NORTH); 247 event:AddEventLinkAtEnd("Hide n Seek3: Orlinn goes bottom-left", 800); 248 249 event = vt_map.PathMoveSpriteEvent.Create("Hide n Seek3: Orlinn goes bottom-left", orlinn, 74, 43.8, false); 250 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn goes top-right", 8000); -- finish the event loop. 251 252 -- Before Kalya's arrival 253 event = vt_map.ScriptedEvent.Create("Quest1: Hide and Seek3: Orlinn starts to go away", "Prepare_orlinn_kalya_scene", ""); 254 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn tries go to away"); 255 256 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn tries go to away", orlinn, 76, 38, false); 257 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Bronann follows him"); 258 259 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Bronann follows him", bronann, 76, 40, true); 260 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Bronann turns to Orlinn"); 261 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn turns to him"); 262 263 vt_map.ChangeDirectionSpriteEvent.Create("Quest1: Hide and Seek3: Bronann turns to Orlinn", bronann, vt_map.MapMode.NORTH); 264 265 event = vt_map.ChangeDirectionSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn turns to him", orlinn, vt_map.MapMode.SOUTH); 266 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Bronann and kalya first speech"); 267 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Lilly turns to them"); 268 269 vt_map.ChangeDirectionSpriteEvent.Create("Quest1: Hide and Seek3: Lilly turns to them", lilly, vt_map.MapMode.EAST); 270 271 dialogue = vt_map.SpriteDialogue.Create(); 272 text = vt_system.Translate("Please no! Wait!"); 273 dialogue:AddLine(text, bronann); 274 text = vt_system.Translate("Orlinn! Stop this!"); 275 dialogue:AddLineEvent(text, kalya, "", "Quest1: Hide and Seek3: Kalya comes to Orlinn"); 276 277 event = vt_map.DialogueEvent.Create("Quest1: Hide and Seek3: Bronann and kalya first speech", dialogue); 278 event:SetStopCameraMovement(true); 279 280 -- Kalya's arrival 281 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Kalya comes to Orlinn", kalya, 76, 36, false); 282 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Kalya's speech"); 283 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn turns to Kalya"); 284 285 vt_map.ChangeDirectionSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn turns to Kalya", orlinn, vt_map.MapMode.NORTH); 286 287 dialogue = vt_map.SpriteDialogue.Create(); 288 text = vt_system.Translate("Orlinn! How many times have I told you not to bother other people?"); 289 dialogue:AddLine(text, kalya); 290 text = vt_system.Translate("But sis! I..."); 291 dialogue:AddLineEmote(text, orlinn, "sweat drop"); 292 text = vt_system.Translate("I don't want to hear it! Now, come!"); 293 dialogue:AddLine(text, kalya); 294 text = vt_system.Translate("Don't blame him, Kalya. Actually, it was..."); 295 dialogue:AddLineEmote(text, bronann, "sweat drop"); 296 text = vt_system.Translate("I don't think I was talking to you, now was I?"); 297 dialogue:AddLine(text, kalya); 298 text = vt_system.Translate("Come Orlinn!"); 299 dialogue:AddLine(text, kalya); 300 301 event = vt_map.DialogueEvent.Create("Quest1: Hide and Seek3: Kalya's speech", dialogue); 302 event:SetStopCameraMovement(true); 303 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Kalya is going away."); 304 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn is going away.", 2000); 305 306 -- Kalya and Orlinn going away 307 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Kalya is going away.", kalya, 95, 2, false); 308 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Kalya disappears."); 309 310 vt_map.ScriptedSpriteEvent.Create("Quest1: Hide and Seek3: Kalya disappears.", kalya, "MakeInvisible", ""); 311 312 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn is going away.", orlinn, 76, 32, false); 313 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn comes back to Bronann", 1000); 314 315 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn comes back to Bronann", orlinn, 76, 38, false); 316 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn tells Bronann where the pen was"); 317 318 dialogue = vt_map.SpriteDialogue.Create(); 319 text = vt_system.Translate("I found that pen near the tree behind you. I just wanted to play."); 320 dialogue:AddLineEmote(text, orlinn, "sweat drop"); 321 text = vt_system.Translate("Don't worry about it."); 322 dialogue:AddLine(text, bronann); 323 text = vt_system.Translate("Take it. Thanks."); 324 dialogue:AddLine(text, orlinn); 325 326 event = vt_map.DialogueEvent.Create("Quest1: Hide and Seek3: Orlinn tells Bronann where the pen was", dialogue); 327 event:SetStopCameraMovement(true); 328 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn gives the pen to Bronann"); 329 330 event = vt_map.TreasureEvent.Create("Quest1: Hide and Seek3: Orlinn gives the pen to Bronann"); 331 event:AddItem(70001, 1); -- The ink key item 332 event:SetDrunes(20); -- The reward for running after Orlinn for so long. 333 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn is going away for real"); 334 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Lilly tells Bronann a bit about Kalya", 2000); 335 336 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn is going away for real", orlinn, 95, 2, false); 337 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: Orlinn disappears."); 338 339 vt_map.ScriptedSpriteEvent.Create("Quest1: Hide and Seek3: Orlinn disappears.", orlinn, "MakeInvisible", ""); 340 341 vt_map.AnimateSpriteEvent.Create("Quest1: Bronann is sad", bronann, "hero_stance", 2000); 342 343 -- Lilly tells Bronann about Kalya 344 dialogue = vt_map.SpriteDialogue.Create(); 345 text = vt_system.Translate("Bronann?"); 346 dialogue:AddLineEvent(text, lilly, "", "Quest1: Hide and Seek3: Bronann turns to Lilly"); 347 text = vt_system.Translate("Er, yes?"); 348 dialogue:AddLine(text, bronann); 349 text = vt_system.Translate("Don't blame Kalya. She was having a hard time along with her brother before living here, you know?"); 350 dialogue:AddLineEvent(text, lilly, "", "Quest1: Bronann is sad"); 351 text = vt_system.Translate("Well anyway, she's been ignoring me since the first day I saw her."); 352 dialogue:AddLine(text, bronann); 353 text = vt_system.Translate("Eh? You really know nothing about women, do you?"); 354 dialogue:AddLine(text, lilly); 355 text = vt_system.Translate("Huh?"); 356 dialogue:AddLineEmote(text, bronann, "interrogation"); 357 text = vt_system.Translate("Heh heh, don't worry about it. It will come in time."); 358 dialogue:AddLine(text, lilly); 359 360 event = vt_map.DialogueEvent.Create("Quest1: Hide and Seek3: Lilly tells Bronann a bit about Kalya", dialogue); 361 event:SetStopCameraMovement(true); 362 event:AddEventLinkAtEnd("Map:PopState()"); 363 event:AddEventLinkAtEnd("Quest1: Hide and Seek3: done"); 364 365 vt_map.ChangeDirectionSpriteEvent.Create("Quest1: Hide and Seek3: Bronann turns to Lilly", bronann, vt_map.MapMode.WEST); 366 367 vt_map.ScriptedEvent.Create("Quest1: Hide and Seek3: done", "Set_Hide_And_Seek3_Done", ""); 368 369 -- Lilly goes and bring back barley meal 370 event = vt_map.ScriptedEvent.Create("Quest1: Prepare Lilly for a walk", "Prepare_lilly_walk", ""); 371 event:AddEventLinkAtEnd("Quest1: Lilly goes in her house"); 372 event:AddEventLinkAtEnd("Quest1: Bronann moves to his wait place"); 373 374 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Bronann moves to his wait place", bronann, 70, 40, false); 375 event:AddEventLinkAtEnd("Quest1: Barley Meal: Bronann stares at Lilly"); 376 377 vt_map.ChangeDirectionSpriteEvent.Create("Quest1: Barley Meal: Bronann stares at Lilly", bronann, vt_map.MapMode.SOUTH); 378 379 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Lilly goes in her house", lilly, 90, 60, false); 380 event:AddEventLinkAtEnd("Quest1: Lilly comes back"); 381 382 event = vt_map.PathMoveSpriteEvent.Create("Quest1: Lilly comes back", lilly, 67, 40, false); 383 event:AddEventLinkAtEnd("Quest1: Barley Meal: Lilly turns to Bronann"); 384 event:AddEventLinkAtEnd("Quest1: Barley Meal: Bronann turns to Lilly"); 385 event:AddEventLinkAtEnd("Quest1: Barley Meal: Lilly tells Bronann about the barley meal"); 386 387 vt_map.LookAtSpriteEvent.Create("Quest1: Barley Meal: Lilly turns to Bronann", lilly, bronann); 388 389 vt_map.ChangeDirectionSpriteEvent.Create("Quest1: Barley Meal: Bronann turns to Lilly", bronann, vt_map.MapMode.WEST); 390 391 dialogue = vt_map.SpriteDialogue.Create(); 392 text = vt_system.Translate("Here it is, Bronann."); 393 dialogue:AddLine(text, lilly); 394 395 event = vt_map.DialogueEvent.Create("Quest1: Barley Meal: Lilly tells Bronann about the barley meal", dialogue); 396 event:SetStopCameraMovement(true); 397 event:AddEventLinkAtEnd("Quest1: Barley Meal: Lilly give the barley meal to bronann"); 398 399 event = vt_map.TreasureEvent.Create("Quest1: Barley Meal: Lilly give the barley meal to bronann"); 400 event:AddEventLinkAtEnd("Quest1: Barley meal is given."); 401 event:AddItem(70002, 1); -- The barley meal key item 402 403 event = vt_map.ScriptedEvent.Create("Quest1: Barley meal is given.", "GiveBarleyMeal", ""); 404 event:AddEventLinkAtEnd("Quest1: Barley Meal: Lilly tells Bronann about the restrictions"); 405 406 dialogue = vt_map.SpriteDialogue.Create(); 407 text = vt_system.Translate("Thanks, Lilly."); 408 dialogue:AddLine(text, bronann); 409 text = vt_system.Translate("We've been having a shortage of food lately. I've been taking... special measures to ensure that everyone has enough food."); 410 dialogue:AddLine(text, lilly); 411 text = vt_system.Translate("Try to enjoy this day, Bronann."); 412 dialogue:AddLine(text, lilly); 413 414 event = vt_map.DialogueEvent.Create("Quest1: Barley Meal: Lilly tells Bronann about the restrictions", dialogue); 415 event:SetStopCameraMovement(true); 416 event:AddEventLinkAtEnd("Quest1: Reset Lilly dialogue"); 417 418 event = vt_map.ScriptedEvent.Create("Quest1: Reset Lilly dialogue", "Reset_lilly_dialogue", ""); 419 event:AddEventLinkAtEnd("Map:PopState()"); 420end 421 422-- zones 423local village_center_zone = nil 424local to_village_entrance_zone = nil 425local to_riverbank_house_entrance_zone = nil 426local to_secret_path_entrance_zone = nil 427local orlinn_hide_n_seek2_zone = nil 428 429function _CreateZones() 430 -- N.B.: left, right, top, bottom 431 village_center_zone = vt_map.CameraZone.Create(89, 105, 0, 2); 432 to_village_entrance_zone = vt_map.CameraZone.Create(118, 119, 10, 27); 433 to_riverbank_house_entrance_zone = vt_map.CameraZone.Create(96, 100, 46, 47); 434 to_secret_path_entrance_zone = vt_map.CameraZone.Create(60, 72, 0, 2); 435 orlinn_hide_n_seek2_zone = vt_map.CameraZone.Create(75, 80, 0, 7); 436end 437 438function _CheckZones() 439 if (village_center_zone:IsCameraEntering() == true) then 440 bronann:SetMoving(false); 441 EventManager:StartEvent("to Village center"); 442 end 443 444 if (to_village_entrance_zone:IsCameraEntering() == true) then 445 bronann:SetMoving(false); 446 EventManager:StartEvent("to Village south entrance"); 447 end 448 449 if (to_riverbank_house_entrance_zone:IsCameraEntering() == true) then 450 bronann:SetMoving(false); 451 AudioManager:PlaySound("data/sounds/door_open2.wav"); 452 EventManager:StartEvent("to Riverbank house"); 453 end 454 455 if (to_secret_path_entrance_zone:IsCameraEntering() == true) then 456 bronann:SetMoving(false); 457 EventManager:StartEvent("to secret path entrance"); 458 end 459 460 -- zone based story events 461 if (GlobalManager:GetGameEvents():DoesEventExist("layna_south_entrance", "quest1_orlinn_hide_n_seek1_done") == true 462 and GlobalManager:GetGameEvents():DoesEventExist("layna_riverbank", "quest1_orlinn_hide_n_seek3_done") == false) then 463 if (orlinn_hide_n_seek2_zone:IsCameraEntering() == true) then 464 -- Updates the story state 465 if (GlobalManager:GetGameEvents():DoesEventExist("layna_riverbank", "quest1_orlinn_hide_n_seek2_done") == false) then 466 GlobalManager:GetGameEvents():SetEventValue("layna_riverbank", "quest1_orlinn_hide_n_seek2_done", 1); 467 468 -- Orlinn speaks and flee 469 Map:PushState(vt_map.MapMode.STATE_SCENE); 470 orlinn:SetDirection(vt_map.MapMode.WEST); 471 EventManager:StartEvent("Quest1: Orlinn starts hide and seek3 speech"); 472 end 473 end 474 end 475end 476 477-- Custom inner map functions 478function _SetLillyState() 479 local text = nil 480 local dialogue = nil 481 482 lilly:SetDirection(vt_map.MapMode.WEST); 483 lilly:ClearDialogueReferences(); 484 if (GlobalManager:GetGameEvents():DoesEventExist("story", "kalya_has_joined") == true) then 485 -- Once they can go into the forest 486 dialogue = vt_map.SpriteDialogue.Create(); 487 text = vt_system.Translate("We're counting on you."); 488 dialogue:AddLine(text, lilly); 489 lilly :AddDialogueReference(dialogue); 490 elseif (GlobalManager:GetGameEvents():DoesEventExist("story", "quest1_barley_meal_done") == true) then 491 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_lilly_go_home"); 492 text = vt_system.Translate("You should go back home. Your mom must be waiting for you."); 493 dialogue:AddLine(text, lilly); 494 lilly :AddDialogueReference(dialogue); 495 elseif (GlobalManager:GetGameEvents():DoesEventExist("layna_center_shop", "quest1_flora_dialogue_done") == true) then 496 dialogue = vt_map.SpriteDialogue.Create(); 497 text = vt_system.Translate("What a nice day, isn't it?"); 498 dialogue:AddLine(text, lilly); 499 text = vt_system.Translate("Yes, Lilly. But I have something I have to ask you."); 500 dialogue:AddLine(text, bronann); 501 text = vt_system.Translate("Sure, just ask."); 502 dialogue:AddLine(text, lilly); 503 text = vt_system.Translate("Have you still got any barley meal left for my parents and I? My mother asked me to get some and I..."); 504 dialogue:AddLine(text, bronann); 505 text = vt_system.Translate("Unfortunately, I gave it all to Kalya."); 506 dialogue:AddLine(text, lilly); 507 text = vt_system.Translate("What?!"); 508 dialogue:AddLineEmote(text, bronann, "sweat drop"); 509 text = vt_system.Translate("Ah hah! I just wanted to see your reaction. I still have some. Let me go grab it and bring it back to you."); 510 dialogue:AddLine(text, lilly); 511 dialogue:SetEventAtDialogueEnd("Quest1: Prepare Lilly for a walk") 512 lilly :AddDialogueReference(dialogue); 513 else 514 dialogue = vt_map.SpriteDialogue.Create("ep1_layna_village_lilly_default"); 515 text = vt_system.Translate("What a nice day, isn't it?"); 516 dialogue:AddLine(text, lilly); 517 lilly :AddDialogueReference(dialogue); 518 end 519end 520 521function _SetOrlinnState() 522 local text = nil 523 local dialogue = nil 524 525 orlinn_dialogue_npc:ClearDialogueReferences(); 526 orlinn:ClearDialogueReferences(); 527 528 if (GlobalManager:GetGameEvents():DoesEventExist("layna_riverbank", "quest1_orlinn_hide_n_seek3_done") == true) then 529 orlinn:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 530 orlinn:SetVisible(false); 531 return; 532 elseif (GlobalManager:GetGameEvents():DoesEventExist("layna_riverbank", "quest1_orlinn_hide_n_seek2_done") == true) then 533 orlinn:SetPosition(74, 44); 534 orlinn:SetDirection(vt_map.MapMode.WEST); 535 536 -- Final hide and seek dialogue 537 dialogue = vt_map.SpriteDialogue.Create(); 538 text = vt_system.Translate("You'll never get me!"); 539 dialogue:AddLineEvent(text, orlinn, "", "Quest1: Hide and Seek3: Orlinn starts to go away"); 540 orlinn:AddDialogueReference(dialogue); 541 542 EventManager:StartEvent("Quest1: Hide and Seek3: Orlinn goes top-right", 8000); 543 return; 544 elseif (GlobalManager:GetGameEvents():DoesEventExist("layna_south_entrance", "quest1_orlinn_hide_n_seek1_done") == true) then 545 -- Orlinn is on the cliff and is mocking Bronann. 546 dialogue = vt_map.SpriteDialogue.Create(); 547 text = vt_system.Translate("Hee hee hee!"); 548 dialogue:AddLineEvent(text, orlinn_dialogue_npc, "Orlinn laughs", ""); 549 text = vt_system.Translate("Orlinn, how did you get there?"); 550 dialogue:AddLine(text, bronann); 551 text = vt_system.Translate("(giggle) I won't tell you!"); 552 dialogue:AddLineEvent(text, orlinn_dialogue_npc, "Orlinn laughs", ""); 553 orlinn_dialogue_npc:AddDialogueReference(dialogue); 554 return; 555 end 556 557 -- Orlinn default behaviour 558 orlinn:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 559 orlinn:SetVisible(false); 560end 561 562-- Map Custom functions 563map_functions = { 564 Map_PopState = function() 565 Map:PopState(); 566 end, 567 568 MakeInvisible = function(sprite) 569 if (sprite ~= nil) then 570 sprite:SetVisible(false); 571 sprite:SetCollisionMask(vt_map.MapMode.NO_COLLISION); 572 end 573 end, 574 575 orlinn_laughs = function() 576 orlinn:SetCustomAnimation("laughing", 1000); 577 end, 578 579 Prepare_orlinn_kalya_scene = function() 580 Map:PushState(vt_map.MapMode.STATE_SCENE); 581 -- Prepare Kalya 582 kalya:SetPosition(78, 25); 583 kalya:SetCollisionMask(vt_map.MapMode.ALL_COLLISION); 584 kalya:SetVisible(true); 585 586 -- Stop Orlinn event loop and prepare him for the next events 587 orlinn:SetMoving(false); -- in case he's moving 588 orlinn:SetDirection(vt_map.MapMode.NORTH); 589 orlinn:SetMovementSpeed(vt_map.MapMode.NORMAL_SPEED); 590 orlinn:ClearDialogueReferences(); 591 EventManager:EndAllEvents(orlinn); 592 end, 593 594 Set_Hide_And_Seek3_Done = function() 595 GlobalManager:GetGameEvents():SetEventValue("layna_riverbank", "quest1_orlinn_hide_n_seek3_done", 1); 596 597 -- Also reset Lilly direction 598 lilly:SetDirection(vt_map.MapMode.WEST); 599 end, 600 601 Prepare_lilly_walk = function() 602 Map:PushState(vt_map.MapMode.STATE_SCENE); 603 -- Stop Lilly dialogue and prepare her for the next events 604 lilly:SetMoving(false); -- in case he's moving 605 lilly:ClearDialogueReferences(); 606 EventManager:EndAllEvents(lilly); 607 end, 608 609 GiveBarleyMeal = function() 610 GlobalManager:GetGameEvents():SetEventValue("story", "quest1_barley_meal_done", 1); 611 end, 612 613 Reset_lilly_dialogue = function() 614 _SetLillyState(); 615 end 616} 617