Porting ToME2 to the T4 engine

If you have a module that you'd like comments on or would like to know how to create your very own module, post here

Moderator: Moderator

What do you want to see in the next release?

Hey, why haven't you implemented my favorite race/subrace/class yet? (specify below)
1
17%
Hey, why haven't you implemented my favorite skill/talent/spell/ability yet? (specify below)
2
33%
Hey, why haven't you implemented my favorite scroll/potion/wand/staff/rod/other object yet? (specify below)
0
No votes
Hey, why haven't you implemented my favorite store/quest/event yet? (specify below)
0
No votes
Hey, that's not what that dungeon's supposed to look like! (specify below)
0
No votes
Hey, why haven't you implemented my favorite game mechanic/UI feature yet? (specify below)
2
33%
Hey, that's a bug! Go fix that bug! (specify below)
1
17%
Hey, you didn't list what I want to see! (specify below)
0
No votes
 
Total votes: 6

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

Re: Porting ToME2 to the T4 engine

#151 Post by lukep »

Hey Zizzo, I got a Thaumaturgy skill working in ToME 4. It has:

- random selection of elements and attack shape (all 12 damage types, and bolt/beam/cone/ball for shapes)
- increasing damage for the later talents
- The talents are randomized when you learn your first one, and can thereafter be learned and unlearned freely without rerolling them.
- working (though rudimentary) descriptions.
- Proper sounds and particles for the bolt attack

It does not have:

- proper names or icons for the created talents
- graphics for the cone, beam, or ball attacks (though it would be fairly simple to add)
- there's some parts of the code that really should be loops, but they are long lists of elseifs instead.
- any semblance of balance or a class that's appropriate for it.

Would you be interested in it for this project?
Some of my tools for helping make talents:
Melee Talent Creator
Annotated Talent Code (incomplete)

Faeryan
Sher'Tul
Posts: 1308
Joined: Wed Jan 07, 2004 5:01 pm
Location: Finland

Re: Porting ToME2 to the T4 engine

#152 Post by Faeryan »

Lukep, are you a mind reader? Just last night while driving home from work I was thinking about crazy new addon classes for ToME and remembered the old Thaumaturgist from ToME2.

How sweet would that be I thought..
Stronk is a potent combatant with a terrifying appearance.

Zizzo
Sher'Tul Godslayer
Posts: 2517
Joined: Thu Jan 23, 2003 8:13 pm
Location: A shallow water area south of Bree
Contact:

Re: Porting ToME2 to the T4 engine

#153 Post by Zizzo »

Okay, I should probably know better than this, :oops: but I think I've got things stabilized enough to release:

Release 0.1.0 "The World Warrior"

The main new feature in this release, as you might guess, is the world map. This should (knock on wood) include wilderness zones that can be crossed at the border to move around on the world map. All the towns are present (though a lot of the towns are placeholders for now), and stubs of all the dungeons are present. And I doo mean "stubs"; special levels aren't present, nor special room types, I haven't tested end-of-zone guardians, and I'm not entirely sure about my implementaion of small levels... :oops: :oops:

This release also implements factions, as discussed earlier. Apart from the default Players and Enemies factions, I broke stuff out into:
  • Eru/Manwe Followers, who are friendly if you follow Eru or Manwe (as you might expect), neutral if you follow Tulkas, Yavanna or no one, and hostile if you follow Melkor.
  • Yavanna Followers, along the same lines, friendly to Yavanna worshippers, hostile to Melkor worshippers, and neutral to everyone else.
  • Friendly NPCs and Neutral NPCs, which are pretty much exactly as they sound. ;)
  • Pets and Companions, which should track player faction reactions with everything else.
Some of these, of course, are for future use.

Other minor changes:
  • Tweaks to the Sense Monsters and Sense Hidden implementations, using some FOV tricks I worked for the rod of detect monsters in my Utility Supplies addon.
  • Went back and added accents to various names, now that we have all these fancy Unicode characters to work with. So you can now pray to Manwë Súlimo while fighting Mîm, Betrayer of Túrin in The Land Of Rh?n. ;)
  • Some not-yet-visible behind-the-scenes work on quests and achievements.
