@jjlmoya/utils-creative 1.6.0 → 1.8.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 (117) hide show
  1. package/package.json +63 -62
  2. package/src/category/i18n/de.ts +9 -0
  3. package/src/category/i18n/id.ts +9 -0
  4. package/src/category/i18n/it.ts +9 -0
  5. package/src/category/i18n/ja.ts +9 -0
  6. package/src/category/i18n/ko.ts +9 -0
  7. package/src/category/i18n/nl.ts +9 -0
  8. package/src/category/i18n/pl.ts +9 -0
  9. package/src/category/i18n/pt.ts +9 -0
  10. package/src/category/i18n/ru.ts +9 -0
  11. package/src/category/i18n/sv.ts +9 -0
  12. package/src/category/i18n/tr.ts +9 -0
  13. package/src/category/i18n/zh.ts +9 -0
  14. package/src/category/index.ts +12 -0
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +2 -2
  18. package/src/tests/schemas_fulfillment.test.ts +23 -0
  19. package/src/tests/title_quality.test.ts +55 -0
  20. package/src/tests/tool_validation.test.ts +2 -2
  21. package/src/tool/bead-pattern-generator/i18n/de.ts +115 -0
  22. package/src/tool/bead-pattern-generator/i18n/en.ts +59 -17
  23. package/src/tool/bead-pattern-generator/i18n/es.ts +59 -17
  24. package/src/tool/bead-pattern-generator/i18n/fr.ts +59 -17
  25. package/src/tool/bead-pattern-generator/i18n/id.ts +115 -0
  26. package/src/tool/bead-pattern-generator/i18n/it.ts +115 -0
  27. package/src/tool/bead-pattern-generator/i18n/ja.ts +115 -0
  28. package/src/tool/bead-pattern-generator/i18n/ko.ts +115 -0
  29. package/src/tool/bead-pattern-generator/i18n/nl.ts +115 -0
  30. package/src/tool/bead-pattern-generator/i18n/pl.ts +115 -0
  31. package/src/tool/bead-pattern-generator/i18n/pt.ts +115 -0
  32. package/src/tool/bead-pattern-generator/i18n/ru.ts +115 -0
  33. package/src/tool/bead-pattern-generator/i18n/sv.ts +115 -0
  34. package/src/tool/bead-pattern-generator/i18n/tr.ts +115 -0
  35. package/src/tool/bead-pattern-generator/i18n/zh.ts +115 -0
  36. package/src/tool/bead-pattern-generator/index.ts +12 -0
  37. package/src/tool/dice-roller/i18n/de.ts +138 -0
  38. package/src/tool/dice-roller/i18n/en.ts +74 -32
  39. package/src/tool/dice-roller/i18n/es.ts +74 -32
  40. package/src/tool/dice-roller/i18n/fr.ts +74 -32
  41. package/src/tool/dice-roller/i18n/id.ts +138 -0
  42. package/src/tool/dice-roller/i18n/it.ts +138 -0
  43. package/src/tool/dice-roller/i18n/ja.ts +138 -0
  44. package/src/tool/dice-roller/i18n/ko.ts +138 -0
  45. package/src/tool/dice-roller/i18n/nl.ts +138 -0
  46. package/src/tool/dice-roller/i18n/pl.ts +138 -0
  47. package/src/tool/dice-roller/i18n/pt.ts +138 -0
  48. package/src/tool/dice-roller/i18n/ru.ts +138 -0
  49. package/src/tool/dice-roller/i18n/sv.ts +138 -0
  50. package/src/tool/dice-roller/i18n/tr.ts +138 -0
  51. package/src/tool/dice-roller/i18n/zh.ts +138 -0
  52. package/src/tool/dice-roller/index.ts +12 -0
  53. package/src/tool/excuse-generator/i18n/de.ts +122 -0
  54. package/src/tool/excuse-generator/i18n/en.ts +60 -18
  55. package/src/tool/excuse-generator/i18n/es.ts +60 -18
  56. package/src/tool/excuse-generator/i18n/fr.ts +60 -18
  57. package/src/tool/excuse-generator/i18n/id.ts +122 -0
  58. package/src/tool/excuse-generator/i18n/it.ts +122 -0
  59. package/src/tool/excuse-generator/i18n/ja.ts +122 -0
  60. package/src/tool/excuse-generator/i18n/ko.ts +122 -0
  61. package/src/tool/excuse-generator/i18n/nl.ts +122 -0
  62. package/src/tool/excuse-generator/i18n/pl.ts +122 -0
  63. package/src/tool/excuse-generator/i18n/pt.ts +122 -0
  64. package/src/tool/excuse-generator/i18n/ru.ts +122 -0
  65. package/src/tool/excuse-generator/i18n/sv.ts +122 -0
  66. package/src/tool/excuse-generator/i18n/tr.ts +122 -0
  67. package/src/tool/excuse-generator/i18n/zh.ts +122 -0
  68. package/src/tool/excuse-generator/index.ts +12 -0
  69. package/src/tool/fortune-cookie/i18n/de.ts +127 -0
  70. package/src/tool/fortune-cookie/i18n/en.ts +60 -18
  71. package/src/tool/fortune-cookie/i18n/es.ts +60 -18
  72. package/src/tool/fortune-cookie/i18n/fr.ts +60 -18
  73. package/src/tool/fortune-cookie/i18n/id.ts +127 -0
  74. package/src/tool/fortune-cookie/i18n/it.ts +127 -0
  75. package/src/tool/fortune-cookie/i18n/ja.ts +127 -0
  76. package/src/tool/fortune-cookie/i18n/ko.ts +127 -0
  77. package/src/tool/fortune-cookie/i18n/nl.ts +127 -0
  78. package/src/tool/fortune-cookie/i18n/pl.ts +127 -0
  79. package/src/tool/fortune-cookie/i18n/pt.ts +127 -0
  80. package/src/tool/fortune-cookie/i18n/ru.ts +127 -0
  81. package/src/tool/fortune-cookie/i18n/sv.ts +127 -0
  82. package/src/tool/fortune-cookie/i18n/tr.ts +127 -0
  83. package/src/tool/fortune-cookie/i18n/zh.ts +127 -0
  84. package/src/tool/fortune-cookie/index.ts +12 -0
  85. package/src/tool/synesthesia-painter/i18n/de.ts +122 -0
  86. package/src/tool/synesthesia-painter/i18n/en.ts +74 -32
  87. package/src/tool/synesthesia-painter/i18n/es.ts +74 -32
  88. package/src/tool/synesthesia-painter/i18n/fr.ts +75 -33
  89. package/src/tool/synesthesia-painter/i18n/id.ts +122 -0
  90. package/src/tool/synesthesia-painter/i18n/it.ts +122 -0
  91. package/src/tool/synesthesia-painter/i18n/ja.ts +122 -0
  92. package/src/tool/synesthesia-painter/i18n/ko.ts +122 -0
  93. package/src/tool/synesthesia-painter/i18n/nl.ts +122 -0
  94. package/src/tool/synesthesia-painter/i18n/pl.ts +122 -0
  95. package/src/tool/synesthesia-painter/i18n/pt.ts +122 -0
  96. package/src/tool/synesthesia-painter/i18n/ru.ts +122 -0
  97. package/src/tool/synesthesia-painter/i18n/sv.ts +122 -0
  98. package/src/tool/synesthesia-painter/i18n/tr.ts +122 -0
  99. package/src/tool/synesthesia-painter/i18n/zh.ts +122 -0
  100. package/src/tool/synesthesia-painter/index.ts +12 -0
  101. package/src/tool/zalgo-generator/i18n/de.ts +113 -0
  102. package/src/tool/zalgo-generator/i18n/en.ts +58 -16
  103. package/src/tool/zalgo-generator/i18n/es.ts +58 -16
  104. package/src/tool/zalgo-generator/i18n/fr.ts +58 -16
  105. package/src/tool/zalgo-generator/i18n/id.ts +113 -0
  106. package/src/tool/zalgo-generator/i18n/it.ts +113 -0
  107. package/src/tool/zalgo-generator/i18n/ja.ts +113 -0
  108. package/src/tool/zalgo-generator/i18n/ko.ts +113 -0
  109. package/src/tool/zalgo-generator/i18n/nl.ts +113 -0
  110. package/src/tool/zalgo-generator/i18n/pl.ts +113 -0
  111. package/src/tool/zalgo-generator/i18n/pt.ts +113 -0
  112. package/src/tool/zalgo-generator/i18n/ru.ts +113 -0
  113. package/src/tool/zalgo-generator/i18n/sv.ts +113 -0
  114. package/src/tool/zalgo-generator/i18n/tr.ts +113 -0
  115. package/src/tool/zalgo-generator/i18n/zh.ts +113 -0
  116. package/src/tool/zalgo-generator/index.ts +12 -0
  117. package/src/tools.ts +14 -1
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug: string = 'pengocok-dadu';
5
+ const title: string = 'Pengocok Dadu';
6
+ const description: string = 'Simulator dadu lengkap untuk RPG dan permainan papan Anda. Lempar d4, d6, d8, d10, d12, d20, dan d100 dengan pengubah dan riwayat.';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: 'Bagaimana cara mensimulasikan lemparan dengan keuntungan (advantage - D&D)?',
11
+ answer: 'Tambahkan dua dadu d20 ke dalam kantong dengan mengeklik tombol d20 dua kali. Saat melempar, perhatikan dua hasil individu dan ambil yang lebih tinggi. Total yang ditampilkan adalah jumlahnya, tetapi Anda dapat melihat masing-masing dadu secara terpisah dalam rincian hasil.',
12
+ },
13
+ {
14
+ question: 'Apa arti warna hijau atau merah pada hasil?',
15
+ answer: 'Hasil berwarna hijau menunjukkan bahwa dadu tersebut menghasilkan nilai maksimum yang mungkin (sebuah "critical"). Hasil merah menunjukkan nilai minimum (sebuah "1", hasil terburuk yang mungkin). Ini memudahkan untuk mengenali "crit" dan "fumble" secara sekilas.',
16
+ },
17
+ {
18
+ question: 'Dapatkah saya menambahkan beberapa dadu dengan tipe yang sama?',
19
+ answer: 'Ya. Setiap klik pada dadu akan menambahkannya ke dalam kantong. Jika Anda mengeklik d6 tiga kali, kantong akan menunjukkan "3d6". Untuk mengurangi jumlahnya, klik tombol "−" yang muncul di samping setiap grup dadu di dalam kantong.',
20
+ },
21
+ {
22
+ question: 'Apakah dadu digital sama acaknya dengan dadu fisik?',
23
+ answer: 'Secara statistik, ya. Mesin JavaScript modern menggunakan algoritma pseudorandom (xorshift128+) dengan distribusi seragam berkualitas sangat tinggi. Dadu fisik asli dapat memiliki sedikit ketidaksempurnaan manufaktur yang membiaskan hasil; dadu digital tidak memiliki masalah tersebut.',
24
+ },
25
+ {
26
+ question: 'Apa itu d100 dan bagaimana cara menggunakannya?',
27
+ answer: 'd100 (atau d%) menghasilkan angka dari 1 hingga 100 dan digunakan dalam sistem permainan berbasis persentase, seperti Call of Cthulhu atau Warhammer Fantasy Roleplay. Ini mewakili "probabilitas langsung": jika keahlian Stealth Anda adalah 65%, Anda harus melempar 65 atau kurang untuk berhasil.',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: 'Bangun kumpulan dadu', text: 'Klik tombol dadu (d4, d6, d8...) untuk menambahkannya ke kumpulan Anda. Setiap klik menambah satu dadu dari tipe yang dipilih. Anda dapat mencampur berbagai tipe dalam satu lemparan.' },
33
+ { name: 'Sesuaikan pengubah', text: 'Gunakan tombol "+" dan "−" di samping pengubah untuk menerapkan bonus atau penalti (seperti pengubah atribut di D&D). Pengubah secara otomatis ditambahkan ke total.' },
34
+ { name: 'Lempar dadu', text: 'Tekan tombol "Lempar Dadu". Panel kanan menunjukkan total akhir dan rincian setiap dadu individu, dengan "crit" (maksimum) berwarna hijau dan "fumble" (minimum) berwarna merah.' },
35
+ { name: 'Periksa riwayat', text: 'Setiap lemparan dicatat dalam riwayat dengan ekspresi dadu yang digunakan, hasil total, dan waktu tepatnya. Anda dapat menghapus riwayat dengan tombol yang sesuai.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'id',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
76
+ bibliographyTitle: 'Bibliografi Peluang',
77
+ ui: {
78
+ title: 'Pengocok Dadu',
79
+ description: 'Semoga keberuntungan menyertai Anda.',
80
+ rollBtn: 'Lempar Dadu',
81
+ totalLabel: 'Total',
82
+ historyLabel: 'Riwayat',
83
+ clearHistoryBtn: 'Hapus Riwayat',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: 'Referensi',
86
+ addDiceLabel: 'Tambahkan dadu ke kantong',
87
+ bagLabel: 'Kantong dadu',
88
+ emptyBagBtn: 'Kosongkan',
89
+ emptyBagText: 'Klik dadu untuk menambahkan',
90
+ modifierLabel: 'Pengubah',
91
+ rollManyLabel: 'Lempar $COUNT dadu',
92
+ rollOneLabel: 'Lempar $COUNT dadu',
93
+ preRollText: 'Tambahkan dadu dan lempar',
94
+ emptyHistoryText: 'Riwayat lemparan akan muncul di sini'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'Seni Keacakan: Sejarah dan Matematika Dadu', level: 2 },
98
+ { type: 'paragraph', html: 'Dadu adalah salah satu generator keacakan tertua umat manusia. <strong>Astragali</strong> — tulang pergelangan kaki domba dan kambing — digunakan sebagai dadu empat sisi primitif sejak 5000 SM di Mesopotamia dan Mesir. Evolusi dari tulang ukir menjadi ikosahedron resin epoksi modern bukan sekadar estetika: ini adalah perjalanan melalui teori probabilitas dan desain mekanik permainan.' },
99
+ { type: 'title', text: 'Keluarga Dadu Standar', level: 3 },
100
+ { type: 'paragraph', html: 'Set dadu yang paling luas dalam permainan peran — dipopulerkan oleh <strong>Dungeons &amp; Dragons</strong> pada tahun 1974 — terdiri dari lima bangun ruang Platonik ditambah dua bentuk tambahan: d4 (tetrahedron), d6 (kubus), d8 (oktahedron), d10 (pentagonal trapezohedron), d12 (dodekahedron), d20 (ikosahedron), dan d100 (dadu persentil). Setiap polihedron menjamin distribusi seragam: semua sisi memiliki probabilitas yang sama persis untuk muncul.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 – Tetrahedron:</strong> Paling berbahaya jika terinjak dengan kaki telanjang. Empat sisi segitiga, probabilitas 25% per sisi. Umumnya digunakan untuk kerusakan belati atau mantra tingkat rendah.',
103
+ '<strong>d6 – Kubus:</strong> Dadu yang paling universal. Hadir di semua permainan papan sejak senet Mesir. Geometri kubusnya menjamin ekuidistribusi yang sempurna.',
104
+ '<strong>d8 – Oktahedron:</strong> Dadu untuk tombak atau kapak perang. Delapan sisi segitiga sama sisi. Probabilitas 12,5% per sisi.',
105
+ '<strong>d10 – Pentagonal Trapezohedron:</strong> Satu-satunya bangun ruang non-Platonik dalam set standar. Dua sisi berlawanan per "verteks". Penting untuk d100 (dua d10 digabungkan).',
106
+ '<strong>d12 – Dodekahedron:</strong> Dadunya kaum barbarian. Dua belas sisi pentagonal. Kurang dihargai di banyak sistem, protagonis di D&D 5e Barbarian.',
107
+ '<strong>d20 – Ikosahedron:</strong> Rajanya RPG. Dua puluh sisi segitiga. Protagonis dari sistem d20: menentukan keberhasilan atau kegagalan hampir semua tindakan.',
108
+ '<strong>d100 – Persentil:</strong> Dua d10 digabungkan (puluhan + satuan). Mendefinisikan probabilitas halus dalam sistem seperti Call of Cthulhu atau Warhammer Fantasy.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '5000 SM', label: 'Dadu pertama (astragali)', icon: 'mdi:history' },
112
+ { value: '1974', label: 'D&D mempopulerkan set ini', icon: 'mdi:sword' },
113
+ { value: '7 tipe', label: 'Dadu RPG standar', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: 'Periode acak JS', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: 'Probabilitas dan Kurva Distribusi', level: 3 },
117
+ { type: 'paragraph', html: 'Saat Anda melempar satu dadu, Anda mendapatkan <strong>distribusi seragam diskrit</strong>: setiap hasil memiliki probabilitas yang sama persis (1/n). Namun segera setelah Anda menggabungkan beberapa dadu, keajaiban matematika mengubah kurva datar itu menjadi <strong>perkiraan distribusi normal</strong>. Itulah mengapa 2d6 tidak sama dengan 1d12: dengan dua dadu enam sisi, probabilitas melempar angka 7 adalah 6/36 ≈ 16,7%, sedangkan hasil ekstrem (2 dan 12) hanya terjadi 2,8% dari waktu.' },
118
+ { type: 'tip', title: 'Keuntungan dan Kerugian (D&D 5e)', html: 'Mekanik <strong>Keuntungan</strong> terdiri dari melempar 2d20 dan mengambil hasil yang lebih tinggi. Secara matematis, ini menaikkan rata-rata dari 10,5 menjadi sekitar 13,8. <strong>Kerugian</strong> melakukan sebaliknya: ambil yang lebih rendah, menurunkan rata-rata menjadi sekitar 7,2. Pengocok kami memungkinkan Anda mensimulasikan ini dengan menambahkan dua d20 ke kantong dan membandingkan hasil individunya.' },
119
+ { type: 'title', text: 'Pengubah: Jembatan Antara Dadu dan Karakter', level: 3 },
120
+ { type: 'paragraph', html: 'Dalam sebagian besar sistem RPG, dadu tidak bertindak sendiri: <strong>pengubah</strong> yang mewakili kemampuan karakter ditambahkan atau dikurangi. Di D&D 5e, pengubah Kekuatan +5 berarti Anda melempar 1d20, menambah 5, dan memeriksa hasilnya terhadap Armor Class musuh. Pengocok kami menyertakan kontrol pengubah untuk mencerminkan mekanik ini secara setia.' },
121
+ { type: 'tip', title: 'Standar Notasi Dadu', html: 'Notasi <strong>XdY+Z</strong> adalah standar de facto dalam permainan peran: X dadu dengan Y sisi dengan pengubah Z. "3d6+2" berarti lempar tiga dadu enam sisi dan tambahkan 2 ke totalnya. Alat kami menggunakan notasi ini dalam riwayat sehingga Anda dapat dengan mudah membagikan atau mencatat lemparan Anda.' },
122
+ { type: 'glossary', items: [
123
+ { term: 'Critical Hit', definition: 'Lemparan nilai maksimum pada dadu (misalnya, melempar 20 pada d20). Biasanya memicu efek bonus khusus di sebagian besar sistem RPG.' },
124
+ { term: 'Fumble / Nat 1', definition: 'Melempar nilai minimum (1) pada dadu. Seringkali menghasilkan kegagalan dramatis atau konsekuensi negatif.' },
125
+ { term: 'Dice Pool', definition: 'Kumpulan dadu yang dilempar secara bersamaan. Kumpulan dalam alat kami menunjukkan setiap tipe dadu yang dikelompokkan berdasarkan jumlah (misalnya, 3d6 + 2d8).' },
126
+ { term: 'Modifier', definition: 'Angka tetap yang ditambahkan atau dikurangi dari hasil lemparan, mewakili keahlian karakter, bonus atribut, atau penalti situasional.' },
127
+ { term: 'Percentile Roll', definition: 'Lemparan menggunakan dua d10 untuk menghasilkan hasil dari 1–100, digunakan dalam sistem berbasis keahlian di mana kemampuan diukur sebagai persentase.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – Aturan mekanik dadu', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – Meja virtual dan sistem dadu', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – Referensi Sistem d20', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug = 'lanciatore-di-dadi';
5
+ const title = 'Lanciatore di Dadi';
6
+ const description = 'Un simulatore di dadi completo per i tuoi giochi di ruolo e da tavolo. Lanci d4, d6, d8, d10, d12, d20 e d100 con modificatori e cronologia.';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: 'Come posso simulare un tiro con vantaggio (D&D)?',
11
+ answer: 'Aggiungi due dadi d20 al sacchetto cliccando due volte sul pulsante d20. Durante il lancio, osserva i due risultati individuali e tieni il più alto. Il totale visualizzato sarà la somma, ma puoi vedere ogni dado separatamente nel dettaglio del risultato.',
12
+ },
13
+ {
14
+ question: 'Cosa significa il colore verde o rosso sui risultati?',
15
+ answer: 'I risultati verdi indicano che il dado ha ottenuto il suo valore massimo possibile (un "critico"). I risultati rossi indicano il valore minimo (un "1", il peggior risultato possibile). Questo permette di individuare critici e fallimenti a colpo d\'occhio.',
16
+ },
17
+ {
18
+ question: 'Posso aggiungere più dadi dello stesso tipo?',
19
+ answer: 'Sì. Ogni clic su un dado lo aggiunge al sacchetto. Se clicchi tre volte sul d6, il sacchetto mostrerà "3d6". Per ridurre il conteggio, clicca sul pulsante "−" che appare accanto a ogni gruppo di dadi nel sacchetto.',
20
+ },
21
+ {
22
+ question: 'I dadi digitali sono casuali come quelli fisici?',
23
+ answer: 'Statisticamente sì. I motori JavaScript moderni utilizzano algoritmi pseudocasuali (xorshift128+) con una distribuzione uniforme di altissima qualità. Un dado fisico reale può avere piccole imperfezioni di fabbricazione che influenzano i risultati; il dado digitale non ha questo problema.',
24
+ },
25
+ {
26
+ question: 'Cos\'è il d100 e come si usa?',
27
+ answer: 'Il d100 (o d%) genera un numero da 1 a 100 ed è usato in sistemi di gioco basati sulla percentuale, come Il Richiamo di Cthulhu o Warhammer Fantasy Roleplay. Rappresenta la "probabilità diretta": se la tua abilità Furtività è del 65%, devi ottenere 65 o meno per avere successo.',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: 'Componi il pool di dadi', text: 'Clicca sui pulsanti dei dadi (d4, d6, d8...) per aggiungerli al tuo pool. Ogni clic aggiunge un dado del tipo selezionato. Puoi mescolare diversi tipi nello stesso lancio.' },
33
+ { name: 'Regola il modificatore', text: 'Usa i pulsanti "+" e "−" accanto al modificatore per applicare bonus o penalità (come il modificatore di caratteristica in D&D). Il modificatore viene aggiunto automaticamente al totale.' },
34
+ { name: 'Lancia i dadi', text: 'Premi il pulsante "Lancia Dadi". Il pannello a destra mostra il totale finale e il dettaglio di ogni singolo dado, con i critici (massimo) in verde e i fallimenti (minimo) in rosso.' },
35
+ { name: 'Controlla la cronologia', text: 'Ogni lancio viene registrato nella cronologia con la notazione dei dadi utilizzata, il risultato totale e l\'ora esatta. Puoi cancellare la cronologia con il pulsante corrispondente.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'it',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: 'Domande Frequenti',
76
+ bibliographyTitle: 'Bibliografia della Sorte',
77
+ ui: {
78
+ title: 'Lanciatore di Dadi',
79
+ description: 'Che la fortuna sia con te.',
80
+ rollBtn: 'Lancia Dadi',
81
+ totalLabel: 'Totale',
82
+ historyLabel: 'Cronologia',
83
+ clearHistoryBtn: 'Cancella Cronologia',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: 'Riferimenti',
86
+ addDiceLabel: 'Aggiungi dadi al sacchetto',
87
+ bagLabel: 'Sacchetto dei dadi',
88
+ emptyBagBtn: 'Svuota',
89
+ emptyBagText: 'Clicca sui dadi per aggiungerli',
90
+ modifierLabel: 'Modificatore',
91
+ rollManyLabel: 'Lancia $COUNT dadi',
92
+ rollOneLabel: 'Lancia $COUNT dado',
93
+ preRollText: 'Aggiungi i dadi e lancia',
94
+ emptyHistoryText: 'La cronologia dei lanci apparirà qui'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'L\'Arte della Casualità: Storia e Matematica dei Dadi', level: 2 },
98
+ { type: 'paragraph', html: 'I dadi sono tra i più antichi generatori di casualità dell\'umanità. Gli <strong>astragali</strong> — ossa della caviglia di pecore e capre — venivano usati come primitivi dadi a quattro facce già nel 5000 a.C. in Mesopotamia ed Egitto. L\'evoluzione dall\'osso intagliato ai moderni icosaedri in resina epossidica non è solo estetica: è un viaggio attraverso la teoria della probabilità e il design delle meccaniche di gioco.' },
99
+ { type: 'title', text: 'La Famiglia Standard dei Dadi', level: 3 },
100
+ { type: 'paragraph', html: 'Il set di dadi più diffuso nei giochi di ruolo — reso popolare da <strong>Dungeons &amp; Dragons</strong> nel 1974 — consiste dei cinque solidi platonici più due forme aggiuntive: d4 (tetraedro), d6 (cubo), d8 (ottaedro), d10 (trapezoedro pentagonale), d12 (dodecaedro), d20 (icosaedro) e d100 (dado percentuale). Ogni poliedro garantisce una distribuzione uniforme: tutte le facce hanno esattamente la stessa probabilità di uscire.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 – Tetraedro:</strong> Il più pericoloso se calpestato a piedi nudi. Quattro facce triangolari, 25% di probabilità per faccia. Comunemente usato per il danno dei pugnali o incantesimi di basso livello.',
103
+ '<strong>d6 – Cubo:</strong> Il dado più universale. Presente in tutti i giochi da tavolo sin dal senet egizio. La sua geometria cubica garantisce una perfetta equidistribuzione.',
104
+ '<strong>d8 – Ottaedro:</strong> Il dado della lancia o dell\'ascia da battaglia. Otto facce triangolari equilatere. 12,5% di probabilità per faccia.',
105
+ '<strong>d10 – Trapezoedro Pentagonale:</strong> L\'unico solido non platonico nel set standard. Due facce opposte per ogni "vertice". Essenziale per il d100 (due d10 combinati).',
106
+ '<strong>d12 – Dodecaedro:</strong> Il dado del barbaro. Dodici facce pentagonali. Sottovalutato in molti sistemi, protagonista del Barbaro in D&D 5e.',
107
+ '<strong>d20 – Icosaedro:</strong> Il re dei GDR. Venti facce triangolari. Protagonista del sistema d20: determina il successo o il fallimento di quasi tutte le azioni.',
108
+ '<strong>d100 – Percentuale:</strong> Due d10 combinati (decine + unità). Definisce probabilità precise in sistemi come Il Richiamo di Cthulhu o Warhammer Fantasy.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '5000 a.C.', label: 'Primi dadi (astragali)', icon: 'mdi:history' },
112
+ { value: '1974', label: 'D&D rese popolare il set', icon: 'mdi:sword' },
113
+ { value: '7 tipi', label: 'Dadi standard da GDR', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: 'Periodo casuale JS', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: 'Probabilità e Curve di Distribuzione', level: 3 },
117
+ { type: 'paragraph', html: 'Quando lanci un singolo dado, ottieni una <strong>distribuzione uniforme discreta</strong>: ogni risultato ha esattamente la stessa probabilità (1/n). Ma non appena combini più dadi, la magia matematica trasforma quella curva piatta in una <strong>distribuzione normale approssimata</strong>. Ecco perché 2d6 non è uguale a 1d12: con due dadi a sei facce la probabilità di fare 7 è 6/36 ≈ 16,7%, mentre gli estremi (2 e 12) si verificano solo il 2,8% delle volte.' },
118
+ { type: 'tip', title: 'Vantaggio e Svantaggio (D&D 5e)', html: 'La meccanica del <strong>Vantaggio</strong> consiste nel lanciare 2d20 e tenere il risultato più alto. Matematicamente, questo alza la media da 10,5 a circa 13,8. Lo <strong>Svantaggio</strong> fa l\'opposto: prendi il più basso, abbassando la media a circa 7,2. Il nostro lanciatore ti permette di simularlo aggiungendo due d20 al sacchetto e confrontando i risultati individuali.' },
119
+ { type: 'title', text: 'Modificatori: Il Ponte tra Dadi e Personaggio', level: 3 },
120
+ { type: 'paragraph', html: 'Nella maggior parte dei sistemi GDR, il dado non agisce da solo: viene aggiunto o sottratto un <strong>modificatore</strong> che rappresenta le abilità del personaggio. In D&D 5e, un modificatore di Forza di +5 significa che lanci 1d20, aggiungi 5 e controlli il risultato contro la Classe Armatura del nemico. Il nostro lanciatore include un controllo del modificatore per riflettere fedelmente queste meccaniche.' },
121
+ { type: 'tip', title: 'Standard di Notazione dei Dadi', html: 'La notazione <strong>XdY+Z</strong> è lo standard de facto nei giochi di ruolo: X dadi da Y facce con modificatore Z. "3d6+2" significa lanciare tre dadi a sei facce e aggiungere 2 al totale. Il nostro strumento utilizza questa notazione nella cronologia così puoi facilmente condividere o registrare i tuoi lanci.' },
122
+ { type: 'glossary', items: [
123
+ { term: 'Colpo Critico', definition: 'Un tiro del valore massimo su un dado (es. 20 su un d20). Di solito attiva effetti bonus speciali nella maggior parte dei sistemi GDR.' },
124
+ { term: 'Fallimento / 1 Naturale', definition: 'Ottenere il valore minimo (1) su un dado. Spesso risulta in un fallimento drammatico o in una conseguenza negativa.' },
125
+ { term: 'Dice Pool', definition: 'Una collezione di dadi lanciati simultaneamente. Il pool nel nostro strumento mostra ogni tipo di dado raggruppato per quantità (es. 3d6 + 2d8).' },
126
+ { term: 'Modificatore', definition: 'Un numero fisso aggiunto o sottratto dal risultato di un lancio, che rappresenta l\'abilità di un personaggio, il bonus di caratteristica o una penalità situazionale.' },
127
+ { term: 'Tiro Percentuale', definition: 'Un lancio che utilizza due d10 per produrre un risultato da 1 a 100, usato in sistemi basati sulle abilità dove le capacità sono misurate in percentuali.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – Regole sulle meccaniche dei dadi', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – Tavolo virtuale e sistemi di dadi', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – Riferimento Sistema d20', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug = 'dice-roller-ja';
5
+ const title = 'ダイスローラー';
6
+ const description = 'RPGやボードゲームに最適なダイスシミュレーター。d4, d6, d8, d10, d12, d20, d100に対応し、修正値の適用や履歴の確認も可能です。';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: '「有利(アドバンテージ)」のロール(D&D)をシミュレートするには?',
11
+ answer: 'd20ボタンを2回クリックして、バッグにd20を2個追加します。ロールした際、2つの個別の結果を確認し、高い方の値を採用してください。表示される「合計」は合算値になりますが、結果の内訳(ブレイクダウン)で各ダイスの目を個別に確認できます。',
12
+ },
13
+ {
14
+ question: '結果に表示される緑色や赤色の数字は何を意味していますか?',
15
+ answer: '緑色の数字は、そのダイスの最大値が出たこと(「クリティカル」)を示します。赤色の数字は、最小値(「1」、いわゆるファンブル)が出たことを示します。これにより、一目でクリティカルや致命的失敗を判断できます。',
16
+ },
17
+ {
18
+ question: '同じ種類のダイスを複数追加できますか?',
19
+ answer: 'はい。ダイスボタンをクリックするたびにバッグに追加されます。d6を3回クリックすると、バッグには「3d6」と表示されます。個数を減らしたい場合は、バッグ内の各ダイスグループの横に表示される「−」ボタンをクリックしてください。',
20
+ },
21
+ {
22
+ question: 'デジタルのダイスは物理的なダイスと同じくらいランダムですか?',
23
+ answer: '統計的には「はい」です。現代のJavaScriptエンジンは、非常に高品質で均一な分布を持つ擬似乱数アルゴリズム(xorshift128+)を使用しています。実物のダイスは製造上の微細な不備により偏りが生じることがありますが、デジタルのダイスにはその問題がありません。',
24
+ },
25
+ {
26
+ question: 'd100とは何ですか?どのように使いますか?',
27
+ answer: 'd100(またはd%)は1から100までの数値を生成し、『クトゥルフの呼び声』や『ウォーハンマー・ファンタジーRPG』のようなパーセンテージベースのゲームシステムで使用されます。これは「直接的な確率」を表します。例えば、隠密技能が65%の場合、成功するにはロール結果が65以下である必要があります。',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: 'ダイスプールを作成する', text: 'ダイスボタン(d4, d6, d8...)をクリックしてプールに追加します。クリックするごとにその種類のダイスが増えます。複数の種類を混ぜてロールすることも可能です。' },
33
+ { name: '修正値を調整する', text: '修正値の横にある「+」と「−」ボタンを使って、ボーナスやペナルティ(D&Dの能力値修正など)を適用します。修正値は自動的に合計に加算されます。' },
34
+ { name: 'ダイスを振る', text: '「ロール」ボタンを押します。右側のパネルに最終合計値と各ダイスの内訳が表示されます。最大値は緑、最小値は赤でハイライトされます。' },
35
+ { name: '履歴を確認する', text: 'すべてのロールは、使用したダイス式、合計結果、正確な時刻と共に履歴に記録されます。履歴は専用ボタンで消去可能です。' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'ja',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: 'よくある質問',
76
+ bibliographyTitle: '確率の参考文献',
77
+ ui: {
78
+ title: 'ダイスローラー',
79
+ description: '幸運があなたと共にありますように。',
80
+ rollBtn: 'ロール',
81
+ totalLabel: '合計',
82
+ historyLabel: '履歴',
83
+ clearHistoryBtn: '履歴をクリア',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: '参考文献',
86
+ addDiceLabel: 'バッグにダイスを追加',
87
+ bagLabel: 'ダイスバッグ',
88
+ emptyBagBtn: '空にする',
89
+ emptyBagText: 'ダイスをクリックして追加',
90
+ modifierLabel: '修正値',
91
+ rollManyLabel: 'ダイスを$COUNT個振る',
92
+ rollOneLabel: 'ダイスを$COUNT個振る',
93
+ preRollText: 'ダイスを追加してロール',
94
+ emptyHistoryText: 'ここにロール履歴が表示されます'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'ランダムの芸術:ダイスの歴史と数学', level: 2 },
98
+ { type: 'paragraph', html: 'ダイスは人類最古の乱数発生器の一つです。<strong>「アストラガルス」</strong>(羊や山羊の距骨)は、紀元前5000年のメソポタミアやエジプトですでに原始的な4面ダイスとして使われていました。削り出された骨から現代のエポキシ樹脂製20面体への進化は、単なる美学ではなく、確率論とゲームメカニクス設計の歴史そのものです。' },
99
+ { type: 'title', text: '標準的なダイスファミリー', level: 3 },
100
+ { type: 'paragraph', html: '1974年に<strong>『ダンジョンズ&ドラゴンズ』</strong>によって普及したロールプレイングゲームで最も一般的なダイスセットは、5つのプラトン立体に2つの形状を加えたもので構成されています:d4(正四面体)、d6(正六面体)、d8(正八面体)、d10(五角柱状多面体)、d12(正十二面体)、d20(正二十面体)、そしてd100(パーセンタイル)。各多面体は均一な分布を保証しており、すべての面が出る確率は全く同じです。' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 – 正四面体:</strong> 裸足で踏むと最も危険。4つの三角形の面を持ち、各面が出る確率は25%。短剣のダメージや低レベルの呪文によく使われます。',
103
+ '<strong>d6 – 正六面体:</strong> 最も普遍的なダイス。古代エジプトのセネト以来、あらゆるボードゲームに存在します。その立方体形状は完璧な等分布を保証します。',
104
+ '<strong>d8 – 正八面体:</strong> 槍やバトルアックスのダイス。8つの正三角形の面を持ち、各面が出る確率は12.5%です。',
105
+ '<strong>d10 – 五角柱状多面体:</strong> 標準セットの中で唯一、プラトン立体ではない形状。「頂点」ごとに2つの対向する面があります。d100(2つのd10の組み合わせ)に不可欠です。',
106
+ '<strong>d12 – 正十二面体:</strong> バーバリアンのダイス。12個の五角形の面。多くのシステムで過小評価されていますが、D&D 5版のバーバリアンでは主役です。',
107
+ '<strong>d20 – 正二十面体:</strong> RPGの王様。20の三角形の面。d20システムの主役であり、ほぼすべての行動の成否を決定します。',
108
+ '<strong>d100 – パーセンタイル:</strong> 2つのd10を組み合わせたもの(十の位+一の位)。『クトゥルフの呼び声』や『ウォーハンマー』などのシステムで精密な確率を定義します。',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '紀元前5000年', label: '最初のダイス(アストラガルス)', icon: 'mdi:history' },
112
+ { value: '1974', label: 'D&Dがセットを普及させた年', icon: 'mdi:sword' },
113
+ { value: '7種類', label: '標準的なRPGダイス', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: 'JSの乱数周期', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: '確率と分布曲線', level: 3 },
117
+ { type: 'paragraph', html: '1つのダイスを振る場合、それは<strong>離散一様分布</strong>となります。つまり、すべての結果が全く同じ確率(1/n)で発生します。しかし、複数のダイスを組み合わせると、数学的な魔法によってその平坦な曲線は<strong>近似的な正規分布</strong>へと変化します。これが、2d6が1d12と同じではない理由です。2つの6面ダイスで「7」が出る確率は6/36(約16.7%)ですが、端の数値(2や12)が出る確率はわずか2.8%にすぎません。' },
118
+ { type: 'tip', title: '有利と不利(D&D 5版)', html: '<strong>「有利(アドバンテージ)」</strong>メカニクスは、2d20をロールして高い方の結果を採用するものです。数学的には、これにより期待値が10.5から約13.8に上昇します。<strong>「不利(ディスアドバンテージ)」</strong>はその逆で、低い方を採用するため、期待値は約7.2まで下がります。当ツールでは、バッグに2つのd20を追加して結果を比較することで、これを再現できます。' },
119
+ { type: 'title', text: '修正値:ダイスとキャラクターの架け橋', level: 3 },
120
+ { type: 'paragraph', html: 'ほとんどのRPGシステムでは、ダイスだけで結果が決まるわけではありません。キャラクターの能力を表す<strong>修正値(モディファイア)</strong>を加減算します。D&D 5版で筋力修正値が+5の場合、1d20をロールして5を足し、その数値を敵のアーマークラス(AC)と比較します。当ツールには、これらのメカニクスを忠実に反映するための修正値コントロールが含まれています。' },
121
+ { type: 'tip', title: 'ダイス表記の標準', html: '<strong>XdY+Z</strong>という表記は、RPGにおける事実上の標準です。Xがダイスの個数、Yが面の数、Zが修正値を表します。「3d6+2」は「6面ダイスを3個振って合計に2を足す」という意味です。当ツールはこの表記を履歴に使用しているため、ロール結果を簡単に共有したり記録したりできます。' },
122
+ { type: 'glossary', items: [
123
+ { term: 'クリティカル・ヒット', definition: 'ダイスの最大値が出ること(例:d20で20が出る)。多くのRPGシステムでは、特別なボーナス効果が発動します。' },
124
+ { term: 'ファンブル / Nat 1', definition: 'ダイスの最小値(1)が出ること。劇的な失敗や否定的な結果をもたらすことが多いです。' },
125
+ { term: 'ダイスプール', definition: '同時にロールされるダイスの集合。当ツールのプールでは、各ダイスタイプが個数ごとにグループ化されて表示されます(例:3d6 + 2d8)。' },
126
+ { term: '修正値(モディファイア)', definition: 'ロール結果に加減算される固定値。キャラクターの技能、能力ボーナス、または状況によるペナルティを表します。' },
127
+ { term: 'パーセンタイル・ロール', definition: '2つのd10を使用して1〜100の結果を出すこと。能力がパーセンテージで測定される技能ベースのシステムで使用されます。' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – ダイスメカニクスの基本ルール', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – バーチャルテーブルトップとダイスシステム', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – d20システムリファレンス', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug = 'dice-roller-ko';
5
+ const title = '주사위 굴리기';
6
+ const description = 'RPG 및 보드게임을 위한 완벽한 주사위 시뮬레이터입니다. 수정치 및 기록 기능과 함께 d4, d6, d8, d10, d12, d20, d100을 굴려보세요.';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: '유리함(Advantage) 판정(D&D)은 어떻게 시뮬레이션 하나요?',
11
+ answer: 'd20 버튼을 두 번 클릭하여 주사위 주머니에 d20 두 개를 추가하세요. 주사위를 굴린 후, 두 개의 개별 결과 중 더 높은 값을 취하면 됩니다. 표시되는 합계는 두 주사위의 합이지만, 결과 상세 내역을 통해 각 주사위의 눈을 개별적으로 확인할 수 있습니다.',
12
+ },
13
+ {
14
+ question: '결과값에 표시되는 초록색과 빨간색은 무엇을 의미하나요?',
15
+ answer: '초록색 결과는 주사위에서 나올 수 있는 최댓값이 나왔음("크리티컬")을 나타냅니다. 빨간색 결과는 최솟값("1", 즉 펌블)이 나왔음을 의미합니다. 이를 통해 크리티컬 성공과 대실패를 한눈에 파악할 수 있습니다.',
16
+ },
17
+ {
18
+ question: '같은 종류의 주사위를 여러 개 추가할 수 있나요?',
19
+ answer: '네. 주사위 버튼을 클릭할 때마다 주머니에 추가됩니다. d6을 세 번 클릭하면 주머니에 "3d6"이라고 표시됩니다. 개수를 줄이려면 주머니의 각 주사위 그룹 옆에 나타나는 "−" 버튼을 클릭하세요.',
20
+ },
21
+ {
22
+ question: '디지털 주사위가 실제 주사위만큼 무작위한가요?',
23
+ answer: '통계적으로 그렇습니다. 현대의 자바스크립트 엔진은 매우 높은 품질의 균등 분포를 가진 의사 난수 알고리즘(xorshift128+)을 사용합니다. 실제 주사위는 제조상의 미세한 결함으로 인해 결과가 편향될 수 있지만, 디지털 주사위는 그런 문제가 없습니다.',
24
+ },
25
+ {
26
+ question: 'd100은 무엇이며 어떻게 사용되나요?',
27
+ answer: 'd100(또는 d%)은 1부터 100까지의 숫자를 생성하며, ‘크툴루의 부름’이나 ‘워해머 판타지 RPG’와 같은 퍼센트 기반 게임 시스템에서 사용됩니다. 이는 "직접 확률"을 나타냅니다. 예를 들어, 은신 기술 수치가 65%라면 성공하려면 굴림 결과가 65 이하여야 합니다.',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: '주사위 풀 구성', text: '주사위 버튼(d4, d6, d8...)을 클릭하여 풀에 추가하세요. 클릭할 때마다 해당 유형의 주사위가 하나씩 추가됩니다. 한 번의 굴림에 여러 유형을 섞어서 사용할 수 있습니다.' },
33
+ { name: '수정치 조정', text: '수정치 옆의 "+" 및 "−" 버튼을 사용하여 보너스 또는 페널티(D&D의 능력치 수정치 등)를 적용하세요. 수정치는 합계에 자동으로 반영됩니다.' },
34
+ { name: '주사위 굴리기', text: '"주사위 굴리기" 버튼을 누르세요. 오른쪽 패널에 최종 합계와 각 주사위의 개별 결과가 표시되며, 크리티컬(최댓값)은 초록색으로, 펌블(최솟값)은 빨간색으로 표시됩니다.' },
35
+ { name: '기록 확인', text: '모든 굴림은 사용된 주사위 표현식, 총 결과, 정확한 시간과 함께 기록에 남습니다. 기록은 해당 버튼으로 초기화할 수 있습니다.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'ko',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: '자주 묻는 질문',
76
+ bibliographyTitle: '확률 참고 자료',
77
+ ui: {
78
+ title: '주사위 굴리기',
79
+ description: '행운이 당신과 함께하기를.',
80
+ rollBtn: '주사위 굴리기',
81
+ totalLabel: '합계',
82
+ historyLabel: '기록',
83
+ clearHistoryBtn: '기록 삭제',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: '참고 문헌',
86
+ addDiceLabel: '주머니에 주사위 추가',
87
+ bagLabel: '주사위 주머니',
88
+ emptyBagBtn: '비우기',
89
+ emptyBagText: '주사위를 클릭하여 추가하세요',
90
+ modifierLabel: '수정치',
91
+ rollManyLabel: '주사위 $COUNT개 굴리기',
92
+ rollOneLabel: '주사위 $COUNT개 굴리기',
93
+ preRollText: '주사위를 추가하고 굴리세요',
94
+ emptyHistoryText: '주사위 기록이 여기에 표시됩니다'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: '무작위의 예술: 주사위의 역사와 수학', level: 2 },
98
+ { type: 'paragraph', html: '주사위는 인류가 가진 가장 오래된 무작위 생성기 중 하나입니다. 양과 염소의 발목뼈인 <strong>아스트라갈리(Astragali)</strong>는 기원전 5000년경 메소포타미아와 이집트에서 원시적인 4면체 주사위로 사용되었습니다. 깎아 만든 뼈에서 현대의 에폭시 수지 정이십면체에 이르기까지의 진화는 단순히 미적인 것뿐만 아니라, 확률 이론과 게임 메커니즘 설계의 여정이기도 합니다.' },
99
+ { type: 'title', text: '표준 주사위 세트', level: 3 },
100
+ { type: 'paragraph', html: '1974년 <strong>Dungeons &amp; Dragons</strong>에 의해 대중화된 롤플레잉 게임용 주사위 세트는 5개의 플라톤 다면체와 2개의 추가 형태로 구성됩니다: d4(정사면체), d6(정육면체), d8(정팔면체), d10(오각 트라페조헤드론), d12(정십이면체), d20(정이십면체) 및 d100(백분율 주사위). 각 다면체는 모든 면이 나올 확률이 정확히 동일한 균등 분포를 보장합니다.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 – 정사면체:</strong> 맨발로 밟았을 때 가장 위험합니다. 4개의 삼각형 면을 가지며, 면당 확률은 25%입니다. 주로 단검 피해량이나 저레벨 주문에 사용됩니다.',
103
+ '<strong>d6 – 정육면체:</strong> 가장 보편적인 주사위입니다. 이집트의 세네트 이후 모든 보드게임에 등장합니다. 정육면체 기하학은 완벽한 균등 배분을 보장합니다.',
104
+ '<strong>d8 – 정팔면체:</strong> 창이나 배틀액스의 주사위입니다. 8개의 정삼각형 면을 가지며, 면당 확률은 12.5%입니다.',
105
+ '<strong>d10 – 오각 트라페조헤드론:</strong> 표준 세트 중 유일하게 플라톤 다면체가 아닌 형태입니다. 각 "정점"당 두 개의 마주보는 면이 있습니다. d100(두 개의 d10 결합)에 필수적입니다.',
106
+ '<strong>d12 – 정십이면체:</strong> 바바리안의 주사위입니다. 12개의 오각형 면을 가집니다. 많은 시스템에서 저평가되기도 하지만, D&D 5판 바바리안의 주역입니다.',
107
+ '<strong>d20 – 정이십면체:</strong> RPG의 왕입니다. 20개의 삼각형 면을 가집니다. d20 시스템의 주역으로, 거의 모든 행동의 성패를 결정합니다.',
108
+ '<strong>d100 – 백분율:</strong> 두 개의 d10을 결합(십의 자리 + 일의 자리)한 것입니다. ‘크툴루의 부름’이나 ‘워해머 판타지’와 같은 시스템에서 세밀한 확률을 정의합니다.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '기원전 5000년', label: '최초의 주사위 (아스트라갈리)', icon: 'mdi:history' },
112
+ { value: '1974년', label: 'D&D를 통한 세트의 대중화', icon: 'mdi:sword' },
113
+ { value: '7가지 종류', label: '표준 RPG 주사위', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: '자바스크립트 난수 주기', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: '확률과 분포 곡선', level: 3 },
117
+ { type: 'paragraph', html: '주사위 한 개를 굴리면 <strong>이산 균등 분포</strong>를 얻게 됩니다. 즉, 모든 결과의 확률이 정확히 동일(1/n)합니다. 하지만 여러 개의 주사위를 결합하면 수학적인 마법이 일어나 평평했던 곡선을 <strong>정규 분포에 근접</strong>하게 변형시킵니다. 이것이 2d6이 1d12와 다른 이유입니다. 두 개의 6면 주사위로 7을 굴릴 확률은 6/36 ≈ 16.7%인 반면, 양 끝값(2와 12)이 나올 확률은 2.8%에 불과합니다.' },
118
+ { type: 'tip', title: '유리함과 불리함 (D&D 5e)', html: '<strong>유리함(Advantage)</strong> 메커니즘은 2d20을 굴려 더 높은 결과를 취하는 것입니다. 통계적으로 이는 평균값을 10.5에서 약 13.8로 높여줍니다. <strong>불리함(Disadvantage)</strong>은 반대로 더 낮은 결과를 취하여 평균을 약 7.2로 떨어뜨립니다. 본 시뮬레이터에서는 주머니에 두 개의 d20을 추가하고 결과를 비교함으로써 이를 시뮬레이션할 수 있습니다.' },
119
+ { type: 'title', text: '수정치: 주사위와 캐릭터 사이의 가교', level: 3 },
120
+ { type: 'paragraph', html: '대부분의 RPG 시스템에서 주사위는 단독으로 작동하지 않으며, 캐릭터의 능력을 나타내는 <strong>수정치(Modifier)</strong>가 더해지거나 빼집니다. D&D 5판에서 근력 수정치가 +5라면 1d20을 굴려 5를 더한 뒤 적의 방어력(AC)과 비교합니다. 본 시뮬레이터는 이러한 메커니즘을 충실히 반영하기 위해 수정치 제어 기능을 포함하고 있습니다.' },
121
+ { type: 'tip', title: '주사위 표기 표준', html: '<strong>XdY+Z</strong> 표기법은 롤플레잉 게임의 표준입니다. Y면체 주사위 X개를 굴리고 수정치 Z를 더한다는 의미입니다. "3d6+2"는 6면체 주사위 3개를 굴리고 합계에 2를 더하라는 뜻입니다. 저희 도구는 기록 기능에 이 표기법을 사용하여 굴림 결과를 쉽게 공유하거나 기록할 수 있게 합니다.' },
122
+ { type: 'glossary', items: [
123
+ { term: '크리티컬 히트', definition: '주사위 눈의 최댓값이 나오는 것(예: d20에서 20이 나오는 것). 대부분의 RPG 시스템에서 특별 보너스 효과를 발생시킵니다.' },
124
+ { term: '펌블 / 1 자연수 (Nat 1)', definition: '주사위의 최솟값(1)이 나오는 것. 종종 극적인 실패나 부정적인 결과를 초래합니다.' },
125
+ { term: '주사위 풀', definition: '동시에 굴려지는 주사위들의 모음입니다. 본 도구의 풀에서는 각 주사위 유형이 개수별로 그룹화되어 표시됩니다(예: 3d6 + 2d8).' },
126
+ { term: '수정치 (Modifier)', definition: '캐릭터의 숙련도, 능력치 보너스 또는 상황적 페널티를 나타내며 주사위 결과에 더하거나 빼는 고정된 숫자입니다.' },
127
+ { term: '백분율 굴림', definition: '두 개의 d10을 사용하여 1부터 100까지의 결과를 내는 것으로, 능력치가 백분율로 측정되는 기술 기반 시스템에서 사용됩니다.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – 주사위 메커니즘 규칙', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – 가상 테이블탑 및 주사위 시스템', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – d20 시스템 참조', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };