v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Difference between revisions of "Lua scripting"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
m (Better syntax highlighting)
m (→‎Code Samples: Condensed into {{Scriptdata}})
Line 12: Line 12:
 
===Divine language===
 
===Divine language===
 
This is the [[divine language]], which generates a bunch of random-sounding words from a set of syllables.
 
This is the [[divine language]], which generates a bunch of random-sounding words from a set of syllables.
 +
 +
<!--Needs support for {{raw}} in Scriptdata to condense -->
 
{{Main:Divine language/script}}
 
{{Main:Divine language/script}}
 +
 
===Identity language===
 
===Identity language===
This makes a language called ``GEN_IDENTITY`` which is, like. "Abbey abbeyabbeys the abbey of abbeys" - i.e. it's the "English" language you might see occasionally.
+
This makes a [[Language token|language]] called ``GEN_IDENTITY`` which is, like. "Abbey abbeyabbeys the abbey of abbeys" - i.e. it's the "English" language you might see occasionally.
  
<syntaxhighlight lang="lua" line>
+
{{Scriptdata
 +
|title=GEN_IDENTITY
 +
|script=
 
languages.GEN_IDENTITY=function()
 
languages.GEN_IDENTITY=function()
 
     -- just to demonstrate the absolute most basic method of generating one of these
 
     -- just to demonstrate the absolute most basic method of generating one of these
Line 33: Line 38:
 
     end
 
     end
 
     return tbl
 
     return tbl
end
+
end}}
</syntaxhighlight>
 
 
[[Category:Modding]]
 
[[Category:Modding]]
 
[[Category:Lua]]
 
[[Category:Lua]]

Revision as of 03:36, 10 January 2025

Dwarven science stretched.png Research Pending!
This article or section is incomplete/under construction (likely due to recent changes) and may still be outdated or missing details. Feel free to do some testing and expand it.


This article is about procedural raw generation. Information on Utility:DFHack scripting can be found at https://docs.dfhack.org/en/stable/.

Lua scripting is an upcoming feature. It is used to create custom procedurally-generated objects that were previously created by hardcoded methods. It was announced in a video, with the stated goal of "supporting future magical endeavors."

Inorganic materials, languages, creatures, interactions, items (currently excluding instruments), reactions, entities, and plants are open to this system.

Code Samples

Divine language

This is the divine language, which generates a bunch of random-sounding words from a set of syllables.

languages.GEN_DIVINE=function()

    local letters={}
    letters.vowel={}
    letters.cons={}
    letters.vowel.COMMON_NUM=5
    letters.vowel.NUM=35
    letters.cons.COMMON_NUM=12
    letters.cons.NUM=22
    letters.vowel.lookup={
        "a","e","i","o","u",
        "ae","ai","ao","au","ea","ei","eo","eu","ia","ie","io","iu","oa","oe","oi","ou","ua","ue","ui","uo","ah","eh","ih","oh","uh","ay","ey","iy","oy","uy"
    }
    letters.cons.lookup={
        "b","p","g","k","c","z","s","d","t","m","n","ng",
        "v","f","w","h","j","l","r","q","x","y"
    }

    for k,v in pairs(letters) do
        v.common={}
        v.rare={}
        for i=1,5 do
            if trandom(5)~=0 then v.common[i]=v.lookup[trandom(v.COMMON_NUM)+1] else v.common[i]=v.lookup[trandom(v.NUM)+1] end
        end
        for i=1,15 do 
            v.rare[i]=v.lookup[trandom(v.NUM)+1]
        end
    end

    local function letter(t)
        if trandom(5)~=0 then
            return pick_random(t.common)
        else
            return pick_random(t.rare)
        end
    end
    local gen_divine={}
    for k,v in ipairs(world.language.word) do
        local str=""
        if trandom(2)~=0 then
            str=str..letter(letters.cons)
            str=str..letter(letters.vowel)
        else
            str=str..letter(letters.vowel)
        end
        local num_letters=trandom(3)
        str=str..letter(letters.cons)
        if num_letters>0 then str=str..letter(letters.vowel) end
        if num_letters>1 then str=str..letter(letters.cons) end
        gen_divine[v.token]=str
    end

    return gen_divine
end


Identity language

This makes a language called GEN_IDENTITY which is, like. "Abbey abbeyabbeys the abbey of abbeys" - i.e. it's the "English" language you might see occasionally.