As always, the .team file for the release is available from my site, along with the Subversion repo and WebSVN front-end thereto.
"Blessed are the yeeks, for they shall inherit Arda..."

Zizzo
Sher'Tul Godslayer
Posts: 2517
Joined: Thu Jan 23, 2003 8:13 pm
Location: A shallow water area south of Bree
Contact:

Re: Porting ToME2 to the T4 engine

#154 Post by Zizzo »

lukep wrote:Hey Zizzo, I got a Thaumaturgy skill working in ToME 4. It has:

- random selection of elements and attack shape (all 12 damage types, and bolt/beam/cone/ball for shapes)
- increasing damage for the later talents
- The talents are randomized when you learn your first one, and can thereafter be learned and unlearned freely without rerolling them.
- working (though rudimentary) descriptions.
- Proper sounds and particles for the bolt attack

It does not have:

- proper names or icons for the created talents
- graphics for the cone, beam, or ball attacks (though it would be fairly simple to add)
- there's some parts of the code that really should be loops, but they are long lists of elseifs instead.
- any semblance of balance or a class that's appropriate for it.

Would you be interested in it for this project?
Ooh, got code I can look at? I'm particularly interested to see how you handle the user interface issue of making the random spells available to the user for casting; I still haven't decided how to do that. Can't promise any immediate action on it, though; as you can guess from the above, I'm probably gonna need to focus on dungeon construction for the near future [unless anyone particularly wants me to prioritize some other feature?].

