Developers Please Expand The Modding

Discussion in 'Suggestions' started by 00face, May 30, 2013.

?

Would you like to a mod support related update for Dungeons of Dredmor?

Poll closed Jun 29, 2013.
  1. Yes

    66.7%
  2. No

    8.3%
  3. OH YEAH!

    25.0%
  1. 00face

    00face Member

    Hello,

    Gaslamp Developers could you please expand the games allowance for modding. Almost everything I want to mod into the game is impossible or near it. Being that this game gets a lot of attention on the Steam Workshop and roguelikes fans in general I would figure it would be worth it.

    Respectfully,
    00face
     
    Bohandas likes this.
  2. Wolg

    Wolg Member

    We'll most likely be playing Clockwork Empires before this happens; adding mod support in for something where it wasn't designed that way from the beginning can get tricky and bug-risky.

    However, I'd say if you want this to happen, best thing to do is add a list of the specific things you'd like to be moddable into this thread.
     
    00face likes this.
  3. Nicholas

    Nicholas Technology Director Staff Member

    I'm open to suggestions that we can do easily. Dropping in a scripting language, for instance, does not come under the heading of "easy".
     
    Kazeto likes this.
  4. I mean I'm pretty sure the scripting language we have TECHNICALLY is turing complete (...although it's a pain to use that way)

    The biggest suggestion I'd have is just to expand the way conditional spell triggers work (so eg we can make decisions based on more than presence and absence of a buff) but I'm not sure how complicated that would be to do; and a lot of it can be done already it's just painful and involve like fifty dummy spells; or scaling more effects based on your stats.
     
    00face likes this.
  5. Alistaire

    Alistaire Member

    1. Make totalconversion actually work

    HTML:
    <item name='Bronze Dagger' conversion='true'>
        <equipBuff name='checkForBronzeSet'>
    </item>
    //keeps all previous stats, but adds whatever is in the tag and overwrites whatever was there already
    2. Add a way to check if there's currently other mods in DoD (for expansions to mods e.g, or to NOT have 50,000 leathercrafting mods)

    HTML:
    <item requireModOnNoGenerate='Leathercraft Mod'>
    </item>
     
    <spell requireModOnGenerate='Loads of Spells Mod'>
        //do stuff that's added in the base mod
    </spell>
     
    <recipe requireModOnNoGenerate='Leathercraft Mod'>
    </recipe>
    3. Add more buffs (moveBuff, equipBuff, breakCrateBuff, openTreasurechestBuff, regenBuff, craftBuff) and make buffs in general transfer parameters of some sort (equipBuff; what kind of armour | playerHitEffectBuff; how much damage (what kind of damage) | craftBuff; what you crafted (item name, possibly item type))

    craftBuff etc. might seem useless at first, but if you wanted to make a mod that gives you experience for crafting amulets and rings, it's useful.
    playerHitEffectBuff that only triggers upon receiving over 5 conflag damage e.g, could trigger "onFire" on your Perfectly Safe oiled-up wooden armour.
    breakCrateBuff and openTreasurechestBuff could be used for a mod that gives you great buffs if you don't hoard a lot, or for a mod that transforms you into a barrel to hide from monsters, and where you'd get debuffs when you kill your fellow barrels.

    4. MORE PARAMETERS TO REQUIREBUFFONTRIGGER!!!! CAPSITYCAPS

    This would be great for everyone. Not having to go through the triggerhell to trigger an itemset bonus.

    HTML:
    <trigger spell='Setbuff' amount='0' requireBuffOnTrigger='1'>
        <requireBuffOnTriggerName>
              <buff name='Setpiece1' amount='1'/>
              <buff name='Setpiece2' amount='1'/>
              <buff name='stackableBuff' amount='5'/>
        </requireBuffOnTriggerName>
    </trigger>
    5. Itemsets

    HTML:
    <item name='part1'>
        <itemset>
              <neededItems>    //items that count towards setSize
                  <item name='part2'/>
                  <item name='part3'/>
              </neededItems>
              <setSizeEffect>    //effect on this item
                  <size amount='2'>
                        <resistbuff conflagratory='1'/>
                  </size>
                  <size amount='3'>
                        <resistbuff conflagratory='3'/>
                        <playerHitEffectBuff name='onFire'/>
                  </size>
              </setSizeEffect>
        </itemset>
    </item>
    ----

    Just suggestions eh!
     
  6. 00face

    00face Member

    OK, as Wolg suggested I'll try for some specifics.

    1. On the top of my the ability to make triggers for all stats such as: Current Health, Current Magic, Damage Taken, ETC.
    2. Spawning to create items, props or monsters.
    3. Inventory trigger: if in inventory.
    4. Voxel model support X3.

    I also, certainly agree about the more buffs stuff.
     
    Monkooky and Arron Syaoran like this.
  7. Arron Syaoran

    Arron Syaoran Member

    That was the greatest modding suggestion ever, Alistaire. It would actually make "Android Armour" in my mod do what it's supposed to: "Award Nimbleness equivalent to amount lost on armour, and reduce blocking by 75% of what the piece usually has."

    Edit: This would also allow me to make an Off-Wielding Skill that grants bonuses if you're wielding 2 different kinds of weapons(and give the ability to dual wield, but gives penalties if you wield 2 of the same weapon)
     
  8. Kaidelong

    Kaidelong Member


    Even if it were, there is still the problem of IO facilities, what it can react to based on what is happening in the game, and what effects it can happen on what is going on in game.

    That said, my suspicion at this point is that, nonwithstanding bugs, you are right, so long as you allow the player character to elapse turns (unless removebuffontrigger actually does immediately and does not wait for the end of the turn). I can forsee the implementation of a simple random access machine which could be given a program in the form of a mod. A buff could be used as a program counter and another set as registers, and the resulting activated registers at the end of the program could be seen as a computed result (and you should be able to make programs that don't terminate, too).

    In the context of dungeons of dredmor's XML as it is today, turing completeness is a bad thing, really.
     
  9. Xavion

    Xavion Member

    It's definitely turing complete, or at least given infinite size it is. That's trivial to prove because Conway's Game of Life is and it's been implemented in Dredmor so therefore Dredmor is. That's kind of off topic though so for relevance, being able to add to items/others that already exist could be really useful.
     
  10. Nicholas

    Nicholas Technology Director Staff Member

    I totally don't understand #2. The rest of them seem simple enough... uh.
     
  11. Nicholas

    Nicholas Technology Director Staff Member

    Okay, total conversion now works - for item, as follows:

    Code:
    <itemDB>
     
    <item name="Leather Cuirass" convert="1">
    <secondaryBuff id="10" amount="77"/>
    </item>
     
    </itemDB>
    
    I have to think about what we can intelligently do for spells or skills without, uh, actually breaking everything.
     
    Alistaire likes this.
  12. zaratustra

    zaratustra Member

    Here are some of the simpler suggestions from the aborted expansion proposal:

    • Items that reset ability cooldown
    • add triggerOnEvent to items and skills. events include: * spell avoided * door entered * trap hit * new dungeon level * new player level
    • Skills that recharge by opening doors
    • let wands erode to various items
    • rooms.xml: aside from ‘at=”#”’ and ‘x=”#” y=”#”’, add ‘onid=”#ID”’ to check if an item is on the same square as another item with id #ID
     
  13. I planned out a brainf**k interpreter in it, but didn't end up actually coding it because it was too much work and completely pointless.

    I do like the way triggers are handled and they allow a lot of cool stuff; but it's certainly not optimal and a complete overhaul would be nice (but clearly infeasible :p). As it stands, just more options would be handy.

    Also for suggestions:
    • Triggers based on your equipment (or even equipment that triggers effects on equip/remove) was something I needed for a mod I attempted and found it was basically impossible.
    • Also a function similar to boozeBuff, etc that triggers or using potions and/or wands
    • On the "I'm almost sure this is too hard" front, some way to alter the spawn rates of items based on your skill choices (like this item only show up in vending machines if you picked this skill, kind of thing). (It's not tooooo big of a deal obviously because you can do the fungal arts type thing so it may also not be worth it)
    I don't really know how hard the first two would be either, for that matter, but they seem more likely to be manageable.
     
    Kazeto likes this.
  14. 00face

    00face Member

    I'm glad this is getting feedback from the developers and the community, so to explain item #2. Perhaps it's already possible:

    2. Spawning to create items, props or monsters.
    |- So I was thinking it would be nice to be able to spawn in props like tables or chairs and such. I got the idea from the Evil Interior Decorator mod, which sadly did not allow you to decorate evilly. More to the point it, I suppose I'm asking for the ability to spawn any prop, item or monster by unique id.

    As a side to that perhaps the ability to affect the environment in general with spells and such would be neat, if that isn't already possible.
     
  15. mining

    mining Member

    Probably the one thing I'd want is an actual if. e.g. <effect="if" predicate="burliness" condition=">" effect="MyCoolSpell"/>
     
    Kaidelong likes this.
  16. Alistaire

    Alistaire Member

    Have some more suggestions,

    ----

    6. Adding custom animation sets to the player, and make it possible to use those custom animation sets in spells and such;

    HTML:
    *monDB.xml
     
    <customsprite id='20' sheetName='burn!'
        left='sprites/monster/blobby/blobby_customAnimation_l.spr'
        right='sprites/monster/blobby/blobby_customAnimation_r.spr'
        up='sprites/monster/blobby/blobby_customAnimation_u.spr'
        down='sprites/monster/blobby/blobby_customAnimation_d.spr'
    />
     
    <monster name='CustomAnimatedBlobby' level='1337'>
        <spell name='On Fire' sheetName='burn!'/>
    </monster>
    7. Variables (this could deprecate the itemset stuff)
    &
    8. If statements (and operators +=, -=, == ?)

    HTML:
    * itemDB.xml
     
    <item>
        <onEquipBuff name='addItemSet'/>
        <onRemoveBuff name='removeItemSet'/>
    </item>
     
    * spellDB.xml
     
    <spell name='addItemSet'>
        <var itemSet=itemSet+1 />
    //or itemSet += 1
        <trigger spell='checkItemSet'/>
    </spell>
     
    <spell name='removeItemSet'>
        <var itemSet=itemSet-1 />
    //or itemSet -=1
        <trigger spell='checkItemSet'/>
    </spell>
     
    <spell name='checkItemSet'>
        <if>
            <var itemSet==3/>
            <secondaryBuff id='2' amount=='4'/>
        <then>
            <trigger spell='itemSetComplete'/>
        <else>
            <removeBuffByName spell='itemSetComplete'/>
        <end>
    </spell>
     
    Kazeto likes this.
  17. Kaidelong

    Kaidelong Member

    Skills that consume specific items from the inventory
     
    Kazeto likes this.
  18. mining

    mining Member

    Better: Ability to look at inventory using something in a predicate, ability to remove an item from the inventory via an effect.
     
    Kazeto likes this.
  19. Xavion

    Xavion Member

    A way to check for an object/prop on the tile you cast it on, or an item on the ground. The ability to spawn an object/prop when cast.
     
  20. Kaidelong

    Kaidelong Member

    Flags for a spell to prevent it from causing triggerOnCast to trigger when it is used, for EG stance swapping spells or my ward toss spell.
     
    Kazeto likes this.