1-- Set the namespace 2local ns = {}; 3setmetatable(ns, {__index = _G}); 4fenrir_death = ns; 5setfenv(1, ns); 6 7-- local references 8local enemy = nil 9local enemy_pos_x = 0.0; 10local enemy_pos_y = 0.0; 11local enemy_origin_x = 0.0; 12local enemy_origin_y = 0.0; 13 14local elapsed_time = 0; 15 16local Battle = nil 17local Script = nil 18local Effects = nil 19 20local light1_image = 0; 21local light2_image = 0; 22local light3_image = 0; 23 24local lightning_1_triggered = false; 25local lightning_1_stopped = false; 26local lightning_2_triggered = false; 27local lightning_2_stopped = false; 28local lightning_3_triggered = false; 29local lightning_3_stopped = false; 30 31local death_particles_triggered = false; 32local rumble_triggered = false; 33 34-- battle, the Game mode 35-- _enemy, the BattleEnemy dying 36function Initialize(battle, _enemy) 37 -- Keep the reference in memory 38 Battle = battle; 39 enemy = _enemy; 40 Script = Battle:GetScriptSupervisor(); 41 Effects = Battle:GetEffectSupervisor(); 42 43 enemy_pos_x = 0.0; 44 enemy_pos_y = 0.0; 45 enemy_origin_x = enemy:GetXLocation(); 46 enemy_origin_y = enemy:GetYLocation(); 47 48 elapsed_time = 0; 49 50 lightning_1_triggered = false; 51 lightning_2_triggered = false; 52 lightning_3_triggered = false; 53 lightning_1_stopped = false; 54 lightning_2_stopped = false; 55 lightning_3_stopped = false; 56 57 death_particles_triggered = false; 58 rumble_triggered = false; 59 60 light1_image = Script:CreateImage("data/battles/enemies_animations/fenrir/death_light_1.png"); 61 light2_image = Script:CreateImage("data/battles/enemies_animations/fenrir/death_light_2.png"); 62 light3_image = Script:CreateImage("data/battles/enemies_animations/fenrir/death_light_3.png"); 63 64 -- Fade out the battle music to make the event more dramatic 65 AudioManager:FadeOutActiveMusic(2000); 66end 67 68local white_color = vt_video.Color(1.0, 1.0, 1.0, 1.0); 69local overlay_color = vt_video.Color(1.0, 1.0, 1.0, 1.0); 70 71function Update() 72 73 enemy_pos_x = enemy_origin_x; 74 enemy_pos_y = enemy_origin_y; 75 76 -- Make the enemy shake while dying 77 if (rumble_triggered == true) then 78 enemy:SetXLocation(enemy_pos_x + (math.random() * 6.0) - 3.0); 79 end 80 81 elapsed_time = elapsed_time + SystemManager:GetUpdateTime(); 82 83 if (lightning_1_triggered == false and elapsed_time > 800) then 84 Effects:EnableLightingOverlay(white_color); 85 AudioManager:PlaySound("data/sounds/magic_blast.ogg"); 86 lightning_1_triggered = true; 87 elseif (lightning_1_stopped == false and elapsed_time > 1000 ) then 88 Effects:DisableLightingOverlay(); 89 lightning_1_stopped = true; 90 end 91 92 if (lightning_2_triggered == false and elapsed_time > 1700) then 93 Effects:EnableLightingOverlay(white_color); 94 AudioManager:PlaySound("data/sounds/magic_blast.ogg"); 95 lightning_2_triggered = true; 96 elseif (lightning_2_stopped == false and elapsed_time > 1900 ) then 97 Effects:DisableLightingOverlay(); 98 lightning_2_stopped = true; 99 end 100 101 if (lightning_3_triggered == false and elapsed_time > 3000) then 102 Effects:EnableLightingOverlay(white_color); 103 AudioManager:PlaySound("data/sounds/magic_blast.ogg"); 104 lightning_3_triggered = true; 105 elseif (lightning_3_stopped == false and elapsed_time > 3400) then 106 Effects:DisableLightingOverlay(); 107 lightning_3_stopped = true; 108 end 109 110 if (elapsed_time >= 4000 and elapsed_time < 8000) then 111 overlay_color:SetAlpha(0.7 * (elapsed_time - 4000.0) / (8000.0 - 4000.0)); 112 Effects:EnableLightingOverlay(overlay_color); 113 114 -- Trigger the rumble and sprite shaking 115 if (rumble_triggered == false) then 116 AudioManager:PlaySound("data/sounds/rumble.wav"); 117 rumble_triggered = true; 118 end 119 elseif (elapsed_time >= 8000 and elapsed_time < 10000) then 120 overlay_color:SetAlpha(1.0 - (elapsed_time - 8000.0) / (10000.0 - 8000.0)); 121 Effects:EnableLightingOverlay(overlay_color); 122 end 123 124 -- Triggers snow representing the boss body ashes... 125 if (death_particles_triggered == false and elapsed_time > 8000) then 126 -- Make the wolf howls at the end 127 AudioManager:PlaySound("data/sounds/wolf_howl.ogg"); 128 129 Battle:TriggerBattleParticleEffect("data/visuals/particle_effects/boss_death_particle.lua", 130 enemy_pos_x + 200, enemy_pos_y - 255); 131 Battle:TriggerBattleParticleEffect("data/visuals/particle_effects/boss_death_particle.lua", 132 enemy_pos_x - 185, enemy_pos_y - 321); 133 Battle:TriggerBattleParticleEffect("data/visuals/particle_effects/boss_death_particle.lua", 134 enemy_pos_x - 146, enemy_pos_y - 149); 135 Battle:TriggerBattleParticleEffect("data/visuals/particle_effects/boss_death_particle.lua", 136 enemy_pos_x + 55, enemy_pos_y - 140); 137 death_particles_triggered = true; 138 end 139 140 if (elapsed_time >= 7000 and elapsed_time <= 9000.0) then 141 -- Also fade out the enemy 142 enemy:SetSpriteAlpha(1.0 - ((elapsed_time - 7000.0) / (9000.0 - 7000.0))); 143 end 144 145 -- end the boss death sequence 146 if (elapsed_time > 13000) then 147 return true; 148 end 149 150 return false; 151end 152 153local light1_color = vt_video.Color(1.0, 1.0, 1.0, 1.0); 154local light2_color = vt_video.Color(1.0, 1.0, 1.0, 1.0); 155local light3_color = vt_video.Color(1.0, 1.0, 1.0, 1.0); 156 157function DrawOnSprite() 158 if (elapsed_time < 7800) then 159 light1_color:SetAlpha(0.5 * elapsed_time / 4000.0); 160 VideoManager:Move(enemy_pos_x, enemy_pos_y + 30); 161 light2_image:Draw(light1_color); 162 end 163 if (elapsed_time >= 3000 and elapsed_time < 7800) then 164 light2_color:SetAlpha(0.5 * (elapsed_time - 3000.0) / (7800.0 - 3000.0)); 165 VideoManager:Move(enemy_pos_x, enemy_pos_y + 30); 166 light1_image:Draw(light2_color); 167 end 168 if (elapsed_time >= 7800 and elapsed_time < 10000) then 169 light3_color:SetAlpha(0.5 - 0.5 * ((elapsed_time - 8000.0) / (9000.0 - 8000.0))); 170 VideoManager:Move(enemy_pos_x, enemy_pos_y + 30); 171 light3_image:Draw(light3_color); 172 end 173end 174