And that tangentially brings up another question I've been considering off and on: is there a particular place or way I could insert a credits dialog or credits list or something like that? The engine has a Credits dialog, but that's in the boot module and appears to be hard-coded for engine credits [and I don't think it ever actually worked on my machine anyway...]
"Blessed are the yeeks, for they shall inherit Arda..."

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

Re: Porting ToME2 to the T4 engine

#155 Post by lukep »

I have a couple reworks that I need to code in (mainly moving it from one set per actor to one set per game) which would enable things like proper names and icons, but this is 100% working.

It's set up similar to the poisons/traps skills, in that there is one talent available to the player, which allows you to learn some otherwise-hidden talents. Ideally, there would be some sort of sorting on the talents (eg. show all bolts, or all darkness attacks), but I'm not sure how to do that.

Code: Select all

newTalent{
	name = "Thaumaturgy",
	type = {"spell/thaumaturgy",1},
	mode = "passive",
	points = 40,
	require = mb_req1,
	on_learn = function(self, t)
		if not self.hasThaumaturgy then
			self.hasThaumaturgy = true

			-- select a random element
			self.thaum = {}
			for i = 1, 40 do
				self.thaum[i] = rng.range(1,12)
			end

			-- select a random element
			self.thaumShape = {}
			for i = 1, 40 do
				self.thaumShape[i] = rng.range(1,4)
			end
		end

		local lev = self:getTalentLevelRaw(t)
		local name = function(self, t)
			if lev == 1 then return self.T_RANDOM_ATTACK_1
			elseif lev == 2 then return self.T_RANDOM_ATTACK_2
			elseif lev == 3 then return self.T_RANDOM_ATTACK_3
			elseif lev == 4 then return self.T_RANDOM_ATTACK_4
			elseif lev == 5 then return self.T_RANDOM_ATTACK_5
			elseif lev == 6 then return self.T_RANDOM_ATTACK_6
			elseif lev == 7 then return self.T_RANDOM_ATTACK_7
			elseif lev == 8 then return self.T_RANDOM_ATTACK_8
			elseif lev == 9 then return self.T_RANDOM_ATTACK_9
			elseif lev == 10 then return self.T_RANDOM_ATTACK_10
			elseif lev == 11 then return self.T_RANDOM_ATTACK_11
			elseif lev == 12 then return self.T_RANDOM_ATTACK_12
			elseif lev == 13 then return self.T_RANDOM_ATTACK_13
			elseif lev == 14 then return self.T_RANDOM_ATTACK_14
			elseif lev == 15 then return self.T_RANDOM_ATTACK_15
			elseif lev == 16 then return self.T_RANDOM_ATTACK_16
			elseif lev == 17 then return self.T_RANDOM_ATTACK_17
			elseif lev == 18 then return self.T_RANDOM_ATTACK_18
			elseif lev == 19 then return self.T_RANDOM_ATTACK_19
			elseif lev == 20 then return self.T_RANDOM_ATTACK_20
			elseif lev == 21 then return self.T_RANDOM_ATTACK_21
			elseif lev == 22 then return self.T_RANDOM_ATTACK_22
			elseif lev == 23 then return self.T_RANDOM_ATTACK_23
			elseif lev == 24 then return self.T_RANDOM_ATTACK_24
			elseif lev == 25 then return self.T_RANDOM_ATTACK_25
			elseif lev == 26 then return self.T_RANDOM_ATTACK_26
			elseif lev == 27 then return self.T_RANDOM_ATTACK_27
			elseif lev == 28 then return self.T_RANDOM_ATTACK_28
			elseif lev == 29 then return self.T_RANDOM_ATTACK_29
			elseif lev == 30 then return self.T_RANDOM_ATTACK_30
			elseif lev == 31 then return self.T_RANDOM_ATTACK_31
			elseif lev == 32 then return self.T_RANDOM_ATTACK_32
			elseif lev == 33 then return self.T_RANDOM_ATTACK_33
			elseif lev == 34 then return self.T_RANDOM_ATTACK_34
			elseif lev == 35 then return self.T_RANDOM_ATTACK_35
			elseif lev == 36 then return self.T_RANDOM_ATTACK_36
			elseif lev == 37 then return self.T_RANDOM_ATTACK_37
			elseif lev == 38 then return self.T_RANDOM_ATTACK_38
			elseif lev == 39 then return self.T_RANDOM_ATTACK_39
			else return self.T_RANDOM_ATTACK_40 end
		end

		self:learnTalent(name(self, t), true, nil, {no_unlearn=true})

	end,
	on_unlearn = function(self, t)

		local lev = self:getTalentLevelRaw(t) + 1
		local name = function(self, t)
			if lev == 1 then return self.T_RANDOM_ATTACK_1
			elseif lev == 2 then return self.T_RANDOM_ATTACK_2
			elseif lev == 3 then return self.T_RANDOM_ATTACK_3
			elseif lev == 4 then return self.T_RANDOM_ATTACK_4
			elseif lev == 5 then return self.T_RANDOM_ATTACK_5
			elseif lev == 6 then return self.T_RANDOM_ATTACK_6
			elseif lev == 7 then return self.T_RANDOM_ATTACK_7
			elseif lev == 8 then return self.T_RANDOM_ATTACK_8
			elseif lev == 9 then return self.T_RANDOM_ATTACK_9
			elseif lev == 10 then return self.T_RANDOM_ATTACK_10
			elseif lev == 11 then return self.T_RANDOM_ATTACK_11
			elseif lev == 12 then return self.T_RANDOM_ATTACK_12
			elseif lev == 13 then return self.T_RANDOM_ATTACK_13
			elseif lev == 14 then return self.T_RANDOM_ATTACK_14
			elseif lev == 15 then return self.T_RANDOM_ATTACK_15
			elseif lev == 16 then return self.T_RANDOM_ATTACK_16
			elseif lev == 17 then return self.T_RANDOM_ATTACK_17
			elseif lev == 18 then return self.T_RANDOM_ATTACK_18
			elseif lev == 19 then return self.T_RANDOM_ATTACK_19
			elseif lev == 20 then return self.T_RANDOM_ATTACK_20
			elseif lev == 21 then return self.T_RANDOM_ATTACK_21
			elseif lev == 22 then return self.T_RANDOM_ATTACK_22
			elseif lev == 23 then return self.T_RANDOM_ATTACK_23
			elseif lev == 24 then return self.T_RANDOM_ATTACK_24
			elseif lev == 25 then return self.T_RANDOM_ATTACK_25
			elseif lev == 26 then return self.T_RANDOM_ATTACK_26
			elseif lev == 27 then return self.T_RANDOM_ATTACK_27
			elseif lev == 28 then return self.T_RANDOM_ATTACK_28
			elseif lev == 29 then return self.T_RANDOM_ATTACK_29
			elseif lev == 30 then return self.T_RANDOM_ATTACK_30
			elseif lev == 31 then return self.T_RANDOM_ATTACK_31
			elseif lev == 32 then return self.T_RANDOM_ATTACK_32
			elseif lev == 33 then return self.T_RANDOM_ATTACK_33
			elseif lev == 34 then return self.T_RANDOM_ATTACK_34
			elseif lev == 35 then return self.T_RANDOM_ATTACK_35
			elseif lev == 36 then return self.T_RANDOM_ATTACK_36
			elseif lev == 37 then return self.T_RANDOM_ATTACK_37
			elseif lev == 38 then return self.T_RANDOM_ATTACK_38
			elseif lev == 39 then return self.T_RANDOM_ATTACK_39
			else return self.T_RANDOM_ATTACK_40 end
		end

		self:unlearnTalent(name(self, t))

	end,

	info = function(self, t)
		return ([[Learn a new Thaumaturgy talent.]]):
		format()
	end,
}


-- This contains what each element does, the sound effects, particles, damage type and so on.  You can even add exotic types like poison or manaburn, though all damage is a number (not a table) right now.

physical = {name = "physical", particle = "stone_shards", trail = "earthtrail", dam = DamageType.PHYSICAL, type = "dark", sound = "talents/earth"}

arcane = {name = "arcane", particle = "bolt_arcane", trail = "arcanetrail", dam = DamageType.ARCANE, type = "manathrust", sound = "talents/arcane"}

fire = {name = "fire", particle = "bolt_fire", trail = "firetrail", dam = DamageType.FIRE, type = "flame", sound = "talents/fire"}

cold = {name = "cold", particle = "ice_shards", trail = "icetrail", dam = DamageType.COLD, type = "freeze", sound = "talents/ice"}

lightning = {name = "lightning", particle = "bolt_lightning", trail = "lightningtrail", dam = DamageType.LIGHTNING, type = "lightning_explosion", sound = "talents/lightning"}

acid = {name = "acid", particle = "bolt_acid", trail = "acidtrail", dam = DamageType.ACID, type = "acid", sound = "talents/cloud"}

nature = {name = "nature", particle = "bolt_slime", trail = "slimetrail", dam = DamageType.NATURE, type = "slime", sound = "talents/slime"}

blight = {name = "blight", particle = "bolt_slime", trail = "slimetrail", dam = DamageType.BLIGHT, type = "slime", sound = "talents/slime"}

light = {name = "light", particle = "bolt_light", trail = "lighttrail", dam = DamageType.LIGHT, type = "light", sound = "talents/flame"}

darkness = {name = "darkness", particle = "bolt_dark", trail = "darktrail", dam = DamageType.DARKNESS, type = "dark", sound = "talents/flame"}

mind = {name = "mind", particle = "bolt_fire", trail = "firetrail", dam = DamageType.MIND, type = "mind", sound = "talents/spell_generic"}

temporal = {name = "temporal", particle = "temporal_bolt", trail = "lighttrail", dam = DamageType.TEMPORAL, type = "light", sound = "talents/spell_generic2"}

element = function (self, t)

	local element 

	if self.thaum[t.number] == 1 then element = physical
	elseif self.thaum[t.number] == 2 then element = arcane
	elseif self.thaum[t.number] == 3 then element = fire
	elseif self.thaum[t.number] == 4 then element = cold
	elseif self.thaum[t.number] == 5 then element = lightning
	elseif self.thaum[t.number] == 6 then element = acid
	elseif self.thaum[t.number] == 7 then element = nature
	elseif self.thaum[t.number] == 8 then element = blight
	elseif self.thaum[t.number] == 9 then element = light
	elseif self.thaum[t.number] == 10 then element = darkness
	elseif self.thaum[t.number] == 11 then element = mind
	else element = temporal end

	return element
end

newAttack = function(t)
	for i = 1, 40 do
		local tt = table.clone(t)
		tt.short_name = tt.name:upper():gsub("[ ]", "_").."_"..i
		tt.display_name = tt.name.."_"..i
		tt.number = i
		newTalent(tt)
	end
end

-- The generic talent.  

newAttack{
	name = "Random Attack",
	type = {"spell/thaumaturgy-attacks",1},
	points = 1,
	mana = 12,
	cooldown = 3,
	tactical = { ATTACK = 2 },
	range = 10,
	proj_speed = 20,
	requires_target = true,
	target = function (self, t)

		local bolt = {name = "bolt", type="bolt", range=self:getTalentRange(t), talent=t}

		local beam = {name = "beam", type="beam", range=self:getTalentRange(t), talent=t}

		local cone = {name = "cone", type="cone", radius=self:getTalentRange(t), range=0, selffire=false, talent=t}

		local ball = {name = "ball", type="ball", range=self:getTalentRange(t), radius=2, selffire=false, talent=t}

		local shape 

		if self.thaumShape[t.number] == 1 then shape = bolt
		elseif self.thaumShape[t.number] == 2 then shape = beam
		elseif self.thaumShape[t.number] == 3 then shape = cone
		else shape = ball end
	
		return shape end,

	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 25, 250) * (0.9 + 0.1 * t.number) end,
	action = function (self, t)

		-- gets things like particle effects, sounds, and damage type
		local element = element(self, t)

		local tg = self:getTalentTarget(t)

		-- tg.name is only used for this.  It is used instead of "type" to allow things like multi-bolts or self-centered balls.
		if tg.name == "bolt" then

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

			tg.display = {particle=element.particle, trail=element.trail}

			self:projectile(tg, x, y, element.dam, self:spellCrit(t.getDamage(self, t)),{type=element.type}) 

			game:playSoundNear(self, element.sound)

			return true

		elseif tg.name == "beam" then

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

			self:project(tg, x, y, element.dam, self:spellCrit(t.getDamage(self, t)))

			local _ _, x, y = self:canProject(tg, x, y)

			game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "light_beam", {tx=x-self.x, ty=y-self.y})

			game:playSoundNear(self, element.sound)

			return true

		elseif tg.name == "cone" then 

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

			self:project(tg, x, y, element.dam, self:spellCrit(t.getDamage(self, t)))

			game.level.map:particleEmitter(self.x, self.y, tg.radius, "breath_cold", {radius=tg.radius, tx=x-self.x, ty=y-self.y})

			game:playSoundNear(self, element.sound)

			return true

		else

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

			self:project(tg, x, y, element.dam, self:spellCrit(t.getDamage(self, t)), {type=element.type})

			game:playSoundNear(self, element.sound)

			return true
		end
	end,
	info = function(self, t)
		local tg = self:getTalentTarget(t)

		local damage = t.getDamage(self, t)
		local element = element(self, t)
		return ([[Conjures up a %s of %s doing %0.2f damage.
		The damage will increase with your Spellpower.]]):
		format(tg.name, element.name, damDesc(self, element.dam, damage))
	end,
}
Some of my tools for helping make talents:
Melee Talent Creator
Annotated Talent Code (incomplete)

