summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dat/clua/lm_tmsg.lua
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-07-26 11:06:09 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-07-26 11:06:09 +0000
commitf2a19d9971bb076f4a80a9e41ba601bc862d0fdf (patch)
treebe553fe84132e1f25d5f33fb98f703378096b961 /crawl-ref/source/dat/clua/lm_tmsg.lua
parentbc1a54904787e2f4779a99f2be1f72f6fd87679b (diff)
downloadcrawl-ref-f2a19d9971bb076f4a80a9e41ba601bc862d0fdf.tar.gz
crawl-ref-f2a19d9971bb076f4a80a9e41ba601bc862d0fdf.zip
Replaced timed markers with Lua markers. Breaks save compatibility.
KFEAT: feature names are now as in the dungeon_feature_type enum. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1930 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/dat/clua/lm_tmsg.lua')
-rw-r--r--crawl-ref/source/dat/clua/lm_tmsg.lua106
1 files changed, 106 insertions, 0 deletions
diff --git a/crawl-ref/source/dat/clua/lm_tmsg.lua b/crawl-ref/source/dat/clua/lm_tmsg.lua
new file mode 100644
index 0000000000..1448e7ade0
--- /dev/null
+++ b/crawl-ref/source/dat/clua/lm_tmsg.lua
@@ -0,0 +1,106 @@
+------------------------------------------------------------------------------
+-- lm_tmsg.lua:
+-- Messaging for timed Lua markers.
+------------------------------------------------------------------------------
+
+TimedMessaging = { }
+TimedMessaging.__index = TimedMessaging
+
+function TimedMessaging._new()
+ local m = { }
+ setmetatable(m, TimedMessaging)
+ return m
+end
+
+function TimedMessaging.new(pars)
+ pars = pars or { }
+ local m = TimedMessaging._new()
+ m.noisemaker = pars.noisemaker
+ m.verb = pars.verb
+ m.finalmsg = pars.finalmsg
+ m.ranges = pars.ranges
+ m.initmsg = pars.initmsg or ''
+ return m
+end
+
+function TimedMessaging:init(tmarker, cm)
+ local lab = dgn.grid(cm:pos()) == dgn.feature_number('enter_labyrinth')
+ if not self.noisemaker then
+ self.noisemaker = lab and "an ancient clock" or "a massive bell"
+ end
+
+ self.verb = self.verb or (lab and 'ticking' or 'tolling')
+
+ if not self.finalmsg then
+ self.finalmsg = lab and "last, dying ticks of the clock"
+ or "last, dying notes of the bell"
+ end
+
+ if not self.ranges then
+ self.ranges = { { 5000, 'stately ' }, { 4000, '' },
+ { 2500, 'brisk ' }, { 1500, 'urgent ' },
+ { 0, 'frantic ' } }
+ end
+
+ self.check = self.check or tmarker.dur - 500
+ if self.check < 50 then
+ self.check = 50
+ end
+
+ if #self.initmsg > 0 and you.hear_pos(cm:pos()) then
+ crawl.mpr(self.initmsg, "sound")
+ end
+end
+
+function TimedMessaging:say_message(dur)
+ self.sound_channel = self.sound_channel or crawl.msgch_num('sound')
+ if dur <= 0 then
+ crawl.mpr("You hear the " .. self.finalmsg .. ".", self.sound_channel)
+ return
+ end
+ for _, chk in ipairs(self.ranges) do
+ if dur > chk[1] then
+ crawl.mpr("You hear the " .. chk[2] .. self.verb
+ .. " of " .. self.noisemaker .. ".",
+ self.sound_channel)
+ break
+ end
+ end
+end
+
+function TimedMessaging:event(luamark, cmarker, event)
+ if luamark.dur < self.check or luamark.dur <= 0 then
+ self.check = luamark.dur - 250
+ if luamark.dur > 900 then
+ self.check = self.check - 250
+ end
+
+ if you.hear_pos(cmarker:pos()) then
+ self:say_message(luamark.dur)
+ end
+ end
+end
+
+function TimedMessaging:write(th)
+ file.marshall(th, self.check)
+ file.marshall(th, self.noisemaker)
+ file.marshall(th, self.verb)
+ file.marshall(th, self.initmsg)
+ file.marshall(th, self.finalmsg)
+ lmark.marshall_table(th, self.ranges)
+end
+
+function TimedMessaging.read(th)
+ local tm = TimedMessaging._new()
+ tm.check = file.unmarshall_number(th)
+ tm.noisemaker = file.unmarshall_string(th)
+ tm.verb = file.unmarshall_string(th)
+ tm.initmsg = file.unmarshall_string(th)
+ tm.finalmsg = file.unmarshall_string(th)
+ tm.ranges = lmark.unmarshall_table(th)
+ return tm
+end
+
+function bell_clock_msg(pars)
+ return TimedMessaging.new(pars)
+end