@jjlmoya/utils-tabletop 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 +1 -1
- package/src/category/index.ts +4 -0
- package/src/entries.ts +4 -0
- package/src/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +1 -1
- package/src/tool/mus-scoreboard/bibliography.astro +16 -0
- package/src/tool/mus-scoreboard/bibliography.ts +12 -0
- package/src/tool/mus-scoreboard/component.astro +169 -0
- package/src/tool/mus-scoreboard/controller.ts +178 -0
- package/src/tool/mus-scoreboard/dom-views.ts +87 -0
- package/src/tool/mus-scoreboard/entry.ts +27 -0
- package/src/tool/mus-scoreboard/evaluator.ts +27 -0
- package/src/tool/mus-scoreboard/i18n/de.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/en.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/es.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/fr.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/id.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/it.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/ja.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/ko.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/nl.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/pl.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/pt.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/ru.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/sv.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/tr.ts +187 -0
- package/src/tool/mus-scoreboard/i18n/zh.ts +187 -0
- package/src/tool/mus-scoreboard/index.ts +11 -0
- package/src/tool/mus-scoreboard/logic.test.ts +82 -0
- package/src/tool/mus-scoreboard/logic.ts +122 -0
- package/src/tool/mus-scoreboard/online-mus-scoreboard.css +740 -0
- package/src/tool/mus-scoreboard/seo.astro +16 -0
- package/src/tool/mus-scoreboard/storage.ts +29 -0
- package/src/tool/mus-scoreboard/ui.ts +63 -0
- package/src/tool/token-stamp-studio/bibliography.astro +16 -0
- package/src/tool/token-stamp-studio/bibliography.ts +12 -0
- package/src/tool/token-stamp-studio/component.astro +91 -0
- package/src/tool/token-stamp-studio/controller.ts +179 -0
- package/src/tool/token-stamp-studio/dom-views.ts +266 -0
- package/src/tool/token-stamp-studio/entry.ts +27 -0
- package/src/tool/token-stamp-studio/evaluator.ts +6 -0
- package/src/tool/token-stamp-studio/i18n/de.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/en.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/es.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/fr.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/id.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/it.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/ja.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/ko.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/nl.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/pl.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/pt.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/ru.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/sv.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/tr.ts +132 -0
- package/src/tool/token-stamp-studio/i18n/zh.ts +132 -0
- package/src/tool/token-stamp-studio/index.ts +11 -0
- package/src/tool/token-stamp-studio/logic.test.ts +36 -0
- package/src/tool/token-stamp-studio/logic.ts +127 -0
- package/src/tool/token-stamp-studio/seo.astro +16 -0
- package/src/tool/token-stamp-studio/storage.ts +69 -0
- package/src/tool/token-stamp-studio/store.ts +139 -0
- package/src/tool/token-stamp-studio/token-stamp-studio.css +646 -0
- package/src/tool/token-stamp-studio/types.ts +65 -0
- package/src/tool/token-stamp-studio/ui.ts +50 -0
- package/src/tool/token-stamp-studio/workspace-media.ts +36 -0
- package/src/tool/token-stamp-studio/workspace.ts +83 -0
- package/src/tools.ts +4 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { TokenStampLocaleContent, TokenStampUI } from '../entry';
|
|
4
|
+
|
|
5
|
+
const ui: TokenStampUI = {
|
|
6
|
+
frameLegend: 'Elige un marco',
|
|
7
|
+
frameHint: 'Selecciona la silueta que indica a la mesa quién es este personaje antes de leer su nombre.',
|
|
8
|
+
randomFrame: 'Marco aleatorio',
|
|
9
|
+
surfaceLegend: 'Pinta la ficha',
|
|
10
|
+
backgroundLabel: 'Fondo',
|
|
11
|
+
borderLabel: 'Marco',
|
|
12
|
+
textLabel: 'Texto',
|
|
13
|
+
overlayLabel: 'Tinte',
|
|
14
|
+
randomColors: 'Colores aleatorios',
|
|
15
|
+
borderWidthLabel: 'Grosor de marco',
|
|
16
|
+
opacityLabel: 'Opacidad de marco',
|
|
17
|
+
overlayOpacityLabel: 'Tinte de retrato',
|
|
18
|
+
stageLabel: 'Forja de fichas en vivo',
|
|
19
|
+
chooseImage: 'Elegir retrato',
|
|
20
|
+
clearImage: 'Quitar retrato',
|
|
21
|
+
positionHint: 'Arrastra el retrato o las etiquetas directamente sobre la ficha.',
|
|
22
|
+
markerName: 'Nombre del marcador',
|
|
23
|
+
markerNamePlaceholder: 'Nombra este marcador',
|
|
24
|
+
textLegend: 'Añade detalles legibles para la mesa',
|
|
25
|
+
textHint: 'Usa etiquetas cortas como nombre, nivel, rol o estado. Arrastra cada una sobre la ficha.',
|
|
26
|
+
textPlaceholder: 'Nombre de personaje o rol',
|
|
27
|
+
addText: 'Añadir etiqueta',
|
|
28
|
+
removeText: 'Quitar etiqueta',
|
|
29
|
+
textSizeLabel: 'Tamaño de letra',
|
|
30
|
+
alignmentLabel: 'Alineación de etiqueta',
|
|
31
|
+
alignLeft: 'Alinear etiqueta a la izquierda',
|
|
32
|
+
alignCenter: 'Centrar etiqueta',
|
|
33
|
+
alignRight: 'Alinear etiqueta a la derecha',
|
|
34
|
+
imageLegend: 'Ajusta el retrato',
|
|
35
|
+
imageZoomLabel: 'Zoom de retrato',
|
|
36
|
+
scaleLabel: 'Escala de exportación',
|
|
37
|
+
savedMarkers: 'Marcadores guardados',
|
|
38
|
+
noSavedMarkers: 'Los marcadores guardados aparecerán aquí para reabrir, editar y reutilizar en otra escena.',
|
|
39
|
+
reuseMarker: 'Selecciona un marcador para reabrirlo en la forja.',
|
|
40
|
+
deleteMarker: 'Eliminar marcador',
|
|
41
|
+
newMarker: 'Nuevo marcador',
|
|
42
|
+
download: 'Descargar PNG',
|
|
43
|
+
copy: 'Copiar PNG',
|
|
44
|
+
downloadBatch: 'Descargar lote',
|
|
45
|
+
batchLabel: 'Exportación avanzada en lote',
|
|
46
|
+
batchHint: 'Opcional: exporta varios retratos con el marco y colores actuales.',
|
|
47
|
+
chooseBatch: 'Elegir retratos',
|
|
48
|
+
batchReady: '{count} retratos listos para forjar.',
|
|
49
|
+
noImage: 'Ningún retrato cargado',
|
|
50
|
+
noText: 'Sin etiquetas todavía. Añade la información que tu grupo necesite.',
|
|
51
|
+
tokenDetails: 'Controles de ficha de personaje',
|
|
52
|
+
exportHint: 'El PNG es transparente fuera de la silueta elegida, listo para tablero virtual o hoja impresa.',
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faq = [
|
|
56
|
+
{
|
|
57
|
+
question: '¿Qué hace que un retrato para ficha de personaje sea bueno?',
|
|
58
|
+
answer: 'Elige una ilustración con un rostro claro o una silueta fuerte y suficiente contraste respecto al marco. Un recorte de cabeza y hombros se mantiene legible cuando la ficha es pequeña en el tablero virtual.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
question: '¿Cómo me aseguro de posicionar bien el retrato dentro del marco?',
|
|
62
|
+
answer: 'Carga la imagen y arrastra directamente sobre la ficha para encuadrar la cara. Usa el zoom de retrato para acercar el rostro sin cambiar la forma del marco ni las etiquetas.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
question: '¿Puedo añadir el nombre y nivel del personaje?',
|
|
66
|
+
answer: 'Sí. Añade las etiquetas cortas que necesites, selecciona cada una en el inspector para cambiar su tamaño o alineación y arrástrala a una posición legible sobre la ficha.',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
question: '¿El PNG conserva la transparencia fuera de la ficha?',
|
|
70
|
+
answer: 'Sí. La imagen exportada mantiene transparente todo el exterior de la silueta seleccionada, lo que facilita colocar el marcador sobre cualquier mapa o imprimirlo en una hoja.',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
question: '¿Puedo crear las fichas de todo un grupo de golpe?',
|
|
74
|
+
answer: 'Sí. Carga varios retratos en la exportación en lote, mantén el marco y los colores elegidos y descarga un PNG transparente por cada retrato conservando su nombre original.',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
question: '¿Dónde se almacenan mis marcadores guardados?',
|
|
78
|
+
answer: 'El guardado en este dispositivo conserva el marcador activo en el almacenamiento local del navegador. Nunca sube tus fotos a ningún servidor, pero borrar los datos de navegación o cambiar de dispositivo eliminará la copia local.',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const howTo = [
|
|
83
|
+
{ name: 'Elige la silueta del personaje', text: 'Comienza seleccionando el marco acorde a la naturaleza del personaje: circular para un héroe clásico, hexagonal para combate táctico, estrella para un campeón o nube para una criatura feérica o espiritual.' },
|
|
84
|
+
{ name: 'Carga y encuadra el retrato', text: 'Selecciona una imagen o arrástrala sobre la ficha en vivo. Muévela hasta que el rostro quede centrado en la silueta y ajusta el zoom de retrato.' },
|
|
85
|
+
{ name: 'Añade la información necesaria para la mesa', text: 'Incluye un nombre corto, rol, nivel o condición. Mantén las etiquetas breves, ajusta un tamaño legible y arrástralas sin tapar los detalles clave de la ilustración.' },
|
|
86
|
+
{ name: 'Reutiliza y exporta para tu partida', text: 'Tu marcador se guarda automáticamente mientras trabajas. Reábrelo desde los marcadores guardados o descarga un PNG transparente para tu tablero virtual o lámina impresa.' },
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
90
|
+
'@context': 'https://schema.org',
|
|
91
|
+
'@type': 'FAQPage',
|
|
92
|
+
mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })),
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
96
|
+
'@context': 'https://schema.org',
|
|
97
|
+
'@type': 'SoftwareApplication',
|
|
98
|
+
name: 'Token Stamp Studio',
|
|
99
|
+
operatingSystem: 'All',
|
|
100
|
+
applicationCategory: 'DesignApplication',
|
|
101
|
+
description: 'Crea fichas de personaje legibles para mapas de RPG de mesa con siluetas personalizadas, retratos, etiquetas, transparencia y exportación PNG en lote.',
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const howToSchema: WithContext<HowTo> = {
|
|
105
|
+
'@context': 'https://schema.org',
|
|
106
|
+
'@type': 'HowTo',
|
|
107
|
+
name: 'Cómo hacer una ficha de personaje para RPG de mesa',
|
|
108
|
+
step: howTo.map((item) => ({ '@type': 'HowToStep', name: item.name, text: item.text })),
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export const content: TokenStampLocaleContent = {
|
|
112
|
+
slug: 'creador-fichas-personaje-tokens-rpg',
|
|
113
|
+
title: 'Creador de Tokens y Fichas de Personaje para RPG de Mesa',
|
|
114
|
+
description: 'Crea marcadores y fichas de personaje legibles a partir de retratos con marcos expresivos, recortes arrastrabiles, etiquetas, transparencia y exportación PNG en lote.',
|
|
115
|
+
ui,
|
|
116
|
+
seo: [
|
|
117
|
+
{ type: 'title', text: 'Crea fichas de personaje legibles a cualquier escala en el mapa', level: 2 },
|
|
118
|
+
{ type: 'paragraph', html: 'Una ficha o token es un elemento de comunicación en la mesa. Su silueta comunica al grupo si se trata de un héroe, un monstruo, un efecto de hechizo o una localización destacada antes de acercar la cámara. Elige el marco adecuado para el personaje y mantén el retrato y las letras claros al tamaño real de tu tablero virtual.' },
|
|
119
|
+
{ type: 'title', text: 'Elige el marco adecuado para la silueta del personaje', level: 2 },
|
|
120
|
+
{ type: 'list', items: ['<strong>Círculo o anillo:</strong> ideal para personajes jugadores y aliados recurrentes.', '<strong>Hexágono u octógono:</strong> fácil de diferenciar en escenas tácticas con muchas unidades.', '<strong>Estrella:</strong> perfecto para un campeón, jefe de zona o personaje que requiere atención inmediata.', '<strong>Nube:</strong> una señal suave para espíritus, familiares y criaturas feéricas.'] },
|
|
121
|
+
{ type: 'tip', title: 'Diseña pensando en el tamaño mínimo al que jugarás', html: 'Aleja el mapa hasta que la ficha tenga solo unas decenas de píxeles de ancho. Si el rostro, el borde y el texto se distinguen con claridad, el marcador funcionará perfectamente en combates concurridos.' },
|
|
122
|
+
{ type: 'title', text: 'Mantén las etiquetas cortas y útiles durante la partida', level: 2 },
|
|
123
|
+
{ type: 'paragraph', html: 'Una ficha de combate no es una hoja de personaje completa. Añade únicamente uno o dos datos que la mesa consulta constantemente: un nombre corto, el nivel, la función principal o una condición como aturdido. Las frases largas generan ruido visual y compiten con la ilustración.' },
|
|
124
|
+
{ type: 'title', text: 'Prepara a todo un grupo de aventureros sin perder su identidad', level: 2 },
|
|
125
|
+
{ type: 'paragraph', html: 'La exportación en lote es excelente tras una sesión cero o al incorporar aliados a la campaña. Selecciona una silueta y esquema de color común para el grupo y deja que cada retrato conserve su personalidad. El encuadre uniforme da cohesión al grupo mientras cada rostro se identifica al instante.' },
|
|
126
|
+
{ type: 'tip', title: 'Tu marcador se guarda mientras trabajas', html: 'El guardado local conserva el encuadre del retrato y las etiquetas en este dispositivo. Los PNG exportados son para jugar; el marcador guardado es la versión que puedes editar cuando el personaje evolucione.' },
|
|
127
|
+
],
|
|
128
|
+
faq,
|
|
129
|
+
bibliography,
|
|
130
|
+
howTo,
|
|
131
|
+
schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
|
|
132
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { TokenStampLocaleContent, TokenStampUI } from '../entry';
|
|
4
|
+
|
|
5
|
+
const ui: TokenStampUI = {
|
|
6
|
+
frameLegend: 'Choisir un cadre',
|
|
7
|
+
frameHint: 'Sélectionnez la silhouette qui indique à la table qui est ce personnage avant même de lire son nom.',
|
|
8
|
+
randomFrame: 'Cadre aléatoire',
|
|
9
|
+
surfaceLegend: 'Peindre le jeton',
|
|
10
|
+
backgroundLabel: 'Arrière-plan',
|
|
11
|
+
borderLabel: 'Cadre',
|
|
12
|
+
textLabel: 'Texte',
|
|
13
|
+
overlayLabel: 'Teinte',
|
|
14
|
+
randomColors: 'Couleurs aléatoires',
|
|
15
|
+
borderWidthLabel: 'Épaisseur du cadre',
|
|
16
|
+
opacityLabel: 'Opacité du cadre',
|
|
17
|
+
overlayOpacityLabel: 'Teinte du portrait',
|
|
18
|
+
stageLabel: 'Forge de jetons en direct',
|
|
19
|
+
chooseImage: 'Choisir un portrait',
|
|
20
|
+
clearImage: 'Effacer le portrait',
|
|
21
|
+
positionHint: 'Faites glisser le portrait ou les étiquettes directement sur le jeton.',
|
|
22
|
+
markerName: 'Nom du marqueur',
|
|
23
|
+
markerNamePlaceholder: 'Nommer ce marqueur',
|
|
24
|
+
textLegend: 'Ajouter des détails lisibles',
|
|
25
|
+
textHint: 'Utilisez des étiquettes courtes comme le nom, le niveau ou le rôle. Glissez chacune sur le jeton.',
|
|
26
|
+
textPlaceholder: 'Nom ou rôle du personnage',
|
|
27
|
+
addText: 'Ajouter une étiquette',
|
|
28
|
+
removeText: 'Retirer l\'étiquette',
|
|
29
|
+
textSizeLabel: 'Taille du texte',
|
|
30
|
+
alignmentLabel: 'Alignement du texte',
|
|
31
|
+
alignLeft: 'Aligner à gauche',
|
|
32
|
+
alignCenter: 'Centrer',
|
|
33
|
+
alignRight: 'Aligner à droite',
|
|
34
|
+
imageLegend: 'Ajuster le portrait',
|
|
35
|
+
imageZoomLabel: 'Zoom du portrait',
|
|
36
|
+
scaleLabel: 'Échelle d\'exportation',
|
|
37
|
+
savedMarkers: 'Marqueurs enregistrés',
|
|
38
|
+
noSavedMarkers: 'Les marqueurs enregistrés apparaîtront ici pour être réouverts et réutilisés dans une autre scène.',
|
|
39
|
+
reuseMarker: 'Sélectionnez un marqueur pour le rouvrir dans la forge.',
|
|
40
|
+
deleteMarker: 'Supprimer le marqueur',
|
|
41
|
+
newMarker: 'Nouveau marqueur',
|
|
42
|
+
download: 'Télécharger PNG',
|
|
43
|
+
copy: 'Copier PNG',
|
|
44
|
+
downloadBatch: 'Télécharger le lot',
|
|
45
|
+
batchLabel: 'Exportation avancée en lot',
|
|
46
|
+
batchHint: 'Optionnel: exportez plusieurs portraits avec le cadre et les couleurs actuels.',
|
|
47
|
+
chooseBatch: 'Choisir les portraits',
|
|
48
|
+
batchReady: '{count} portraits prêts à forger.',
|
|
49
|
+
noImage: 'Aucun portrait chargé',
|
|
50
|
+
noText: 'Aucune étiquette pour l\'instant. Ajoutez les détails dont votre groupe a besoin.',
|
|
51
|
+
tokenDetails: 'Commandes du jeton de personnage',
|
|
52
|
+
exportHint: 'Le PNG est transparent autour de la silhouette choisie, prêt pour table virtuelle ou impression.',
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faq = [
|
|
56
|
+
{
|
|
57
|
+
question: 'Qu\'est-ce qui fait un bon portrait pour un jeton de personnage ?',
|
|
58
|
+
answer: 'Choisissez une illustration avec un visage net et un bon contraste par rapport au cadre. Un cadrage tête et épaules reste parfaitement lisible sur une table virtuelle.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
question: 'Comment positionner idéalement le portrait dans le cadre ?',
|
|
62
|
+
answer: 'Chargez l\'image puis faites-la glisser directement sur le jeton. Utilisez le zoom de portrait pour recentrer le visage sans modifier la forme du cadre.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
question: 'Puis-je ajouter un nom et un niveau de personnage ?',
|
|
66
|
+
answer: 'Oui. Ajoutez autant d\'étiquettes courtes que nécessaire, ajustez leur taille et leur alignement, puis placez-les sur une zone lisible du jeton.',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
question: 'Le fichier PNG conserve-t-il la transparence autour du jeton ?',
|
|
70
|
+
answer: 'Oui. L\'image exportée garde le contour de la silhouette transparent, ce qui permet de placer facilement le jeton sur n\'importe quelle carte de jeu.',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
question: 'Puis-je créer les jetons de toute mon équipe d\'un coup ?',
|
|
74
|
+
answer: 'Oui. Chargez plusieurs portraits dans l\'exportation en lot, conservez le style de cadre et téléchargez un fichier PNG transparent pour chaque portrait.',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
question: 'Où sont stockés mes marqueurs enregistrés ?',
|
|
78
|
+
answer: 'La sauvegarde locale conserve vos marqueurs dans le navigateur de votre appareil. Aucune image n\'est envoyée vers un serveur distant.',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const howTo = [
|
|
83
|
+
{ name: 'Choisissez la silhouette du personnage', text: 'Sélectionnez le cadre adapté au rôle: rond pour un héros classique, hexagonal pour le combat tactique ou étoile pour un boss.' },
|
|
84
|
+
{ name: 'Importez et cadrez le portrait', text: 'Choisissez un fichier ou glissez-le sur le jeton. Ajustez la position du visage et le niveau de zoom.' },
|
|
85
|
+
{ name: 'Ajoutez les informations utiles pour la table', text: 'Indiquez un nom court, un niveau ou un état. Gardez les textes brefs pour ne pas masquer l\'illustration.' },
|
|
86
|
+
{ name: 'Enregistrez et exportez en PNG', text: 'Votre marqueur s\'enregistre automatiquement. Téléchargez un PNG transparent prêt à l\'emploi pour votre table virtuelle.' },
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
90
|
+
'@context': 'https://schema.org',
|
|
91
|
+
'@type': 'FAQPage',
|
|
92
|
+
mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })),
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
96
|
+
'@context': 'https://schema.org',
|
|
97
|
+
'@type': 'SoftwareApplication',
|
|
98
|
+
name: 'Token Stamp Studio',
|
|
99
|
+
operatingSystem: 'All',
|
|
100
|
+
applicationCategory: 'DesignApplication',
|
|
101
|
+
description: 'Créez des jetons de personnage lisibles pour jeux de rôle sur table avec cadres personnalisés, étiquettes, transparence et export PNG en lot.',
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const howToSchema: WithContext<HowTo> = {
|
|
105
|
+
'@context': 'https://schema.org',
|
|
106
|
+
'@type': 'HowTo',
|
|
107
|
+
name: 'Comment créer un jeton de personnage pour JDR',
|
|
108
|
+
step: howTo.map((item) => ({ '@type': 'HowToStep', name: item.name, text: item.text })),
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export const content: TokenStampLocaleContent = {
|
|
112
|
+
slug: 'createur-tokens-personnages-jdr-table',
|
|
113
|
+
title: 'Créateur de Tokens et Jetons de Personnage pour JDR',
|
|
114
|
+
description: 'Créez des jetons de personnage lisibles pour jeux de rôle sur table avec cadres personnalisés, étiquettes, transparence et export PNG en lot.',
|
|
115
|
+
ui,
|
|
116
|
+
seo: [
|
|
117
|
+
{ type: 'title', text: 'Concevez des jetons de personnage lisibles sur vos cartes de jeu', level: 2 },
|
|
118
|
+
{ type: 'paragraph', html: 'Un jeton est un outil de communication visuelle à la table de jeu. Sa silhouette indique immédiatement au groupe s\'il s\'agit d\'un héros, d\'un monstre ou d\'un PNJ. Choisissez le cadre approprié et gardez le visage et les textes parfaitement lisibles à petite échelle.' },
|
|
119
|
+
{ type: 'title', text: 'Choisissez le bon cadre selon la nature du personnage', level: 2 },
|
|
120
|
+
{ type: 'list', items: ['<strong>Cercle:</strong> classique et efficace pour les personnages joueurs et alliés.', '<strong>Hexagone ou octogone:</strong> idéal pour distinguer les unités dans les combats tactiques.', '<strong>Étoile:</strong> parfait pour les boss, champions ou cibles prioritaires.', '<strong>Nuage:</strong> adapté aux esprits, familiers et créatures féeriques.'] },
|
|
121
|
+
{ type: 'tip', title: 'Concevez pour la taille minimale utilisée en jeu', html: 'Dézoomez la carte jusqu\'à ce que le jeton ne fasse plus que quelques dizaines de pixels. Si le visage et le cadre restent distincts, votre jeton sera parfait en cours de partie.' },
|
|
122
|
+
{ type: 'title', text: 'Des étiquettes courtes et efficaces autour de la table', level: 2 },
|
|
123
|
+
{ type: 'paragraph', html: 'Un jeton ne doit pas remplacer une feuille de personnage complète. Ajoutez seulement une ou deux informations essentielles: un nom court, un niveau ou un état. Les phrases longues créent du bruit visuel inutilisable.' },
|
|
124
|
+
{ type: 'title', text: 'Préparez toute une équipe sans perdre leur identité', level: 2 },
|
|
125
|
+
{ type: 'paragraph', html: 'L\'exportation en lot permet de traiter l\'ensemble du groupe après une session zéro. Appliquez un cadre commun pour l\'unité visuelle tout en laissant chaque illustration exprimer la personnalité du personnage.' },
|
|
126
|
+
{ type: 'tip', title: 'Sauvegarde automatique dans votre navigateur', html: 'Le jeton actif est sauvegardé localement sur votre appareil. Vous pouvez y revenir à tout moment pour modifier un niveau ou un état au cours de la campagne.' },
|
|
127
|
+
],
|
|
128
|
+
faq,
|
|
129
|
+
bibliography,
|
|
130
|
+
howTo,
|
|
131
|
+
schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
|
|
132
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { TokenStampLocaleContent, TokenStampUI } from '../entry';
|
|
4
|
+
|
|
5
|
+
const ui: TokenStampUI = {
|
|
6
|
+
frameLegend: 'Pilih bingkai',
|
|
7
|
+
frameHint: 'Pilih siluet yang menunjukkan siapa karakter ini sebelum orang lain membaca namanya.',
|
|
8
|
+
randomFrame: 'Bingkai acak',
|
|
9
|
+
surfaceLegend: 'Warnai token',
|
|
10
|
+
backgroundLabel: 'Latar belakang',
|
|
11
|
+
borderLabel: 'Bingkai',
|
|
12
|
+
textLabel: 'Teks',
|
|
13
|
+
overlayLabel: 'Warna lapisan',
|
|
14
|
+
randomColors: 'Warna acak',
|
|
15
|
+
borderWidthLabel: 'Ketebalan bingkai',
|
|
16
|
+
opacityLabel: 'Opasitas bingkai',
|
|
17
|
+
overlayOpacityLabel: 'Opasitas potret',
|
|
18
|
+
stageLabel: 'Arena pembuat token',
|
|
19
|
+
chooseImage: 'Pilih potret',
|
|
20
|
+
clearImage: 'Hapus potret',
|
|
21
|
+
positionHint: 'Geser potret atau label langsung di atas token.',
|
|
22
|
+
markerName: 'Nama penanda',
|
|
23
|
+
markerNamePlaceholder: 'Beri nama penanda ini',
|
|
24
|
+
textLegend: 'Tambah detail yang mudah dibaca',
|
|
25
|
+
textHint: 'Gunakan label singkat seperti nama, level, peran, atau kondisi. Geser label ke posisi yang pas.',
|
|
26
|
+
textPlaceholder: 'Nama karakter atau peran',
|
|
27
|
+
addText: 'Tambah label',
|
|
28
|
+
removeText: 'Hapus label',
|
|
29
|
+
textSizeLabel: 'Ukuran huruf',
|
|
30
|
+
alignmentLabel: 'Rataan label',
|
|
31
|
+
alignLeft: 'Rata kiri',
|
|
32
|
+
alignCenter: 'Rata tengah',
|
|
33
|
+
alignRight: 'Rata kanan',
|
|
34
|
+
imageLegend: 'Atur potret',
|
|
35
|
+
imageZoomLabel: 'Zoom potret',
|
|
36
|
+
scaleLabel: 'Skala ekspor',
|
|
37
|
+
savedMarkers: 'Penanda tersimpan',
|
|
38
|
+
noSavedMarkers: 'Penanda tersimpan akan muncul di sini untuk dibuka kembali dan diedit kapan saja.',
|
|
39
|
+
reuseMarker: 'Pilih penanda untuk membukanya kembali.',
|
|
40
|
+
deleteMarker: 'Hapus penanda',
|
|
41
|
+
newMarker: 'Penanda baru',
|
|
42
|
+
download: 'Unduh PNG',
|
|
43
|
+
copy: 'Salin PNG',
|
|
44
|
+
downloadBatch: 'Unduh masal',
|
|
45
|
+
batchLabel: 'Ekspor masal lanjutan',
|
|
46
|
+
batchHint: 'Opsional: ekspor beberapa potret sekaligus dengan bingkai dan warna saat ini.',
|
|
47
|
+
chooseBatch: 'Pilih potret masal',
|
|
48
|
+
batchReady: '{count} potret siap dibuat.',
|
|
49
|
+
noImage: 'Belum ada potret yang dimuat',
|
|
50
|
+
noText: 'Belum ada label. Tambahkan detail yang dibutuhkan kelompok Anda.',
|
|
51
|
+
tokenDetails: 'Kontrol token karakter',
|
|
52
|
+
exportHint: 'Gambar PNG transparan di luar siluet pilihan Anda, siap digunakan di VTT atau cetakan.',
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faq = [
|
|
56
|
+
{
|
|
57
|
+
question: 'Kriteria potret yang bagus untuk token karakter?',
|
|
58
|
+
answer: 'Pilih gambar dengan wajah yang jelas dan kontras yang cukup terhadap bingkai. Potongan kepala dan bahu biasanya tetap mudah dibaca saat token berukuran kecil di meja virtual.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
question: 'Bagaimana cara mengatur posisi potret di dalam bingkai?',
|
|
62
|
+
answer: 'Masukkan gambar lalu geser langsung di atas token. Gunakan zoom potret untuk memperbesar wajah tanpa mengubah bingkai atau label.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
question: 'Bisakah saya menambahkan nama dan level karakter?',
|
|
66
|
+
answer: 'Bisa. Tambahkan beberapa label singkat, atur ukuran serta ratapannya, lalu geser ke posisi yang mudah dibaca.',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
question: 'Apakah PNG hasil ekspor mempertahankan latar belakang transparan?',
|
|
70
|
+
answer: 'Ya. Latar belakang di luar siluet pilihan tetap transparan sehingga mudah diletakkan di atas peta permainan.',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
question: 'Bisakah saya membuat token untuk seluruh anggota tim sekaligus?',
|
|
74
|
+
answer: 'Bisa. Gunakan fitur ekspor masal untuk memproses beberapa potret sekaligus dengan gaya bingkai yang sama.',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
question: 'Di mana penanda tersimpan saya disimpan?',
|
|
78
|
+
answer: 'Penanda disimpan secara lokal di memori peramban perangkat Anda dan tidak diunggah ke server luar.',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const howTo = [
|
|
83
|
+
{ name: 'Pilih siluet karakter', text: 'Mulai dengan bingkai yang sesuai: lingkaran untuk pahlawan, segi enam untuk taktis, atau bintang untuk bos.' },
|
|
84
|
+
{ name: 'Masukkan dan atur potret', text: 'Pilih gambar lalu posisikan wajah agar pas di dalam bingkai dengan mengatur zoom.' },
|
|
85
|
+
{ name: 'Tambahkan label penting', text: 'Beri nama singkat, peran, atau kondisi karakter agar mudah dibaca di meja permainan.' },
|
|
86
|
+
{ name: 'Simpan dan ekspor ke PNG', text: 'Unduh file PNG transparan yang siap dipakai di aplikasi VTT atau dicetak.' },
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
90
|
+
'@context': 'https://schema.org',
|
|
91
|
+
'@type': 'FAQPage',
|
|
92
|
+
mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })),
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
96
|
+
'@context': 'https://schema.org',
|
|
97
|
+
'@type': 'SoftwareApplication',
|
|
98
|
+
name: 'Token Stamp Studio',
|
|
99
|
+
operatingSystem: 'All',
|
|
100
|
+
applicationCategory: 'DesignApplication',
|
|
101
|
+
description: 'Buat token karakter RPG meja yang mudah dibaca dengan bingkai khusus, label, latar transparan, dan ekspor masal PNG.',
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const howToSchema: WithContext<HowTo> = {
|
|
105
|
+
'@context': 'https://schema.org',
|
|
106
|
+
'@type': 'HowTo',
|
|
107
|
+
name: 'Cara membuat token karakter RPG meja',
|
|
108
|
+
step: howTo.map((item) => ({ '@type': 'HowToStep', name: item.name, text: item.text })),
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export const content: TokenStampLocaleContent = {
|
|
112
|
+
slug: 'pembuat-token-karakter-rpg-meja',
|
|
113
|
+
title: 'Pembuat Token Karakter RPG Meja Online',
|
|
114
|
+
description: 'Buat token karakter RPG meja yang mudah dibaca dengan bingkai khusus, label, latar transparan, dan ekspor masal PNG.',
|
|
115
|
+
ui,
|
|
116
|
+
seo: [
|
|
117
|
+
{ type: 'title', text: 'Buat token karakter yang jelas dan mudah dibaca di peta permainan', level: 2 },
|
|
118
|
+
{ type: 'paragraph', html: 'Token adalah alat komunikasi visual yang sangat penting di meja permainan RPG. Siluetnya memberi tahu seluruh kelompok apakah mereka sedang melihat pahlawan, monster, efek sihir, atau lokasi penting sebelum ada yang memperbesar layar. Mulailah dengan memilih bingkai yang sesuai dengan karakter, lalu pastikan potret dan label tetap mudah dibaca pada skala ukuran yang digunakan meja virtual Anda.' },
|
|
119
|
+
{ type: 'title', text: 'Pilih bingkai yang tepat sesuai peran dan jenis karakter', level: 2 },
|
|
120
|
+
{ type: 'list', items: ['<strong>Lingkaran atau cincin:</strong> pilihan standar yang andal untuk karakter pemain dan sekutu utama.', '<strong>Segi enam atau segi delapan:</strong> mudah dibedakan dalam pertempuran taktis yang melibatkan banyak unit.', '<strong>Bintang:</strong> sangat cocok untuk musuh utama, bos, atau karakter penting yang membutuhkan perhatian langsung.', '<strong>Awan:</strong> bentuk yang lebih lembut untuk roh, familiars, makhluk gaib, atau entitas mistis.'] },
|
|
121
|
+
{ type: 'tip', title: 'Desain untuk tampilan ukuran terkecil saat dimainkan', html: 'Perkecil peta permainan sampai token berukuran hanya beberapa puluh piksel. Jika wajah, bingkai, dan label masih dapat dibedakan dengan jelas, penanda Anda akan berfungsi dengan sangat baik selama pertempuran yang sibuk.' },
|
|
122
|
+
{ type: 'title', text: 'Gunakan label singkat dan berguna saat sesi permainan', level: 2 },
|
|
123
|
+
{ type: 'paragraph', html: 'Token pertempuran bukanlah pengganti lembar karakter lengkap. Cukup tambahkan satu atau dua fakta yang sering dibutuhkan kelompok: nama pendek, level, peran seperti penyembuh, atau kondisi seperti tertegun. Kalimat yang terlalu panjang hanya akan menjadi gangguan visual dan bersaing dengan gambar potret.' },
|
|
124
|
+
{ type: 'title', text: 'Siapkan token untuk seluruh kelompok tanpa kehilangan identitas', level: 2 },
|
|
125
|
+
{ type: 'paragraph', html: 'Fitur ekspor masal sangat berguna setelah sesi awal atau saat kelompok mendapatkan sekutu baru dalam kampanye. Pilih satu bingkai dan skema warna untuk seluruh kelompok, lalu biarkan setiap potret mempertahankan kepribadiannya. Bingkai yang konsisten membuat kelompok terasa menyatu sementara wajah setiap karakter tetap langsung dikenali.' },
|
|
126
|
+
{ type: 'tip', title: 'Penyimpanan otomatis langsung di perangkat Anda', html: 'Penyimpanan lokal menyimpan posisi pemotongan potret dan label pada perangkat ini. File PNG yang diekspor adalah salinan untuk dimainkan, sedangkan penanda yang tersimpan adalah versi yang dapat dibuka kembali saat karakter mengalami perkembangan.' },
|
|
127
|
+
],
|
|
128
|
+
faq,
|
|
129
|
+
bibliography,
|
|
130
|
+
howTo,
|
|
131
|
+
schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
|
|
132
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { TokenStampLocaleContent, TokenStampUI } from '../entry';
|
|
4
|
+
|
|
5
|
+
const ui: TokenStampUI = {
|
|
6
|
+
frameLegend: 'Scegli una cornice',
|
|
7
|
+
frameHint: 'Scegli la silhouette che indica al tavolo chi è questo personaggio prima ancora di leggerne il nome.',
|
|
8
|
+
randomFrame: 'Cornice casuale',
|
|
9
|
+
surfaceLegend: 'Dipingi il token',
|
|
10
|
+
backgroundLabel: 'Sfondo',
|
|
11
|
+
borderLabel: 'Bordo',
|
|
12
|
+
textLabel: 'Testo',
|
|
13
|
+
overlayLabel: 'Tinta',
|
|
14
|
+
randomColors: 'Colori casuali',
|
|
15
|
+
borderWidthLabel: 'Spessore bordo',
|
|
16
|
+
opacityLabel: 'Opacità bordo',
|
|
17
|
+
overlayOpacityLabel: 'Tinta ritratto',
|
|
18
|
+
stageLabel: 'Fucina token in tempo reale',
|
|
19
|
+
chooseImage: 'Scegli ritratto',
|
|
20
|
+
clearImage: 'Rimuovi ritratto',
|
|
21
|
+
positionHint: 'Trascina il ritratto o le etichette direttamente sul token.',
|
|
22
|
+
markerName: 'Nome segnalino',
|
|
23
|
+
markerNamePlaceholder: 'Assegna un nome a questo segnalino',
|
|
24
|
+
textLegend: 'Aggiungi dettagli leggibili al tavolo',
|
|
25
|
+
textHint: 'Usa etichette brevi come nome, livello, ruolo o stato. Trascina ciascuna sul token.',
|
|
26
|
+
textPlaceholder: 'Nome personaggio o ruolo',
|
|
27
|
+
addText: 'Aggiungi etichetta',
|
|
28
|
+
removeText: 'Rimuovi etichetta',
|
|
29
|
+
textSizeLabel: 'Dimensione testo',
|
|
30
|
+
alignmentLabel: 'Allineamento testo',
|
|
31
|
+
alignLeft: 'Allinea a sinistra',
|
|
32
|
+
alignCenter: 'Centra',
|
|
33
|
+
alignRight: 'Allinea a destra',
|
|
34
|
+
imageLegend: 'Regola il ritratto',
|
|
35
|
+
imageZoomLabel: 'Zoom ritratto',
|
|
36
|
+
scaleLabel: 'Esportazione scala',
|
|
37
|
+
savedMarkers: 'Segnalini salvati',
|
|
38
|
+
noSavedMarkers: 'I segnalini salvati appariranno qui per essere riaperti, modificati e riutilizzati.',
|
|
39
|
+
reuseMarker: 'Seleziona un segnalino per riaprirlo nella fucina.',
|
|
40
|
+
deleteMarker: 'Elimina segnalino',
|
|
41
|
+
newMarker: 'Nuovo segnalino',
|
|
42
|
+
download: 'Scarica PNG',
|
|
43
|
+
copy: 'Copia PNG',
|
|
44
|
+
downloadBatch: 'Scarica lotto',
|
|
45
|
+
batchLabel: 'Esportazione avanzata in lotto',
|
|
46
|
+
batchHint: 'Opzionale: esporta più ritratti con la cornice e i colori attuali.',
|
|
47
|
+
chooseBatch: 'Scegli ritratti',
|
|
48
|
+
batchReady: '{count} ritratti pronti per la fucina.',
|
|
49
|
+
noImage: 'Nessun ritratto caricato',
|
|
50
|
+
noText: 'Nessuna etichetta. Aggiungi i dettagli utili per il tuo gruppo.',
|
|
51
|
+
tokenDetails: 'Controlli del token personaggio',
|
|
52
|
+
exportHint: 'Il PNG è trasparente all\'esterno della silhouette scelta, pronto per VTT o stampa.',
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const faq = [
|
|
56
|
+
{
|
|
57
|
+
question: 'Cosa rende efficace il ritratto di un token personaggio?',
|
|
58
|
+
answer: 'Scegli un\'immagine con un viso ben visibile e un buon contrasto rispetto alla cornice. Un taglio a mezzo busto rimane perfettamente leggibile sul tavolo virtuale.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
question: 'Come posiziono al meglio il ritratto nella cornice?',
|
|
62
|
+
answer: 'Carica l\'immagine e trascinala direttamente sul token. Usa lo zoom ritratto per ingrandire il volto senza alterare la forma del bordo.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
question: 'Posso aggiungere nome e livello del personaggio?',
|
|
66
|
+
answer: 'Sì. Aggiungi etichette brevi, regolane dimensione e allineamento, e trascinale in un punto ben visibile sul token.',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
question: 'Il file PNG mantiene la trasparenza all\'esterno del token?',
|
|
70
|
+
answer: 'Sì. L\'immagine esportata conserva la trasparenza al di fuori della silhouette selezionata, rendendola perfetta da sovrapporre alle mappe.',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
question: 'Posso creare i token per l\'intero gruppo in una volta sola?',
|
|
74
|
+
answer: 'Sì. Usa l\'esportazione in lotto per caricare più ritratti e scaricare un file PNG trasparente per ciascuno mantenedo le impostazioni di stile.',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
question: 'Dove vengono salvati i miei segnalini?',
|
|
78
|
+
answer: 'I segnalini salvati rimangono nella memoria locale del tuo browser. Nessuna immagine viene caricata su server esterni.',
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const howTo = [
|
|
83
|
+
{ name: 'Scegli la silhouette del personaggio', text: 'Seleziona la cornice adatta al ruolo: circolare per un eroe, esagonale per scontro tattico o stella per un boss.' },
|
|
84
|
+
{ name: 'Inquadra il ritratto', text: 'Carica un\'immagine e trascinala fino a centrare il volto, regolando lo zoom secondo necessità.' },
|
|
85
|
+
{ name: 'Aggiungi le informazioni chiave', text: 'Inserisci un nome breve, livello o stato senza coprire i dettagli principali dell\'illustrazione.' },
|
|
86
|
+
{ name: 'Esporta in formato PNG', text: 'Scarica il PNG trasparente pronto per la tua piattaforma di gioco virtuale o scheda stampata.' },
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
90
|
+
'@context': 'https://schema.org',
|
|
91
|
+
'@type': 'FAQPage',
|
|
92
|
+
mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })),
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
96
|
+
'@context': 'https://schema.org',
|
|
97
|
+
'@type': 'SoftwareApplication',
|
|
98
|
+
name: 'Token Stamp Studio',
|
|
99
|
+
operatingSystem: 'All',
|
|
100
|
+
applicationCategory: 'DesignApplication',
|
|
101
|
+
description: 'Crea token personaggio leggibili per GDR da tavolo con cornici personalizzate, etichette, trasparenza ed esportazione PNG in lotto.',
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const howToSchema: WithContext<HowTo> = {
|
|
105
|
+
'@context': 'https://schema.org',
|
|
106
|
+
'@type': 'HowTo',
|
|
107
|
+
name: 'Come creare un token personaggio per GDR da tavolo',
|
|
108
|
+
step: howTo.map((item) => ({ '@type': 'HowToStep', name: item.name, text: item.text })),
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export const content: TokenStampLocaleContent = {
|
|
112
|
+
slug: 'creatore-token-personaggi-gdr-tavolo',
|
|
113
|
+
title: 'Creatore di Token Personaggio per GDR da Tavolo',
|
|
114
|
+
description: 'Crea token personaggio leggibili per GDR da tavolo con cornici personalizzate, etichette, trasparenza ed esportazione PNG in lotto.',
|
|
115
|
+
ui,
|
|
116
|
+
seo: [
|
|
117
|
+
{ type: 'title', text: 'Crea token personaggio chiari e leggibili sulla mappa', level: 2 },
|
|
118
|
+
{ type: 'paragraph', html: 'Un token è un elemento di comunicazione al tavolo da gioco. La sua silhouette fa capire subito al gruppo se si tratta di un eroe, un mostro o un alleato. Scegli la cornice idonea e mantieni volto e testi ben visibili.' },
|
|
119
|
+
{ type: 'title', text: 'Scegli la cornice giusta per il personaggio', level: 2 },
|
|
120
|
+
{ type: 'list', items: ['<strong>Cerchio:</strong> ideale per personaggi giocanti e alleati.', '<strong>Esagono o ottagono:</strong> ottimo nei combattimenti tattici con molte unità.', '<strong>Stella:</strong> perfetto per boss, campioni o bersagli primari.', '<strong>Nuvola:</strong> forma morbida per spiriti, famigli e creature fatate.'] },
|
|
121
|
+
{ type: 'tip', title: 'Progetta per la dimensione minima di gioco', html: 'Riduci lo zoom della mappa finché il token non diventa piccolo. Se volto e testo rimangono distinguibili, il token funzionerà benissimo durante le sessioni.' },
|
|
122
|
+
{ type: 'title', text: 'Etichette brevi ed efficaci durante la partita', level: 2 },
|
|
123
|
+
{ type: 'paragraph', html: 'Il token non deve sostituire la scheda del personaggio. Aggiungi solo i dati consultati spesso: nome breve, livello o stato attuale.' },
|
|
124
|
+
{ type: 'title', text: 'Prepara l\'intero party senza perdere l\'identità dei singoli', level: 2 },
|
|
125
|
+
{ type: 'paragraph', html: 'L\'esportazione in lotto permette di uniformare lo stile del gruppo mantenendo distinti i volti di ciascun personaggio.' },
|
|
126
|
+
{ type: 'tip', title: 'Salvataggio automatico sul tuo dispositivo', html: 'Il segnalino attivo viene salvato nel browser così potrai riaprirlo e modificarlo quando il personaggio sale di livello.' },
|
|
127
|
+
],
|
|
128
|
+
faq,
|
|
129
|
+
bibliography,
|
|
130
|
+
howTo,
|
|
131
|
+
schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
|
|
132
|
+
};
|