Zizzo
Sher'Tul Godslayer
Posts: 2517
Joined: Thu Jan 23, 2003 8:13 pm
Location: A shallow water area south of Bree
Contact:

Re: Porting ToME2 to the T4 engine

#156 Post by Zizzo »

Hmm, so if I'm reading this right, by implementing your random spells as talents, you're effectively reusing the existing Use Talents dialog and hotkey infrastructure to make the spells available to the player. If we require the player to hotkey spells they expect to use frequently, that would reduce the problem of spell overload. Point taken on wanting to be able to group spells by damage type/area-of-effect type/etc. I might be able to work with something like that...
"Blessed are the yeeks, for they shall inherit Arda..."

Crim, The Red Thunder
Sher'Tul Godslayer
Posts: 2000
Joined: Fri May 07, 2004 8:26 pm
Location: Nahgharash

Re: Porting ToME2 to the T4 engine

#157 Post by Crim, The Red Thunder »

My old macro set for T2 had my 100 thaumaturgy spells grouped 10 at a time onto f1, through f10, which was enough to give me easy access to everything with minimal keystrokes. We probably don't want to micromanage 100 talents onto and off of the toolbar through the talents menu, so a thaumturgy list that would let us link most frequently used spells to the toolbar itself, as well as a 'use thaumturgy' that could pull by groups for what we wanted to cast/put on toolbar, might be the cleanest way to handle thaumatrgy. Though admittedly, it'd be a royal pain to code.

