@jjlmoya/utils-creative 1.26.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/de.ts +2 -2
  3. package/src/category/i18n/en.ts +2 -2
  4. package/src/category/i18n/es.ts +2 -2
  5. package/src/category/i18n/fr.ts +2 -2
  6. package/src/category/i18n/id.ts +2 -2
  7. package/src/category/i18n/it.ts +2 -2
  8. package/src/category/i18n/ja.ts +2 -2
  9. package/src/category/i18n/ko.ts +2 -2
  10. package/src/category/i18n/nl.ts +2 -2
  11. package/src/category/i18n/pl.ts +2 -2
  12. package/src/category/i18n/pt.ts +2 -2
  13. package/src/category/i18n/ru.ts +2 -2
  14. package/src/category/i18n/sv.ts +2 -2
  15. package/src/category/i18n/tr.ts +2 -2
  16. package/src/category/i18n/zh.ts +2 -2
  17. package/src/category/seo.astro +1 -1
  18. package/src/components/PreviewNavSidebar.astro +1 -1
  19. package/src/components/PreviewToolbar.astro +1 -1
  20. package/src/env.d.ts +1 -1
  21. package/src/pages/index.astro +1 -1
  22. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  23. package/src/tests/category_seo_quality.test.ts +74 -0
  24. package/src/tests/faq_count.test.ts +1 -1
  25. package/src/tests/mocks/astro_mock.js +1 -1
  26. package/src/tests/no_h1_in_components.test.ts +1 -1
  27. package/src/tests/seo_parity.test.ts +2 -2
  28. package/src/tests/seo_translation_completeness.test.ts +75 -0
  29. package/src/tests/seo_wellformed_export.test.ts +65 -0
  30. package/src/tests/tool_validation.test.ts +17 -17
  31. package/src/tool/bead-pattern-generator/bibliography.astro +8 -8
  32. package/src/tool/bead-pattern-generator/i18n/de.ts +111 -111
  33. package/src/tool/bead-pattern-generator/i18n/en.ts +111 -111
  34. package/src/tool/bead-pattern-generator/i18n/es.ts +104 -104
  35. package/src/tool/bead-pattern-generator/i18n/fr.ts +111 -111
  36. package/src/tool/bead-pattern-generator/i18n/id.ts +111 -111
  37. package/src/tool/bead-pattern-generator/i18n/it.ts +111 -111
  38. package/src/tool/bead-pattern-generator/i18n/ja.ts +111 -111
  39. package/src/tool/bead-pattern-generator/i18n/ko.ts +111 -111
  40. package/src/tool/bead-pattern-generator/i18n/nl.ts +111 -111
  41. package/src/tool/bead-pattern-generator/i18n/pl.ts +111 -111
  42. package/src/tool/bead-pattern-generator/i18n/pt.ts +111 -111
  43. package/src/tool/bead-pattern-generator/i18n/ru.ts +111 -111
  44. package/src/tool/bead-pattern-generator/i18n/sv.ts +111 -111
  45. package/src/tool/bead-pattern-generator/i18n/tr.ts +111 -111
  46. package/src/tool/bead-pattern-generator/i18n/zh.ts +111 -111
  47. package/src/tool/bead-pattern-generator/seo.astro +19 -19
  48. package/src/tool/dice-roller/bibliography.astro +8 -8
  49. package/src/tool/dice-roller/i18n/de.ts +134 -134
  50. package/src/tool/dice-roller/i18n/en.ts +134 -134
  51. package/src/tool/dice-roller/i18n/es.ts +125 -125
  52. package/src/tool/dice-roller/i18n/fr.ts +134 -134
  53. package/src/tool/dice-roller/i18n/id.ts +134 -134
  54. package/src/tool/dice-roller/i18n/it.ts +134 -134
  55. package/src/tool/dice-roller/i18n/ja.ts +134 -134
  56. package/src/tool/dice-roller/i18n/ko.ts +134 -134
  57. package/src/tool/dice-roller/i18n/nl.ts +134 -134
  58. package/src/tool/dice-roller/i18n/pl.ts +134 -134
  59. package/src/tool/dice-roller/i18n/pt.ts +134 -134
  60. package/src/tool/dice-roller/i18n/ru.ts +134 -134
  61. package/src/tool/dice-roller/i18n/sv.ts +134 -134
  62. package/src/tool/dice-roller/i18n/tr.ts +134 -134
  63. package/src/tool/dice-roller/i18n/zh.ts +134 -134
  64. package/src/tool/dice-roller/seo.astro +15 -15
  65. package/src/tool/excuse-generator/bibliography.astro +8 -8
  66. package/src/tool/excuse-generator/i18n/de.ts +120 -120
  67. package/src/tool/excuse-generator/i18n/en.ts +120 -120
  68. package/src/tool/excuse-generator/i18n/es.ts +118 -118
  69. package/src/tool/excuse-generator/i18n/fr.ts +120 -120
  70. package/src/tool/excuse-generator/i18n/id.ts +120 -120
  71. package/src/tool/excuse-generator/i18n/it.ts +120 -120
  72. package/src/tool/excuse-generator/i18n/ja.ts +120 -120
  73. package/src/tool/excuse-generator/i18n/ko.ts +120 -120
  74. package/src/tool/excuse-generator/i18n/nl.ts +120 -120
  75. package/src/tool/excuse-generator/i18n/pl.ts +120 -120
  76. package/src/tool/excuse-generator/i18n/pt.ts +120 -120
  77. package/src/tool/excuse-generator/i18n/ru.ts +120 -120
  78. package/src/tool/excuse-generator/i18n/sv.ts +120 -120
  79. package/src/tool/excuse-generator/i18n/tr.ts +120 -120
  80. package/src/tool/excuse-generator/i18n/zh.ts +120 -120
  81. package/src/tool/excuse-generator/seo.astro +15 -15
  82. package/src/tool/fortune-cookie/bibliography.astro +8 -8
  83. package/src/tool/fortune-cookie/i18n/de.ts +124 -124
  84. package/src/tool/fortune-cookie/i18n/en.ts +124 -124
  85. package/src/tool/fortune-cookie/i18n/es.ts +125 -125
  86. package/src/tool/fortune-cookie/i18n/fr.ts +124 -124
  87. package/src/tool/fortune-cookie/i18n/id.ts +124 -124
  88. package/src/tool/fortune-cookie/i18n/it.ts +124 -124
  89. package/src/tool/fortune-cookie/i18n/ja.ts +124 -124
  90. package/src/tool/fortune-cookie/i18n/ko.ts +124 -124
  91. package/src/tool/fortune-cookie/i18n/nl.ts +124 -124
  92. package/src/tool/fortune-cookie/i18n/pl.ts +124 -124
  93. package/src/tool/fortune-cookie/i18n/pt.ts +124 -124
  94. package/src/tool/fortune-cookie/i18n/ru.ts +124 -124
  95. package/src/tool/fortune-cookie/i18n/sv.ts +124 -124
  96. package/src/tool/fortune-cookie/i18n/tr.ts +124 -124
  97. package/src/tool/fortune-cookie/i18n/zh.ts +124 -124
  98. package/src/tool/fortune-cookie/seo.astro +15 -15
  99. package/src/tool/synesthesia-painter/bibliography.astro +8 -8
  100. package/src/tool/synesthesia-painter/i18n/de.ts +118 -118
  101. package/src/tool/synesthesia-painter/i18n/en.ts +118 -118
  102. package/src/tool/synesthesia-painter/i18n/es.ts +110 -110
  103. package/src/tool/synesthesia-painter/i18n/fr.ts +118 -118
  104. package/src/tool/synesthesia-painter/i18n/id.ts +118 -118
  105. package/src/tool/synesthesia-painter/i18n/it.ts +118 -118
  106. package/src/tool/synesthesia-painter/i18n/ja.ts +118 -118
  107. package/src/tool/synesthesia-painter/i18n/ko.ts +118 -118
  108. package/src/tool/synesthesia-painter/i18n/nl.ts +118 -118
  109. package/src/tool/synesthesia-painter/i18n/pl.ts +118 -118
  110. package/src/tool/synesthesia-painter/i18n/pt.ts +118 -118
  111. package/src/tool/synesthesia-painter/i18n/ru.ts +118 -118
  112. package/src/tool/synesthesia-painter/i18n/sv.ts +118 -118
  113. package/src/tool/synesthesia-painter/i18n/tr.ts +118 -118
  114. package/src/tool/synesthesia-painter/i18n/zh.ts +118 -118
  115. package/src/tool/synesthesia-painter/seo.astro +15 -15
  116. package/src/tool/zalgo-generator/bibliography.astro +8 -8
  117. package/src/tool/zalgo-generator/i18n/de.ts +109 -109
  118. package/src/tool/zalgo-generator/i18n/en.ts +109 -109
  119. package/src/tool/zalgo-generator/i18n/es.ts +109 -109
  120. package/src/tool/zalgo-generator/i18n/fr.ts +109 -109
  121. package/src/tool/zalgo-generator/i18n/id.ts +109 -109
  122. package/src/tool/zalgo-generator/i18n/it.ts +109 -109
  123. package/src/tool/zalgo-generator/i18n/ja.ts +109 -109
  124. package/src/tool/zalgo-generator/i18n/ko.ts +109 -109
  125. package/src/tool/zalgo-generator/i18n/nl.ts +109 -109
  126. package/src/tool/zalgo-generator/i18n/pl.ts +109 -109
  127. package/src/tool/zalgo-generator/i18n/pt.ts +109 -109
  128. package/src/tool/zalgo-generator/i18n/ru.ts +109 -109
  129. package/src/tool/zalgo-generator/i18n/sv.ts +109 -109
  130. package/src/tool/zalgo-generator/i18n/tr.ts +109 -109
  131. package/src/tool/zalgo-generator/i18n/zh.ts +109 -109
  132. package/src/tool/zalgo-generator/seo.astro +15 -15
  133. package/src/types.ts +1 -1
