summaryrefslogtreecommitdiff
path: root/example
diff options
context:
space:
mode:
authorPhilipp Sehmisch <mana@crushnet.org>2011-03-14 20:53:49 +0100
committerPhilipp Sehmisch <mana@crushnet.org>2011-03-14 21:47:09 +0100
commit967caa8a91702510fc9b4a35292042802c27d14c (patch)
treeaa0961174ed5b180163ffb972adcf5007513722e /example
parentcc162d170bcaf7d5b3f47ffde346b1849f905662 (diff)
downloadmanaserv-967caa8a91702510fc9b4a35292042802c27d14c.tar.gz
manaserv-967caa8a91702510fc9b4a35292042802c27d14c.tar.bz2
manaserv-967caa8a91702510fc9b4a35292042802c27d14c.tar.xz
manaserv-967caa8a91702510fc9b4a35292042802c27d14c.zip
Script binding for the new screen shake effect.
The new lua function mana.chr_shake_screen can cause a screen shake for a single client with variable x-intensity, y-intensity, decay and duration. I also added an example script which causes tremors for nearby characters with intensity and direction relative to a specific point. The function is not referenced on the example map because it is quite distracting.
Diffstat (limited to 'example')
-rw-r--r--example/serverdata/scripts/npcs/shaker.lua48
1 files changed, 48 insertions, 0 deletions
diff --git a/example/serverdata/scripts/npcs/shaker.lua b/example/serverdata/scripts/npcs/shaker.lua
new file mode 100644
index 00000000..9d7bafb7
--- /dev/null
+++ b/example/serverdata/scripts/npcs/shaker.lua
@@ -0,0 +1,48 @@
+----------------------------------------------------------------------------------
+-- Copyright 2009-2010 The Mana World Development Team --
+-- --
+-- This file is part of The Mana World. --
+-- --
+-- The Mana World 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 2 of the License, or any later version. --
+----------------------------------------------------------------------------------
+
+shake_count = 0
+
+function shaker_update(npc)
+ shake_count = shake_count + 1
+ if shake_count > 20 then
+ shake_count = 0
+
+ center_x = mana.posX(npc)
+ center_y = mana.posY(npc)
+ tremor(center_x, center_y, 300)
+
+ end
+end
+
+-- function which causes a screen shake effect for all players near a
+-- certain point with an intensity and direction relative to said point
+function square(x)
+ return x * x
+end
+
+function tremor (center_x, center_y, intensity)
+ for dummy, object in ipairs(mana.get_beings_in_circle(center_x, center_y, intensity)) do
+ if mana.being_type(object) == TYPE_CHARACTER then
+ object_x = mana.posX(object)
+ object_y = mana.posY(object)
+ dist_x = object_x - center_x
+ dist_y = object_y - center_y
+ dist = math.sqrt(square(dist_x) + square(dist_y))
+ intensity_local = intensity - dist
+ intensity_x = (intensity - dist) * (dist_x / dist) / 5
+ intensity_y = (intensity - dist) * (dist_y / dist) / 5
+ mana.chr_shake_screen(object, intensity_x, intensity_y)
+ end
+ end
+end
+
+
+