Also, any updates on progress?

Also, join IRC?
Currently playing under the name Aura of the Dawn 4 down, 227 to go!
Proud author of Orc Pit Restoration Project, Faction Allies, Dwarven Adventurer addons
SadistSquirrel wrote:DarkGod has two arms, one with an opened hand, one with a closed fist. You got the fist.

Zizzo
Sher'Tul Godslayer
Posts: 2517
Joined: Thu Jan 23, 2003 8:13 pm
Location: A shallow water area south of Bree
Contact:

Re: Porting ToME2 to the T4 engine

#158 Post by Zizzo »

Crim, The Red Thunder wrote:My old macro set for T2 had my 100 thaumaturgy spells grouped 10 at a time onto f1, through f10, which was enough to give me easy access to everything with minimal keystrokes. We probably don't want to micromanage 100 talents onto and off of the toolbar through the talents menu, so a thaumturgy list that would let us link most frequently used spells to the toolbar itself, as well as a 'use thaumturgy' that could pull by groups for what we wanted to cast/put on toolbar, might be the cleanest way to handle thaumatrgy. Though admittedly, it'd be a royal pain to code.
To quote a certain archeologist, "Spoilers..." :mrgreen:
Crim, The Red Thunder wrote:Also, any updates on progress?
Got some stuff that I should be able to put out. I've started using some of the new utility methods introduced by the 1.3.0 engine, though, so I can't release until that's out; We Apologize for the Delay.™
"Blessed are the yeeks, for they shall inherit Arda..."

