Skip to content

Instantly share code, notes, and snippets.

@Putnam3145
Putnam3145 / moddableGods.lua
Last active December 25, 2015 16:29
moddableGods. Kinda neglected. Need to include that "actually have people worship it" thing.
-- Sets player-defined gods to correct civilizations.
--[[Here's an example of how to make a god:
[CREATURE:SHEOGORATH]
[DOES_NOT_EXIST]
[MALE]
[NAME:jovial man:Daedra:madness] "Sheogorath, madness god." "Often depicted as a jovial man"
[CASTE_NAME:Sheogorath:Sheogorath:Sheogorath]
[DESCRIPTION:The Daedric Prince of madness.]
@Putnam3145
Putnam3145 / force.lua
Last active December 25, 2015 16:29
force.lua. Some work, some don't, it's a crapshoot. It's mostly good enough to use, though.Updated a bit for once.
-- Forces an event.
local function findCiv(arg)
local entities = df.global.world.entities.all
if tonumber(arg) then return arg end
if arg and not tonumber(arg) then
for eid,entity in ipairs(entities) do
if entity.entity_raw.code == arg then return entity end
end
end
@Putnam3145
Putnam3145 / Dragon Ball init.lua
Created October 17, 2013 09:24
Eh, might as well. It's got some interesting fusion code.
local function getSuperSaiyanLevel(saiyan)
--15 is combathardness
if df.creature_raw.find(saiyan.race).creature_id~="SAIYAN" then return 0 end
local combatHardness=dfhack.units.getMiscTrait(saiyan,15,true).value --creates the misc trait if the saiyan doesn't have it yet
return (combatHardness>99) and 3 or (combatHardness>64) and 2 or (combatHardness>31) and 1 or 0 --return (x>y) and x or y is syntactically equivalent to, say, z = (x>y) : x ? y; return z; in C++.
end
local function superSaiyanGodSyndrome()
for syn_id,syndrome in ipairs(df.global.world.raws.syndromes.all) do
if syndrome.syn_name == "Super Saiyan God" then return syn_id end
@Putnam3145
Putnam3145 / instant_transmission.lua
Last active December 25, 2015 18:39
Adventure mode teleportation to units. It's pretty nice.
-- Allows instant transmission.
if df.global.gamemode~=1 then
qerror("Adventure mode only (for now). Sorry!")
end
function getTileType(x,y,z)
local block = dfhack.maps.getTileBlock(x,y,z)
if block then
return block.tiletype[x%16][y%16]
@Putnam3145
Putnam3145 / shapechange.lua
Last active December 25, 2015 18:39
Gives a choice of creatures to transform into.
-- transforms unit (by number) into another creature, choice given to user. Syntax is: unitID tickamount maxsize namefilter. A size of 0 is ignored. A length of 0 is also ignored. If no filter, all units will be sorted. A filter of ALL will also work with all units.
local dialog = require('gui.dialogs')
local script = require('gui.script')
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
@Putnam3145
Putnam3145 / take-slave.lua
Created October 18, 2013 01:43
A variant of Kurik Amudnil's hire-guard.lua that forces the unit to become a civ creature rather than checking.
-- Takes slaves. Hooks reactions that start with LUA_HOOK_TAKE_SLAVE. Copied very much from hire-guard.lua: http://dffd.wimbli.com/file.php?id=7785
--[[
sample reaction
[REACTION:LUA_HOOK_TAKE_SLAVE_DROW]
[NAME:Take someone ]
[BUILDING:TANNER:NONE]
[REAGENT:A:10000:COIN:NONE:INORGANIC:GOLD]
[PRODUCT:10:0:BOULDER:NONE:INORGANIC:CLAY][PRODUCT_DIMENSION:10]
[SKILL:TANNER]
@Putnam3145
Putnam3145 / Spawnunit.lua
Last active December 27, 2015 03:09 — forked from warmist/Spawnunit.lua
forked it so I can make age more proper. Also fixed it for r4's release and moved random numbers to local rng instead of global.
--create unit at pointer or given location. Usage e.g. "spawnunit DWARF 0 Dwarfy"
--Made by warmist, but edited by Putnam for the dragon ball mod to be used in reactions
--note that it's extensible to any autosyndrome reaction to spawn anything due to this; to use in autosyndrome, you want \COMMAND spawnunit CREATURE caste_number name \LOCATION
args={...}
local rando=dfhack.random.new()
@Putnam3145
Putnam3145 / itemsyndromeR3.lua
Last active December 29, 2015 03:39
Itemsyndrome for DFHack-0.34.11-r3.
-- Checks for inventory changes and applies or removes syndromes that items or their materials have. Use "disable" (minus quotes) to disable and "help" to get help.
local args = {...}
local function printItemSyndromeHelp()
print("Arguments:")
print(' "help": displays this dialogue.')
print(" ")
print(' "disable": disables the script.')
print(" ")
@Putnam3145
Putnam3145 / skilroll.lua
Created December 7, 2013 10:16
Allows for skill-based script running. DFHack Lua scripts only, unfortunately; no plugins or ruby scripts.
-- Allows skills to activate lua scripts.
--[[Example usage:
...syndrome stuff...
[SYN_CLASS:\COMMAND][SYN_CLASS:skillroll][SYN_CLASS:\WORKER_ID] For autoSyndrome/syndromeTrigger.
[SYN_CLASS:MELEE_COMBAT] Can use any skill.
[SYN_CLASS:20] Rolls d20. Skill will be weighted to this value.
[SYN_CLASS:DICEROLL_1] If diceroll ends up as one...
[SYN_CLASS:kill][SYN_CLASS:\SKILL_UNIT_ID] Theoretical kill-given-unit-id command; slayrace doesn't do so.
[SYN_CLASS:DICEROLL_10] If diceroll is between 1 and 10 (2-10, inclusive)...
@Putnam3145
Putnam3145 / ClickableLabel.lua
Created May 8, 2016 05:56
An intuitive clickable text label for DFHack UI purposes.
local gui=require('gui')
local widgets=require('gui.widgets')
local ClickableLabel=defclass(ClickableLabel,widgets.Label)
ClickableLabel.ATTRS.on_click=DEFAULT_NIL
ClickableLabel.ATTRS.on_rclick=DEFAULT_NIL