ToME: the Tales of Maj'Eyal

Everything about ToME
It is currently Tue Sep 25, 2018 5:29 pm

All times are UTC




Post new topic Reply to topic  [ 17 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Sat Sep 17, 2011 9:10 am 
Offline
Wyrmic

Joined: Thu Oct 14, 2010 9:58 am
Posts: 263
I've been fiddling about with magical classes and they could use a tree to invest generic points such as combat training. This would be a starter generic tree for Mages, Anorithils, Corruptors and Paradox Mages and probably an unlockable for Arcane Blades, Shadowblades, Paladins, Reavers and Wardens.
(I haven't tested this yet but the syntax looks clean so it should be ok. This uses 2 talents from "Staff Combat" so this one would be superfluous.)

Code:
newTalent{
   name = "Magical Endurance",
   type = {"spell/magical-training", 1},
   mode = "passive",
   points = 5,
   require = { stat = { mag=function(level) return 14 + level * 9 end }, },
   on_learn = function(self, t)
      self.max_mana = self.max_mana + 18
      self.max_vim = self.max_vim + 10
      self.max_positive = self.max_positive + 10
      self.max_negative = self.max_negative + 10
   end,
   on_unlearn = function(self, t)
      self.max_mana = self.max_mana - 18
      self.max_vim = self.max_vim - 10
      self.max_positive = self.max_positive - 10
      self.max_negative = self.max_negative - 10
   end,
   info = function(self, t)
      return ([[Increases your maximum mana by %d and your maximum vim, positive and negative energy by %d.]]):format(18 * t, 10 * t)
   end,
}

newTalent{
   name = "???",
   type = {"spell/magical-training", 2},
   mode = "passive",
   points = 5,
   require = { stat = { mag=function(level) return 14 + level * 9 end }, },
   on_learn = function(self, t)
      self.silence_immune = (self.silence_immune or 0) + self:getTalentlevel(t) / 10
   end,
   on_unlearn = function(self, t)
      self.silence_immune = self.silence_immune - self:getTalentlevel(t) / 10
   end,
   info = function(self, t)
      local silenceres = self:getTalentlevel(t) * 10
      return ([[Increases your resistance to silence effects by %d%%.]]):format(silenceres)
   end,
}

newTalent{
   name = "Channel Staff",
   type = {"spell/magical-training", 3},
   points = 5,
   tactical = { ATTACK = 1 },
   range = 8,
   reflectable = true,
   proj_speed = 20,
   requires_target = true,
   target = function(self, t)
      return {type="bolt", range=self:getTalentRange(t), talent=t, display = {particle=particle, trail=trail}, friendlyfire=false,
         -- Like a normal block_path, but goes over friendlies.  Also, cannot gain additional range by firing over friendlies.
         block_path = function(typ, lx, ly, for_highlights)
            -- use default 'block_path'
            local dummy_typ = engine.Target:getType({type="bolt"})
            local block, hit, hit_radius = dummy_typ.block_path(typ, lx, ly, for_highlights)
            local a = game.level.map(lx, ly, engine.Map.ACTOR)
            local block_from_range = false
            if typ.range and typ.start_x then
               local dist = core.fov.distance(typ.start_x, typ.start_y, lx, ly)
               if math.floor(dist - typ.range + 0.5) > 0 then block_from_range = true end
            elseif typ.range and typ.source_actor and typ.source_actor.x then
               local dist = core.fov.distance(typ.source_actor.x, typ.source_actor.y, lx, ly)
               if math.floor(dist - typ.range + 0.5) > 0 then block_from_range = true end
            end
            if a then return block_from_range or (self and self:reactionToward(a) < 0), hit, hit_radius
            else return block, hit, hit_radius end
         end,
      }
   end,
   getDamageMod = function(self, t) return self:combatTalentWeaponDamage(t, 0.4, 1.1) end,
   action = function(self, t)
      local weapon = self:hasStaffWeapon()
      if not weapon then
         game.logPlayer(self, "You need a staff to use this spell.")
         return
      end
      local combat = weapon.combat

      local trail = "firetrail"
      local particle = "bolt_fire"
      local explosion = "flame"

      local damtype = combat.damtype
      if     damtype == DamageType.FIRE then      explosion = "flame"               particle = "bolt_fire"      trail = "firetrail"
      elseif damtype == DamageType.COLD then      explosion = "freeze"              particle = "ice_shards"     trail = "icetrail"
      elseif damtype == DamageType.ACID then      explosion = "acid"                particle = "bolt_acid"      trail = "acidtrail"
      elseif damtype == DamageType.LIGHTNING then explosion = "lightning_explosion" particle = "bolt_lightning" trail = "lightningtrail"
      elseif damtype == DamageType.LIGHT then     explosion = "light"               particle = "bolt_light"     trail = "lighttrail"
      elseif damtype == DamageType.DARKNESS then  explosion = "dark"                particle = "bolt_dark"      trail = "darktrail"
      elseif damtype == DamageType.NATURE then    explosion = "slime"               particle = "bolt_slime"     trail = "slimetrail"
      elseif damtype == DamageType.BLIGHT then    explosion = "slime"               particle = "bolt_slime"     trail = "slimetrail"
      elseif damtype == DamageType.PHYSICAL then  explosion = "dark"                particle = "stone_shards"   trail = "earthtrail"
      else                                        explosion = "manathrust"          particle = "bolt_arcane"    trail = "arcanetrail" damtype = DamageType.ARCANE
      end

      local tg = self:getTalentTarget(t)
      local x, y = self:getTarget(tg)
      if not x or not y then return nil end

      -- Compute damage
      local dam = self:combatDamage(combat)
      local damrange = self:combatDamageRange(combat)
      dam = rng.range(dam, dam * damrange)
      dam = self:spellCrit(dam)
      dam = dam * t.getDamageMod(self, t)

      self:projectile(tg, x, y, damtype, dam, {type=explosion})

      game:playSoundNear(self, "talents/arcane")
      return true
   end,
   info = function(self, t)
      local damagemod = t.getDamageMod(self, t)
      return ([[Channel raw mana through your staff, projecting a bolt of your staff's damage type doing %d%% staff damage. The bolt will only hurt hostile targets and pass safely through friendly ones. This attack always has a 100%% chance to hit and ignores target armour.]]):format(damagemod * 100)
   end,
}

newTalent{
   name = "Staff Mastery",
   type = {"spell/magical-training", 4},
   mode = "passive",
   points = 5,
   getDamage = function(self, t) return math.sqrt(self:getTalentLevel(t) / 10) end,
   info = function(self, t)
      local damage = t.getDamage(self, t)
      return ([[Increases damage done with staves by %d%%.]]):format(100 * damage)
   end,
}


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 11:07 am 
Offline
Loremaster

Joined: Thu Sep 23, 2010 10:18 pm
Posts: 3516
Location: London, England
Hmm, not sure I'm a fan of this idea... 1. simply replaces the need for Willpower (hence making stat balancing less interesting). 2. isn't much use when few enemies silence. 3 and 4 are a bit dull for being nicked from another class, and aren't really useful for most magic classes anyway as channel does very little damage and staff damage requires some investment in other combat stats/talents.

_________________
http://www.gamesofgrey.com - My own T-Engine games!
Roguelike Radio - A podcast about roguelikes


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 12:58 pm 
Offline
Uruivellas

Joined: Sun Sep 05, 2010 5:11 am
Posts: 683
The underlying idea is great: generic trees are supposed to be (I think) available for all or most classes. Since most mages do not get the same generic skills as fighters, it seems they can use a generic tree themselves.

The talents need some work. I cannot think of any suggestions straight away (erm why am I posting here then :P)

I second Grey's opinion.


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 4:47 pm 
Offline
Thalore

Joined: Sun Jan 02, 2011 8:38 pm
Posts: 161
I actually love the idea of this. However, my thought is there could maybe be two generic trees - one for staves and one for general magical training. So here's a proposal for that:

-Archmage: both known
-Alchemist, Doomed: staff known, training locked
-Anorithil, Corruptor, Paradox Mage: both locked
-Arcane Blade, Shadowblade, Reaver, Warden: staff unknown, training locked
-Sun Paladin: both unknown

Code:
Spell / Staff combat
-Channel Staff: No resource cost (most casters don't use mana!); to compensate, possibly reduce damage or range (say, 4 + talent level instead of 8).
-Staff Mastery: Works as currently.
-Defensive Posture: Use your staff's power to defend instead of destroy. Reduces your staff's Spellpower stat by 5% per talent level, but puts that amount into your armor, defense, ranged defense, and saves.
-Staff Potency: 2% per talent level boost to the damage type of the staff you're using.

The idea here is to provide something like Shoot for staff casters, but with some more general benefits at the higher end of the tree. Defensive Posture might actually be worth taking if it provided more serious protection as per the above, and a 10% damage boost to your primary type is enough to warrant consideration but not so large that it's a must-have.


Code:
Spell / Magical training
-Body of Knowledge: Passive. Boosts spell save and increases your mana regeneration rate slightly. (But doesn't give you a mana pool if you don't have one.)
-Counterspell: A beam that attempts to destroy in-flight magical projectiles. It makes an opposed check against each potential target; win = counter the effect and lose some power, lose = end the counterspell. Becomes a radius at higher levels.
-Runes of Power: Sustain. Cooldown times of your runes are decreased by 5% per talent level.
-Spellweaver: Passive. Reduce the cost of your 'magical' sustains by 5% / talent level.

The idea here is that any caster can learn at least the 'basics' of casting spells with mana, even if they primarily use another resource. For the no-mana-regen classes, this would provide an alternate way to gain some regen (but requiring a category point). The higher level effects are more generally applicable (and perhaps too strong at 5%).


A flavorful way for people to learn these: the apprentice mage shows up in Angolwen after completing his quest; he offers to train you in staff combat for an artifact staff and in magical training for an artifact jewelry.

It could be cool to have a Wild-gift version of the staff talent, as I hear that right now Summoners don't really have anything to 'do' at low levels. It could be pretty much identical except for the power source.


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 5:05 pm 
Offline
Loremaster

Joined: Thu Sep 23, 2010 10:18 pm
Posts: 3516
Location: London, England
It might be nice for Tarelion to offer the existing staff combat tree for sale.

_________________
http://www.gamesofgrey.com - My own T-Engine games!
Roguelike Radio - A podcast about roguelikes


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 5:10 pm 
Offline
Thalore

Joined: Thu May 26, 2011 6:55 pm
Posts: 124
eronarn wrote:
I actually love the idea of this. However, my thought is there could maybe be two generic trees - one for staves and one for general magical training. So here's a proposal for that:

-Archmage: both known
-Alchemist, Doomed: staff known, training locked
-Anorithil, Corruptor, Paradox Mage: both locked
-Arcane Blade, Shadowblade, Reaver, Warden: staff unknown, training locked
-Sun Paladin: both unknown

Code:
Spell / Staff combat
-Channel Staff: No resource cost (most casters don't use mana!); to compensate, possibly reduce damage or range (say, 4 + talent level instead of 8).
-Staff Mastery: Works as currently.
-Defensive Posture: Use your staff's power to defend instead of destroy. Reduces your staff's Spellpower stat by 5% per talent level, but puts that amount into your armor, defense, ranged defense, and saves.
-Staff Potency: 2% per talent level boost to the damage type of the staff you're using.

The idea here is to provide something like Shoot for staff casters, but with some more general benefits at the higher end of the tree. Defensive Posture might actually be worth taking if it provided more serious protection as per the above, and a 10% damage boost to your primary type is enough to warrant consideration but not so large that it's a must-have.


Code:
Spell / Magical training
-Body of Knowledge: Passive. Boosts spell save and increases your mana regeneration rate slightly. (But doesn't give you a mana pool if you don't have one.)
-Counterspell: A beam that attempts to destroy in-flight magical projectiles. It makes an opposed check against each potential target; win = counter the effect and lose some power, lose = end the counterspell. Becomes a radius at higher levels.
-Runes of Power: Sustain. Cooldown times of your runes are decreased by 5% per talent level.
-Spellweaver: Passive. Reduce the cost of your 'magical' sustains by 5% / talent level.

The idea here is that any caster can learn at least the 'basics' of casting spells with mana, even if they primarily use another resource. For the no-mana-regen classes, this would provide an alternate way to gain some regen (but requiring a category point). The higher level effects are more generally applicable (and perhaps too strong at 5%).


A flavorful way for people to learn these: the apprentice mage shows up in Angolwen after completing his quest; he offers to train you in staff combat for an artifact staff and in magical training for an artifact jewelry.

It could be cool to have a Wild-gift version of the staff talent, as I hear that right now Summoners don't really have anything to 'do' at low levels. It could be pretty much identical except for the power source.


These sounds kind of cool. Not too powerful from what I see, but worth having.


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 5:36 pm 
Offline
Retired Ninja

Joined: Fri May 28, 2010 4:38 pm
Posts: 3756
I like it too.

Defensive Posture certainly could use a boost and blunt thrust is pretty meh as they are now :)

_________________
Jack's Cheese and Bread Snack


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 9:15 pm 
Offline
Higher

Joined: Sun Sep 04, 2011 9:23 am
Posts: 54
10% damage to one damage type that most likely won't even be optimal for your class (who actually finds a staff of the element they want?) isn't really that great. Maybe you could scrap staff mastery and replace it with this, as a 10 pointer, with diminishing returns up to something like 33% damage.

Sounds overpowered, but remember you're sacrificing needed points in armor training or Thick Skin to get this.

Actually, if you're trying to mirror magical training as combat training, you could just make a bunch of generic magic boosting skills that can be learned out of order, like combat training.


Top
 Profile  
 
PostPosted: Sat Sep 17, 2011 10:01 pm 
Offline
Sher'Tul

Joined: Mon Jun 13, 2011 4:10 pm
Posts: 1262
33% sounds preposterously overpowered. Hell, the Tempest/Uttercold/Wildfire/Crystalline Focus abilities only give 10% increased damage (and penetration, of course, but still). I think the proposed trees look great, although Defensive Posture and Counterspell both seem a little overboard. For the former, I'd like the effects to be a little more specific (defense and physical save make the most sense to me). Counterspell is an interesting idea; what about a simple activated skill that cancels the first enemy spell cast to happen in the next X turns? Would only work on enemy spellcasting within your vision, of course. Going after in-flight spells seems a little restrictive to me.

One other note on these abilities; it would be swell if they didn't require mana to use, so Doomed and Anorithils don't get shafted. That is assuming they get default access to the trees. The only talent I see this being an issue for is Runes of Power, since it's a sustain with no downsides.

_________________
Sorry about all the parentheses (sometimes I like to clarify things).


Top
 Profile  
 
PostPosted: Sun Sep 18, 2011 1:00 am 
Offline
Spiderkin

Joined: Sun Jun 12, 2011 7:02 am
Posts: 503
I don't know. I always saw ranged staff combat as being particularly iconic to alchemists (who are conceptually dependent on their gear in a way archmages are not -- an archmage has power that comes from within, with the staff just amplifying it a bit, while the alchemist is all about stuff external to themselves -- calling on the power of golems, bombs, gemstones, and staves.) It's also more useful to alchemists, since one of its defining characteristics is that it can fire through allies safely. Aside from summoners, who are not magic based, Alchemists are the class who benefits most obviously from that.


Top
 Profile  
 
PostPosted: Sun Sep 18, 2011 1:47 am 
Offline
Sher'Tul Godslayer

Joined: Mon Mar 14, 2011 10:32 am
Posts: 1709
Location: Canada
I misread the staff potency idea at first, here's what I got out of it (that might even work/be balanced).

Staff Potency: (2, 4, 6, 8, 10)% chance to change all damage of the staff's type into a more powerful form of it. examples:
acid -> acid/blind
cold -> ice
lightning -> lightning/daze
fire -> fire/burn
darkness -> darkness/stun?
arcane -> arcane/mana drain?
etc...

This would apply to all spells, not just channel staff and melee attacks.

This would put a much higher value on the right damage type for a staff, unless it was changed somehow.

_________________
Some of my tools for helping make talents:
Melee Talent Creator
Annotated Talent Code (incomplete)


Top
 Profile  
 
PostPosted: Sun Sep 18, 2011 11:41 am 
Offline
Sher'Tul

Joined: Fri Sep 21, 2007 3:18 am
Posts: 1081
Location: Angolwen
how about something that increases mana regen? Manaflow dosent count either. There are HP regen boosting and Stamina regen boosting talents, why not mana???


Top
 Profile  
 
PostPosted: Sun Sep 18, 2011 2:43 pm 
Offline
Thalore

Joined: Sun Jan 02, 2011 8:38 pm
Posts: 161
lukep wrote:
I misread the staff potency idea at first, here's what I got out of it (that might even work/be balanced).


This is a pretty cool idea, though it could cause some serious balance issues for stuff like proccing off of AOE DOTs.

bricks' idea for Counterspell is pretty cool.

One note: gaining a sustain that costs mana gives you a mana pool. So Anorithils/Doomed would be fine. A bigger question is whether we should have abilities that grant a mana pool in the first place...

Being able to learn the training talents out of order could be cool (I think Staff should stay in order, like the more generic melee trees (Dual Wielding)). However, it would then make more sense that everything should be more generic, without granting a mana pool or an activated ability. So:

-Body of Knowledge: Passive. Boosts spell save (+3/level?) and increases your mana regeneration rate (by a small, flat number).
-Runes of Power: Passive. Cooldown times of your runes are decreased by 2% per talent level.
-Spellweaver: Passive. Reduce the cost of your 'magical' sustains by 2% / talent level.

...and then maybe two more? Some thoughts there: increase resource pool size, decrease cost of spells, increase spell crit, increase duration of magical buffs, increase spellpower for 'opposed' spells (ones that check a save first instead of dealing damage immediately).


Top
 Profile  
 
PostPosted: Sun Sep 18, 2011 4:31 pm 
Offline
Sher'Tul

Joined: Mon Jun 13, 2011 4:10 pm
Posts: 1262
eronarn, my point was that any class that has default access to a tree should not gain an additional resource upon investing that tree. Mana is actually the worst offender since only three classes get innate mana regen. Not that Doomed/Anorithils really need the updated Staff Mastery tree; it'd be a nice option, but I think many would only invest lightly in it.

_________________
Sorry about all the parentheses (sometimes I like to clarify things).


Top
 Profile  
 
PostPosted: Sun Sep 18, 2011 7:25 pm 
Offline
Thalore

Joined: Sun Jan 02, 2011 8:38 pm
Posts: 161
FWIW, if Doomed had Staff Mastery it would make their early game much more pleasant. Right now they don't have enough abilities to do much. I don't think there'd be long-term investment, but they'd probably use it a lot until they got better stuff.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 17 posts ]  Go to page 1, 2  Next

All times are UTC


Who is online

Users browsing this forum: Google [Bot] and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group