Zizzo
Sher'Tul Godslayer
Posts: 2517
Joined: Thu Jan 23, 2003 8:13 pm
Location: A shallow water area south of Bree
Contact:

Re: Porting ToME2 to the T4 engine

#159 Post by Zizzo »

I swear, every time I think I'm ready to release, I find another bug. I think I've got all the obvious ones; you get to tell me where I'm wrong... :P :oops:

Release 0.1.1 "T.P.S. Character Sheets"

New in this release:
  • Thaumaturgy!
    thaum2.png
    thaum2.png (34.73 KiB) Viewed 16086 times
    Thaumaturgy spells can be seen in the "Use Thaumaturgy" dialog (bound to <Ctrl-T> by default), from which you can cast the spells, rename them for your convenience, or bind them to hotkeys. The spell list can be grouped by page number, area of effect or damage type.
  • Some improvements to dungeon generation, notably handling of special levels like Deathwatch and Orc Town and creation of stairs to branch dungeons like Mount Doom and the Small Water Cave. [Actually, this part isn't terribly well tested... :oops: ]
  • A preliminary character sheet dialog (bound to 'C' by default), designed to mimic T2's display. This includes some of the "fluff" data from T2's character sheet like age/height/weight/social status, plus a new "Background" tab in the character creation dialog with an editor that I'm probably more proud of than I should be... :oops: Also has functionality to dump the character sheet to a file. Still a few bits missing from this.
  • An experimental reimplementation of T2's "Modify visuals" handling.
    visuals2.png
    visuals2.png (28.68 KiB) Viewed 16086 times
    I discovered that the dialog UI that T4 uses for selecting a custom character tile could be turned to my own nefarious ends; :wink: so I made an ASCII visuals dialog out of it. Visuals can be set from the new 'Modify ASCII visuals for terrain/objects/monsters' game options, or more conveniently by right-clicking on the thing you want to modify and choosing 'Modify visuals'. Notes:
    • The default engine font apparently doesn't have any of the fancy Unicode block or line characters that would be nice to use for various wall grids. I may try to include a more complete font in the next release. We Apologize for the Inconvenience.™
    • As noted, this is very experimental. Since there's apparently no central clearinghouse for what characters to use for what entities, I've had to pull some really dirty tricks to modify objects/monsters/terrain in place, and I may well have missed some spots.
  • Oh, did I mention we have a right-click menu now? :wink: Currently it has a "Move to location" option, various "Modify visuals" options depending on what's in the grid, and some debugging options if you have cheat mode turned on.
  • Implement critical hits, including bonuses from equipment and related skills.
  • Implement race powers for Kobold, Dark-Elf, Gnome, Orc, Troll, Petty-Dwarf, Hobbit and (partly) Deathmold, and part of the Rohan-Knight class powers.
  • Implement the Recall spell and the weapon-projection effects of the Demon Blade and Water Bite spells.
  • Music spells should probably use Charisma instead of Intelligence. Just sayin'. :oops:
  • Better handling of trap detection, including new game option 'Stop running when leaving trap-detected area'.
  • Implement Potions of Self Knowledge (mostly) and *Enlightment* (partially) and Scrolls of Monster Confusion.
  • Spell-power bonuses from wielded equipment and the Udun skill are now supported, as well as actually showing the Udun skill to Melkor followers.
  • Add descriptive texts to assorted potions, scrolls and timed effects.
  • Add the Arda calendar data for display purposes and the character dump.
As always, the .team file for the release is available from my site, along with the Subversion repo and WebSVN front-end thereto.
"Blessed are the yeeks, for they shall inherit Arda..."

Zireael
Archmage
Posts: 449
Joined: Tue Jun 18, 2013 7:24 pm

Re: Porting ToME2 to the T4 engine

#160 Post by Zireael »

There's at least one Lua error in the character sheet.

Line 521 is missing a comma before kills.

s3th
Posts: 1
Joined: Thu Mar 19, 2015 11:49 am

Re: Porting ToME2 to the T4 engine

#161 Post by s3th »

i love the classic ToME, thanks for the amazing work!
btw, after the update, i get an error everytime i attack something... is it just me or is some sort of bug?
thanks again anyway and keep up the good work! =)

