diff options
author | zelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-06-02 06:25:52 +0000 |
---|---|---|
committer | zelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-06-02 06:25:52 +0000 |
commit | baeaf49b58e985d762e0772ef0ac1e10f0959dc8 (patch) | |
tree | 064033ab1115a6b3db78003526576615f893dcde | |
parent | 98e10859b2ad31d0e66418f2846a2c4267098985 (diff) | |
download | crawl-ref-baeaf49b58e985d762e0772ef0ac1e10f0959dc8.tar.gz crawl-ref-baeaf49b58e985d762e0772ef0ac1e10f0959dc8.zip |
A first attempt at making fog cloud size build up over time.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5433 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r-- | crawl-ref/source/dat/clua/lm_fog.lua | 102 | ||||
-rw-r--r-- | crawl-ref/source/dat/entry.des | 6 |
2 files changed, 86 insertions, 22 deletions
diff --git a/crawl-ref/source/dat/clua/lm_fog.lua b/crawl-ref/source/dat/clua/lm_fog.lua index d1106101fa..2e1d8fae70 100644 --- a/crawl-ref/source/dat/clua/lm_fog.lua +++ b/crawl-ref/source/dat/clua/lm_fog.lua @@ -34,9 +34,14 @@ -- size, size_min and size_max: The number of grids each cloud will cover. -- Either size or size_max and size_min must be provided. Providing -- just "size" is equivalent to size_min and size_max being equal. +-- size_buildup_amnt, size_buildup_time: Increase the cloud size over time. +-- Adds (size_buildup_amnt / size_buildup_time * turns_since_made) +-- to size_min and size_max, maxing out at size_buildup_amnt. -- spread_rate: The rate at which a cloud spreads. Must either be -- -1 (default spread rate that varies by cloud type) or between -- 0 and 100 inclusive. +-- spread_rate_amnt, spread_rate_buildup: Similar to size_buildup_amnt +-- and size_buildup_time -- start_clouds: The number of clouds to lay when the level containing -- the cloud machine is entered. This is necessary since clouds -- are cleared when the player leaves a level. @@ -82,7 +87,14 @@ function FogMachine:new(pars) m.size_max = pars.size_max or pars.size m.spread_rate = pars.spread_rate or -1 m.start_clouds = pars.start_clouds or 1 - m.countdown = 0 + + m.size_buildup_amnt = pars.size_buildup_amnt or 0 + m.size_buildup_time = pars.size_buildup_time or 1 + m.spread_buildup_amnt = pars.spread_buildup_amnt or 0 + m.spread_buildup_time = pars.spread_buildup_time or 1 + + m.buildup_turns = 0 + m.countdown = 0 return m end @@ -93,9 +105,36 @@ function FogMachine:do_fog(marker) x, y = dgn.random_walk(x, y, self.walk_dist) end + local buildup_turns = self.buildup_turns + + -- Size buildup + if buildup_turns > self.size_buildup_time then + buildup_turns = self.size_buildup_time + end + + local size_buildup = self.size_buildup_amnt * buildup_turns / + self.size_buildup_time + + local size_min = self.size_min + size_buildup + local size_max = self.size_max + size_buildup + + if (size_min < 0) then + size_min = 0 + end + + -- Spread buildup + buildup_turns = self.buildup_turns + + if buildup_turns > self.spread_buildup_time then + buildup_turns = self.spread_buildup_time + end + + local spread = self.spread_rate + (self.spread_buildup_amnt * buildup_turns / + self.spread_buildup_time) + dgn.apply_area_cloud(x, y, self.pow_min, self.pow_max, self.pow_rolls, - crawl.random_range(self.size_min, self.size_max, 1), - self.cloud_type, self.kill_cat, self.spread_rate) + crawl.random_range(size_min, size_max, 1), + self.cloud_type, self.kill_cat, spread) end function FogMachine:activate(marker, verbose) @@ -109,6 +148,12 @@ function FogMachine:event(marker, ev) if ev:type() == dgn.dgn_event_type('turn') then self.countdown = self.countdown - ev:ticks() + self.buildup_turns = self.buildup_turns + ev:ticks() + + if (self.buildup_turns > self.size_buildup_time) then + self.buildup_turns = self.size_buildup_time + end + while self.countdown <= 0 do self:do_fog(marker) self.countdown = self.countdown + @@ -118,6 +163,7 @@ function FogMachine:event(marker, ev) for i = 1, self.start_clouds do self:do_fog(marker) self.countdown = crawl.random_range(self.delay_min, self.delay_max, 1) + self.buildup_turns = 0 end end end @@ -135,23 +181,33 @@ function FogMachine:write(marker, th) file.marshall(th, self.size_max) file.marshall(th, self.spread_rate) file.marshall(th, self.start_clouds) + file.marshall(th, self.size_buildup_amnt) + file.marshall(th, self.size_buildup_time) + file.marshall(th, self.spread_buildup_amnt) + file.marshall(th, self.spread_buildup_time) + file.marshall(th, self.buildup_turns) file.marshall(th, self.countdown) end function FogMachine:read(marker, th) - self.cloud_type = file.unmarshall_string(th) - self.walk_dist = file.unmarshall_number(th) - self.pow_min = file.unmarshall_number(th) - self.pow_max = file.unmarshall_number(th) - self.pow_rolls = file.unmarshall_number(th) - self.delay_min = file.unmarshall_number(th) - self.delay_max = file.unmarshall_number(th) - self.kill_cat = file.unmarshall_string(th) - self.size_min = file.unmarshall_number(th) - self.size_max = file.unmarshall_number(th) - self.spread_rate = file.unmarshall_number(th) - self.start_clouds = file.unmarshall_number(th) - self.countdown = file.unmarshall_number(th) + self.cloud_type = file.unmarshall_string(th) + self.walk_dist = file.unmarshall_number(th) + self.pow_min = file.unmarshall_number(th) + self.pow_max = file.unmarshall_number(th) + self.pow_rolls = file.unmarshall_number(th) + self.delay_min = file.unmarshall_number(th) + self.delay_max = file.unmarshall_number(th) + self.kill_cat = file.unmarshall_string(th) + self.size_min = file.unmarshall_number(th) + self.size_max = file.unmarshall_number(th) + self.spread_rate = file.unmarshall_number(th) + self.start_clouds = file.unmarshall_number(th) + self.size_buildup_amnt = file.unmarshall_number(th) + self.size_buildup_time = file.unmarshall_number(th) + self.spread_buildup_amnt = file.unmarshall_number(th) + self.spread_buildup_time = file.unmarshall_number(th) + self.buildup_turns = file.unmarshall_number(th) + self.countdown = file.unmarshall_number(th) setmetatable(self, FogMachine) @@ -162,17 +218,23 @@ function fog_machine(pars) return FogMachine:new(pars) end -function fog_machine_geyser(cloud_type, size, power) +function fog_machine_geyser(cloud_type, size, power, buildup_amnt, + buildup_time) return FogMachine:new { cloud_type = cloud_type, pow_max = power, size = size, - delay_min = power , delay_max = power * 2 + delay_min = power , delay_max = power * 2, + size_buildup_amnt = buildup_amnt or 0, + size_buildup_time = buildup_time or 1 } end -function fog_machine_spread(cloud_type, size, power) +function fog_machine_spread(cloud_type, size, power, buildup_amnt, + buildup_time) return FogMachine:new { cloud_type = cloud_type, pow_max = power, spread_rate = size, - size = 1, delay_min = 5, delay_max = 15 + size = 1, delay_min = 5, delay_max = 15, + spread_buildup_amnt = buildup_amnt or 0, + spread_buildup_time = buildup_time or 1 } end diff --git a/crawl-ref/source/dat/entry.des b/crawl-ref/source/dat/entry.des index e5dc2fd6e1..ebe16dbb87 100644 --- a/crawl-ref/source/dat/entry.des +++ b/crawl-ref/source/dat/entry.des @@ -60,7 +60,8 @@ TAGS: entry CHANCE: 500 ORIENT: float MARKER: U = lua:fog_machine { \ - pow_max = 100, delay_min = 1000, delay_max = 2000, size = 30 \ + pow_max = 15, delay_min = 100, delay_max = 150, size = 1, \ + size_buildup_amnt = 29, size_buildup_time = 1000 \ } MAP ........... @@ -82,7 +83,8 @@ TAGS: entry CHANCE: 500 ORIENT: float MARKER: U = lua:fog_machine { \ - pow_max = 10, delay = 30, size = 1, spread_rate = 30 \ + pow_max = 10, delay = 30, size = 1, spread_rate = 1, \ + size_buildup_amnt = 29, size_buildup_time = 2000 \ } MAP ........... |