Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  
Pages: 1 ... 6 7 [8] 9 10 ... 17

Author Topic: [DROW] Discussion and Suggestions (v0.9)  (Read 20929 times)

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #105 on: June 20, 2013, 08:15:52 am »

Umber Hulks are already in the game, if you want to use them :)
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

Putnam

  • Bay Watcher
  • DAT WIZARD
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #106 on: June 23, 2013, 02:59:29 am »

Code: [Select]
-- Magic for the magic god, I guess.

--[[
Magic is, in the Drow Underdark mod, a bit different from what you'd be used to.

As usual, there are experience points and levels. These are kept track of with this script (drow/magic.lua). The script gives all drow on the map a second soul; this is where the information is stored. A reaction is used to start a drow on his or her journey through magic; this reaction assigns the drow a particular school.

Yes, schools. Schools are probably a familiar concept to you; however, the schools in Drow Underdark are not like many other schools.

First, you have divine magic. This is magic that uses the favor of the gods to work. This appears entirely in the form of reactions and won't be covered here; it'll use the "Priest" skill, a renamed strand extractor skill. Lolth will be the primary goddess prayed to.

Second, you have body magic, which has two sub-schools: destructive body magic and constructive body magic. Destructive body magic is such things as slowing down the opponent, decreasing his, her or its physical attributes, causing nausea, and, at higher levels, outright draining all of their blood. Constructive body magic is the healing of wounds, buffing of abilities, speeding up, the perfect inverse of destructive body magic. You want your healers to be constructive body mages.

Third, you have soul magic, which has the same two sub-schools. Changing mental attributes, skill rolls and, at higher levels, the skills themselves permenantly.

Fourth, you have sorcery. This is things like fire magic (drow don't really care for the above-ground, so burning it all down is just fine by them), paralysis, shooting webs, and other such generic things.

All of these things start out weak, but grow very strong over time. A long time. Unlike battle, magic is learned not by experience, but by study; Drow will study in their free time, gaining experience points while idle. You may notice a bit of slowdown every once in a while; this is an unavoidable consequence. I'll try to make it as fast as possible.
--]]

local function findAllMagicInorganics()
local inorganics =
{
sorcery = 0,
destructive body = 0,
destructive soul = 0,
constructive body = 0,
constructive soul = 0
}
    for matID,material in ipairs(df.global.world.raws.inorganics) do
        if string.find(material.id,"DFHACK_SORCERY_DROWFORT") then inorganics.sorcery = matID end
if string.find(material.id,"DFHACK_BODY_DESTRUCTIVE_DROWFORT") then inorganics.body_destructive = matID end
if string.find(material.id,"DFHACK_SOUL_DESTRUCTIVE_DROWFORT") then inorganics.soul_destructive = matID end
if string.find(material.id,"DFHACK_BODY_CONSTRUCTIVE_DROWFORT") then inorganics.body_constructive = matID end
if string.find(material.id,"DFHACK_SOUL_CONSTRUCTIVE_DROWFORT") then inorganics.soul_constructive = matID end
    end
return inorganics
end

local function alreadyHasSyndrome(unit,syn_id)
    for _,syndrome in ipairs(unit.syndromes.active) do
        if syndrome.type == syn_id then return true end
    end
    return false
end

local function assignSyndrome(target,syn_id) --taken straight from here, but edited so I can understand it better: https://gist.github.com/warmist/4061959/. Also implemented expwnent's changes for compatibility with syndromeTrigger.
    if target==nil then
        return nil
    end
    if alreadyHasSyndrome(target,syn_id) then
        return true
    end
    local newSyndrome=df.unit_syndrome:new()
    local target_syndrome=df.syndrome.find(syn_id)
    newSyndrome.type=target_syndrome.id
    newSyndrome.year=df.global.cur_year
    newSyndrome.year_time=df.global.cur_year_tick
    newSyndrome.ticks=1
    newSyndrome.unk1=1
    for k,v in ipairs(target_syndrome.ce) do
        local sympt=df.unit_syndrome.T_symptoms:new()
        sympt.ticks=1
        sympt.flags=2
        newSyndrome.symptoms:insert("#",sympt)
    end
    target.syndromes.active:insert("#",newSyndrome)
    return true
end

local function unitHasMagicSkill(unit)
if #unit.status.souls>1 then return true else return false end
end

local function iterateSkill(unit)
local realSoul = unit.status.current_soul
local fakeSoul = unit.status.souls[1]
local initialExperienceIncrease = 100
local mentalAttributeModifier = 0
for k,attribute in ipairs(realsoul.mental_attrs) do
if not(k == 9 or k == 11 or k == 12) then
mentalAttributeModifier = mentalAttributeModifier+(attribute.value/1000)
end
end
mentalAttributeModifier = mentalAttributeModifier/10
local personalityModifier=0
for k,attribute in ipairs(realSoul.traits) do
if k == 8 or k == 9 or k == 11 or k == 12 or k == 14 or k == 15 or (k>22 and k<29) then
personalityModifier = personalityModifier+(attribute/50)
end
end
personalityModifier = personalityModifier/12
finalExperienceIncrease = math.floor(initialExperienceIncrease*personalityModifier*mentalAttributeModifier)
fakeSoul.unk1=fakeSoul.unk1+finalExperienceIncrease--unk1 is being used as an experience points counter; the second soul shouldn't be checked for anything at this point at all, so there's no need to worry about it, I should hope.
local experiencePoints = fakeSoul.unk1
fakeSoul.unk2=math.floor((1/10)*math.sqrt(2*experiencePoints+9025)-(19/2))
end

magicInorganics = findAllMagicInorganics()

local function assignSpells(unit)
local school = df.global.world.raws.inorganics[magicInorganics[unit.status.souls[1].name.first_name]].material --jebus
for i=0,unit.status.souls[1].unk2 do --unk2 is level of magic skill
assignSyndrome(unit,material.syndrome[i].id)
end
end

local function checkAllUnitsForIdleMagicExperienceAndGiveThemMagicSpells() --long-ass function name
local delayCounter = 1
for k,unit in ipairs(df.global.world.units.active) do
if unitHasMagicSkill(unit) then
dfhack.timeout(delayCounter,"ticks",function() iterateSkill(unit) end)
dfhack.timeout(delayCounter+1,"ticks",function() assignSpells(unit) end)
delayCounter = delayCounter+2
end
end
end

dfhack.onStateChange.drowMagic = function(code)
    if code==SC_WORLD_LOADED then
        dfhack.timeout(1,'months',mainloop) --disables if map/world is unloaded automatically
    end
end

local function mainloop()
checkAllUnitsForIdleMagicExperienceAndGiveThemMagicSpells()
dfhack.timeout(1,'months',mainloop) --a check every "eight hours" in-game; eight hours seems like a good "study" interval.
end

AHAHAHAHAHAHAHA

Code: [Select]
--For autosyndrome.

local args = {...}

local function createFakeSoul(unit)
unit.status.souls:insert('#',{new = df.unit_soul})
end

local function setSchool(unit,school)
unit.status.souls[1].name.first_name = school
end

local unitToWorkOn = df.global.world.units.all[args[1]]

local magicSchool = args[2]

createFakeSoul(unitToWorkOn)

setSchool(unitToWorkOn,magicSchool)

Pharaun

  • Bay Watcher
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #107 on: June 25, 2013, 09:12:31 pm »

Few ideas:
Top-tier weapons and armors that degrade until destruction in sunlight.
Restrict divine magic to females.*
Restrict traditional magic to males.**
Sacrificing things to the Spider Queen in return for divine intervention with extreme penalties for doing it frivolously.
Noble drow all belong to a house. Only nobles are allowed to bear the surname of the house. Only those with surnames may be designated as nobles.
Or, perhaps the fortress is a single drow house?
Draegloth? They're made when a high priestess and a demon shiggydiggy. They're generally male, but considered a sign of Lloth's favor. Oh, I should mention that they have four arms.
Slavery. Drow'll enslave damn near anything. Being sadistic, they really enjoy enslaving defeated rivals. You know, to humiliate them before having them killed.
Rothe and mushrooms. Rothe are basically just shaggy cave cows.
Spiders everywhere. Also driders, which are drow/spider hybrids. They're not well liked, generally because the driderfication process is used as a punishment.
Workshops from which you may send forth raids and slavers. Drow really hate elves. A lot. In the grimmest and darkest of ways.
Classic DnD magic with fireballs and lightning bolts.
Drow don't do menial labor like hauling, farming, or building and would much rather do artsy stuff like carve elf bones, engrave images of torture, and kill their sisters.
Lowborn drow can cook or drive farm slaves.
They hate everything not drow, but do trade with anyone insane enough to come to their markets. Except elves.

*Generally because female drow don't want males getting much power. Lloth has made a few exceptions, though.
**Because becoming a priestess is a socially superior path and the wizard schools are controlled by old, angry wizards. Again, there are exceptions.

Image semi-related, though not particularly accurate.


Edited:
So we're talking DnD Drow, and not the older works Salvador based them on?  For the most part, everything is the same or similar to the original Drow save for the spider worship.  Beauty and the perfection of the Drow form was the thing Drow strove for.  Disfigured Drow were generally slain.

Very much this. I don't really like pulling so much from "the Drizzt books", but Salvatore really catapulted them into popularity, even though his later works are awful and 4e is just a mess. They're actually present in quite a few settings, but they don't get changed up much. I think they worship a scorpion god in Dark Sun and live in a jungle in Eberron. The core concepts always boil down to just really evil elves. A little dark'n'edgy for my tastes most of the time, but there's some pretty lighthearted literature out there. Read Daughter of the Drow if you get a chance.
« Last Edit: June 25, 2013, 10:20:07 pm by Pharaun »
Logged

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #108 on: June 25, 2013, 10:01:16 pm »

Quote
Magic is, in the Drow Underdark mod, a bit different from what you'd be used to.

As usual, there are experience points and levels. These are kept track of with this script (drow/magic.lua). The script gives all drow on the map a second soul; this is where the information is stored. A reaction is used to start a drow on his or her journey through magic; this reaction assigns the drow a particular school.

Yes, schools. Schools are probably a familiar concept to you; however, the schools in Drow Underdark are not like many other schools.

First, you have divine magic. This is magic that uses the favor of the gods to work. This appears entirely in the form of reactions and won't be covered here; it'll use the "Priest" skill, a renamed strand extractor skill. Lolth will be the primary goddess prayed to.

Second, you have body magic, which has two sub-schools: destructive body magic and constructive body magic. Destructive body magic is such things as slowing down the opponent, decreasing his, her or its physical attributes, causing nausea, and, at higher levels, outright draining all of their blood. Constructive body magic is the healing of wounds, buffing of abilities, speeding up, the perfect inverse of destructive body magic. You want your healers to be constructive body mages.

Third, you have soul magic, which has the same two sub-schools. Changing mental attributes, skill rolls and, at higher levels, the skills themselves permenantly.

Fourth, you have sorcery. This is things like fire magic (drow don't really care for the above-ground, so burning it all down is just fine by them), paralysis, shooting webs, and other such generic things.

All of these things start out weak, but grow very strong over time. A long time. Unlike battle, magic is learned not by experience, but by study; Drow will study in their free time, gaining experience points while idle. You may notice a bit of slowdown every once in a while; this is an unavoidable consequence. I'll try to make it as fast as possible.
-

Sounds awesome :) That is absolutely new. How long is "a long time"? 1 year? 10 years? Is there a max?
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

Putnam

  • Bay Watcher
  • DAT WIZARD
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #109 on: June 25, 2013, 11:42:31 pm »

Sounds awesome :) That is absolutely new. How long is "a long time"? 1 year? 10 years? Is there a max?