@@ -1,134 +1,134 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import { bibliography } from '../bibliography';
3
- import type { DiceRollerLocaleContent } from '../index';
4
-
5
- const slug = 'dice-roller';
6
- const title = 'Dice Roller';
7
- const description = 'A complete dice simulator for your RPG and board games. Roll d4, d6, d8, d10, d12, d20 and d100 with modifiers and history.';
8
-
9
- const faq: DiceRollerLocaleContent['faq'] = [
10
- {
11
- question: 'How can I simulate a roll with advantage (D&D)?',
12
- answer: 'Add two d20 dice to the bag by clicking the d20 button twice. When rolling, observe the two individual results and keep the higher one. The displayed total will be the sum, but you can see each die separately in the result breakdown.',
13
- },
14
- {
15
- question: 'What does the green or red color on results mean?',
16
- answer: 'Green results indicate that die rolled its maximum possible value (a "critical"). Red results indicate the minimum value (a "1", the worst possible result). This makes it easy to spot crits and fumbles at a glance.',
17
- },
18
- {
19
- question: 'Can I add multiple dice of the same type?',
20
- answer: 'Yes. Each click on a die adds it to the bag. If you click the d6 three times, the bag will show "3d6". To reduce the count, click the "−" button that appears next to each die group in the bag.',
21
- },
22
- {
23
- question: 'Are digital dice as random as physical ones?',
24
- answer: 'Statistically, yes. Modern JavaScript engines use pseudorandom algorithms (xorshift128+) with very high quality uniform distribution. A real physical die can have small manufacturing imperfections that bias results; the digital die does not have that problem.',
25
- },
26
- {
27
- question: 'What is the d100 and how is it used?',
28
- answer: 'The d100 (or d%) generates a number from 1 to 100 and is used in percentage-based game systems, such as Call of Cthulhu or Warhammer Fantasy Roleplay. It represents "direct probability": if your Stealth skill is 65%, you need to roll 65 or less to succeed.',
29
- },
30
- ];
31
-
32
- const howTo: DiceRollerLocaleContent['howTo'] = [
33
- { name: 'Build the dice pool', text: 'Click the die buttons (d4, d6, d8...) to add them to your pool. Each click adds one die of the selected type. You can mix different types in the same roll.' },
34
- { name: 'Adjust the modifier', text: 'Use the "+" and "−" buttons next to the modifier to apply bonuses or penalties (like the ability modifier in D&D). The modifier is automatically added to the total.' },
35
- { name: 'Roll the dice', text: 'Press the "Roll Dice" button. The right panel shows the final total and the breakdown of each individual die, with crits (maximum) in green and fumbles (minimum) in red.' },
36
- { name: 'Check the history', text: 'Each roll is recorded in the history with the dice expression used, the total result, and the exact time. You can clear the history with the corresponding button.' },
37
- ];
38
-
39
- const faqSchema: WithContext<FAQPage> = {
40
- '@context': 'https://schema.org',
41
- '@type': 'FAQPage',
42
- mainEntity: faq.map((item) => ({
43
- '@type': 'Question',
44
- name: item.question,
45
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
46
- })),
47
- };
48
-
49
- const howToSchema: WithContext<HowTo> = {
50
- '@context': 'https://schema.org',
51
- '@type': 'HowTo',
52
- name: title,
53
- description,
54
- step: howTo.map((step) => ({
55
- '@type': 'HowToStep',
56
- name: step.name,
57
- text: step.text,
58
- })),
59
- };
60
-
61
- const appSchema: WithContext<SoftwareApplication> = {
62
- '@context': 'https://schema.org',
63
- '@type': 'SoftwareApplication',
64
- name: title,
65
- description,
66
- applicationCategory: 'UtilitiesApplication',
67
- operatingSystem: 'Web',
68
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
69
- inLanguage: 'en',
70
- };
71
-
72
- export const content: DiceRollerLocaleContent = {
73
- slug,
74
- title,
75
- description,
76
- faqTitle: 'Frequently Asked Questions',
77
- ui: {
78
- title: 'Dice Roller',
79
- description: 'May luck be with you.',
80
- rollBtn: 'Roll Dice',
81
- totalLabel: 'Total',
82
- historyLabel: 'History',
83
- clearHistoryBtn: 'Clear History',
84
- faqTitle: 'FAQ',
85
- bibliographyTitle: 'References',
86
- addDiceLabel: 'Add dice to the bag',
87
- bagLabel: 'Dice bag',
88
- emptyBagBtn: 'Empty',
89
- emptyBagText: 'Click the dice to add them',
90
- modifierLabel: 'Modifier',
91
- rollManyLabel: 'Roll $COUNT dice',
92
- rollOneLabel: 'Roll $COUNT die',
93
- preRollText: 'Add dice and roll',
94
- emptyHistoryText: 'Roll history will appear here'
95
- },
96
- seo: [
97
- { type: 'title', text: 'The Art of Randomness: History and Mathematics of Dice', level: 2 },
98
- { type: 'paragraph', html: 'Dice are one of humanity\'s oldest randomness generators. <strong>Astragali</strong> - ankle bones of sheep and goats - were used as primitive four-sided dice as far back as 5000 BC in Mesopotamia and Egypt. The evolution from carved bone to modern epoxy resin icosahedra is not just aesthetic: it is a journey through probability theory and game mechanics design.' },
99
- { type: 'title', text: 'The Standard Dice Family', level: 3 },
100
- { type: 'paragraph', html: 'The most widespread set of dice in role-playing games - popularized by <strong>Dungeons &amp; Dragons</strong> in 1974 - consists of the five Platonic solids plus two additional shapes: d4 (tetrahedron), d6 (cube), d8 (octahedron), d10 (pentagonal trapezohedron), d12 (dodecahedron), d20 (icosahedron) and d100 (percentile die). Each polyhedron guarantees uniform distribution: all faces have exactly the same probability of landing.' },
101
- { type: 'list', items: [
102
- '<strong>d4 - Tetrahedron:</strong> The most dangerous if stepped on barefoot. Four triangular faces, 25% probability per face. Commonly used for dagger damage or low-level spells.',
103
- '<strong>d6 - Cube:</strong> The most universal die. Present in all board games since the Egyptian senet. Its cubic geometry guarantees perfect equidistribution.',
104
- '<strong>d8 - Octahedron:</strong> The die of the spear or battle axe. Eight equilateral triangular faces. 12.5% probability per face.',
105
- '<strong>d10 - Pentagonal Trapezohedron:</strong> The only non-Platonic solid in the standard set. Two opposite faces per "vertex". Essential for the d100 (two d10 combined).',
106
- '<strong>d12 - Dodecahedron:</strong> The barbarian\'s die. Twelve pentagonal faces. Underrated in many systems, protagonist in D&D 5e Barbarian.',
107
- '<strong>d20 - Icosahedron:</strong> The king of RPG. Twenty triangular faces. Protagonist of the d20 system: determines success or failure of almost all actions.',
108
- '<strong>d100 - Percentile:</strong> Two d10 combined (tens + units). Defines fine probabilities in systems like Call of Cthulhu or Warhammer Fantasy.',
109
- ]},
110
- { type: 'stats', items: [
111
- { value: '5000 BC', label: 'First dice (astragali)', icon: 'mdi:history' },
112
- { value: '1974', label: 'D&D popularized the set', icon: 'mdi:sword' },
113
- { value: '7 types', label: 'Standard RPG dice', icon: 'mdi:dice-multiple' },
114
- { value: '2¹²⁸', label: 'JS random period', icon: 'mdi:function-variant' },
115
- ], columns: 4 },
116
- { type: 'title', text: 'Probabilities and Distribution Curves', level: 3 },
117
- { type: 'paragraph', html: 'When you roll a single die, you get a <strong>discrete uniform distribution</strong>: every result has exactly the same probability (1/n). But as soon as you combine multiple dice, mathematical magic transforms that flat curve into an <strong>approximate normal distribution</strong>. That is why 2d6 is not the same as 1d12: with two six-sided dice the probability of rolling a 7 is 6/36 ≈ 16.7%, while the extremes (2 and 12) only occur 2.8% of the time.' },
118
- { type: 'tip', title: 'Advantage and Disadvantage (D&D 5e)', html: 'The <strong>Advantage</strong> mechanic consists of rolling 2d20 and keeping the higher result. Mathematically, this raises the average from 10.5 to approximately 13.8. <strong>Disadvantage</strong> does the opposite: take the lower, dropping the average to about 7.2. Our roller lets you simulate this by adding two d20s to the bag and comparing the individual results.' },
119
- { type: 'title', text: 'Modifiers: The Bridge Between Dice and Character', level: 3 },
120
- { type: 'paragraph', html: 'In most RPG systems, the die does not act alone: a <strong>modifier</strong> representing the character\'s abilities is added or subtracted. In D&D 5e, a Strength modifier of +5 means you roll 1d20, add 5, and check the result against the enemy\'s Armor Class. Our roller includes a modifier control to faithfully reflect these mechanics.' },
121
- { type: 'tip', title: 'Dice Notation Standard', html: 'The <strong>XdY+Z</strong> notation is the de facto standard in role-playing games: X dice of Y faces with modifier Z. "3d6+2" means roll three six-sided dice and add 2 to the total. Our tool uses this notation in the history so you can easily share or record your rolls.' },
122
- { type: 'glossary', items: [
123
- { term: 'Critical Hit', definition: 'A roll of the maximum value on a die (e.g., rolling 20 on a d20). Usually triggers special bonus effects in most RPG systems.' },
124
- { term: 'Fumble / Nat 1', definition: 'Rolling the minimum value (1) on a die. Often results in a dramatic failure or negative consequence.' },
125
- { term: 'Dice Pool', definition: 'A collection of dice rolled simultaneously. The pool in our tool shows each die type grouped by count (e.g., 3d6 + 2d8).' },
126
- { term: 'Modifier', definition: 'A fixed number added or subtracted from a roll result, representing a character\'s skill, attribute bonus, or situational penalty.' },
127
- { term: 'Percentile Roll', definition: 'A roll using two d10 to produce a result from 1-100, used in skill-based systems where abilities are measured as percentages.' },
128
- ]},
129
- ],
130
- faq,
131
- bibliography,
132
- howTo,
133
- schemas: [faqSchema as any, howToSchema as any, appSchema],
134
- };
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { DiceRollerLocaleContent } from '../index';
4
+
5
+ const slug = 'dice-roller';
6
+ const title = 'Dice Roller';
7
+ const description = 'A complete dice simulator for your RPG and board games. Roll d4, d6, d8, d10, d12, d20 and d100 with modifiers and history.';
8
+
9
+ const faq: DiceRollerLocaleContent['faq'] = [
10
+ {
11
+ question: 'How can I simulate a roll with advantage (D&D)?',
12
+ answer: 'Add two d20 dice to the bag by clicking the d20 button twice. When rolling, observe the two individual results and keep the higher one. The displayed total will be the sum, but you can see each die separately in the result breakdown.',
13
+ },
14
+ {
15
+ question: 'What does the green or red color on results mean?',
16
+ answer: 'Green results indicate that die rolled its maximum possible value (a "critical"). Red results indicate the minimum value (a "1", the worst possible result). This makes it easy to spot crits and fumbles at a glance.',
17
+ },
18
+ {
19
+ question: 'Can I add multiple dice of the same type?',
20
+ answer: 'Yes. Each click on a die adds it to the bag. If you click the d6 three times, the bag will show "3d6". To reduce the count, click the "−" button that appears next to each die group in the bag.',
21
+ },
22
+ {
23
+ question: 'Are digital dice as random as physical ones?',
24
+ answer: 'Statistically, yes. Modern JavaScript engines use pseudorandom algorithms (xorshift128+) with very high quality uniform distribution. A real physical die can have small manufacturing imperfections that bias results; the digital die does not have that problem.',
25
+ },
26
+ {
27
+ question: 'What is the d100 and how is it used?',
28
+ answer: 'The d100 (or d%) generates a number from 1 to 100 and is used in percentage-based game systems, such as Call of Cthulhu or Warhammer Fantasy Roleplay. It represents "direct probability": if your Stealth skill is 65%, you need to roll 65 or less to succeed.',
29
+ },
30
+ ];
31
+
32
+ const howTo: DiceRollerLocaleContent['howTo'] = [
33
+ { name: 'Build the dice pool', text: 'Click the die buttons (d4, d6, d8...) to add them to your pool. Each click adds one die of the selected type. You can mix different types in the same roll.' },
34
+ { name: 'Adjust the modifier', text: 'Use the "+" and "−" buttons next to the modifier to apply bonuses or penalties (like the ability modifier in D&D). The modifier is automatically added to the total.' },
35
+ { name: 'Roll the dice', text: 'Press the "Roll Dice" button. The right panel shows the final total and the breakdown of each individual die, with crits (maximum) in green and fumbles (minimum) in red.' },
36
+ { name: 'Check the history', text: 'Each roll is recorded in the history with the dice expression used, the total result, and the exact time. You can clear the history with the corresponding button.' },
37
+ ];
38
+
39
+ const faqSchema: WithContext<FAQPage> = {
40
+ '@context': 'https://schema.org',
41
+ '@type': 'FAQPage',
42
+ mainEntity: faq.map((item) => ({
43
+ '@type': 'Question',
44
+ name: item.question,
45
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
46
+ })),
47
+ };
48
+
49
+ const howToSchema: WithContext<HowTo> = {
50
+ '@context': 'https://schema.org',
51
+ '@type': 'HowTo',
52
+ name: title,
53
+ description,
54
+ step: howTo.map((step) => ({
55
+ '@type': 'HowToStep',
56
+ name: step.name,
57
+ text: step.text,
58
+ })),
59
+ };
60
+
61
+ const appSchema: WithContext<SoftwareApplication> = {
62
+ '@context': 'https://schema.org',
63
+ '@type': 'SoftwareApplication',
64
+ name: title,
65
+ description,
66
+ applicationCategory: 'UtilitiesApplication',
67
+ operatingSystem: 'Web',
68
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
69
+ inLanguage: 'en',
70
+ };
71
+
72
+ export const content: DiceRollerLocaleContent = {
73
+ slug,
74
+ title,
75
+ description,
76
+ faqTitle: 'Frequently Asked Questions',
77
+ ui: {
78
+ title: 'Dice Roller',
79
+ description: 'May luck be with you.',
80
+ rollBtn: 'Roll Dice',
81
+ totalLabel: 'Total',
82
+ historyLabel: 'History',
83
+ clearHistoryBtn: 'Clear History',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: 'References',
86
+ addDiceLabel: 'Add dice to the bag',
87
+ bagLabel: 'Dice bag',
88
+ emptyBagBtn: 'Empty',
89
+ emptyBagText: 'Click the dice to add them',
90
+ modifierLabel: 'Modifier',
91
+ rollManyLabel: 'Roll $COUNT dice',
92
+ rollOneLabel: 'Roll $COUNT die',
93
+ preRollText: 'Add dice and roll',
94
+ emptyHistoryText: 'Roll history will appear here'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'The Art of Randomness: History and Mathematics of Dice', level: 2 },
98
+ { type: 'paragraph', html: 'Dice are one of humanity\'s oldest randomness generators. <strong>Astragali</strong> - ankle bones of sheep and goats - were used as primitive four-sided dice as far back as 5000 BC in Mesopotamia and Egypt. The evolution from carved bone to modern epoxy resin icosahedra is not just aesthetic: it is a journey through probability theory and game mechanics design.' },
99
+ { type: 'title', text: 'The Standard Dice Family', level: 3 },
100
+ { type: 'paragraph', html: 'The most widespread set of dice in role-playing games - popularized by <strong>Dungeons &amp; Dragons</strong> in 1974 - consists of the five Platonic solids plus two additional shapes: d4 (tetrahedron), d6 (cube), d8 (octahedron), d10 (pentagonal trapezohedron), d12 (dodecahedron), d20 (icosahedron) and d100 (percentile die). Each polyhedron guarantees uniform distribution: all faces have exactly the same probability of landing.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 - Tetrahedron:</strong> The most dangerous if stepped on barefoot. Four triangular faces, 25% probability per face. Commonly used for dagger damage or low-level spells.',
103
+ '<strong>d6 - Cube:</strong> The most universal die. Present in all board games since the Egyptian senet. Its cubic geometry guarantees perfect equidistribution.',
104
+ '<strong>d8 - Octahedron:</strong> The die of the spear or battle axe. Eight equilateral triangular faces. 12.5% probability per face.',
105
+ '<strong>d10 - Pentagonal Trapezohedron:</strong> The only non-Platonic solid in the standard set. Two opposite faces per "vertex". Essential for the d100 (two d10 combined).',
106
+ '<strong>d12 - Dodecahedron:</strong> The barbarian\'s die. Twelve pentagonal faces. Underrated in many systems, protagonist in D&D 5e Barbarian.',
107
+ '<strong>d20 - Icosahedron:</strong> The king of RPG. Twenty triangular faces. Protagonist of the d20 system: determines success or failure of almost all actions.',
108
+ '<strong>d100 - Percentile:</strong> Two d10 combined (tens + units). Defines fine probabilities in systems like Call of Cthulhu or Warhammer Fantasy.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '5000 BC', label: 'First dice (astragali)', icon: 'mdi:history' },
112
+ { value: '1974', label: 'D&D popularized the set', icon: 'mdi:sword' },
113
+ { value: '7 types', label: 'Standard RPG dice', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: 'JS random period', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: 'Probabilities and Distribution Curves', level: 3 },
117
+ { type: 'paragraph', html: 'When you roll a single die, you get a <strong>discrete uniform distribution</strong>: every result has exactly the same probability (1/n). But as soon as you combine multiple dice, mathematical magic transforms that flat curve into an <strong>approximate normal distribution</strong>. That is why 2d6 is not the same as 1d12: with two six-sided dice the probability of rolling a 7 is 6/36 ≈ 16.7%, while the extremes (2 and 12) only occur 2.8% of the time.' },
118
+ { type: 'tip', title: 'Advantage and Disadvantage (D&D 5e)', html: 'The <strong>Advantage</strong> mechanic consists of rolling 2d20 and keeping the higher result. Mathematically, this raises the average from 10.5 to approximately 13.8. <strong>Disadvantage</strong> does the opposite: take the lower, dropping the average to about 7.2. Our roller lets you simulate this by adding two d20s to the bag and comparing the individual results.' },
119
+ { type: 'title', text: 'Modifiers: The Bridge Between Dice and Character', level: 3 },
120
+ { type: 'paragraph', html: 'In most RPG systems, the die does not act alone: a <strong>modifier</strong> representing the character\'s abilities is added or subtracted. In D&D 5e, a Strength modifier of +5 means you roll 1d20, add 5, and check the result against the enemy\'s Armor Class. Our roller includes a modifier control to faithfully reflect these mechanics.' },
121
+ { type: 'tip', title: 'Dice Notation Standard', html: 'The <strong>XdY+Z</strong> notation is the de facto standard in role-playing games: X dice of Y faces with modifier Z. "3d6+2" means roll three six-sided dice and add 2 to the total. Our tool uses this notation in the history so you can easily share or record your rolls.' },
122
+ { type: 'glossary', items: [
123
+ { term: 'Critical Hit', definition: 'A roll of the maximum value on a die (e.g., rolling 20 on a d20). Usually triggers special bonus effects in most RPG systems.' },
124
+ { term: 'Fumble / Nat 1', definition: 'Rolling the minimum value (1) on a die. Often results in a dramatic failure or negative consequence.' },
125
+ { term: 'Dice Pool', definition: 'A collection of dice rolled simultaneously. The pool in our tool shows each die type grouped by count (e.g., 3d6 + 2d8).' },
126
+ { term: 'Modifier', definition: 'A fixed number added or subtracted from a roll result, representing a character\'s skill, attribute bonus, or situational penalty.' },
127
+ { term: 'Percentile Roll', definition: 'A roll using two d10 to produce a result from 1-100, used in skill-based systems where abilities are measured as percentages.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography,
132
+ howTo,
133
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
134
+ };
@@ -1,111 +1,111 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import { bibliography } from '../bibliography';
3
- import type { DiceRollerLocaleContent } from '../index';
4
-
5
- const slug = 'lanzador-dados';
6
- const title = 'Tirador de Dados';
7
- const description = 'Simulador de dados virtual con bolsa personalizable, modificadores y historial de tiradas para tus juegos de rol y tablero.';
8
-
9
- const faq: DiceRollerLocaleContent['faq'] = [
10
- {
11
- question: '¿Cómo puedo simular una tirada con ventaja (D&D)?',
12
- answer: 'Añade dos dados d20 a la bolsa haciendo clic dos veces en el botón d20. Al lanzar, observa los dos resultados individuales y quédate con el mayor. El total mostrado será la suma, pero puedes ver cada dado por separado en el desglose de resultados.',
13
- },
14
- {
15
- question: '¿Qué significa el color verde o rojo en los resultados?',
16
- answer: 'Los resultados en verde indican que ese dado ha sacado su valor máximo posible (un "crítico"). Los resultados en rojo indican el valor mínimo (un "1", el peor resultado posible). Esto facilita identificar críticos y pifias de un vistazo.',
17
- },
18
- {
19
- question: '¿Puedo añadir varios dados del mismo tipo?',
20
- answer: 'Sí. Cada clic en un dado lo añade a la bolsa. Si haces clic tres veces en d6, la bolsa mostrará "3d6". Para reducir la cantidad, haz clic en el botón "−" que aparece junto a cada grupo de dados en la bolsa.',
21
- },
22
- {
23
- question: '¿Los dados digitales son tan aleatorios como los físicos?',
24
- answer: 'Estadísticamente, sí. Los motores JavaScript modernos usan algoritmos pseudoaleatorios (xorshift128+) con distribución uniforme de muy alta calidad. Un dado físico real puede tener pequeñas imperfecciones de fabricación que sesguen los resultados; el dado digital no tiene ese problema.',
25
- },
26
- {
27
- question: '¿Qué es el d100 y cómo se usa?',
28
- answer: 'El d100 (o d%) genera un número del 1 al 100 y se usa en sistemas de juego basados en porcentajes, como Call of Cthulhu o Warhammer Fantasy Roleplay. Representa "probabilidad directa": si tu habilidad de Sigilo es 65%, necesitas sacar 65 o menos para tener éxito.',
29
- },
30
- ];
31
-
32
- const howTo: DiceRollerLocaleContent['howTo'] = [
33
- { name: 'Construir la bolsa de dados', text: 'Haz clic en los botones de dado (d4, d6, d8...) para añadirlos a tu bolsa. Cada clic añade un dado del tipo seleccionado. Puedes mezclar tipos distintos en la misma tirada.' },
34
- { name: 'Ajustar el modificador', text: 'Usa los botones "+" y "−" junto al modificador para aplicar bonificaciones o penalizaciones (como el modificador de habilidad en D&D). El modificador se suma automáticamente al total.' },
35
- { name: 'Lanzar los dados', text: 'Pulsa el botón "Lanzar dados". El panel derecho muestra el total final y el desglose de cada dado individual, con los críticos (máximo) en verde y las pifias (mínimo) en rojo.' },
36
- { name: 'Consultar el historial', text: 'Cada tirada queda registrada en el historial con la expresión de dados usada, el resultado total y la hora exacta. Puedes limpiar el historial con el botón correspondiente.' },
37
- ];
38
-
39
- const faqSchema: WithContext<FAQPage> = {
40
- '@context': 'https://schema.org',
41
- '@type': 'FAQPage',
42
- mainEntity: faq.map((item) => ({
43
- '@type': 'Question',
44
- name: item.question,
45
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
46
- })),
47
- };
48
-
49
- const howToSchema: WithContext<HowTo> = {
50
- '@context': 'https://schema.org',
51
- '@type': 'HowTo',
52
- name: title,
53
- description,
54
- step: howTo.map((step) => ({
55
- '@type': 'HowToStep',
56
- name: step.name,
57
- text: step.text,
58
- })),
59
- };
60
-
61
- const appSchema: WithContext<SoftwareApplication> = {
62
- '@context': 'https://schema.org',
63
- '@type': 'SoftwareApplication',
64
- name: title,
65
- description,
66
- applicationCategory: 'UtilitiesApplication',
67
- operatingSystem: 'Web',
68
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
69
- inLanguage: 'es',
70
- };
71
-
72
- export const content: DiceRollerLocaleContent = {
73
- slug,
74
- title,
75
- description,
76
- faqTitle: 'Preguntas Frecuentes',
77
- ui: {
78
- title: 'Tirador de Dados',
79
- description: 'Que la suerte te acompañe.',
80
- rollBtn: 'Lanzar Dados',
81
- totalLabel: 'Total',
82
- historyLabel: 'Historial',
83
- clearHistoryBtn: 'Limpiar Historial',
84
- faqTitle: 'FAQ',
85
- bibliographyTitle: 'Referencias',
86
- addDiceLabel: 'Añadir dados a la bolsa',
87
- bagLabel: 'Bolsa de dados',
88
- emptyBagBtn: 'Vaciar',
89
- emptyBagText: 'Haz clic en los dados para añadirlos',
90
- modifierLabel: 'Modificador',
91
- rollManyLabel: 'Lanzar $COUNT dados',
92
- rollOneLabel: 'Lanzar $COUNT dado',
93
- preRollText: 'Añade dados y lanza',
94
- emptyHistoryText: 'El historial de tiradas aparecerá aquí'
95
- },
96
- seo: [
97
- { type: 'title', text: 'El arte de la aleatoriedad: historia y matemáticas de los dados', level: 2 },
98
- { type: 'paragraph', html: 'Los dados son uno de los generadores de azar más antiguos de la humanidad. Los <strong>astrágalos</strong> -huesos de tobillo de ovejas y cabras- se usaban ya en el 5000 a.C. como primitivos dados de cuatro caras en Mesopotamia y Egipto. Pero la evolución desde el hueso tallado hasta el icosaedro de resina epoxi moderno no es solo estética: es un viaje a través de la teoría de probabilidades y el diseño de mecanismos de juego.' },
99
- { type: 'title', text: 'La familia estándar de dados', level: 3 },
100
- { type: 'paragraph', html: 'El conjunto de dados más extendido en los juegos de rol -popularizado por <strong>Dungeons &amp; Dragons</strong> en 1974- está compuesto por los cinco sólidos platónicos más dos formas adicionales: d4 (tetraedro), d6 (cubo), d8 (octaedro), d10 (pentagonal trapezoedro), d12 (dodecaedro), d20 (icosaedro) y d100 (dado percentil). Cada poliedro garantiza una distribución uniforme: todas las caras tienen exactamente la misma probabilidad de caer.' },
101
- { type: 'list', items: [
102
- '<strong>d4 - Tetraedro:</strong> El más lesivo si lo pisas descalzo. Cuatro caras triangulares, probabilidad de 25% por cara. Muy usado para daño de daga o hechizos de bajo nivel.',
103
- '<strong>d6 - Cubo:</strong> El dado más universal. Presente en todos los juegos de mesa desde el senet egipcio. Su geometría cúbica garantiza perfecta equidistribución.',
104
- '<strong>d8 - Octaedro:</strong> El dado de la lanza o el hacha de batalla. Ocho caras triangulares equiláteras. Probabilidad de 12,5% por cara.',
105
- '<strong>d10 - Trapezoedro pentagonal:</strong> El único no platónico del set estándar. Dos caras opuestas por "vértice". Esencial para el d100 (dos d10 combinados).',
106
- '<strong>d12 - Dodecaedro:</strong> El dado del bárbaro. Doce caras pentagonales. Infravalorado en muchos sistemas, protagonista en Barbarian de D&D 5e.',
107
- '<strong>d20 - Icosaedro:</strong> El rey del rol. Veinte caras triangulares. Protagonista del sistema d20 de D&D: determina éxito o fracaso de casi todas las acciones.',
108
- '<strong>d100 - Percentil:</strong> Dos d10 combinados (decenas + unidades). Define probabilidades finas en sistemas como Call of Cthulhu o Warhammer Fantasy.',
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { DiceRollerLocaleContent } from '../index';
4
+
5
+ const slug = 'lanzador-dados';
6
+ const title = 'Tirador de Dados';
7
+ const description = 'Simulador de dados virtual con bolsa personalizable, modificadores y historial de tiradas para tus juegos de rol y tablero.';
8
+
9
+ const faq: DiceRollerLocaleContent['faq'] = [
10
+ {
11
+ question: '¿Cómo puedo simular una tirada con ventaja (D&D)?',
12
+ answer: 'Añade dos dados d20 a la bolsa haciendo clic dos veces en el botón d20. Al lanzar, observa los dos resultados individuales y quédate con el mayor. El total mostrado será la suma, pero puedes ver cada dado por separado en el desglose de resultados.',
13
+ },
14
+ {
15
+ question: '¿Qué significa el color verde o rojo en los resultados?',
16
+ answer: 'Los resultados en verde indican que ese dado ha sacado su valor máximo posible (un "crítico"). Los resultados en rojo indican el valor mínimo (un "1", el peor resultado posible). Esto facilita identificar críticos y pifias de un vistazo.',
17
+ },
18
+ {
19
+ question: '¿Puedo añadir varios dados del mismo tipo?',
20
+ answer: 'Sí. Cada clic en un dado lo añade a la bolsa. Si haces clic tres veces en d6, la bolsa mostrará "3d6". Para reducir la cantidad, haz clic en el botón "−" que aparece junto a cada grupo de dados en la bolsa.',
21
+ },
22
+ {
23
+ question: '¿Los dados digitales son tan aleatorios como los físicos?',
24
+ answer: 'Estadísticamente, sí. Los motores JavaScript modernos usan algoritmos pseudoaleatorios (xorshift128+) con distribución uniforme de muy alta calidad. Un dado físico real puede tener pequeñas imperfecciones de fabricación que sesguen los resultados; el dado digital no tiene ese problema.',
25
+ },
26
+ {
27
+ question: '¿Qué es el d100 y cómo se usa?',
28
+ answer: 'El d100 (o d%) genera un número del 1 al 100 y se usa en sistemas de juego basados en porcentajes, como Call of Cthulhu o Warhammer Fantasy Roleplay. Representa "probabilidad directa": si tu habilidad de Sigilo es 65%, necesitas sacar 65 o menos para tener éxito.',
29
+ },
30
+ ];
31
+
32
+ const howTo: DiceRollerLocaleContent['howTo'] = [
33
+ { name: 'Construir la bolsa de dados', text: 'Haz clic en los botones de dado (d4, d6, d8...) para añadirlos a tu bolsa. Cada clic añade un dado del tipo seleccionado. Puedes mezclar tipos distintos en la misma tirada.' },
34
+ { name: 'Ajustar el modificador', text: 'Usa los botones "+" y "−" junto al modificador para aplicar bonificaciones o penalizaciones (como el modificador de habilidad en D&D). El modificador se suma automáticamente al total.' },
35
+ { name: 'Lanzar los dados', text: 'Pulsa el botón "Lanzar dados". El panel derecho muestra el total final y el desglose de cada dado individual, con los críticos (máximo) en verde y las pifias (mínimo) en rojo.' },
36
+ { name: 'Consultar el historial', text: 'Cada tirada queda registrada en el historial con la expresión de dados usada, el resultado total y la hora exacta. Puedes limpiar el historial con el botón correspondiente.' },
37
+ ];
38
+
39
+ const faqSchema: WithContext<FAQPage> = {
40
+ '@context': 'https://schema.org',
41
+ '@type': 'FAQPage',
42
+ mainEntity: faq.map((item) => ({
43
+ '@type': 'Question',
44
+ name: item.question,
45
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
46
+ })),
47
+ };
48
+
49
+ const howToSchema: WithContext<HowTo> = {
50
+ '@context': 'https://schema.org',
51
+ '@type': 'HowTo',
52
+ name: title,
53
+ description,
54
+ step: howTo.map((step) => ({
55
+ '@type': 'HowToStep',
56
+ name: step.name,
57
+ text: step.text,
58
+ })),
59
+ };
60
+
61
+ const appSchema: WithContext<SoftwareApplication> = {
62
+ '@context': 'https://schema.org',
63
+ '@type': 'SoftwareApplication',
64
+ name: title,
65
+ description,
66
+ applicationCategory: 'UtilitiesApplication',
67
+ operatingSystem: 'Web',
68
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
69
+ inLanguage: 'es',
70
+ };
71
+
72
+ export const content: DiceRollerLocaleContent = {
73
+ slug,
74
+ title,
75
+ description,
76
+ faqTitle: 'Preguntas Frecuentes',
77
+ ui: {
78
+ title: 'Tirador de Dados',
79
+ description: 'Que la suerte te acompañe.',
80
+ rollBtn: 'Lanzar Dados',
81
+ totalLabel: 'Total',
82
+ historyLabel: 'Historial',
83
+ clearHistoryBtn: 'Limpiar Historial',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: 'Referencias',
86
+ addDiceLabel: 'Añadir dados a la bolsa',
87
+ bagLabel: 'Bolsa de dados',
88
+ emptyBagBtn: 'Vaciar',
89
+ emptyBagText: 'Haz clic en los dados para añadirlos',
90
+ modifierLabel: 'Modificador',
91
+ rollManyLabel: 'Lanzar $COUNT dados',
92
+ rollOneLabel: 'Lanzar $COUNT dado',
93
+ preRollText: 'Añade dados y lanza',
94
+ emptyHistoryText: 'El historial de tiradas aparecerá aquí'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'El arte de la aleatoriedad: historia y matemáticas de los dados', level: 2 },
98
+ { type: 'paragraph', html: 'Los dados son uno de los generadores de azar más antiguos de la humanidad. Los <strong>astrágalos</strong> -huesos de tobillo de ovejas y cabras- se usaban ya en el 5000 a.C. como primitivos dados de cuatro caras en Mesopotamia y Egipto. Pero la evolución desde el hueso tallado hasta el icosaedro de resina epoxi moderno no es solo estética: es un viaje a través de la teoría de probabilidades y el diseño de mecanismos de juego.' },
99
+ { type: 'title', text: 'La familia estándar de dados', level: 3 },
100
+ { type: 'paragraph', html: 'El conjunto de dados más extendido en los juegos de rol -popularizado por <strong>Dungeons &amp; Dragons</strong> en 1974- está compuesto por los cinco sólidos platónicos más dos formas adicionales: d4 (tetraedro), d6 (cubo), d8 (octaedro), d10 (pentagonal trapezoedro), d12 (dodecaedro), d20 (icosaedro) y d100 (dado percentil). Cada poliedro garantiza una distribución uniforme: todas las caras tienen exactamente la misma probabilidad de caer.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 - Tetraedro:</strong> El más lesivo si lo pisas descalzo. Cuatro caras triangulares, probabilidad de 25% por cara. Muy usado para daño de daga o hechizos de bajo nivel.',
103
+ '<strong>d6 - Cubo:</strong> El dado más universal. Presente en todos los juegos de mesa desde el senet egipcio. Su geometría cúbica garantiza perfecta equidistribución.',
104
+ '<strong>d8 - Octaedro:</strong> El dado de la lanza o el hacha de batalla. Ocho caras triangulares equiláteras. Probabilidad de 12,5% por cara.',
105
+ '<strong>d10 - Trapezoedro pentagonal:</strong> El único no platónico del set estándar. Dos caras opuestas por "vértice". Esencial para el d100 (dos d10 combinados).',
106
+ '<strong>d12 - Dodecaedro:</strong> El dado del bárbaro. Doce caras pentagonales. Infravalorado en muchos sistemas, protagonista en Barbarian de D&D 5e.',
107
+ '<strong>d20 - Icosaedro:</strong> El rey del rol. Veinte caras triangulares. Protagonista del sistema d20 de D&D: determina éxito o fracaso de casi todas las acciones.',
108
+ '<strong>d100 - Percentil:</strong> Dos d10 combinados (decenas + unidades). Define probabilidades finas en sistemas como Call of Cthulhu o Warhammer Fantasy.',
109
109
  ]},
110
110
  { type: 'stats', items: [
111
111
  { value: '5000 a.C.', label: 'Primeros dados (astrágalos)', icon: 'mdi:history' },
@@ -114,21 +114,21 @@ export const content: DiceRollerLocaleContent = {
114
114
  { value: '2¹²⁸', label: 'Período del aleatorio JS', icon: 'mdi:function-variant' },
115
115
  ], columns: 4 },
116
116
  { type: 'title', text: 'Probabilidades y curvas de distribución', level: 3 },
117
- { type: 'paragraph', html: 'Cuando lanzas un único dado, obtienes una <strong>distribución uniforme discreta</strong>: cada resultado tiene exactamente la misma probabilidad (1/n). Pero en cuanto combinas múltiples dados, la magia matemática transforma esa curva plana en una <strong>distribución normal aproximada</strong>. Por eso 2d6 no es lo mismo que 1d12: con dos dados de seis la probabilidad de obtener 7 es 6/36 ≈ 16,7%, mientras que los extremos (2 y 12) solo ocurren el 2,8% del tiempo.' },
118
- { type: 'tip', title: 'Ventaja y Desventaja (sistema D&D 5e)', html: 'El mecanismo de <strong>Ventaja</strong> consiste en lanzar 2d20 y quedarse con el mayor resultado. Matemáticamente, esto sube la media de 10,5 a aproximadamente 13,8. La <strong>Desventaja</strong> hace lo contrario: toma el menor, bajando la media a unos 7,2. Nuestro tirador te permite simular esto añadiendo dos d20 a la bolsa y comparando los resultados individualmente.' },
119
- { type: 'title', text: 'Modificadores: el puente entre dados y personaje', level: 3 },
120
- { type: 'paragraph', html: 'En la mayoría de sistemas de rol, el dado no actúa solo: se suma o resta un <strong>modificador</strong> que representa las habilidades del personaje. En D&D 5e, un modificador de Fuerza +5 significa que lanzas 1d20, sumas 5, y compruebas el resultado contra la Clase de Armadura del enemigo. Nuestro tirador incorpora un control de modificador para reflejar fielmente estas mecánicas.' },
117
+ { type: 'paragraph', html: 'Cuando lanzas un único dado, obtienes una <strong>distribución uniforme discreta</strong>: cada resultado tiene exactamente la misma probabilidad (1/n). Pero en cuanto combinas múltiples dados, la magia matemática transforma esa curva plana en una <strong>distribución normal aproximada</strong>. Por eso 2d6 no es lo mismo que 1d12: con dos dados de seis la probabilidad de obtener 7 es 6/36 ≈ 16,7%, mientras que los extremos (2 y 12) solo ocurren el 2,8% del tiempo.' },
118
+ { type: 'tip', title: 'Ventaja y Desventaja (sistema D&D 5e)', html: 'El mecanismo de <strong>Ventaja</strong> consiste en lanzar 2d20 y quedarse con el mayor resultado. Matemáticamente, esto sube la media de 10,5 a aproximadamente 13,8. La <strong>Desventaja</strong> hace lo contrario: toma el menor, bajando la media a unos 7,2. Nuestro tirador te permite simular esto añadiendo dos d20 a la bolsa y comparando los resultados individualmente.' },
119
+ { type: 'title', text: 'Modificadores: el puente entre dados y personaje', level: 3 },
120
+ { type: 'paragraph', html: 'En la mayoría de sistemas de rol, el dado no actúa solo: se suma o resta un <strong>modificador</strong> que representa las habilidades del personaje. En D&D 5e, un modificador de Fuerza +5 significa que lanzas 1d20, sumas 5, y compruebas el resultado contra la Clase de Armadura del enemigo. Nuestro tirador incorpora un control de modificador para reflejar fielmente estas mecánicas.' },
121
121
  { type: 'tip', title: 'Bolsa de dados y notación estándar', html: 'La notación <strong>XdY+Z</strong> es el estándar de facto en juegos de rol: X dados de Y caras con modificador Z. "3d6+2" significa lanzar tres dados de seis y sumar 2 al total. Nuestra herramienta utiliza esta notación en el historial para que puedas compartir o anotar tus tiradas fácilmente.' },
122
- { type: 'glossary', items: [
123
- { term: 'Crítico', definition: 'Obtener el valor máximo en un dado (ej. sacar 20 en un d20). Normalmente activa efectos especiales de bonificación en la mayoría de sistemas.' },
124
- { term: 'Pifia / Nat 1', definition: 'Sacar el valor mínimo (1) en un dado. A menudo resulta en un fallo dramático o consecuencia negativa.' },
125
- { term: 'Bolsa de dados', definition: 'Conjunto de dados lanzados simultáneamente. La bolsa en nuestra herramienta muestra cada tipo de dado agrupado por cantidad (ej. 3d6 + 2d8).' },
126
- { term: 'Modificador', definition: 'Número fijo que se suma o resta al resultado de un dado, representando la habilidad o atributo de un personaje.' },
127
- { term: 'Tirada percentil', definition: 'Tirada usando dos d10 para producir un resultado del 1 al 100, usada en sistemas de habilidades basados en porcentajes.' },
128
- ]},
129
- ],
130
- faq,
131
- bibliography,
132
- howTo,
133
- schemas: [faqSchema as any, howToSchema as any, appSchema],
134
- };
122
+ { type: 'glossary', items: [
123
+ { term: 'Crítico', definition: 'Obtener el valor máximo en un dado (ej. sacar 20 en un d20). Normalmente activa efectos especiales de bonificación en la mayoría de sistemas.' },
124
+ { term: 'Pifia / Nat 1', definition: 'Sacar el valor mínimo (1) en un dado. A menudo resulta en un fallo dramático o consecuencia negativa.' },
125
+ { term: 'Bolsa de dados', definition: 'Conjunto de dados lanzados simultáneamente. La bolsa en nuestra herramienta muestra cada tipo de dado agrupado por cantidad (ej. 3d6 + 2d8).' },
126
+ { term: 'Modificador', definition: 'Número fijo que se suma o resta al resultado de un dado, representando la habilidad o atributo de un personaje.' },
127
+ { term: 'Tirada percentil', definition: 'Tirada usando dos d10 para producir un resultado del 1 al 100, usada en sistemas de habilidades basados en porcentajes.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography,
132
+ howTo,
133
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
134
+ };