Module:EffectType: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(Auto categorize effects)
(add psionic effects (coming soon))
 
(One intermediate revision by one other user not shown)
Line 15: Line 15:
{"Temporal", "Temporal Effects"},
{"Temporal", "Temporal Effects"},
{"Neurological", "Neurological Effects"},
{"Neurological", "Neurological Effects"},
{"Disease", "Diseases"}
{"Illness", "Illnesses"},
{"Psionic","Psionic Effects"}
}
}



Latest revision as of 20:13, 11 April 2021


local p = {}

effectTypes =  {{"General", "Effects"},
				{"Mental", "Mental Effects"},
				{"Metabolic", "Metabolic Effects"},
				{"Respiratory", "Respiratory Effects"},
				{"Circulatory", "Circulatory Effects"},
				{"Contact-based", "Contact-based Effects"},
				{"Field", "Field Effects"},
				{"Activity-based", "Activity-based Effects"},
				{"Dimensional", "Dimensional Effects"},
				{"Chemical-based", "Chemical-based Effects"},
				{"Structural", "Structural Effects"},
				{"Sound-based", "Sound-based Effects"},
				{"Temporal", "Temporal Effects"},
				{"Neurological", "Neurological Effects"},
				{"Illness", "Illnesses"},
				{"Psionic","Psionic Effects"}
}

classTypes = {{"Minor", "Minor Effects"},
			  {"Negative", "Negative Effects"},
			  {"Removable", "Removable Effects"},
			  {"Voluntary", "Voluntary Effects"}
}

function p.getTypes(frame)
	frame = mw.getCurrentFrame()
	if frame.args[1] == nil or frame.args[1] == "" then
		error("An argument must be provided!")
	end
	typeList = p.parse(mw.text.trim(frame:preprocess(frame.args[1])))
	return table.concat(typeList, ', ')
end

function p.parse(bits)
	typeList = {}
	rbits = string.reverse(bits)
	i = 1
	for bit in string.gmatch(rbits, "[01]") do
		if bit == "1" then
			if i < 25 then
				table.insert(typeList,
							 string.format("%s[[Category:%s]]",
							 				effectTypes[i][1],
							 				effectTypes[i][2]))
			elseif i < 29 then
				table.insert(typeList,
							 string.format("%s[[Category:%s]]",
										   classTypes[i-24][1],
										   classTypes[i-24][2]))
			else
				error("This type string is way too long (> 28 chars)!)")
			end
		end
		i = i + 1
	end
	return typeList
end

return p