Next DFHack release, hehe. Year? Definitely not. Months? Maybe, not likely. Month? probably.

Pharaun:

1. Magic limits: very limiting, especially since divine magic is reaction-based and I can't really get one caste to not be able to do reactions.

2. Sacrifices to Lolth: of course.

3. Noble House: considering recent stuff, that can definitely be arranged.

4. Draegloth: not really viable.

5. Slavery: oh, definitely, if I get an opportunity to.

6. Rothe: yeah.

7. Spiders: crawling all over the place ._.

8. Workshops: already in, so not difficult to implement; why, I already have!

9. Classic DnD magic: that's what the Sorcery tree is, for the most part, hehe.

10. Menial labor: that would require an even larger setup time than the mod currently has, which is a big nono.

11. Lowborn restrictions: also difficult to do. I'd like highly enforced grimdark evilness, but most of it is impossible to implement.

12. Hatred: 'course. Their ethics should make them very hostile; oh, yeah, not to mention the fact that they have [CANNOT_UNDEAD], which makes necromancers and their undead all buddy-buddy. (for now)

kamikazi1231

  • Bay Watcher
  • Meddler of Raws
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #110 on: June 26, 2013, 12:58:39 am »

Mithril is obviously the top choice for elves. Would it be possible to have mithril act like unstable warp stone for drow miners?
Logged

