diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 0a6d155ad39b3737223fd17f13a26ea878a77fb7..2b8c65ad0ae278325bb6712e634bc499bfc2c15a 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -971,7 +971,7 @@ function _M:setupCommands()
 --			local m = game.zone:makeEntity(game.level, "actor", {random_boss=true}, nil, true)
 --			if m then game.zone:addEntity(game.level, m, "actor", game.player.x, game.player.y + 1) end
 --			self:changeLevel(1, "test")
-			self.level.map:particleEmitter(game.player.x, game.player.y, 1, "teleport_line")
+			self.level.map:particleEmitter(game.player.x, game.player.y, 1, "eagle")
 		end end,
 	}
 
diff --git a/game/modules/tome/data/gfx/particles/eagle.lua b/game/modules/tome/data/gfx/particles/eagle.lua
new file mode 100644
index 0000000000000000000000000000000000000000..5e799163a6249c56533b5ddf1c1ff38ef15ebbd5
--- /dev/null
+++ b/game/modules/tome/data/gfx/particles/eagle.lua
@@ -0,0 +1,52 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+base_size = 64
+
+local r = 1
+local g = 1
+local b = 1
+local a = 1
+
+local first = true
+return { generator = function()
+	return {
+		trail = 0,
+		life = 300,
+		size = shadow and 32 or 64, sizev = 0, sizea = 0,
+
+		x = x, xv = 0, xa = 0,
+		y = y, yv = 0, ya = 0,
+		dir = dir, dirv = dirv, dira = 0,
+		vel = 20, velv = 0.02, vela = 0,
+
+		r = r, rv = 0, ra = 0,
+		g = g, gv = 0, ga = 0,
+		b = b, bv = 0, ba = 0,
+		a = a, av = 0, aa = 0,
+	}
+end, },
+function(self)
+	if first then
+		self.ps:emit(1)
+		first = false
+	end
+end,
+nil,
+shadow and "shockbolt/npc/birds_eagle_shadow_01" or "shockbolt/npc/birds_eagle01"
diff --git a/game/modules/tome/data/gfx/shockbolt/npc/birds_eagle01.png b/game/modules/tome/data/gfx/shockbolt/npc/birds_eagle01.png
new file mode 100644
index 0000000000000000000000000000000000000000..b62711bbcc0022eb5e048e1bc838f2a25bfebefc
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/birds_eagle01.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/npc/birds_eagle_shadow_01.png b/game/modules/tome/data/gfx/shockbolt/npc/birds_eagle_shadow_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c13c8e2862c5833bd5cd97c34f86a35dc4e1b03
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/birds_eagle_shadow_01.png differ
diff --git a/game/modules/tome/data/sound/actions/eagle_scream.wav b/game/modules/tome/data/sound/actions/eagle_scream.wav
new file mode 100644
index 0000000000000000000000000000000000000000..57d1460ffac1fc7b39d0415edf7a98c7308fe1a9
Binary files /dev/null and b/game/modules/tome/data/sound/actions/eagle_scream.wav differ
diff --git a/game/modules/tome/data/zones/town-derth/zone.lua b/game/modules/tome/data/zones/town-derth/zone.lua
index 98db9c70e85bb6e5cc3ab9cf3148ba6f85624bee..0e4c5d43d0e82c223b5fd9f10178d1309b274244 100644
--- a/game/modules/tome/data/zones/town-derth/zone.lua
+++ b/game/modules/tome/data/zones/town-derth/zone.lua
@@ -59,5 +59,27 @@ return {
 		if game.player:hasQuest("lightning-overload") then
 			game.player:hasQuest("lightning-overload"):enter_derth()
 		end
-	end
+	end,
+
+	foreground = function(level, x, y, nb_keyframes)
+		-- Make cosmetic eagles fly over derth
+		if nb_keyframes > 10 then return end
+		local Map = require "engine.Map"
+		if not level.eagle then
+			if nb_keyframes > 0 and rng.chance(200 / nb_keyframes) then
+				local dir = -math.rad(rng.float(310, 340))
+				local dirv = math.rad(rng.float(-0.1, 0.1))
+				local y = rng.range(0, level.map.w / 2 * Map.tile_w)
+				level.eagle = require("engine.Particles").new("eagle", 1, {x=0, y=y, dir=dir, dirv=dirv})
+				level.eagle_s = require("engine.Particles").new("eagle", 1, {x=0, y=y, height=Map.viewport.height, shadow=true, dir=dir, dirv=dirv})
+			end
+		else
+			local dx, dy = level.map:getScreenUpperCorner() -- Display at map border, always, so it scrolls with the map
+			if level.eagle then level.eagle.ps:toScreen(dx, dy, true, 1) end
+			if level.eagle_s then level.eagle_s.ps:toScreen(dx + 100, dy + 120, true, 1) end
+			if nb_keyframes > 0 and rng.chance(400 / nb_keyframes) then game:playSound("actions/eagle_scream") end
+			if not level.eagle.ps:isAlive() then level.eagle = nil end
+			if not level.eagle_s.ps:isAlive() then level.eagle_s = nil end
+		end
+	end,
 }
diff --git a/src/main.c b/src/main.c
index ce19df14dfa199bd78b7ea6eb08933a10cc68c82..a2b0d8cdc603a9806840ce64892d8dbcc86a1c6e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -884,6 +884,7 @@ int main(int argc, char *argv[])
 	if (Mix_OpenAudio(22050, AUDIO_S16, 2, 2048) == -1)
 	{
 		no_sound = TRUE;
+		printf("Disabling sounds: %s", SDL_GetError());
 	}
 	else
 	{