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 Spoiler 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 Spoiler 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 Spoiler 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 >>) Spoiler 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 >>) Spoiler 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.
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.
Interesting. But: a) what does it offer over the current system? b) does the format have a BNF or other grammar?
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.
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. Spoiler And also Kazeto's.
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?
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.