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 {