Putnam

  • Bay Watcher
  • DAT WIZARD
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #111 on: June 26, 2013, 01:08:12 am »

Yes.

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #112 on: June 26, 2013, 02:15:28 am »

Putnam, for the building designs I would suggest the new tileset I added. With the 2 totems, the spider, the pentagrams, the skeleton and demon/nightcreature tiles, it should offer a lot more for drow/evil design.

Kurik Amudnil also wrote a script that lets you bribe caravan guards, they will join your fortress. Boltgun (succubus fortress) is also trying for a script that converts captured invaders to join, modifiyng the makeown script. Maybe any of this helps. I certainly want to add the "bribe/hire caravan guard" to dwarf mode, either the tavern or the embassy.

The script currently runs by reaction, and targets any guard nearby the building, so the workshop has to be build near the trade depot, and the reaction run when a dwarven caravan guard is nearby.

After reading up on draegloths: That seems possible. A rare creature born from a demon and a drow-priestess, that has incredible powers. About 1 in 10 years. Why not add a rare drow caste, with steel skin, 2 extra-claw arms and super attributes, natural fighting skills, called draegloth, with a very low pop-ratio. Maybe so that 1 in 100 drow is born a draegloth, and with no way to customly create them. I think having them this rare would make people value them quite a bit.
« Last Edit: June 26, 2013, 02:22:58 am by Meph »
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

