Talent tree - Magical Training - Generic

All new ideas for the upcoming releases of ToME 4.x.x should be discussed here

Moderator: Moderator

Message
Author
Dervis
Wyrmic
Posts: 263
Joined: Thu Oct 14, 2010 9:58 am

Talent tree - Magical Training - Generic

#1 Post by Dervis »

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: Select all

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,
}

Grey
Loremaster
Posts: 3517
Joined: Thu Sep 23, 2010 10:18 pm
Location: London, England
Contact:

Re: Talent tree - Magical Training - Generic

#2 Post by Grey »

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

marvalis
Uruivellas
Posts: 683
Joined: Sun Sep 05, 2010 5:11 am

Re: Talent tree - Magical Training - Generic

#3 Post by marvalis »

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.

eronarn
Thalore
Posts: 161
Joined: Sun Jan 02, 2011 8:38 pm

Re: Talent tree - Magical Training - Generic

#4 Post by eronarn »

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: Select all

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: Select all

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.

Grey
Loremaster
Posts: 3517
Joined: Thu Sep 23, 2010 10:18 pm
Location: London, England
Contact:

Re: Talent tree - Magical Training - Generic

#5 Post by Grey »

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

Nori
Thalore
Posts: 124
Joined: Thu May 26, 2011 6:55 pm

Re: Talent tree - Magical Training - Generic

#6 Post by Nori »

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: Select all

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: Select all

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.

edge2054
Retired Ninja
Posts: 3756
Joined: Fri May 28, 2010 4:38 pm

Re: Talent tree - Magical Training - Generic

#7 Post by edge2054 »

I like it too.

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

Talonj
Higher
Posts: 54
Joined: Sun Sep 04, 2011 9:23 am

Re: Talent tree - Magical Training - Generic

#8 Post by Talonj »

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.

bricks
Sher'Tul
Posts: 1262
Joined: Mon Jun 13, 2011 4:10 pm

Re: Talent tree - Magical Training - Generic

#9 Post by bricks »

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).

Aquillion
Spiderkin
Posts: 503
Joined: Sun Jun 12, 2011 7:02 am

Re: Talent tree - Magical Training - Generic

#10 Post by Aquillion »

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.

lukep
Sher'Tul Godslayer
Posts: 1712
Joined: Mon Mar 14, 2011 10:32 am
Location: Canada

Re: Talent tree - Magical Training - Generic

#11 Post by lukep »

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)

Sradac
Sher'Tul
Posts: 1081
Joined: Fri Sep 21, 2007 3:18 am
Location: Angolwen

Re: Talent tree - Magical Training - Generic

#12 Post by Sradac »

how about something that increases mana regen? Manaflow dosent count either. There are HP regen boosting and Stamina regen boosting talents, why not mana???

eronarn
Thalore
Posts: 161
Joined: Sun Jan 02, 2011 8:38 pm

Re: Talent tree - Magical Training - Generic

#13 Post by eronarn »

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).

bricks
Sher'Tul
Posts: 1262
Joined: Mon Jun 13, 2011 4:10 pm

Re: Talent tree - Magical Training - Generic

#14 Post by bricks »

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).

eronarn
Thalore
Posts: 161
Joined: Sun Jan 02, 2011 8:38 pm

Re: Talent tree - Magical Training - Generic

#15 Post by eronarn »

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.

Post Reply