Created
October 22, 2018 03:53
-
-
Save poltergeisha/92e5f33772e59db6ad7acfff465eff1e to your computer and use it in GitHub Desktop.
Try Again
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html><head><link href='http://fonts.googleapis.com/css?family=Lora:700' rel='stylesheet' type='text/css'/><link href='http://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic,700italic' rel='stylesheet' type='text/css'/><meta charset='utf-8'/><title>D&D 5e Statblock - Animated Armor</title><style> | |
| body { | |
| margin: 0; | |
| } | |
| stat-block { | |
| /* A bit of margin for presentation purposes, to show off the drop | |
| shadow. */ | |
| margin-left: 20px; | |
| margin-top: 20px; | |
| } | |
| </style></head><body><template id='tapered-rule'> | |
| <style> | |
| svg { | |
| fill: #922610; | |
| /* Stroke is necessary for good antialiasing in Chrome. */ | |
| stroke: #922610; | |
| margin-top: 0.7em; | |
| margin-bottom: 0.35em; | |
| } | |
| </style> | |
| <svg height='5' width='400'> | |
| <polyline points='0,0 400,2.5 0,5'></polyline> | |
| </svg> | |
| </template><script> | |
| (function(window, document) { | |
| var elemName = 'tapered-rule'; | |
| var thatDoc = document; | |
| var thisDoc = (thatDoc.currentScript || thatDoc._currentScript).ownerDocument; | |
| var proto = Object.create(HTMLElement.prototype, { | |
| createdCallback: { | |
| value: function() { | |
| var template = thisDoc.getElementById(elemName); | |
| var clone = thatDoc.importNode(template.content, true); | |
| this.createShadowRoot().appendChild(clone); | |
| } | |
| } | |
| }); | |
| thatDoc.registerElement(elemName, {prototype: proto}); | |
| })(window, document); | |
| </script><template id='top-stats'> | |
| <tapered-rule></tapered-rule> | |
| <content></content> | |
| <tapered-rule></tapered-rule> | |
| </template><script> | |
| (function(window, document) { | |
| var elemName = 'top-stats'; | |
| var thatDoc = document; | |
| var thisDoc = (thatDoc.currentScript || thatDoc._currentScript).ownerDocument; | |
| var proto = Object.create(HTMLElement.prototype, { | |
| createdCallback: { | |
| value: function() { | |
| var template = thisDoc.getElementById(elemName); | |
| var clone = thatDoc.importNode(template.content, true); | |
| this.createShadowRoot().appendChild(clone); | |
| } | |
| } | |
| }); | |
| thatDoc.registerElement(elemName, {prototype: proto}); | |
| })(window, document); | |
| </script><template id='creature-heading'> | |
| <style> | |
| ::content > h1 { | |
| font-family: 'Lora', 'Calisto MT', 'Bookman Old Style', Bookman, | |
| 'Goudy Old Style', Garamond, 'Hoefler Text', | |
| 'Bitstream Charter', Georgia, serif; | |
| color: #7A200D; | |
| font-weight: 700; | |
| margin-top: -6px; | |
| margin-bottom: -2px; | |
| font-size: 25px; | |
| letter-spacing: 2px; | |
| font-variant: small-caps; | |
| } | |
| ::content > h2 { | |
| font-weight: normal; | |
| font-style: italic; | |
| font-size: 12px; | |
| margin: 0; | |
| } | |
| </style> | |
| <content select='h1'></content> | |
| <content select='h2'></content> | |
| </template><script> | |
| (function(window, document) { | |
| var elemName = 'creature-heading'; | |
| var thatDoc = document; | |
| var thisDoc = (thatDoc.currentScript || thatDoc._currentScript).ownerDocument; | |
| var proto = Object.create(HTMLElement.prototype, { | |
| createdCallback: { | |
| value: function() { | |
| var template = thisDoc.getElementById(elemName); | |
| var clone = thatDoc.importNode(template.content, true); | |
| this.createShadowRoot().appendChild(clone); | |
| } | |
| } | |
| }); | |
| thatDoc.registerElement(elemName, {prototype: proto}); | |
| })(window, document); | |
| </script><template id='abilities-block'> | |
| <style> | |
| :host { | |
| color: #7A200D; | |
| } | |
| table { | |
| width: 100%; | |
| border: 0px; | |
| border-collapse: collapse; | |
| } | |
| th, td { | |
| width: 50px; | |
| text-align: center; | |
| } | |
| </style> | |
| <tapered-rule></tapered-rule> | |
| <table> | |
| <tbody><tr> | |
| <th>STR</th> | |
| <th>DEX</th> | |
| <th>CON</th> | |
| <th>INT</th> | |
| <th>WIS</th> | |
| <th>CHA</th> | |
| </tr> | |
| <tr> | |
| <td id='str'></td> | |
| <td id='dex'></td> | |
| <td id='con'></td> | |
| <td id='int'></td> | |
| <td id='wis'></td> | |
| <td id='cha'></td> | |
| </tr> | |
| </tbody></table> | |
| <tapered-rule></tapered-rule> | |
| </template><script> | |
| (function(window, document) { | |
| function abilityModifier(abilityScore) { | |
| var score = parseInt(abilityScore, 10); | |
| return Math.floor((score - 10) / 2); | |
| } | |
| function formattedModifier(abilityModifier) { | |
| if (abilityModifier >= 0) { | |
| return '+' + abilityModifier; | |
| } | |
| // This is an en dash, NOT a 'normal' dash. The minus sign needs to be more | |
| // visible. | |
| return '–' + Math.abs(abilityModifier); | |
| } | |
| function abilityText(abilityScore) { | |
| return [String(abilityScore), | |
| ' (', | |
| formattedModifier(abilityModifier(abilityScore)), | |
| ')'].join(''); | |
| } | |
| var elemName = 'abilities-block'; | |
| var thatDoc = document; | |
| var thisDoc = (thatDoc.currentScript || thatDoc._currentScript).ownerDocument; | |
| var proto = Object.create(HTMLElement.prototype, { | |
| createdCallback: { | |
| value: function() { | |
| var template = thisDoc.getElementById(elemName); | |
| var clone = thatDoc.importNode(template.content, true); | |
| var root = this.createShadowRoot().appendChild(clone); | |
| } | |
| }, | |
| attachedCallback: { | |
| value: function() { | |
| var root = this.shadowRoot; | |
| for (var i = 0; i < this.attributes.length; i++) { | |
| var attribute = this.attributes[i]; | |
| var abilityShortName = attribute.name.split('-')[1]; | |
| root.getElementById(abilityShortName).textContent = | |
| abilityText(attribute.value); | |
| } | |
| } | |
| } | |
| }); | |
| thatDoc.registerElement(elemName, {prototype: proto}); | |
| })(window, document); | |
| </script><template id='property-block'> | |
| <style> | |
| ::content > h4 { | |
| display: inline; | |
| font-weight: bold; | |
| font-style: italic; | |
| } | |
| ::content > p { | |
| display: inline; | |
| } | |
| p { | |
| margin-top: 0.3em; | |
| margin-bottom: 0.9em; | |
| } | |
| </style> | |
| <p><content></content></p> | |
| </template><script> | |
| (function(window, document) { | |
| var elemName = 'property-block'; | |
| var thatDoc = document; | |
| var thisDoc = (thatDoc.currentScript || thatDoc._currentScript).ownerDocument; | |
| var proto = Object.create(HTMLElement.prototype, { | |
| createdCallback: { | |
| value: function() { | |
| var template = thisDoc.getElementById(elemName); | |
| var clone = thatDoc.importNode(template.content, true); | |
| this.createShadowRoot().appendChild(clone); | |
| } | |
| } | |
| }); | |
| thatDoc.registerElement(elemName, {prototype: proto}); | |
| })(window, document); | |
| </script><template id='property-line'> | |
| <style> | |
| :host { | |
| color: #7A200D; | |
| } | |
| div { | |
| /* Indenting everything EXCEPT the first line. */ | |
| text-indent: -1em; | |
| margin-left: 1em; | |
| } | |
| ::content > * { | |
| display: inline; | |
| } | |
| ::content > p { | |
| margin-left: 0.4em; | |
| } | |
| </style> | |
| <!-- Specific select expressions needed instead of just one <content> | |
| to avoid the original witespace between the elements. --> | |
| <div><content select='h4'></content><content select='p'></content></div> | |
| </template><script> | |
| (function(window, document) { | |
| var elemName = 'property-line'; | |
| var thatDoc = document; | |
| var thisDoc = (thatDoc.currentScript || thatDoc._currentScript).ownerDocument; | |
| var proto = Object.create(HTMLElement.prototype, { | |
| createdCallback: { | |
| value: function() { | |
| var template = thisDoc.getElementById(elemName); | |
| var clone = thatDoc.importNode(template.content, true); | |
| this.createShadowRoot().appendChild(clone); | |
| } | |
| } | |
| }); | |
| thatDoc.registerElement(elemName, {prototype: proto}); | |
| })(window, document); | |
| </script><template id='stat-block'> | |
| <style> | |
| :host { | |
| width: 424px; | |
| display: block; | |
| } | |
| #content-wrap { | |
| font-family: 'Noto Sans', 'Myriad Pro', Calibri, Helvetica, Arial, | |
| sans-serif; | |
| font-size: 13px; | |
| display: block; | |
| background: #FDF1DC; | |
| padding: 0.6em; | |
| border: 1px #DDD solid; | |
| box-shadow: 0 0 1.5em #867453; | |
| /* We don't want the box-shadow in front of the bar divs. */ | |
| position: relative; | |
| z-index: 0; | |
| /* Leaving room for the two bars to protrude outwards */ | |
| margin-left: 2px; | |
| margin-right: 2px; | |
| } | |
| ::content > h3 { | |
| border-bottom: 1px solid #7A200D; | |
| color: #7A200D; | |
| font-size: 18px; | |
| font-variant: small-caps; | |
| font-weight: normal; | |
| letter-spacing: 1px; | |
| margin: 0; | |
| } | |
| /* Last block shouldn't have margin, too much white space. */ | |
| ::content property-block:last-child /deep/ p { | |
| margin-bottom: 0; | |
| } | |
| .bar { | |
| height: 5px; | |
| background: #E69A28; | |
| border: 1px solid #000; | |
| position: relative; | |
| z-index: 1; | |
| } | |
| </style> | |
| <div class='bar'></div> | |
| <div id='content-wrap'> | |
| <content></content> | |
| </div> | |
| <div class='bar'></div> | |
| </template><script> | |
| (function(window, document) { | |
| var elemName = 'stat-block'; | |
| var thatDoc = document; | |
| var thisDoc = (thatDoc.currentScript || thatDoc._currentScript).ownerDocument; | |
| var proto = Object.create(HTMLElement.prototype, { | |
| createdCallback: { | |
| value: function() { | |
| var template = thisDoc.getElementById(elemName); | |
| var clone = thatDoc.importNode(template.content, true); | |
| this.createShadowRoot().appendChild(clone); | |
| } | |
| } | |
| }); | |
| thatDoc.registerElement(elemName, {prototype: proto}); | |
| })(window, document); | |
| </script> | |
| <stat-block> | |
| <creature-heading> | |
| <h1>Animated Armor</h1> | |
| <h2>Medium construct, unaligned</h2> | |
| </creature-heading> | |
| <top-stats> | |
| <property-line> | |
| <h4>Armor Class</h4> | |
| <p>18 (natural armor) </p> | |
| </property-line> | |
| <property-line> | |
| <h4>Hit Points</h4> | |
| <p>33 (6d8 + 6)</p> | |
| </property-line> | |
| <property-line> | |
| <h4>Speed</h4> | |
| <p>25 ft.</p> | |
| </property-line> | |
| <abilities-block data-str='14' | |
| data-dex='11' | |
| data-con='13' | |
| data-int='1' | |
| data-wis='3' | |
| data-cha='1'></abilities-block> | |
| <property-line> | |
| <h4>Damage Immunities</h4> | |
| <p>poison, psychic</p> | |
| </property-line> | |
| <property-line> | |
| <h4>Condition Immunities</h4> | |
| <p>blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned</p> | |
| </property-line> | |
| <property-line> | |
| <h4>Senses</h4> | |
| <p>blindsight 60 ft. (blind beyond this radius), passive Perception 6</p> | |
| </property-line> | |
| <property-line> | |
| <h4>Languages</h4> | |
| <p>—</p> | |
| </property-line> | |
| <property-line> | |
| <h4>Challenge</h4> | |
| <p>2 (450 XP)</p> | |
| </property-line> | |
| </top-stats> | |
| <property-block> | |
| <h4>Antimagic Susceptibility.</h4> | |
| <p>The armor is incapacitated while in the area of an <i>antimagic field</i>. If targeted by <i>dispel magic</i>, the armor must succeed on a Constitution saving throw against the caster’s spell save DC or fall unconscious for 1 minute.</p> | |
| </property-block> | |
| <property-block> | |
| <h4>False Appearance.</h4> | |
| <p>While the armor remains motionless, it is indistinguishable from a normal suit of armor.</p> | |
| </property-block> | |
| <h3>Actions</h3> | |
| <property-block> | |
| <h4>Multiattack.</h4> | |
| <p> The armor makes two melee attacks.</p> | |
| </property-block> | |
| <property-block> | |
| <h4>Slam.</h4> | |
| <p><i>Melee Weapon Attack:</i> +4 to hit, reach 5 ft., one target. | |
| <i>Hit:</i> 5 (1d6+2) bludgeoning damage.</p> | |
| </property-block> | |
| </stat-block> | |
| </body></html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment