All user data for FoundryVTT. Includes worlds, systems, modules, and any asset in the "foundryuserdata" directory. Does NOT include the FoundryVTT installation itself.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

294 lines
14 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. <form autocomplete="off" data-tooltip-class="pf2e">
  2. <div class="attribute-rows">
  3. <header class="row{{#if manual}} not-eligible{{/if}}">
  4. <div class="row-heading">
  5. <h3>{{localize "PF2E.Actor.Character.AttributeBuilder.Title"}}</h3>
  6. </div>
  7. <div class="attributes">
  8. {{#each attributeModifiers as |attribute key|}}
  9. <div class="row-column">
  10. <h3>{{localize (concat "PF2E.AbilityId." key)}}</h3>
  11. </div>
  12. {{/each}}
  13. </div>
  14. </header>
  15. <!-- ANCESTRY BOOSTS -->
  16. <section class="row{{#if manual}} not-eligible{{/if}}" data-section="ancestry">
  17. {{#if ancestryBoosts}}
  18. <div class="row-heading">
  19. {{#if ancestryBoosts.remaining}}<div class="remaining extra">{{ancestryBoosts.remaining}}</div>{{/if}}
  20. <img src="{{ancestry.img}}" alt="{{ancestry.name}}" loading="lazy" />
  21. <div class="label">
  22. <div class="title">{{localize "TYPES.Item.ancestry"}}</div>
  23. <div class="description" data-tooltip-content="#{{actor.id}}-ancestry-tooltip">{{ancestry.name}}</div>
  24. <label class="extra">
  25. {{localize "PF2E.Actor.Character.AttributeBuilder.AlternateBoostsLabel"}}<input type="checkbox" {{checked ancestryBoosts.alternate}} data-action="toggle-alternate-ancestry-boosts">
  26. </label>
  27. </div>
  28. </div>
  29. {{else}}
  30. <div class="row-heading">
  31. <div class="label">
  32. <div class="title">{{localize "TYPES.Item.ancestry"}}</div>
  33. <div class="description">{{localize "PF2E.Actor.Character.AttributeBuilder.NotSelected"}}</div>
  34. </div>
  35. </div>
  36. {{/if}}
  37. {{> attributeRow buttons=ancestryBoosts.buttons fallback="PF2E.Actor.Character.AttributeBuilder.AncestryMissingHelp"}}
  38. <div class="hover-content" id="{{actor.id}}-ancestry-tooltip">
  39. <h2>{{localize "PF2E.Actor.Character.AttributeBuilder.Boosts"}}</h2>
  40. <ul class="boost-details">
  41. {{#each ancestryBoosts.labels as |boost|}}
  42. <li><i class="fa-solid fa-circle"></i>{{boost}}</li>
  43. {{/each}}
  44. </ul>
  45. <h2>{{localize "PF2E.Actor.Character.AttributeBuilder.Flaws"}}</h2>
  46. <ul class="boost-details">
  47. {{#each ancestryBoosts.flawLabels as |flaw|}}
  48. <li><i class="fa-solid fa-circle"></i>{{flaw}}</li>
  49. {{/each}}
  50. </ul>
  51. </div>
  52. </section>
  53. <!-- ANCESTRY VOLUNTARY FLAWS -->
  54. <section class="row{{#if manual}} not-eligible{{/if}} voluntary-flaw-row" data-section="voluntary">
  55. {{#if ancestry}}
  56. <div class="row-heading">
  57. {{#if voluntaryFlaws.remaining}}<div class="remaining extra">{{voluntaryFlaws.remaining}}</div>{{/if}}
  58. <div class="label">
  59. <div class="description" data-tooltip="PF2E.Actor.Character.AttributeBuilder.VoluntaryFlaw.Description">
  60. {{localize "PF2E.Actor.Character.AttributeBuilder.VoluntaryFlaw.Title"}}
  61. </div>
  62. <label class="extra" data-tooltip="PF2E.Actor.Character.AttributeBuilder.VoluntaryFlaw.LegacyDescription">
  63. {{localize "PF2E.Actor.Character.AttributeBuilder.LegacyFlaws"}} <i class="fa-solid fa-info-circle small"></i>
  64. <input type="checkbox" data-action="toggle-legacy-voluntary-flaw" {{checked legacyFlaws}}>
  65. </label>
  66. </div>
  67. </div>
  68. {{> attributeRow buttons=voluntaryFlaws.buttons}}
  69. {{/if}}
  70. </section>
  71. <hr />
  72. <!-- BACKGROUND BOOSTS -->
  73. <section class="row{{#if manual}} not-eligible{{/if}}" data-section="background">
  74. {{#if backgroundBoosts}}
  75. <div class="row-heading" data-tooltip-content="#{{actor.id}}-background-tooltip">
  76. {{#if backgroundBoosts.remaining}}<div class="remaining extra">{{backgroundBoosts.remaining}}</div>{{/if}}
  77. <img src="{{background.img}}" alt="{{background.name}}" loading="lazy" />
  78. <div class="label">
  79. <div class="title">{{localize "PF2E.Background"}}</div>
  80. <div class="description">{{background.name}}</div>
  81. </div>
  82. </div>
  83. {{else}}
  84. <div class="row-heading">
  85. <div class="label">
  86. <div class="title">{{localize "TYPES.Item.background"}}</div>
  87. <div class="description">{{localize "PF2E.Actor.Character.AttributeBuilder.NotSelected"}}</div>
  88. </div>
  89. </div>
  90. {{/if}}
  91. {{> attributeRow buttons=backgroundBoosts.buttons fallback="PF2E.Actor.Character.AttributeBuilder.BackgroundMissingHelp"}}
  92. <div class="hover-content" id="{{actor.id}}-background-tooltip">
  93. {{#if backgroundBoosts.tooltip}}
  94. {{backgroundBoosts.tooltip}}
  95. {{else}}
  96. <h2>{{localize "PF2E.Actor.Character.AttributeBuilder.Boosts"}}</h2>
  97. <ul class="boost-details">
  98. {{#each backgroundBoosts.labels as |boost|}}
  99. {{#if boost}}
  100. <li><i class="fa-solid fa-circle"></i>{{boost}}</li>
  101. {{/if}}
  102. {{/each}}
  103. </ul>
  104. {{/if}}
  105. </div>
  106. </section>
  107. <hr />
  108. <!-- CLASS BOOSTS -->
  109. <section class="row{{#if manual}} not-eligible{{/if}}">
  110. {{#if class}}
  111. <div class="row-heading">
  112. <img src="{{class.img}}" alt="{{class.name}}" loading="lazy" />
  113. <div>
  114. <div class="title">{{localize "TYPES.Item.class"}}</div>
  115. <div class="description">{{class.name}}</div>
  116. </div>
  117. </div>
  118. <div class="attributes">
  119. {{#each attributes as |key attribute|}}
  120. <div class="row-column">
  121. <button type="button" data-action="class-key-attribute" data-key="{{key}}" data-attribute="{{attribute}}"
  122. class="boost key-attribute
  123. {{~#if (not (includes ../keyOptions attribute))}} hidden{{/if}}
  124. {{~#if (eq ../class.system.keyAbility.selected attribute)}} selected{{/if}}
  125. {{~#if ../manual}} hidden{{/if}}"
  126. >
  127. <i class="fa-solid fa-fw fa-key key-attribute"></i>
  128. <span>{{localize "PF2E.Actor.Character.AttributeBuilder.KeyIcon"}}</span>
  129. </button>
  130. </div>
  131. {{/each}}
  132. </div>
  133. {{else}}
  134. <div class="row-heading">
  135. <div class="label">
  136. <div class="title">{{localize "TYPES.Item.class"}}</div>
  137. <div class="description">{{localize "PF2E.Actor.Character.AttributeBuilder.NotSelected"}}</div>
  138. </div>
  139. </div>
  140. <div class="full-row">{{localize "PF2E.Actor.Character.AttributeBuilder.ClassMissingHelp"}}</div>
  141. {{/if}}
  142. </section>
  143. <hr />
  144. <div class="row{{#if manual}} not-eligible{{/if}}">
  145. <div class="row-heading">
  146. <div class="label">
  147. <div class="title">{{localize "PF2E.AbilityFree"}}</div>
  148. </div>
  149. </div>
  150. </div>
  151. {{#each levelBoosts as |boosts|}}
  152. <section
  153. class="row{{#if ../manual}} not-eligible{{/if}}{{#if (not boosts.eligible)}} not-eligible{{/if}}"
  154. {{#if boosts.isApex}}data-section="apex"{{else}}data-level="{{boosts.level}}"{{/if~}}
  155. >
  156. <div class="row-heading">
  157. {{#if remaining}}<div class="remaining extra">{{remaining}}</div>{{/if}}
  158. <div class="label">
  159. <div class="description">
  160. {{~#if (eq boosts.level 17)~}}
  161. {{localize "PF2E.TraitApex"}}
  162. {{~else if (eq boosts.minLevel boosts.level)~}}
  163. {{localize "PF2E.LevelN" level=boosts.level}}
  164. {{~else~}}
  165. {{localize "PF2E.LevelRange" minLevel=boosts.minLevel level=boosts.level}}
  166. {{~/if~}}
  167. </div>
  168. </div>
  169. </div>
  170. {{> attributeRow buttons=boosts.buttons isApex=boosts.isApex}}
  171. </section>
  172. {{/each}}
  173. <section class="row summary-row">
  174. <div class="row-heading">
  175. <aside class="hint-container">
  176. <h3>{{localize "PF2E.Actor.Character.AttributeBuilder.InputMethod.Title"}}</h3>
  177. <p>{{localize "PF2E.Actor.Character.AttributeBuilder.InputMethod.Description"}}</p>
  178. <label>
  179. <input type="checkbox" name="toggle-manual-mode"{{checked manual}}>
  180. {{localize "PF2E.Actor.Character.AttributeBuilder.InputMethod.Manual"}}
  181. </label>
  182. </aside>
  183. </div>
  184. <div class="attributes">
  185. {{#each attributeModifiers as |attribute key|}}
  186. <div class="row-column">
  187. {{#if ../manual}}
  188. <button type="button" data-action="class-key-attribute" data-key="{{lookup ../attributes key}}" data-attribute="{{key}}"
  189. class="boost{{#if (eq ../manualKeyAttribute key)}} selected{{/if}}"
  190. tabindex="-1"
  191. >
  192. <i class="fa-solid fa-fw fa-key"></i>
  193. <span>{{localize "PF2E.Actor.Character.AttributeBuilder.KeyIcon"}}</span>
  194. </button>
  195. <input type="text" data-property="system.abilities.{{key}}.mod" name="system.abilities.{{key}}.mod" value="{{attribute.mod}}" data-dtype="Number" placeholder="0" step="0.5">
  196. {{else}}
  197. <button type="button" class="boost hidden"></button>
  198. <div class="value">{{attribute.mod}}</div>
  199. {{/if}}
  200. <h4>{{localize attribute.label}}</h4>
  201. </div>
  202. {{/each}}
  203. <button class="complete" type="button" data-action="close">{{localize "PF2E.Actor.Character.AttributeBuilder.Complete"}}</button>
  204. </div>
  205. </section>
  206. </div>
  207. <div class="row background-stripes">
  208. <div class="row-heading"></div>
  209. <div class="attributes">
  210. <div></div>
  211. <div></div>
  212. <div></div>
  213. <div></div>
  214. <div></div>
  215. <div></div>
  216. </div>
  217. </div>
  218. </form>
  219. {{#*inline "attributeRow"}}
  220. {{#if buttons}}
  221. <div class="attributes">
  222. {{#each buttons as |state|}}
  223. <div class="row-column">
  224. {{#if ../isApex}}
  225. {{> boostButton type="apex" attribute=state.ability button=state.boost}}
  226. {{else}}
  227. {{#if flaw}}
  228. {{> boostButton type="flaw" attribute=state.ability button=state.flaw}}
  229. {{/if}}
  230. {{#if boost}}
  231. {{> boostButton type="boost" attribute=state.ability button=state.boost}}
  232. {{/if}}
  233. {{/if}}
  234. </div>
  235. {{/each}}
  236. </div>
  237. {{else if fallback}}
  238. <div class="full-row">{{localize fallback}}</div>
  239. {{/if}}
  240. {{/inline}}
  241. {{#*inline "boostButton"}}
  242. {{#if button.second}}
  243. <div class="flaw-buttons">
  244. {{> boostButtonSingle button=button type=type number="first"}}
  245. {{> boostButtonSingle button=button.second type=type number="second"}}
  246. </div>
  247. {{else}}
  248. {{> boostButtonSingle button=button type=type}}
  249. {{/if}}
  250. {{#*inline "boostButtonSingle"}}
  251. <button
  252. type="button"
  253. data-attribute="{{attribute}}"
  254. data-action="{{type}}"
  255. class="boost-button {{type}} {{number}}{{#if button.selected}} selected{{#if button.partial}} partial{{/if}}{{/if}}{{#if button.locked}} locked{{/if}}"
  256. {{disabled (and button.disabled (not button.selected))}}
  257. >
  258. {{#if button.locked}}<i class="fa-solid fa-lock"></i>{{/if}}
  259. {{#if (eq number "second")}}
  260. <span>x2</span>
  261. {{else if (eq type "flaw")}}
  262. <span>{{localize "PF2E.Actor.Character.AttributeBuilder.Flaw"}}</span>
  263. {{else}}
  264. <span>
  265. {{~#if button.partial~}}
  266. {{localize "PF2E.Actor.Character.AttributeBuilder.Partial"}}
  267. {{~else if (eq type "apex")~}}
  268. {{localize "PF2E.Actor.Character.AttributeBuilder.Increase"}}
  269. {{~else~}}
  270. {{localize "PF2E.Actor.Character.AttributeBuilder.Boost"}}
  271. {{~/if~}}
  272. </span>
  273. {{/if}}
  274. </button>
  275. {{/inline}}
  276. {{/inline}}