commit 2179d5ba5bad62d8f8a2d66601e656a380d42b6f Author: Alan Mason <2xShirt@gmail.com> Date: Fri Sep 28 02:02:27 2012 -0600 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e2ccd3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +*.py[cod] + +# C extensions +*.so + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg +lib +lib64 + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox +nosetests.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject diff --git a/SpellBurner.py b/SpellBurner.py new file mode 100644 index 0000000..f196fc6 --- /dev/null +++ b/SpellBurner.py @@ -0,0 +1,189 @@ +# Burning Wheel - Spell Burner +# By 2Shirt (Alan Mason) +# +# Version 0.01a +from tkinter import * +from tkinter import ttk + +facets = { + 'Elements': { + 'Air': {'Actions': 4, 'Ob': 2, 'ResCost': 10}, + 'Anima*': {'Actions': 5, 'Ob': 0, 'ResCost': 12}, + 'Anima': {'Actions': 5, 'Ob': 5, 'ResCost': 12}, + 'Arcana': {'Actions': 10, 'Ob': 4, 'ResCost': 13}, + 'Earth': {'Actions': 6, 'Ob': 1, 'ResCost': 8}, + 'Fire': {'Actions': 5, 'Ob': 2, 'ResCost': 10}, + 'Heaven': {'Actions': 8, 'Ob': 3, 'ResCost': 10}, + 'Water': {'Actions': 3, 'Ob': 2, 'ResCost': 9}, + 'White': {'Actions': 7, 'Ob': 4, 'ResCost': 11}, + }, + + 'Impeti': { + 'Control': {'Actions': 16, 'Ob': 5, 'ResCost': 5}, + 'Create': {'Actions': 32, 'Ob': 6, 'ResCost': 6}, + 'Destroy': {'Actions': 2, 'Ob': 2, 'ResCost': 3}, + 'Enhance': {'Actions': 12, 'Ob': 4, 'ResCost': 4}, + 'Influence': {'Actions': 4, 'Ob': 3, 'ResCost': 3}, + 'Tax': {'Actions': 1, 'Ob': 1, 'ResCost': 2}, + 'Transmute (To Control)': {'Actions': 25, 'Ob': 8, 'ResCost': 7}, + 'Transmute (To Create)': {'Actions': 25, 'Ob': 9, 'ResCost': 7}, + 'Transmute (To Destroy)': {'Actions': 25, 'Ob': 5, 'ResCost': 7}, + 'Transmute (To Enhance)': {'Actions': 25, 'Ob': 7, 'ResCost': 7}, + 'Transmute (To Influence)': {'Actions': 25, 'Ob': 6, 'ResCost': 7}, + 'Transmute (To Tax)': {'Actions': 25, 'Ob': 4, 'ResCost': 7}, + }, + + 'Origins': { + 'Personal': {'Actions': 1, 'Ob': 0, 'ResCost': 0}, + 'Presence': {'Actions': 2, 'Ob': 2, 'ResCost': 2}, + 'Sight': {'Actions': 4, 'Ob': 4, 'ResCost': 4}, + }, + + 'Durations': { + 'Instantaneous': {'Actions': 1, 'Ob': 0, 'ResCost': 0}, + 'Sustained': {'Actions': 2, 'Ob': 2, 'ResCost': 2}, + 'Elapsed Time (Seconds)': {'Actions': 2, 'Ob': 1, 'ResCost': 2}, + 'Elapsed Time (Exchanges)': {'Actions': 6, 'Ob': 2, 'ResCost': 4}, + 'Elapsed Time (Minutes)': {'Actions': 8, 'Ob': 3, 'ResCost': 5}, + 'Elapsed Time (Hours)': {'Actions': 12, 'Ob': 4, 'ResCost': 7}, + 'Elapsed Time (Days)': {'Actions': 24, 'Ob': 5, 'ResCost': 8}, + 'Elapsed Time (Months)': {'Actions': 43, 'Ob': 7, 'ResCost': 9}, + 'Elapsed Time (Years)': {'Actions': 81, 'Ob': 9, 'ResCost': 10}, + 'Permanent': {'Actions': 500, 'Ob': 10, 'ResCost': 100}, + }, + + 'Areas of Effect': { + 'Caster': {'Actions': 1, 'Ob': 0, 'ResCost': 0}, + 'Single Target': {'Actions': 2, 'Ob': 1, 'ResCost': 2}, + 'Presence': {'Actions': 3, 'Ob': 2, 'ResCost': 3}, + '1/2 Presence': {'Actions': 3, 'Ob': 1, 'ResCost': 2}, + '2x Presence': {'Actions': 6, 'Ob': 4, 'ResCost': 4}, + 'Natural Effect': {'Actions': 4, 'Ob': 3, 'ResCost': 4}, + '1/2 Natural Effect': {'Actions': 3, 'Ob': 2, 'ResCost': 3}, + '2x Natural Effect': {'Actions': 8, 'Ob': 6, 'ResCost': 8}, + 'Measured Area (Paces)': {'Actions': 4, 'Ob': 2, 'ResCost': 3}, + 'Measured Area (Tens of Paces)': {'Actions': 6, 'Ob': 4, 'ResCost': 5}, + 'Measured Area (Hundreds of Paces)': {'Actions': 8, 'Ob': 6, 'ResCost': 6}, + 'Measured Area (Miles)': {'Actions': 10, 'Ob': 8, 'ResCost': 8}, + 'Measured Area (Tens of Miles)': {'Actions': 15, 'Ob': 9, 'ResCost': 9}, + 'Measured Area (Hundreds of Miles)': {'Actions': 20, 'Ob': 10, 'ResCost': 10}, + }, +} + +class Facet(ttk.Frame): + def updateOptions(self, *args): + self.optionSelect['values'] = sorted(facets[self.type.get()].keys()) + def updateStats(self, *args): + self.ob.set(facets[self.type.get()][self.option.get()]['Ob']) + self.actions.set(facets[self.type.get()][self.option.get()]['Actions']) + + def createWidgets(self): + self.typeFrame = ttk.Labelframe(self, text='Type') + self.typeFrame.grid(column=1, row=1, sticky=W) + self.typeSelect = ttk.Combobox(self.typeFrame, textvariable=self.type) + self.typeSelect['values'] = sorted(facets.keys()) + self.typeSelect.state(['readonly']) + self.typeSelect.bind('<>', self.updateOptions) + self.typeSelect.grid(column=1, row=1, sticky=W) + + self.optionFrame = ttk.Labelframe(self, text='Option') + self.optionFrame.grid(column=2, row=1, sticky=W) + self.optionSelect = ttk.Combobox(self.optionFrame, textvariable=self.option) + self.optionSelect.state(['readonly']) + self.optionSelect.bind('<>', self.updateStats) + self.optionSelect.grid(column=1, row=1, sticky=W) + + self.obFrame = ttk.Labelframe(self, text='Ob') + self.obFrame.grid(column=3, row=1, sticky=W) + self.obLabel = ttk.Label(self.obFrame, textvariable=self.ob) + self.obLabel.grid(column=1, row=1, sticky=W) + + self.actionsFrame = ttk.Labelframe(self, text='Actions') + self.actionsFrame.grid(column=4, row=1, sticky=W) + self.actionsLabel = ttk.Label(self.actionsFrame, textvariable=self.actions) + self.actionsLabel.grid(column=1, row=1, sticky=W) + + def getActions(self): + return self.actions + + def getOb(self): + return self.ob + + def __init__(self, master): + Frame.__init__(self, master) + self.parent = master + self.actions = StringVar() + self.ob = StringVar() + self.option = StringVar() + self.type = StringVar() + self.createWidgets() + + +root = Tk() +facet1 = Facet(root) +facet1.grid(column=1, row=1, sticky=W) +root.mainloop() + + +#=Element= +#Name Ob Act Res +#Air 2 4 10 +#Anima* 0 5 12 # Ob = Target Stat +#Anima 5 5 12 +#Arcana 4 10 13 +#Earth 1 6 8 +#Fire 2 5 10 +#Heaven 3 8 10 +#Water 2 3 9 +#White 4 7 11 + +#=Impetus= +#Name Ob Act Res +#Control 5 16 5 +#Create 6 32 6 +#Destroy 2 2 3 +#Enhance 4 12 4 +#Influence 3 4 3 +#Tax 1 1 2 +#Transmute-Cntl 8 25 7 +#Transmute-Crea 9 25 7 +#Transmute-Dstr 5 25 7 +#Transmute-Enhc 7 25 7 +#Transmute-Infl 6 25 7 +#Transmute-Tax 4 25 7 + +#=Origin= +#Name Ob Act Res +#Personal 0 1 0 +#Presence 2 2 2 +#Sight 4 4 4 + +#=Duration= +#Name Ob Act Res +#Instantaneous 0 1 0 +#Sustained 2 2 2 +#E.Time-Seconds 1 2 2 +#E.TimeExchanges 2 6 4 +#E.Time-Minutes 3 8 5 +#E.Time-Hours 4 12 7 +#E.Time-Days 5 24 8 +#E.Time-Months 7 43 9 +#E.Time-Years 9 81 10 +#Permanent 10 500 100 + +#=Area of Effect= +#Name Ob Act Res +#Caster 0 1 0 +#Single Target 1 2 2 +#Presence 2 3 3 +#1/2 Presence 1 3 2 +#2x Presence 4 6 4 +#Natural Effect 3 4 4 +#1/2 Natural Ef. 2 3 3 +#2x Natural Eff. 6 8 8 +#M.Area-Paces 2 4 3 +#M.Area-Paces (10s) 4 6 5 +#M.Area-Paces (100s) 6 8 6 +#M.Area-Miles 8 10 8 +#M.Area-Miles (10s) 9 15 9 +#M.Area-Miles (100s) 10 20 10 \ No newline at end of file