@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.
- package/package.json +2 -2
- package/src/category/i18n/de.ts +2 -2
- package/src/category/i18n/en.ts +2 -2
- package/src/category/i18n/es.ts +2 -2
- package/src/category/i18n/fr.ts +2 -2
- package/src/category/i18n/id.ts +2 -2
- package/src/category/i18n/it.ts +2 -2
- package/src/category/i18n/ja.ts +2 -2
- package/src/category/i18n/ko.ts +2 -2
- package/src/category/i18n/nl.ts +2 -2
- package/src/category/i18n/pl.ts +2 -2
- package/src/category/i18n/pt.ts +2 -2
- package/src/category/i18n/ru.ts +2 -2
- package/src/category/i18n/sv.ts +2 -2
- package/src/category/i18n/tr.ts +2 -2
- package/src/category/i18n/zh.ts +2 -2
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/env.d.ts +1 -1
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_translation_completeness.test.ts +75 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +17 -17
- package/src/tool/bead-pattern-generator/bibliography.astro +8 -8
- package/src/tool/bead-pattern-generator/i18n/de.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/en.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/es.ts +104 -104
- package/src/tool/bead-pattern-generator/i18n/fr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/id.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/it.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ja.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ko.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/nl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pt.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ru.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/sv.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/tr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/zh.ts +111 -111
- package/src/tool/bead-pattern-generator/seo.astro +19 -19
- package/src/tool/dice-roller/bibliography.astro +8 -8
- package/src/tool/dice-roller/i18n/de.ts +134 -134
- package/src/tool/dice-roller/i18n/en.ts +134 -134
- package/src/tool/dice-roller/i18n/es.ts +125 -125
- package/src/tool/dice-roller/i18n/fr.ts +134 -134
- package/src/tool/dice-roller/i18n/id.ts +134 -134
- package/src/tool/dice-roller/i18n/it.ts +134 -134
- package/src/tool/dice-roller/i18n/ja.ts +134 -134
- package/src/tool/dice-roller/i18n/ko.ts +134 -134
- package/src/tool/dice-roller/i18n/nl.ts +134 -134
- package/src/tool/dice-roller/i18n/pl.ts +134 -134
- package/src/tool/dice-roller/i18n/pt.ts +134 -134
- package/src/tool/dice-roller/i18n/ru.ts +134 -134
- package/src/tool/dice-roller/i18n/sv.ts +134 -134
- package/src/tool/dice-roller/i18n/tr.ts +134 -134
- package/src/tool/dice-roller/i18n/zh.ts +134 -134
- package/src/tool/dice-roller/seo.astro +15 -15
- package/src/tool/excuse-generator/bibliography.astro +8 -8
- package/src/tool/excuse-generator/i18n/de.ts +120 -120
- package/src/tool/excuse-generator/i18n/en.ts +120 -120
- package/src/tool/excuse-generator/i18n/es.ts +118 -118
- package/src/tool/excuse-generator/i18n/fr.ts +120 -120
- package/src/tool/excuse-generator/i18n/id.ts +120 -120
- package/src/tool/excuse-generator/i18n/it.ts +120 -120
- package/src/tool/excuse-generator/i18n/ja.ts +120 -120
- package/src/tool/excuse-generator/i18n/ko.ts +120 -120
- package/src/tool/excuse-generator/i18n/nl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pt.ts +120 -120
- package/src/tool/excuse-generator/i18n/ru.ts +120 -120
- package/src/tool/excuse-generator/i18n/sv.ts +120 -120
- package/src/tool/excuse-generator/i18n/tr.ts +120 -120
- package/src/tool/excuse-generator/i18n/zh.ts +120 -120
- package/src/tool/excuse-generator/seo.astro +15 -15
- package/src/tool/fortune-cookie/bibliography.astro +8 -8
- package/src/tool/fortune-cookie/i18n/de.ts +124 -124
- package/src/tool/fortune-cookie/i18n/en.ts +124 -124
- package/src/tool/fortune-cookie/i18n/es.ts +125 -125
- package/src/tool/fortune-cookie/i18n/fr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/id.ts +124 -124
- package/src/tool/fortune-cookie/i18n/it.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ja.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ko.ts +124 -124
- package/src/tool/fortune-cookie/i18n/nl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pt.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ru.ts +124 -124
- package/src/tool/fortune-cookie/i18n/sv.ts +124 -124
- package/src/tool/fortune-cookie/i18n/tr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/zh.ts +124 -124
- package/src/tool/fortune-cookie/seo.astro +15 -15
- package/src/tool/synesthesia-painter/bibliography.astro +8 -8
- package/src/tool/synesthesia-painter/i18n/de.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/en.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/es.ts +110 -110
- package/src/tool/synesthesia-painter/i18n/fr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/id.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/it.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ja.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ko.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/nl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pt.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ru.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/sv.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/tr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/zh.ts +118 -118
- package/src/tool/synesthesia-painter/seo.astro +15 -15
- package/src/tool/zalgo-generator/bibliography.astro +8 -8
- package/src/tool/zalgo-generator/i18n/de.ts +109 -109
- package/src/tool/zalgo-generator/i18n/en.ts +109 -109
- package/src/tool/zalgo-generator/i18n/es.ts +109 -109
- package/src/tool/zalgo-generator/i18n/fr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/id.ts +109 -109
- package/src/tool/zalgo-generator/i18n/it.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ja.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ko.ts +109 -109
- package/src/tool/zalgo-generator/i18n/nl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pt.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ru.ts +109 -109
- package/src/tool/zalgo-generator/i18n/sv.ts +109 -109
- package/src/tool/zalgo-generator/i18n/tr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/zh.ts +109 -109
- package/src/tool/zalgo-generator/seo.astro +15 -15
- 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 & 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 & 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 & 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 & 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
|
+
};
|