Crim, The Red Thunder
Sher'Tul Godslayer
Posts: 2000
Joined: Fri May 07, 2004 8:26 pm
Location: Nahgharash

Re: Porting ToME2 to the T4 engine

#162 Post by Crim, The Red Thunder »

Hitting Ctrl T for thaumaturgy flat crashed the t-engine entirely. No error in log.
Currently playing under the name Aura of the Dawn 4 down, 227 to go!
Proud author of Orc Pit Restoration Project, Faction Allies, Dwarven Adventurer addons
SadistSquirrel wrote:DarkGod has two arms, one with an opened hand, one with a closed fist. You got the fist.

Zizzo
Sher'Tul Godslayer
Posts: 2517
Joined: Thu Jan 23, 2003 8:13 pm
Location: A shallow water area south of Bree
Contact:

Re: Porting ToME2 to the T4 engine

#163 Post by Zizzo »

I swear, I go off and do a little addon dev work and you guys release a whole new engine version out from under me... :wink:
Crim, The Red Thunder wrote:Hitting Ctrl T for thaumaturgy flat crashed the t-engine entirely. No error in log.
*blink* ...what. Is this reproducable? What was your Thaumaturgy skill level at the time?

And with that hardly auspicious lead-in, :oops: I give you:

Release 0.1.2 "A Long Way to the Southwest of the Previous Version"

