diff --git a/game/engines/default/engine/GameEnergyBased.lua b/game/engines/default/engine/GameEnergyBased.lua index 2956d7e7c1d12b229219a7e8b820dcae283b7237..f6346b2484bf3dee2b48d1b2677c7b5cac68e816 100644 --- a/game/engines/default/engine/GameEnergyBased.lua +++ b/game/engines/default/engine/GameEnergyBased.lua @@ -59,22 +59,15 @@ function _M:tick() -- Give some energy to entities if self.level then - local i, e - local arr = self.level.e_array - for i = 1, #arr do - e = arr[i] - if e and e.act and e.energy then --- print("<ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) - if e.energy.value < self.energy_to_act then - e.energy.value = (e.energy.value or 0) + self.energy_per_tick * (e.energy.mod or 1) * (e.global_speed or 1) - end - if e.energy.value >= self.energy_to_act then - e.energy.used = false - e:act(self) - end --- print(">ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) - end + self:tickLevel(self.level) + local mainlev = self.level + + for name, level in pairs(self.level.sublevels) do + self.level = level + self:tickLevel(level) + if self.level ~= level then mainlev = self.level end end + self.level = mainlev end local arr = self.entities @@ -100,6 +93,26 @@ function _M:tick() end end +--- Run tick on a level +function _M:tickLevel(level) + local i, e + local arr = level.e_array + for i = 1, #arr do + e = arr[i] + if e and e.act and e.energy then +-- print("<ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) + if e.energy.value < self.energy_to_act then + e.energy.value = (e.energy.value or 0) + self.energy_per_tick * (e.energy.mod or 1) * (e.global_speed or 1) + end + if e.energy.value >= self.energy_to_act then + e.energy.used = false + e:act(self) + end +-- print(">ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player) + end + end +end + --- Called every game turns -- Does nothing, you can override it function _M:onTurn() diff --git a/game/engines/default/engine/Level.lua b/game/engines/default/engine/Level.lua index 9044dd4f7997aeaa6a177f3729f7548c45f8a45a..5f319611a432f6c4594143fdd64dc98f051aaec6 100644 --- a/game/engines/default/engine/Level.lua +++ b/game/engines/default/engine/Level.lua @@ -31,6 +31,39 @@ function _M:init(level, map) self.entities = {} self.entities_list = {} self.perm_entities_list = {} + self.sublevels = {} + self.sublevel_id = "__main__" + self.data = {} +end + +--- Adds a sublevel +function _M:addSublevel(name, level) + if self.sublevels[name] then error("Sublevel already exists: "..name) end + self.sublevels[name] = level + level.sublevel_id = name + print("[LEVEL] new sublevel", name) +end + +--- Removes a sublevel +function _M:removeSublevel(name) + self.sublevels[name] = nil + print("[LEVEL] del sublevel", name) +end + +--- Activate the given sublevel to become the new main one +function _M:selectSublevel(name) + if not self.sublevels[name] then error("Sublevel does not exist, cant switch: "..name) end + if game.level ~= self then error("Switching sublevel on a level that is not active") end + local level = self.sublevels[name] + game.level = level + + level.sublevels = self.sublevels + self.sublevels = {} + + level.sublevels[level.sublevel_id] = nil + level.sublevels[self.sublevel_id] = self + + print("[LEVEL] switch to sublevel", level.sublevel_id, "from", self.sublevel_id) end --- Adds an entity to the level diff --git a/game/modules/tome/data/gfx/shockbolt/npc/dragon_cold_cold_drake.png b/game/modules/tome/data/gfx/shockbolt/npc/dragon_cold_cold_drake.png new file mode 100644 index 0000000000000000000000000000000000000000..beea9ac6dbef2aba3d08a97d68f65f6a55644231 Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/dragon_cold_cold_drake.png differ diff --git a/game/modules/tome/data/gfx/shockbolt/npc/dragon_fire_fire_drake.png b/game/modules/tome/data/gfx/shockbolt/npc/dragon_fire_fire_drake.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd7670f52c17f45d086c985838db98e729a5f94 Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/dragon_fire_fire_drake.png differ diff --git a/game/modules/tome/data/gfx/shockbolt/npc/dragon_fire_fire_drake_hatchling.png b/game/modules/tome/data/gfx/shockbolt/npc/dragon_fire_fire_drake_hatchling.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c986e19c2dd3821dec9a5c0aafabd4f016da08 Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/dragon_fire_fire_drake_hatchling.png differ diff --git a/game/modules/tome/data/gfx/shockbolt/npc/insect_ritch_ritch_larva.png b/game/modules/tome/data/gfx/shockbolt/npc/insect_ritch_ritch_larva.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8cae062f6cfd7ab864b227ca177cbaf0f970bd Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/insect_ritch_ritch_larva.png differ