Putnam

  • Bay Watcher
  • DAT WIZARD
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #113 on: June 26, 2013, 02:38:12 am »

1 in 100 seems too common for me... 1 in 200, maybe. I would want a max of one per fort.

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #114 on: June 26, 2013, 04:12:45 am »

I dont know how many people do manage to get 200 citizens. Many people play with way less, even down to 50 max, because of FPS reasons. Draegloths could have an interaction to kill all other Draegloths, to ensure only one at a time. ;) Although thats probably not DnD lore friendly. ^^

It could certainly done by reaction/interaction. Make the pop_ratio so that the have a 0,000001 chance of naturally appearing, and make a reaction to transform a priestress/priest/some dude into the forts draegloth. It is transformed using a truetransform interaction that has "CANNOT_HAVE_SYNDROME_CLASS" and it applies this syndrome class to all other drow in the fort. (who again get the interaction to add the syndromeclass to all new migrants) This way there is only one Draegloth you can make, per fort. (except for the odd chance of a natural one appearing). I imagine it like this: "Our military squad has failed, the beast is too strong... send the Draegloth."

Anyway, just random ideas. Its the first time I heard about them, just thought the google images looked awesome. ;)
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

Repseki

  • Bay Watcher
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #115 on: June 26, 2013, 06:20:56 am »

Going by Google image search they are something close to a mix between a Werewolf looking creature and the demon guy/race with extra arms from Mortal Combat, right?

That's unique. Now if someone could work out a way to make duel wielding weapons an effective option.

