Porting ToME2 to the T4 engine
Moderator: Moderator
Re: Porting ToME2 to the T4 engine
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?
- 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?
Re: Porting ToME2 to the T4 engine
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..
How sweet would that be I thought..
Stronk is a potent combatant with a terrifying appearance.
-
- 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
Okay, I should probably know better than this,
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...

This release also implements factions, as discussed earlier. Apart from the default Players and Enemies factions, I broke stuff out into:
Other minor changes:

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


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.
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.
"Blessed are the yeeks, for they shall inherit Arda..."
-
- 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
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?].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?
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..."
Re: Porting ToME2 to the T4 engine
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.
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,
}
-
- 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
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..."
-
- Sher'Tul Godslayer
- Posts: 2000
- Joined: Fri May 07, 2004 8:26 pm
- Location: Nahgharash
Re: Porting ToME2 to the T4 engine
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?
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
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.
-
- 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
To quote a certain archeologist, "Spoilers..."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.

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.™Crim, The Red Thunder wrote:Also, any updates on progress?
"Blessed are the yeeks, for they shall inherit Arda..."
-
- 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
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...
Release 0.1.1 "T.P.S. Character Sheets"
New in this release:


Release 0.1.1 "T.P.S. Character Sheets"
New in this release:
- Thaumaturgy! 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...
]
- 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...
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.
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.
I discovered that the dialog UI that T4 uses for selecting a custom character tile could be turned to my own nefarious ends; - Oh, did I mention we have a right-click menu now?
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'.
- 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.
"Blessed are the yeeks, for they shall inherit Arda..."
Re: Porting ToME2 to the T4 engine
There's at least one Lua error in the character sheet.
Line 521 is missing a comma before kills.
Line 521 is missing a comma before kills.
Re: Porting ToME2 to the T4 engine
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! =)
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! =)
-
- Sher'Tul Godslayer
- Posts: 2000
- Joined: Fri May 07, 2004 8:26 pm
- Location: Nahgharash
Re: Porting ToME2 to the T4 engine
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
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.
-
- 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
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...
And with that hardly auspicious lead-in,
I give you:
Release 0.1.2 "A Long Way to the Southwest of the Previous Version"
This is mostly a bugfix release,
but there are a few new bits:

*blink* ...what. Is this reproducable? What was your Thaumaturgy skill level at the time?Crim, The Red Thunder wrote:Hitting Ctrl T for thaumaturgy flat crashed the t-engine entirely. No error in log.
And with that hardly auspicious lead-in,

Release 0.1.2 "A Long Way to the Southwest of the Previous Version"
This is mostly a bugfix release,

- 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...
- I *swear* the visuals dialog used to work...
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...
- Object descriptions should now list conveyed resistances properly.
- Okay, I think the character sheet dialog actually works now...
"Blessed are the yeeks, for they shall inherit Arda..."
-
- 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
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.
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..."
-
- Sher'Tul Godslayer
- Posts: 2000
- Joined: Fri May 07, 2004 8:26 pm
- Location: Nahgharash
Re: Porting ToME2 to the T4 engine
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
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.