FORUM ARCHIVED

Dredly

Discussion in 'Modding' started by Xavion, Aug 4, 2013.

  1. Xavion

    Xavion Member

    Dredly is a scripting language for writing scripting languages for writing a markup language. What that means is that you write the syntax files to make the scripting language, then write the content files to make the content and then it combines them to create XML. It's coded in python but you don't need to know that to use any of it as it both syntax and content files are near identical. It's primarily indentation based for formatting so avoids needing to match closing and ending tags, braces, brackets or anything else with a very simple content syntax and fairly simple syntax syntax. It's currently not quite usable for modding but it's getting there, progress and examples of what it can/will do are below.

    The git is here, it contains all the documentation if you want info, examples or to use it.

    Newest update
    spellDB.xml is done. Also a bunch of additions and bugfixes on the syntax side have allowed for such improvements as bringing stat buffs in line with damage/resist buffs and allowed for a name=val style instead of the old id=num,val=num style.

    Current Progress
    Dredly
    Finished
    - Basic syntax
    - Scope
    - Groups
    - Virtual groups
    - File definitions
    - Scanning, processing, and compressing folders
    - macros
    - Dynamic tag names
    - Multiple same name, same level tags
    Unfinished
    - types
    - replicating folder hierachy
    - gui
    - compiled version
    - formatted xml

    Dredmor Edition
    Finished
    - mod.xml
    - craftDB.xml
    - encrustDB.xml
    - skillDB.xml
    - spellDB.xml
    Unfinished
    - itemDB.xml
    - monDB.xml
    - rooms.xml

    Now for some examples to try and convince you why it's good. It's main drawbacks are that it tends to end very long as there is only attribute per line and that you'll need an xml beautifier as it generates unformatted xml. However it can or least will be able to be combined across files making managing projects with large amounts of data a lot easier as you can do things like have all the spells/abilities/items/whatever for each class in it's own file.
    Note that these represent what is currently possible and not what will be possible.
    mod.xml
    Code:
    info:
        ver: Version 0.0.1
        author: Billy Bob Joe
        name: ULTIMATE\nMOD\nOF\nULTIMATENESS
        desc:"Example string here"
        needs: ReAlM Of THE diggle GoDs
        require:cotw
    
    crafting recipes
    Code:
    recipe:
        hidden: false
        output:
            makes: Diamondium
            amount: 1
            skill: 2
        output:
            makes: Diamondium
            amount: 2
            skill: 4
        output:
            makes: Diamondium
            amount: 3
            skill: 6
        output:
            makes: Diamondium
            amount: 4
            skill: 8
        type: alchemy
        input: Diamond
        input: Diamond
        input: Coal
        input: Potion of Steeling
    
    Encrusts Updated! (Marked with >>)
    Code:
    encrust:
        hidden: false
        name: Krusty Burgers
        desc: A layer of crusty old burgers coats your weapon causing illness to all who eat it. Stabbing works too.
        power:
            name: Krusted Burgers
            chance: 0.10
        tool: alch
        slot: wep
        input: Burger
        input: Burger
        input: Grated Cheese
        input: Aged Steak
        skill: 3
        instability: 5
        encrustwith: krusty burgers
        damage:
            poison: 3
            decay: 4
            necro: 1
            mind: 1
        resist:
            poison: -1
            decay: -2
    >>    pbuff:
    >>        sag: -1
    >>        cad: -1
    >>    sbuff:
    >>        dodge: 2
    >>        block: 2
    >>        haywire: 3
    
    skills Updated!(Marked with >>)
    Code:
    skill:
        name: Elemagery
        id: 1526931943
        class: Wizard
        desc: Refined elements.
        icon: "FILEPATH GOES HERE"
        loadout:
            type: armour
            item: Elements Cap
            always: True
            amount: 1
        ability:
            name: Elemagery
            start: true
            desc: The path to merging yourself with the elements.
        ability:
            name: Acolytion
            level: 0
            desc: The journey of a thousand spells beings with a single word.
    >>        sbuff:
    >>            Magic_Power: 1
    >>            EDR: -1
    >>            MPRegen: 1
    >>        buffon:
    >>            on: cast
    >>            chance: 100
    >>            spell: elemental amplification
        ability:
            name: Pyromagery
            level: 1
            desc: The art of controlling fire. A roaring, primal force, it consumes all in it's path so avoid anything flammable lest it ceases to be.
            damage:
                fire: 1
            resist:
                fire: 1
        ability:
            name: Hydromagery
            level: 2
            desc: The art of controlling water. Unfortunately they don't have water here so you have to make do with it's rare solid form ice.
            damage:
                ice: 1
            resist:
                ice: 1
        ability:
            name: Aeromagery
            level: 3
            desc: The art of controlling air. Allowing you to literally take thier breath away this is a rare and uncoveted ability.
            damage:
                air: 1
            resist:
                air: 1
        ability:
            name: Geomagery
            level: 4
            desc: The art of controlling earth. Causing earthquakes and landslides you gain the ability to crush anything in your path.
            damage:
                crushing: 1
            resist:
                crushing: 1
    

    Any ideas, questions, suggestions, or thoughts please say them. I haven't actually made a mod yet so to more experienced people tell me what you'd like to be easier or simpler and I'll try and include it. I also don't know if my syntax files are complete as I've been basically copying them off dredmod and it seems like it might be out of date or missing things.
     
    Last edited: Aug 19, 2013
  2. FaxCelestis

    FaxCelestis Will Mod for Digglebucks

    No. The game flips its shit if it sees this.
     
    Kazeto, mining and Essence like this.
  3. mining

    mining Member

    It will /literally/ attempt to murder your soul.
     
    Kazeto likes this.
  4. Xavion

    Xavion Member

    Aweome, that avoids an extremely specific bug that could cause trouble if it ever actually matters. I've also updated it to allow for the spreading over multiple files and am about to start on spells.
     
  5. Nicholas

    Nicholas Technology Director Staff Member

    Interesting. But:

    a) what does it offer over the current system?
    b) does the format have a BNF or other grammar?
     
    Kazeto and Vitellozzo like this.
  6. Xavion

    Xavion Member

    a) Not too much. It's mainly just little things that make the code just a bit easier to organise/read. Things like being able to group all the stuff for one skill into one file, using name's instead of id's for things like stats, . While it can't do anything particularly interesting just yet I have got some tentative plans for things like looping constructs and once it has a gui it would be much more useful, it would make basic stuff just a matter of fill in the boxes.

    b) No. I've barely seen BNF before and didn't know what it was called or how to use it but the syntax isn't very complex so I could make one if I could figure out how to represent indentation, might just go puzzle through how python does it later.
     
    Kazeto likes this.
  7. Vitellozzo

    Vitellozzo Member

    I like semplicity because it gives the possibility to make the game more complex than it is, once mastered.
    And I want want want new features for Dredmor, since my modding will is linked to features never implemented. And that's simply too bad.
    And also Kazeto's.
     
    Kazeto likes this.
  8. Xavion

    Xavion Member

    Well I can't add functionality to modding but I can do pretty much anything you could possibly want related to syntax. Just tell me what you want.

    Much bugfixes and sidetracking has been done! I've also since added spells and in the process managed to add nearly 800 lines to my syntax file making it longer than the actual code. The copying of spells also showed my a disappointingly large amount of inconsistency and poor documentation that reminded me why I made dredly. I've also managed to rework primary and secondary buffs to be able to take the name and value similar to damage and resist to make the code slightly easier to read. Now though I've got some questions that arose from looking through everything related to spells and copying them out. I've also updated the main post and bolded the changes so go look.

    Does the midas attribute in damage effects need to be a boolean or a number?
    invisible, senseWalls, senseTrap, senseMap, and mute in buffs are labeled NOT NECESSARY on the wiki, are they useful?
    Are all the attribute mentioned in spell types meant to be attributes of the spell tag?
    Why does spawnitematlocation use itemName and spawn use itemname? Does it matter?
    Should sightBuff be included in Dredly? It is apparently redundant.
    If you could rewrite the structure of the effect tag would you? How?
    Are there any other changes you would make to the xml? What? (Only ones that do stuff that is currently possible please)
    I've thought about trying to add things like itemsets or rewriting effects in spells to be several separate tags. What do you think?
    What do you think of the most recent changes to the examples?
     
  9. Xavion

    Xavion Member

    Nearly finished everything. I've done as much as I can and without any more knowledge I can't finish it. So here is my two important request required to finish dredly.

    1. Rooms.
    There is no explanation I could find of how room scripts actually work on the wiki, I just need to know the structure but the wiki just lists condition and action tags and not what to actually do with them.

    2. Monsters
    As there is no monster syntax reference I've had to check try and create from the tutorial and have no idea if I missed something. Consequently could someone please read over this and tell me if anything is wrong. I could provide the full monster definition if wanted but it would be easily 3-4x longer.
    Code:
    monster:
            name=$name
            level=$level
            tiny=$tiny
            splat=$splat
            taxa=$taxa
            idleSprite: $idle
                left=$left
                right=$right
                up=$up
                down=$down
            attackSprite: $attack
                left=$left
                right=$right
                up=$up
                down=$down
            hitSprite: $hit
                left=$left
                right=$right
                up=$up
                down=$down
            morphsprites: $morph
                eatSprite=$eat
                drinkSprite=$drink
                levelupmSprite=$levelupm
                levelupfSprite=$levelupf
                vanishSprite=$vanish
                longidleSprite=$longidle
            dieSprite:
                name=$die
            sfx: $sfx
                attack=$attack
                hit=$hit
                die=$die
                spell=$spell
            ai: $ai
                aggresiveness=$aggro
                span=$span
                spellPercentage=$spellChance
                invisible=$invisible
            drop: $drop
                name=$item
                precent=$chance
            stats: $stats
                numFig=$fighter
                numRog=$rogue
                numWiz=$wizard
                xpValue=$xp
            spell:
                name=$spell
            info:
                latin=$latin
                description=$desc
            onhit: $onhit
                spell=$spell
                onechancein=$chance
            damage: $damage
                crushing=$crush
                slashing=$slash
                piercing=$pierce
                blasting=$blast
                hyperborean=$ice
                conflagratory=$fire
                voltaic=$electric
                toxic=$toxic
                righteous=$holy
                necromantic=$necro
                acidic=$acid
                putrefying=$decay
                transmutative=$change
                aethereal=$aether
                asphyxiative=$choke
                existential=$mind
            primarybuff:
                Primary Buff stuff here, long and useless to checking it as it's the same as all the other primary buff stuff
            secondarybuff:
                Same as primary buff, long and meaningless.
            resistances: $resist
                crushing=$crush
                slashing=$slash
                piercing=$pierce
                blasting=$blast
                hyperborean=$ice
                conflagratory=$fire
                voltaic=$electric
                toxic=$toxic
                righteous=$holy
                necromantic=$necro
                acidic=$acid
                putrefying=$decay
                transmutative=$change
                aethereal=$aether
                asphyxiative=$choke
                existential=$mind
            monster: $monster
                palette:
                    tint=$tint
                BLAH BLAH BLAH
                Everything above repeated 
    Other than that
    When would you ever want a damageBuff on a weapon?
    Monster tags can only contain one level of recursion?
    pngSprite, first, num, rate, animate. Are any of them not strings? If so, Which ones and what are they?
    What are the options for splat in the monster definition?

    If I could get all that along with the previous post answered than not only will this be fully functional it will also be what is probably the only (hopefully) complete reference to the entire dredmor markup language. Which could probably be used to help fix all the stupid gaps in the wiki, and I know there's a bunch as I've basically read through the whole thing a couple of times over. For example did you know buffs can't increase your stats? They don't contain primarybuff or resist or the like according to the reference.
     
    Daynab likes this.