"A Vile force of Darkness is Attacking!!"... "The drawbridge raises slowly behind the armor clad Draegloth soldier and his four masterpiece Bloodsteel Glaives."
Logged

Meph

  • Bay Watcher
    • View Profile
    • worldbicyclist
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #116 on: June 26, 2013, 06:53:22 am »

I thought mostly of this one:
Spoiler (click to show/hide)
Logged
::: ☼Meph Tileset☼☼Map Tileset☼- 32x graphic sets with TWBT :::
::: ☼MASTERWORK DF☼ - A comprehensive mod pack now on Patreon - 250.000+ downloads and counting :::
::: WorldBicyclist.com - Follow my bike tours around the world - 148 countries visited :::

Gamerlord

  • Bay Watcher
  • Novice GM
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #117 on: June 26, 2013, 07:28:45 am »

I thought mostly of this one:
Spoiler (click to show/hide)
Nice.

Repseki

  • Bay Watcher
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #118 on: June 26, 2013, 07:36:06 am »

Yeah, I saw that one. The one that probably made me think were-wolfy head was probably this one.

Spoiler (click to show/hide)
Logged

Putnam

  • Bay Watcher
  • DAT WIZARD
    • View Profile
Re: [DROW] Discussion and Suggestions (v0.1)
« Reply #119 on: June 28, 2013, 04:05:41 am »

Code: [Select]
local dialog = require('gui.dialogs')
function transform(target,race,caste,length)
    if target==nil then
        qerror("Not a valid target")
    end
local defaultRace = target.enemy.normal_race
local defaultCaste = target.enemy.normal_caste
target.enemy.normal_race = race --that's it???
    target.enemy.normal_caste = caste; --that's it!
dfhack.timeout(length,'ticks',function() target.enemy.normal_race = defaultRace target.enemy.normal_caste = defaultCaste end)
end

function selectCreature(unitID,length) --taken straight from here, but edited so I can understand it better: https://gist.github.com/warmist/4061959/... again. Also edited for syndromeTrigger, but in a completely different way.
    local creatures=df.global.world.raws.creatures.all
    local tbl={}
    local tunit=df.global.world.units.all[unitID]
    for cr_k,creature in ipairs(creatures) do
for ca_k,caste in ipairs(creature.caste) do
local name=caste.caste_name[0]
if name=="" then name="?" end
table.insert(tbl,{name,nil,cr_k,ca_k})
end
    end
    local f=function(name,C)
        transform(tunit,C[3],C[4],length)
    end
table.sort(tbl,function(a,b) return a[1]<b[1] end)
    dialog.showListPrompt("Creature Selection","Choose creature:",COLOR_WHITE,tbl,f)
end

local args = {...}
selectCreature(tonumber(arg[1]),arg[2])

This script takes the ID of a creature and allows you to select a creature to transform it into out of any creature in the game, which lasts two days. I should probably change that to account for if you're playing Adventure mode.

*works on that*

Anyway, it's amazing It works with autosyndrome as-is, but I would rather it not be implemented anywhere 'till I officially release it.

EDIT: officially released it :V added a way to set length. It works like this (using syndromeTrigger syntax as an example):

Code: [Select]
[INTERACTION:SHAPECHANGE_DROW]
[I_SOURCE:CREATURE_ACTION]
[I_TARGET:A:CREATURE]
[IT_LOCATION:CONTEXT_CREATURE]
[IT_CANNOT_TARGET_IF_ALREADY_AFFECTED]
[I_EFFECT:ADD_SYNDROME]
[IE_TARGET:A]
[IE_IMMEDIATE]
[SYNDROME]
[SYN_CLASS:\COMMAND] syndromeTrigger command begins here
[SYN_CLASS:drow/shapechange][SYN_CLASS:\UNIT_ID][SYN_CLASS:2400] trueTransform could be more easily used for all of Meph's purposes, probably, but the ability to choose the creature to transform to from a list of all of them is nice
« Last Edit: June 28, 2013, 04:25:35 am by Putnam »
Logged
Pages: 1 ... 6 7 [8] 9 10 ... 17