This is mostly a bugfix release, :oops: but there are a few new bits:
  • Relic quests! Now, I've taken a small deviation from the source material, that I want feedback on: unlike base T2, I'm predetermining which level in the quest zone will have the relic piece on it --- which means you can't fail the quest by hitting a trap door or getting teleported off the level, but neither can you just bounce on the top level of the temple. Thoughts?
  • Pursuant to the preceding, empty arena levels. Here again, I'm breaking with T2, but less so: I'm restoring the v2.2.x behavior that arena levels will be lit 80% of the time.
  • A preliminary implementation of pseudo-ID. Here, by contrast, I'm following some of the (relatively) newer design decisions of v2.3.9: pseudo-ID kicks in immediately when you pick up anything off the ground, and all players get {average} pseudo-id on everything.
  • Recharging items can now be configured to notify on recharge, a la T2's {!!} inscription. Not via an inscription, though, which aren't supported yet; it's on the use-item dialog. Rods aren't implemented yet, so this is only currently useful for junkarts, but it's there.
  • In the Game Options menu, the <Tab> key will now cycle between option groups, for your convenience.
  • I've borrowed T4's BigNews module for announcing quests (I'm pretty sure this is kosher; T2 and T4 are both GPL). Yea/nay on this?
  • I've also borrowed T4's caps-lock-to-scroll mode, useful for exploring those Potion-of-Enlightenment'd relic quests levels. ;) Right-clicking on the minimap to scroll was also tempting, but I couldn't make head or tail of how to do it.
  • Added a new debug action to the right-click map menu: Teleport to location.
  • And assorted bugfixes:
    • Okay, I think the character sheet dialog actually works now... :oops:
    • I *swear* the visuals dialog used to work... :oops: :oops: I have at least added a new feature, borrowed from T4s create-item debug dialog: typing a letter will jump to the next entity in the list that begins with that letter. (In retrospect, that might be more helpful if the entity list were sorted...).
    • Seriously, I think my level generator was literally putting stairs in the middle of walls... :oops: :oops: :oops:
    • Object descriptions should now list conveyed resistances properly.
As always, the .team file for the release is available from my site, along with the Subversion repo and WebSVN front-end thereto.
"Blessed are the yeeks, for they shall inherit Arda..."

Zizzo
Sher'Tul Godslayer
Posts: 2517
Joined: Thu Jan 23, 2003 8:13 pm
Location: A shallow water area south of Bree
Contact:

Re: Porting ToME2 to the T4 engine

#164 Post by Zizzo »

Now, as for what comes next (unless anyone has any particular requests, as always), I've been playing one of my Symbiosis-using T2 characters recently, and it's been giving me ideas. :wink: With the T4 engine to work with, we could do all sorts of interesting things, like actually keeping the full never-moving monster data around in the wearable "symbiote" object, and potentially letting it gain experience while it's worn. We could even possibly have it operate semi-autonomously, in the style of T4 Mindslayers' telekinetically wielded weapon. Thoughts?
"Blessed are the yeeks, for they shall inherit Arda..."

Crim, The Red Thunder
Sher'Tul Godslayer
Posts: 2000
Joined: Fri May 07, 2004 8:26 pm
Location: Nahgharash

Re: Porting ToME2 to the T4 engine

#165 Post by Crim, The Red Thunder »

Well now, symbiosis was something I hadn't thought of in context with the T4 engine. interesting things indeed could be done with that. Hell, even resources for major/minor powers coming off both you and the symbiote, to prevent summonspam. (So casting summon dragons off a greater draconic Q, for instance, would drain X value off your resource, and Y value off your symbiote, adjusted accordingly for monster resource levels/regen values, and player access to greater regen means.)
Currently playing under the name Aura of the Dawn 4 down, 227 to go!
Proud author of Orc Pit Restoration Project, Faction Allies, Dwarven Adventurer addons
SadistSquirrel wrote:DarkGod has two arms, one with an opened hand, one with a closed fist. You got the fist.

Post Reply