diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-07-26 11:06:09 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-07-26 11:06:09 +0000 |
commit | f2a19d9971bb076f4a80a9e41ba601bc862d0fdf (patch) | |
tree | be553fe84132e1f25d5f33fb98f703378096b961 /crawl-ref/source/dat/clua/lm_tmsg.lua | |
parent | bc1a54904787e2f4779a99f2be1f72f6fd87679b (diff) | |
download | crawl-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.lua | 106 |
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 |