diff --git a/game/engine/Birther.lua b/game/engine/Birther.lua index b2c844a11c81e63ce3edeba6060cc483aa1532a5..78e052b8b0a4aedd6792065514c1688112eef45f 100644 --- a/game/engine/Birther.lua +++ b/game/engine/Birther.lua @@ -90,6 +90,7 @@ function _M:init(actor, order, at_end) end function _M:selectType(type) + local default = 1 self.list = {} -- Make up the list for i, d in ipairs(self.birth_descriptor_def[type]) do @@ -108,9 +109,10 @@ function _M:selectType(type) -- Check it is allowed if allowed then table.insert(self.list, d) + if d.selection_default then default = #self.list end end end - self.sel = 1 + self.sel = default self.current_type = type end diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index ae619272ea2625b93d3e97c01d82151cc22bb224..3e20bb80ef0b44894da4008de67b416c56f59e28 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -57,6 +57,12 @@ local QuitDialog = require "mod.dialogs.Quit" module(..., package.seeall, class.inherit(engine.GameTurnBased, engine.interface.GameMusic, engine.interface.GameSound)) +-- Difficulty settings +DIFFICULTY_EASY = 1 +DIFFICULTY_NORMAL = 2 +DIFFICULTY_NIGHTMARE = 3 +DIFFICULTY_INSANE = 4 + function _M:init() engine.GameTurnBased.init(self, engine.KeyBind.new(), 1000, 100) engine.interface.GameMusic.init(self) @@ -114,7 +120,7 @@ function _M:newGame() Map:setViewerActor(self.player) self:setupDisplayMode() - local birth = Birther.new(self.player, {"base", "world", "race", "subrace", "sex", "class", "subclass" }, function() + local birth = Birther.new(self.player, {"base", "difficulty", "world", "race", "subrace", "sex", "class", "subclass" }, function() self.player.wild_x, self.player.wild_y = self.player.default_wilderness[1], self.player.default_wilderness[2] self:changeLevel(1, self.player.starting_zone) print("[PLAYER BIRTH] resolve...") @@ -219,8 +225,10 @@ function _M:getSaveDescription() return { name = self.player.name, description = ([[%s the level %d %s %s. +Difficulty: %s Exploring level %d of %s.]]):format( self.player.name, self.player.level, self.player.descriptor.subrace, self.player.descriptor.subclass, + self.player.descriptor.difficulty, self.level.level, self.zone.name ), } diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua index 904cb1443b5108d5d12d4217d83753fcbee7dbee..c6d551283441608e5103cc85170923d65265f508 100644 --- a/game/modules/tome/class/Player.lua +++ b/game/modules/tome/class/Player.lua @@ -193,6 +193,19 @@ function _M:onTakeHit(value, src) return ret end +function _M:heal(value, src) + -- Difficulty settings + if game.difficulty == game.DIFFICULTY_EASY then + value = value * 1.1 + elseif game.difficulty == game.DIFFICULTY_NIGHTMARE then + value = value * 0.9 + elseif game.difficulty == game.DIFFICULTY_INSANE then + value = value * 0.8 + end + + mod.class.Actor.heal(self, value, src) +end + function _M:die(src) if self.game_ender then engine.interface.ActorLife.die(self, src) diff --git a/game/modules/tome/data/birth/descriptors.lua b/game/modules/tome/data/birth/descriptors.lua index c591f676acccc8fe465c464d9499373a543f68e1..3a024b9ec1dd24b98415c5eca29692dc594385f7 100644 --- a/game/modules/tome/data/birth/descriptors.lua +++ b/game/modules/tome/data/birth/descriptors.lua @@ -57,6 +57,54 @@ newBirthDescriptor{ }, } +--------------- Difficulties +newBirthDescriptor{ + type = "difficulty", + name = "Easy", + desc = + { + "Easy game setting", + "All damage done to the player reduced by 20%", + "All healing for the player increased by 10%", + }, + copy = { resolvers.generic(function() game.difficulty = game.DIFFICULTY_EASY end) }, +} +newBirthDescriptor{ + type = "difficulty", + name = "Normal", + selection_default = true, + desc = + { + "Normal game setting", + "No changes to the rules.", + }, + copy = { resolvers.generic(function() game.difficulty = game.DIFFICULTY_NORMAL end) }, +} +newBirthDescriptor{ + type = "difficulty", + name = "Nightmare", + desc = + { + "Hard game setting", + "All damage done to the player increased by 20%", + "All healing for the player decreased by 10%", + }, + copy = { resolvers.generic(function() game.difficulty = game.DIFFICULTY_NIGHTMARE end) }, +} +newBirthDescriptor{ + type = "difficulty", + name = "Insane", + desc = + { + "Absolutly unfair game setting", + "All damage done to the player increased by 20%", + "All damage done by the player decreased by 20%", + "All healing for the player decreased by 20%", + }, + copy = { resolvers.generic(function() game.difficulty = game.DIFFICULTY_INSANE end) }, +} + + -- Worlds load("/data/birth/worlds.lua") diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua index 016318ecfb3a3465af2c4c363877ad481cd34517..6c46b9ac4a280de084f4a3a9d5df9b7e57d7fe8c 100644 --- a/game/modules/tome/data/damage_types.lua +++ b/game/modules/tome/data/damage_types.lua @@ -21,6 +21,19 @@ setDefaultProjector(function(src, x, y, type, dam) local target = game.level.map(x, y, Map.ACTOR) if target then + print("[PROJECTOR] starting dam", dam) + + -- Difficulty settings + if game.difficulty == game.DIFFICULTY_EASY and target.player then + dam = dam * 0.8 + elseif game.difficulty == game.DIFFICULTY_NIGHTMARE and target.player then + dam = dam * 1.2 + elseif game.difficulty == game.DIFFICULTY_INSANE then + if target.player then dam = dam * 1.2 + elseif src.player then dam = dam * 0.8 end + end + print("[PROJECTOR] after difficulty dam", dam) + -- Increases damage if src.inc_damage then local inc = src.inc_damage[type] or 0