Skip to content

Instantly share code, notes, and snippets.

@aloisdg
Created March 23, 2018 23:55
Show Gist options
  • Select an option

  • Save aloisdg/96f2d23139ee32833ed9061a689992a8 to your computer and use it in GitHub Desktop.

Select an option

Save aloisdg/96f2d23139ee32833ed9061a689992a8 to your computer and use it in GitHub Desktop.
Magical weapon calculator
import unittest
# https://www.reddit.com/r/Pathfinder_RPG/comments/14ibsz/need_help_with_cost_of_magical_weapons/
# https://tio.run/##vZXfb9owEMff81fcC0oCEUpCqdCkPmyMdQ@rOqmV9oBQ5IKh1hKb2c42Vu1vZ2fnZymIiIdJUeLcWZ87f3N32e70s@Cj/Z5lWyE15JxpTZV2nGVKlIIZX71zAMCdiiwTHJ6IolC41kICSVOg2TYVO0qVazYmGVGayl9Cfp8KpeEGRmFoHIr9ofj28rd6mbufGKfuAo3hcNxYP7KM8Vyzn0d8j4zv3lofMszDmqPGeEdXLM8OrV@I3BTcuDF@zkvbVWO7xY2E65xw65k0nqlIhVKkDHjtGM@KriFJGIqXJJ6i6ToAIdmGcZIG1cmrjAJ4EjxX5hABUP5M@JJmlGtjmS98K7cJhpRhBUFXtWy7S7J5tM0V3z7bjoNo7ddyG37v4VaypcGa9eHnHNR5QN9usJqY2wJ9XhEZFyrPvDbeB7Z@fViaYiWFvg/9PsQIi0Osk0ZLpWUpZa2IpDqXHNxBbwU9VV8u9MBrzh000gTgPmhKU5Tcff8jJ5otzfJWUqLJb@r6TlXmj1jyd2TDlt8o2QruVW0wNI4p1rxJwqZhsjOe@1KG1ymWOiOSSj3DkKmHInlx6BeqBjDCtXOUZEuzIw5PUVRyw706xTXV3R1re6GhTpB6/OBVG3RH141T469PimFbuju6mAAdRDYDpDvWjpuGGp2ifjCF1x1bD4KoZsenU7bw@AJ6XNMnZ@ijC@ijmh6dw48vwI9r/Dg8g581Y@WSbxDAPFp0lqoV7J5TvC4NGbSCRv8varxodcnbqF8l66AiDufD3mvx/YFrxuwgAusCO4OhHMDQmr7gMDPqOcloksAN/iIT/N8wniRuEbwew8bq@fv9Pw
# http://grpg.wikidot.com/tool:magic-weapon-creator
# https://rpg.stackexchange.com/questions/76125/how-to-calculate-the-costs-of-a-weapon-enchantment/76177#76177
class End:
'Common base class for all employees'
_masterworkCost = 300
size = {}
size['Fine'] = 0.5
size['Diminutive'] = 0.5
size['Tiny'] = 0.5
size['Small'] = 1
size['Medium'] = 1
size['Large'] = 2
size['Huge'] = 4
size['Gargantuan'] = 8
size['Colossal'] = 16
def __init__(self, original, size = 'Medium', bonus = 0, enhancements = []):
self.original = original
self.size = size
self.bonus = bonus
self.enhancements = enhancements
End.price = End._masterworkCost + original * End.size[size] + (bonus + (sum(enhancements) if enhancements else 0)) ** 2 * 2000
def __str__(self):
return '+%d %s %s %s %s' % (self.bonus, self.size, 'Steel', 'Aquatic', 'Greataxe')
class TestMagicWeapon(unittest.TestCase):
def testOriginal(self):
self.assertEqual(End(20).price, 320)
def testOriginalLarge(self):
self.assertEqual(End(20, 'Large').price, 340)
def testOriginalHuge(self):
self.assertEqual(End(20, 'Huge').price, 380)
def testOriginalColossal(self):
self.assertEqual(End(20, 'Colossal').price, 620)
def testOriginalSmall(self):
self.assertEqual(End(20, 'Small').price, 320)
def testOriginalTiny(self):
self.assertEqual(End(20, 'Tiny').price, 310)
def testOriginalBonus(self):
self.assertEqual(End(20, 'Medium', 1).price, 2320)
def testOriginalBonus2(self):
self.assertEqual(End(20, 'Medium', 2).price, 8320)
def testOriginalBonus3(self):
self.assertEqual(End(20, 'Medium', 3).price, 18320)
def testOriginalBonus5(self):
self.assertEqual(End(20, 'Medium', 5).price, 50320)
def testOriginalBonusEnhancement(self):
self.assertEqual(End(20, 'Medium', 1, [1]).price, 8320)
def testOriginalBonusEnhancementOneOne(self):
self.assertEqual(End(20, 'Medium', 1, [1,1]).price, 18320)
def testOriginalBonusEnhancementOneOne(self):
self.assertEqual(End(20, 'Medium', 1, [1,2]).price, 32320)
def testPrint(self):
self.assertEqual(str(End(20, 'Small', 1, [1,2]))+'', '+1 Small Steel Aquatic Greataxe')
if __name__ == '__main__':
unittest.main()
@aloisdg

aloisdg commented Mar 23, 2018

Copy link
Copy Markdown
Author

TDD ftw

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment