From 72a0a9acf2b1a270901c7e9f2ba9186215056fc7 Mon Sep 17 00:00:00 2001 From: expwnent Date: Thu, 3 Jul 2014 17:33:38 -0400 Subject: [PATCH] moddable-gods.lua script --- NEWS | 2 + scripts/modtools/moddable-gods.lua | 95 ++++++++++++++++++++++++++++++ scripts/modtools/moddableGods.lua | 1 + 3 files changed, 98 insertions(+) create mode 100644 scripts/modtools/moddable-gods.lua diff --git a/NEWS b/NEWS index bf22b7607..86cfc9da0 100644 --- a/NEWS +++ b/NEWS @@ -63,6 +63,8 @@ DFHack future triggers commands when interactions happen invader-item-destroyer.lua destroys invaders' items when they die + moddable-gods.lua + standardized version of Putnam's moddable gods script moddableGods.lua makes raw moddable gods possible projectileExpansion.lua diff --git a/scripts/modtools/moddable-gods.lua b/scripts/modtools/moddable-gods.lua new file mode 100644 index 000000000..acdbd4a24 --- /dev/null +++ b/scripts/modtools/moddable-gods.lua @@ -0,0 +1,95 @@ +--scripts/modtools/moddable-gods.lua +--based on moddableGods by Putnam +--edited by expwnent + +local utils = require 'utils' + +validArgs = validArgs or utils.invert({ + 'help', + 'name', + 'spheres', + 'gender', + 'depictedAs', + 'domain', + 'description', +-- 'entities', +}) +local args = utils.processArgs({...}) + +if args.help then + print([[scripts/modtools/moddable-gods.lua +arguments: + -help + print this help message + -name godName + sets the name of the god to godName + if there's already a god of that name, the script halts + -spheres [ sphereList ] + define a space-separated list of spheres of influence of the god + -depictedAs str + often depicted as a str + -domain str + set the domain of the god + -description str + set the description of the god +]]) + return +end + +if not args.name or not args.depictedAs or not args.domain or not args.description or not args.spheres or not args.gender then + error('All arguments must be specified.') +end + +local templateGod +for _,fig in ipairs(df.global.world.history.figures) do + if fig.flags.deity then + templateGod = fig + break + end +end +if not templateGod then + error 'Could not find template god.' +end + +if args.gender == 'male' then + args.gender = 1 +elseif args.gender == 'female' then + args.gender = 0 +else + error 'invalid gender' +end + +for _,fig in ipairs(df.global.world.history.figures) do + if fig.name.first_name == args.name then + print('god ' .. args.name .. ' already exists. Skipping') + return + end +end + +local godFig = df.historical_figure:new() +godFig.appeared_year = -1 +godFig.born_year = -1 +godFig.born_seconds = -1 +godFig.curse_year = -1 +godFig.curse_seconds = -1 +godFig.old_year = -1 +godFig.old_seconds = -1 +godFig.died_year = -1 +godFig.died_seconds = -1 +godFig.name.has_name = true +godFig.breed_id = -1 +godFig.flags:assign(templateGod.flags) +godFig.id = df.global.hist_figure_next_id +df.global.hist_figure_next_id = 1+df.global.hist_figure_next_id +godFig.info = df.historical_figure_info:new() +godFig.info.spheres = {new=true} +godFig.info.secret = df.historical_figure_info.T_secret:new() + +godFig.sex = args.gender +godFig.name.first_name = args.name +for _,sphere in ipairs(args.spheres) do + godFig.info.spheres:insert('#',df.sphere_type[sphere]) +end +df.global.world.history.figures:insert('#',godFig) + + diff --git a/scripts/modtools/moddableGods.lua b/scripts/modtools/moddableGods.lua index e53e44001..2710b8bf0 100644 --- a/scripts/modtools/moddableGods.lua +++ b/scripts/modtools/moddableGods.lua @@ -150,3 +150,4 @@ dfhack.onStateChange.letThereBeModdableGods = function(state) moddableGods() end end +