OGC:Harmonica Rifle (5e Equipment)
Harmonica Rifle
Martial Ranged Weapons
Weapon | Cost | Damage | Weight | Properties |
---|---|---|---|---|
Harmonica Rifle | 800 gp | 2d8 piercing | 12 lbs. | Ammunition (range 200/800), capacity (10), loud, misalignment, two-handed |
These early attempts at true multi-shot guns are cap & ball firearms that use a “slide” to move the next bullet into position (the slides resemble harmonicas, hence the name). There are three big disadvantages to this. The first is that the slide must be manually moved, turning even a pistol into a two-handed weapon. The second is that, given the manual action, it’s easily to misalign (and, after the first shot or two, the slide can become hot). The third is that the heft of the slide tends to unbalance the weapon.
Back to Open Game Content → Equipment → Mundane Weapons → Martial Weapons → Two-Handed Ranged Weapons
Back to Main Page → Publication List → Publishers → EN World → EN Publishing
gollark: https://aphyr.com/posts/342-typing-the-technical-interview
gollark: If this worked as expected, in theory you could do```pythonraise quibble("abcd")```but alas, no.
gollark: But which runs much faster.
gollark: ```pythonfrom requests_futures.sessions import FuturesSessionimport concurrent.futures as futuresimport randomtry: import cPickle as pickleexcept ImportError: import pickletry: words_to_synonyms = pickle.load(open(".wtscache")) synonyms_to_words = pickle.load(open(".stwcache"))except: words_to_synonyms = {} synonyms_to_words = {}def add_to_key(d, k, v): d[k] = d.get(k, set()).union(set(v))def add_synonyms(syns, word): for syn in syns: add_to_key(synonyms_to_words, syn, [word]) add_to_key(words_to_synonyms, word, syns)def concat(list_of_lists): return sum(list_of_lists, [])def add_words(words): s = FuturesSession(max_workers=100) future_to_word = {s.get("https://api.datamuse.com/words", params={"ml": word}): word for word in words} future_to_word.update({s.get("https://api.datamuse.com/words", params={"ml": word, "v": "enwiki"}): word for word in words}) for future in futures.as_completed(future_to_word): word = future_to_word[future] try: data = future.result().json() except Exception as exc: print(f"{exc} fetching {word}") else: add_synonyms([w["word"] for w in data], word)def getattr_hook(obj, key): results = list(synonyms_to_words.get(key, set()).union(words_to_synonyms.get(key, set()))) if len(results) > 0: return obj.__getattribute__(random.choice(results)) else: raise AttributeError(f"Attribute {key} not found.")def wrap(obj): add_words(dir(obj)) obj.__getattr__ = lambda key: getattr_hook(obj, key)wrap(__builtins__)print(words_to_synonyms["Exception"])```New version which tends to reduce weirder output.
gollark: https://github.com/joelgrus/fizz-buzz-tensorflow/blob/master/Fizz%20Buzz%20in%20Tensorflow.ipynb
This article is issued from Dandwiki. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.