@jjlmoya/utils-games-development 1.68.0 → 1.70.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 (72) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +8 -1
  4. package/src/index.ts +1 -0
  5. package/src/tests/locale_completeness.test.ts +9 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/fixerEditor/auto-trim.ts +37 -0
  8. package/src/tool/fixerEditor/bibliography.astro +6 -0
  9. package/src/tool/fixerEditor/bibliography.ts +6 -0
  10. package/src/tool/fixerEditor/component.astro +114 -0
  11. package/src/tool/fixerEditor/controller.ts +275 -0
  12. package/src/tool/fixerEditor/dom-views.ts +200 -0
  13. package/src/tool/fixerEditor/entry.ts +28 -0
  14. package/src/tool/fixerEditor/evaluator.ts +17 -0
  15. package/src/tool/fixerEditor/events.ts +98 -0
  16. package/src/tool/fixerEditor/exporter.ts +42 -0
  17. package/src/tool/fixerEditor/fixer-editor.css +603 -0
  18. package/src/tool/fixerEditor/i18n/de.ts +82 -0
  19. package/src/tool/fixerEditor/i18n/en.ts +114 -0
  20. package/src/tool/fixerEditor/i18n/es.ts +82 -0
  21. package/src/tool/fixerEditor/i18n/fr.ts +82 -0
  22. package/src/tool/fixerEditor/i18n/id.ts +82 -0
  23. package/src/tool/fixerEditor/i18n/it.ts +82 -0
  24. package/src/tool/fixerEditor/i18n/ja.ts +81 -0
  25. package/src/tool/fixerEditor/i18n/ko.ts +81 -0
  26. package/src/tool/fixerEditor/i18n/localized.ts +391 -0
  27. package/src/tool/fixerEditor/i18n/nl.ts +82 -0
  28. package/src/tool/fixerEditor/i18n/pl.ts +82 -0
  29. package/src/tool/fixerEditor/i18n/pt.ts +82 -0
  30. package/src/tool/fixerEditor/i18n/ru.ts +82 -0
  31. package/src/tool/fixerEditor/i18n/sv.ts +82 -0
  32. package/src/tool/fixerEditor/i18n/tr.ts +82 -0
  33. package/src/tool/fixerEditor/i18n/zh.ts +80 -0
  34. package/src/tool/fixerEditor/index.ts +11 -0
  35. package/src/tool/fixerEditor/logic.test.ts +69 -0
  36. package/src/tool/fixerEditor/logic.ts +234 -0
  37. package/src/tool/fixerEditor/runtime.ts +88 -0
  38. package/src/tool/fixerEditor/seo.astro +15 -0
  39. package/src/tool/fixerEditor/state.ts +10 -0
  40. package/src/tool/fixerEditor/storage.ts +68 -0
  41. package/src/tool/fixerEditor/types.ts +70 -0
  42. package/src/tool/fixerEditor/ui.ts +71 -0
  43. package/src/tool/gamePixelPerUnitPlanner/bibliography.astro +6 -0
  44. package/src/tool/gamePixelPerUnitPlanner/bibliography.ts +20 -0
  45. package/src/tool/gamePixelPerUnitPlanner/component.astro +56 -0
  46. package/src/tool/gamePixelPerUnitPlanner/controller.ts +127 -0
  47. package/src/tool/gamePixelPerUnitPlanner/dom-views.ts +47 -0
  48. package/src/tool/gamePixelPerUnitPlanner/entry.ts +27 -0
  49. package/src/tool/gamePixelPerUnitPlanner/evaluator.ts +14 -0
  50. package/src/tool/gamePixelPerUnitPlanner/game-pixel-per-unit-planner.css +652 -0
  51. package/src/tool/gamePixelPerUnitPlanner/i18n/de.ts +51 -0
  52. package/src/tool/gamePixelPerUnitPlanner/i18n/en.ts +171 -0
  53. package/src/tool/gamePixelPerUnitPlanner/i18n/es.ts +53 -0
  54. package/src/tool/gamePixelPerUnitPlanner/i18n/fr.ts +33 -0
  55. package/src/tool/gamePixelPerUnitPlanner/i18n/id.ts +33 -0
  56. package/src/tool/gamePixelPerUnitPlanner/i18n/it.ts +33 -0
  57. package/src/tool/gamePixelPerUnitPlanner/i18n/ja.ts +33 -0
  58. package/src/tool/gamePixelPerUnitPlanner/i18n/ko.ts +33 -0
  59. package/src/tool/gamePixelPerUnitPlanner/i18n/nl.ts +33 -0
  60. package/src/tool/gamePixelPerUnitPlanner/i18n/pl.ts +33 -0
  61. package/src/tool/gamePixelPerUnitPlanner/i18n/pt.ts +33 -0
  62. package/src/tool/gamePixelPerUnitPlanner/i18n/ru.ts +33 -0
  63. package/src/tool/gamePixelPerUnitPlanner/i18n/sv.ts +33 -0
  64. package/src/tool/gamePixelPerUnitPlanner/i18n/tr.ts +33 -0
  65. package/src/tool/gamePixelPerUnitPlanner/i18n/zh.ts +33 -0
  66. package/src/tool/gamePixelPerUnitPlanner/index.ts +11 -0
  67. package/src/tool/gamePixelPerUnitPlanner/logic.test.ts +34 -0
  68. package/src/tool/gamePixelPerUnitPlanner/logic.ts +129 -0
  69. package/src/tool/gamePixelPerUnitPlanner/seo.astro +15 -0
  70. package/src/tool/gamePixelPerUnitPlanner/storage.ts +23 -0
  71. package/src/tool/gamePixelPerUnitPlanner/ui.ts +65 -0
  72. package/src/tools.ts +4 -0
@@ -0,0 +1,114 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { FixerEditorUI } from '../ui';
3
+
4
+ export const content: ToolLocaleContent<FixerEditorUI> = {
5
+ slug: 'fixer-editor',
6
+ title: 'Sprite Sheet Fixer Editor',
7
+ description: 'Repair the crop and pixel alignment of an existing sprite sheet in your browser, then export the corrected sheet and frame metadata.',
8
+ ui: {
9
+ uploadTitle: 'Open a sprite sheet',
10
+ uploadHint: 'Drop a PNG or WebP to place its frames on the repair bench',
11
+ chooseImage: 'Choose image',
12
+ sourceFile: 'Source file',
13
+ noImage: 'No sprite sheet loaded',
14
+ gridSettings: 'Grid registration',
15
+ columns: 'Columns',
16
+ rows: 'Rows',
17
+ cellWidth: 'Cell width',
18
+ cellHeight: 'Cell height',
19
+ marginX: 'Left margin',
20
+ marginY: 'Top margin',
21
+ gapX: 'Column gap',
22
+ gapY: 'Row gap',
23
+ frameTools: 'Frame adjustment controls',
24
+ cropX: 'Crop left',
25
+ cropY: 'Crop top',
26
+ cropWidth: 'Crop width',
27
+ cropHeight: 'Crop height',
28
+ offsetX: 'Offset X',
29
+ offsetY: 'Offset Y',
30
+ trimTransparent: 'Trim transparent pixels',
31
+ trimAll: 'Auto-trim all frames',
32
+ autoDetectGrid: 'Auto-detect grid',
33
+ resetFrame: 'Reset selected frame',
34
+ nudgeStep: 'Nudge step',
35
+ stepOne: 'One pixel',
36
+ stepTwo: 'Two pixels',
37
+ stepFour: 'Four pixels',
38
+ history: 'Repair ledger',
39
+ undo: 'Undo',
40
+ redo: 'Redo',
41
+ resetAll: 'Reset sheet',
42
+ saveProject: 'Save project',
43
+ loadProject: 'Load project',
44
+ exportSheet: 'Export corrected sheet',
45
+ exportJson: 'Export frame JSON',
46
+ sheetView: 'Registration view',
47
+ correctedView: 'Corrected sheet',
48
+ activeFrame: 'Frame inspector',
49
+ frameStrip: 'Frame strip',
50
+ flipbook: 'Flipbook',
51
+ play: 'Play',
52
+ pause: 'Pause',
53
+ fps: 'FPS',
54
+ zoom: 'Preview zoom',
55
+ ready: 'Adjustments are live',
56
+ loaded: 'Sprite sheet loaded',
57
+ modified: 'Adjusted',
58
+ unchanged: 'Original position',
59
+ frameCount: 'Frames',
60
+ correctionCount: 'Adjusted frames',
61
+ imageSize: 'Image size',
62
+ statusEmpty: 'Waiting for a sprite sheet',
63
+ statusSaved: 'Project saved locally',
64
+ statusLoaded: 'Project loaded',
65
+ statusExported: 'Export ready',
66
+ statusInvalidImage: 'This image could not be opened',
67
+ statusInvalidProject: 'This project file is not valid',
68
+ statusProjectNeedsImage: 'Project remembered. Open its source image to apply it',
69
+ statusImageMismatch: 'Project loaded with a different source size',
70
+ metadataNote: 'Transparent pixels remain transparent in the export',
71
+ sourceLabel: 'Source sheet',
72
+ resultLabel: 'Corrected sheet',
73
+ selectFrame: 'Select frame',
74
+ moveUp: 'Move frame up',
75
+ moveDown: 'Move frame down',
76
+ moveLeft: 'Move frame left',
77
+ moveRight: 'Move frame right',
78
+ },
79
+ seo: [
80
+ { type: 'title', level: 2, text: 'Why a good sprite sheet can still animate badly' },
81
+ { type: 'paragraph', html: 'A sprite sheet can have the right number of rows and columns while individual frames sit at slightly different heights. A one pixel change in the crop or baseline is enough to make a walk cycle wobble, a jump frame pop, or a weapon appear to change size. The repair work is usually too small for a full art editor but too important to solve by guessing in the game engine.' },
82
+ { type: 'paragraph', html: 'Fixer Editor treats the source sheet as a registered sequence. The grid establishes the stable frame canvas, while each frame can receive its own crop rectangle and X or Y offset. The corrected preview redraws the frame inside that same canvas, so you can inspect the result before exporting it.' },
83
+ { type: 'title', level: 2, text: 'A repeatable workflow for frame alignment' },
84
+ { type: 'list', items: ['Set the cell dimensions and margins from the source export.', 'Select a frame that jumps in the flipbook and inspect its enlarged crop.', 'Use trim as a starting point, then nudge the content until its feet, hands, or weapon line up.', 'Export the corrected sheet and keep the project JSON beside the source asset.'] },
85
+ { type: 'tip', title: 'Keep the frame canvas stable', html: 'Do not solve a wobble by changing every cell size. Keep the grid cell consistent for the animation and use the per-frame crop and offset to preserve the pivot and timing of the sequence.' },
86
+ { type: 'title', level: 2, text: 'How crop and offset affect a game frame' },
87
+ { type: 'table', headers: ['Adjustment', 'What changes', 'What stays stable'], rows: [['Crop rectangle', 'Which source pixels are included', 'The frame slot and its order'], ['Offset X or Y', 'Where those pixels sit inside the slot', 'The output sheet dimensions'], ['Grid margin and gap', 'Where the next source frame begins', 'The correction recorded for each frame']] },
88
+ { type: 'paragraph', html: 'The editor never uploads the image. It uses the browser canvas to read the selected region and composes a new local export. The JSON records the source dimensions, grid, crop rectangle, offset, and modified state so a correction can be reviewed or adapted to a Godot, Unity, or custom importer.' },
89
+ { type: 'title', level: 2, text: 'Limits to check before importing' },
90
+ { type: 'paragraph', html: 'This utility edits raster PNG and WebP sheets. It does not guarantee an engine specific metadata schema, infer an animation pivot from artistic intent, or repair a source whose frames overlap because the original grid is wrong. Large sheets may also use substantial browser memory during export.' },
91
+ { type: 'diagnostic', variant: 'info', title: 'Practical handoff check', html: 'Play the full sequence, inspect the first and last frame, export the JSON, and verify the corrected sheet in the target engine with its filtering and pivot settings.' },
92
+ ],
93
+ faq: [
94
+ { question: 'What does this sprite sheet editor fix?', answer: 'It fixes per-frame crop and alignment problems in an existing PNG or WebP sprite sheet. You can trim transparent edges, move a frame inside its stable cell, preview the sequence, and export the corrected raster sheet.' },
95
+ { question: 'Will moving a frame change the size of the grid?', answer: 'No. The grid cell remains stable. An offset changes where the selected crop is drawn inside that cell, which helps preserve animation pivots and consistent frame timing.' },
96
+ { question: 'Can I save my corrections and continue later?', answer: 'Yes. Save a project JSON containing the source dimensions, grid, frame crops, and offsets. Open the same source image before loading the project so the corrections can be applied to the pixels they describe.' },
97
+ { question: 'Does the tool create engine specific atlas files?', answer: 'It exports a corrected PNG and neutral frame JSON. Engine importers use different metadata fields, so adapt the JSON to the target engine and verify the pivot, filtering, and frame order there.' },
98
+ ],
99
+ bibliography: [
100
+ { name: 'Cocos Creator 3.8 API: SpriteFrame', url: 'https://docs.cocos.com/creator/3.8/api/zh/class/SpriteFrame' },
101
+ { name: 'Godot Engine 4.x documentation: Sprite2D', url: 'https://docs.godotengine.org/es/4.x/classes/class_sprite2d.html' },
102
+ ],
103
+ howTo: [
104
+ { name: 'Open the source sheet', text: 'Drop a PNG or WebP into the editor and confirm that the source image dimensions are visible.' },
105
+ { name: 'Register the grid', text: 'Enter the columns, rows, cell size, margin, and gap used by the original export.' },
106
+ { name: 'Repair the active frame', text: 'Select a frame, trim transparent pixels if useful, then adjust its crop and offset with the inspector or arrow keys.' },
107
+ { name: 'Preview and export', text: 'Play the flipbook, review the corrected sheet, and download the raster sheet plus neutral frame JSON.' },
108
+ ],
109
+ schemas: [
110
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: 'Sprite Sheet Fixer Editor', applicationCategory: 'DeveloperApplication', operatingSystem: 'Any', offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' } },
111
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: [{ '@type': 'Question', name: 'What does this sprite sheet editor fix?', acceptedAnswer: { '@type': 'Answer', text: 'It fixes per-frame crop and alignment problems in an existing PNG or WebP sprite sheet.' } }] },
112
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: 'How to fix a sprite sheet', step: [{ '@type': 'HowToStep', name: 'Open the source sheet', text: 'Drop a PNG or WebP into the editor.' }, { '@type': 'HowToStep', name: 'Register the grid', text: 'Enter the source grid dimensions and spacing.' }, { '@type': 'HowToStep', name: 'Repair the active frame', text: 'Trim and nudge each frame that needs correction.' }, { '@type': 'HowToStep', name: 'Preview and export', text: 'Play the flipbook and download the corrected assets.' }] },
113
+ ],
114
+ };
@@ -0,0 +1,82 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "es",
5
+ slug: "editor-corrector-sprite-sheet",
6
+ title: "Editor corrector de Sprite Sheets",
7
+ description:
8
+ "Corrige el recorte y la alineación de píxeles de una hoja de sprites y exporta el resultado directamente desde el navegador.",
9
+ ui: {
10
+ uploadTitle: "Abrir una sprite sheet",
11
+ uploadHint:
12
+ "Suelta un PNG o WebP para colocar sus frames en la mesa de reparación",
13
+ chooseImage: "Elegir imagen",
14
+ sourceFile: "Archivo fuente",
15
+ noImage: "No hay sprite sheet cargada",
16
+ gridSettings: "Registro de cuadrícula",
17
+ columns: "Columnas",
18
+ rows: "Filas",
19
+ cellWidth: "Ancho de celda",
20
+ cellHeight: "Alto de celda",
21
+ marginX: "Margen izquierdo",
22
+ marginY: "Margen superior",
23
+ gapX: "Separación de columnas",
24
+ gapY: "Separación de filas",
25
+ frameTools: "Controles de ajuste del frame",
26
+ cropX: "Recorte izquierdo",
27
+ cropY: "Recorte superior",
28
+ cropWidth: "Ancho del recorte",
29
+ cropHeight: "Alto del recorte",
30
+ offsetX: "Desplazamiento X",
31
+ offsetY: "Desplazamiento Y",
32
+ trimTransparent: "Recortar píxeles transparentes",
33
+ trimAll: "Recortar todos los frames",
34
+ autoDetectGrid: "Detectar cuadrícula",
35
+ resetFrame: "Restablecer frame",
36
+ nudgeStep: "Paso de movimiento",
37
+ stepOne: "Un píxel",
38
+ stepTwo: "Dos píxeles",
39
+ stepFour: "Cuatro píxeles",
40
+ history: "Registro de reparación",
41
+ undo: "Deshacer",
42
+ redo: "Rehacer",
43
+ resetAll: "Restablecer hoja",
44
+ saveProject: "Guardar proyecto",
45
+ loadProject: "Cargar proyecto",
46
+ exportSheet: "Exportar hoja corregida",
47
+ exportJson: "Exportar JSON de frames",
48
+ sheetView: "Vista de registro",
49
+ correctedView: "Hoja corregida",
50
+ activeFrame: "Inspector de frame",
51
+ frameStrip: "Frames",
52
+ flipbook: "Flipbook",
53
+ play: "Reproducir",
54
+ pause: "Pausar",
55
+ fps: "FPS",
56
+ zoom: "Zoom de preview",
57
+ ready: "Los ajustes se aplican al instante",
58
+ loaded: "Sprite sheet cargada",
59
+ modified: "Ajustado",
60
+ unchanged: "Posición original",
61
+ frameCount: "Frames",
62
+ correctionCount: "Frames ajustados",
63
+ imageSize: "Tamaño de imagen",
64
+ statusEmpty: "Esperando una sprite sheet",
65
+ statusSaved: "Proyecto guardado localmente",
66
+ statusLoaded: "Proyecto cargado",
67
+ statusExported: "Exportación lista",
68
+ statusInvalidImage: "No se pudo abrir esta imagen",
69
+ statusInvalidProject: "El archivo de proyecto no es válido",
70
+ statusProjectNeedsImage:
71
+ "Proyecto recordado. Abre su imagen fuente para aplicarlo",
72
+ statusImageMismatch: "Proyecto cargado con otro tamaño de fuente",
73
+ metadataNote: "Los píxeles transparentes siguen transparentes al exportar",
74
+ sourceLabel: "Hoja fuente",
75
+ resultLabel: "Hoja corregida",
76
+ selectFrame: "Seleccionar frame",
77
+ moveUp: "Mover frame arriba",
78
+ moveDown: "Mover frame abajo",
79
+ moveLeft: "Mover frame a la izquierda",
80
+ moveRight: "Mover frame a la derecha",
81
+ },
82
+ });
@@ -0,0 +1,82 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "fr",
5
+ slug: "editeur-correcteur-sprite-sheet",
6
+ title: "Éditeur correcteur de Sprite Sheet",
7
+ description:
8
+ "Corrigez le recadrage et l'alignement des pixels d'une sprite sheet directement dans le navigateur.",
9
+ ui: {
10
+ uploadTitle: "Ouvrir une sprite sheet",
11
+ uploadHint:
12
+ "Déposez un PNG ou WebP pour placer ses frames sur l'atelier de réparation",
13
+ chooseImage: "Choisir une image",
14
+ sourceFile: "Fichier source",
15
+ noImage: "Aucune sprite sheet chargée",
16
+ gridSettings: "Enregistrement de la grille",
17
+ columns: "Colonnes",
18
+ rows: "Lignes",
19
+ cellWidth: "Largeur de cellule",
20
+ cellHeight: "Hauteur de cellule",
21
+ marginX: "Marge gauche",
22
+ marginY: "Marge supérieure",
23
+ gapX: "Écart entre colonnes",
24
+ gapY: "Écart entre lignes",
25
+ frameTools: "Contrôles du frame",
26
+ cropX: "Recadrage gauche",
27
+ cropY: "Recadrage haut",
28
+ cropWidth: "Largeur du recadrage",
29
+ cropHeight: "Hauteur du recadrage",
30
+ offsetX: "Décalage X",
31
+ offsetY: "Décalage Y",
32
+ trimTransparent: "Rogner les pixels transparents",
33
+ trimAll: "Rogner tous les frames",
34
+ autoDetectGrid: "Détecter la grille",
35
+ resetFrame: "Réinitialiser le frame",
36
+ nudgeStep: "Pas de déplacement",
37
+ stepOne: "Un pixel",
38
+ stepTwo: "Deux pixels",
39
+ stepFour: "Quatre pixels",
40
+ history: "Journal de réparation",
41
+ undo: "Annuler",
42
+ redo: "Rétablir",
43
+ resetAll: "Réinitialiser la sheet",
44
+ saveProject: "Enregistrer le projet",
45
+ loadProject: "Charger le projet",
46
+ exportSheet: "Exporter la sheet corrigée",
47
+ exportJson: "Exporter le JSON des frames",
48
+ sheetView: "Vue d'enregistrement",
49
+ correctedView: "Sheet corrigée",
50
+ activeFrame: "Inspecteur de frame",
51
+ frameStrip: "Frames",
52
+ flipbook: "Flipbook",
53
+ play: "Lire",
54
+ pause: "Pause",
55
+ fps: "FPS",
56
+ zoom: "Zoom de prévisualisation",
57
+ ready: "Les réglages sont appliqués en direct",
58
+ loaded: "Sprite sheet chargée",
59
+ modified: "Modifié",
60
+ unchanged: "Position originale",
61
+ frameCount: "Frames",
62
+ correctionCount: "Frames modifiés",
63
+ imageSize: "Taille de l'image",
64
+ statusEmpty: "En attente d'une sprite sheet",
65
+ statusSaved: "Projet enregistré localement",
66
+ statusLoaded: "Projet chargé",
67
+ statusExported: "Export prêt",
68
+ statusInvalidImage: "Cette image ne peut pas être ouverte",
69
+ statusInvalidProject: "Ce fichier de projet est invalide",
70
+ statusProjectNeedsImage:
71
+ "Projet mémorisé. Ouvrez son image source pour l'appliquer",
72
+ statusImageMismatch: "Projet chargé avec une autre taille source",
73
+ metadataNote: "Les pixels transparents restent transparents à l'export",
74
+ sourceLabel: "Sheet source",
75
+ resultLabel: "Sheet corrigée",
76
+ selectFrame: "Sélectionner le frame",
77
+ moveUp: "Déplacer le frame vers le haut",
78
+ moveDown: "Déplacer le frame vers le bas",
79
+ moveLeft: "Déplacer le frame vers la gauche",
80
+ moveRight: "Déplacer le frame vers la droite",
81
+ },
82
+ });
@@ -0,0 +1,82 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "id",
5
+ slug: "editor-perbaikan-sprite-sheet",
6
+ title: "Editor Perbaikan Sprite Sheet",
7
+ description:
8
+ "Perbaiki pemotongan dan perataan piksel sprite sheet langsung di browser, lalu ekspor hasil dan metadata frame.",
9
+ ui: {
10
+ uploadTitle: "Buka sprite sheet",
11
+ uploadHint:
12
+ "Letakkan PNG atau WebP untuk menempatkan frame di meja perbaikan",
13
+ chooseImage: "Pilih gambar",
14
+ sourceFile: "File sumber",
15
+ noImage: "Belum ada sprite sheet",
16
+ gridSettings: "Registrasi grid",
17
+ columns: "Kolom",
18
+ rows: "Baris",
19
+ cellWidth: "Lebar sel",
20
+ cellHeight: "Tinggi sel",
21
+ marginX: "Margin kiri",
22
+ marginY: "Margin atas",
23
+ gapX: "Jarak kolom",
24
+ gapY: "Jarak baris",
25
+ frameTools: "Kontrol penyesuaian frame",
26
+ cropX: "Potong kiri",
27
+ cropY: "Potong atas",
28
+ cropWidth: "Lebar potongan",
29
+ cropHeight: "Tinggi potongan",
30
+ offsetX: "Pergeseran X",
31
+ offsetY: "Pergeseran Y",
32
+ trimTransparent: "Pangkas piksel transparan",
33
+ trimAll: "Pangkas semua frame",
34
+ autoDetectGrid: "Deteksi grid otomatis",
35
+ resetFrame: "Atur ulang frame terpilih",
36
+ nudgeStep: "Langkah geser",
37
+ stepOne: "Satu piksel",
38
+ stepTwo: "Dua piksel",
39
+ stepFour: "Empat piksel",
40
+ history: "Log perbaikan",
41
+ undo: "Urungkan",
42
+ redo: "Ulangi",
43
+ resetAll: "Atur ulang sheet",
44
+ saveProject: "Simpan proyek",
45
+ loadProject: "Muat proyek",
46
+ exportSheet: "Ekspor sheet yang diperbaiki",
47
+ exportJson: "Ekspor JSON frame",
48
+ sheetView: "Tampilan registrasi",
49
+ correctedView: "Sheet diperbaiki",
50
+ activeFrame: "Inspektur frame",
51
+ frameStrip: "Frame",
52
+ flipbook: "Flipbook",
53
+ play: "Putar",
54
+ pause: "Jeda",
55
+ fps: "FPS",
56
+ zoom: "Zoom pratinjau",
57
+ ready: "Penyesuaian terlihat langsung",
58
+ loaded: "Sprite sheet dimuat",
59
+ modified: "Disesuaikan",
60
+ unchanged: "Posisi asli",
61
+ frameCount: "Frame",
62
+ correctionCount: "Frame disesuaikan",
63
+ imageSize: "Ukuran gambar",
64
+ statusEmpty: "Menunggu sprite sheet",
65
+ statusSaved: "Proyek disimpan secara lokal",
66
+ statusLoaded: "Proyek dimuat",
67
+ statusExported: "Ekspor siap",
68
+ statusInvalidImage: "Gambar ini tidak dapat dibuka",
69
+ statusInvalidProject: "File proyek ini tidak valid",
70
+ statusProjectNeedsImage:
71
+ "Proyek diingat. Buka gambar sumber untuk menerapkannya",
72
+ statusImageMismatch: "Proyek dimuat dengan ukuran sumber berbeda",
73
+ metadataNote: "Piksel transparan tetap transparan saat diekspor",
74
+ sourceLabel: "Sheet sumber",
75
+ resultLabel: "Sheet hasil",
76
+ selectFrame: "Pilih frame",
77
+ moveUp: "Pindahkan frame ke atas",
78
+ moveDown: "Pindahkan frame ke bawah",
79
+ moveLeft: "Pindahkan frame ke kiri",
80
+ moveRight: "Pindahkan frame ke kanan",
81
+ },
82
+ });
@@ -0,0 +1,82 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "it",
5
+ slug: "editor-correzione-sprite-sheet",
6
+ title: "Editor correzione Sprite Sheet",
7
+ description:
8
+ "Correggi ritaglio e allineamento dei pixel di una sprite sheet direttamente nel browser.",
9
+ ui: {
10
+ uploadTitle: "Apri una sprite sheet",
11
+ uploadHint:
12
+ "Trascina un PNG o WebP per posizionare i frame sul banco di riparazione",
13
+ chooseImage: "Scegli immagine",
14
+ sourceFile: "File sorgente",
15
+ noImage: "Nessuna sprite sheet caricata",
16
+ gridSettings: "Registrazione griglia",
17
+ columns: "Colonne",
18
+ rows: "Righe",
19
+ cellWidth: "Larghezza cella",
20
+ cellHeight: "Altezza cella",
21
+ marginX: "Margine sinistro",
22
+ marginY: "Margine superiore",
23
+ gapX: "Spazio colonne",
24
+ gapY: "Spazio righe",
25
+ frameTools: "Controlli del frame",
26
+ cropX: "Ritaglio sinistro",
27
+ cropY: "Ritaglio superiore",
28
+ cropWidth: "Larghezza ritaglio",
29
+ cropHeight: "Altezza ritaglio",
30
+ offsetX: "Spostamento X",
31
+ offsetY: "Spostamento Y",
32
+ trimTransparent: "Ritaglia pixel trasparenti",
33
+ trimAll: "Ritaglia tutti i frame",
34
+ autoDetectGrid: "Rileva griglia",
35
+ resetFrame: "Reimposta frame selezionato",
36
+ nudgeStep: "Passo spostamento",
37
+ stepOne: "Un pixel",
38
+ stepTwo: "Due pixel",
39
+ stepFour: "Quattro pixel",
40
+ history: "Registro riparazione",
41
+ undo: "Annulla",
42
+ redo: "Ripeti",
43
+ resetAll: "Reimposta sheet",
44
+ saveProject: "Salva progetto",
45
+ loadProject: "Carica progetto",
46
+ exportSheet: "Esporta sheet corretta",
47
+ exportJson: "Esporta JSON frame",
48
+ sheetView: "Vista registrazione",
49
+ correctedView: "Sheet corretta",
50
+ activeFrame: "Ispettore frame",
51
+ frameStrip: "Frame",
52
+ flipbook: "Flipbook",
53
+ play: "Riproduci",
54
+ pause: "Pausa",
55
+ fps: "FPS",
56
+ zoom: "Zoom anteprima",
57
+ ready: "Le modifiche sono immediate",
58
+ loaded: "Sprite sheet caricata",
59
+ modified: "Modificato",
60
+ unchanged: "Posizione originale",
61
+ frameCount: "Frame",
62
+ correctionCount: "Frame modificati",
63
+ imageSize: "Dimensioni immagine",
64
+ statusEmpty: "In attesa di una sprite sheet",
65
+ statusSaved: "Progetto salvato localmente",
66
+ statusLoaded: "Progetto caricato",
67
+ statusExported: "Esportazione pronta",
68
+ statusInvalidImage: "Impossibile aprire questa immagine",
69
+ statusInvalidProject: "File progetto non valido",
70
+ statusProjectNeedsImage:
71
+ "Progetto ricordato. Apri la sorgente per applicarlo",
72
+ statusImageMismatch: "Progetto caricato con dimensioni sorgente diverse",
73
+ metadataNote: "I pixel trasparenti restano trasparenti nell'esportazione",
74
+ sourceLabel: "Sheet sorgente",
75
+ resultLabel: "Sheet corretta",
76
+ selectFrame: "Seleziona frame",
77
+ moveUp: "Sposta frame in alto",
78
+ moveDown: "Sposta frame in basso",
79
+ moveLeft: "Sposta frame a sinistra",
80
+ moveRight: "Sposta frame a destra",
81
+ },
82
+ });
@@ -0,0 +1,81 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "ja",
5
+ slug: "fixer-editor",
6
+ title: "スプライトシート修正エディター",
7
+ description:
8
+ "ブラウザでスプライトシートの切り抜きとピクセル位置を調整し、修正版とフレームメタデータを出力します。",
9
+ ui: {
10
+ uploadTitle: "スプライトシートを開く",
11
+ uploadHint: "PNG または WebP をドロップしてフレームを修正エリアに配置",
12
+ chooseImage: "画像を選択",
13
+ sourceFile: "ソースファイル",
14
+ noImage: "スプライトシート未読込",
15
+ gridSettings: "グリッド登録",
16
+ columns: "列",
17
+ rows: "行",
18
+ cellWidth: "セル幅",
19
+ cellHeight: "セル高",
20
+ marginX: "左マージン",
21
+ marginY: "上マージン",
22
+ gapX: "列間隔",
23
+ gapY: "行間隔",
24
+ frameTools: "フレーム調整",
25
+ cropX: "左をトリミング",
26
+ cropY: "上をトリミング",
27
+ cropWidth: "トリミング幅",
28
+ cropHeight: "トリミング高",
29
+ offsetX: "X オフセット",
30
+ offsetY: "Y オフセット",
31
+ trimTransparent: "透明ピクセルをトリミング",
32
+ trimAll: "全フレームを自動トリミング",
33
+ autoDetectGrid: "グリッドを自動検出",
34
+ resetFrame: "選択フレームをリセット",
35
+ nudgeStep: "移動量",
36
+ stepOne: "1 ピクセル",
37
+ stepTwo: "2 ピクセル",
38
+ stepFour: "4 ピクセル",
39
+ history: "修正履歴",
40
+ undo: "元に戻す",
41
+ redo: "やり直す",
42
+ resetAll: "シートをリセット",
43
+ saveProject: "プロジェクトを保存",
44
+ loadProject: "プロジェクトを読み込む",
45
+ exportSheet: "修正版シートを出力",
46
+ exportJson: "フレーム JSON を出力",
47
+ sheetView: "登録ビュー",
48
+ correctedView: "修正版シート",
49
+ activeFrame: "フレームインスペクター",
50
+ frameStrip: "フレーム一覧",
51
+ flipbook: "フリップブック",
52
+ play: "再生",
53
+ pause: "一時停止",
54
+ fps: "FPS",
55
+ zoom: "プレビュー倍率",
56
+ ready: "調整結果をリアルタイム表示",
57
+ loaded: "スプライトシート読込済み",
58
+ modified: "調整済み",
59
+ unchanged: "元の位置",
60
+ frameCount: "フレーム",
61
+ correctionCount: "調整済みフレーム",
62
+ imageSize: "画像サイズ",
63
+ statusEmpty: "スプライトシートを待機中",
64
+ statusSaved: "プロジェクトをローカル保存しました",
65
+ statusLoaded: "プロジェクトを読み込みました",
66
+ statusExported: "出力準備完了",
67
+ statusInvalidImage: "この画像を開けません",
68
+ statusInvalidProject: "このプロジェクトファイルは無効です",
69
+ statusProjectNeedsImage:
70
+ "プロジェクトを記憶しました。適用するソース画像を開いてください",
71
+ statusImageMismatch: "異なるソースサイズのプロジェクトです",
72
+ metadataNote: "透明ピクセルは出力でも透明のままです",
73
+ sourceLabel: "ソースシート",
74
+ resultLabel: "修正版シート",
75
+ selectFrame: "フレームを選択",
76
+ moveUp: "フレームを上へ移動",
77
+ moveDown: "フレームを下へ移動",
78
+ moveLeft: "フレームを左へ移動",
79
+ moveRight: "フレームを右へ移動",
80
+ },
81
+ });
@@ -0,0 +1,81 @@
1
+ import { createLocalizedContent } from "./localized";
2
+
3
+ export const content = createLocalizedContent({
4
+ locale: "ko",
5
+ slug: "fixer-editor",
6
+ title: "스프라이트 시트 수정 에디터",
7
+ description:
8
+ "브라우저에서 스프라이트 시트의 잘라내기와 픽셀 정렬을 수정한 뒤 시트와 프레임 메타데이터를 내보냅니다.",
9
+ ui: {
10
+ uploadTitle: "스프라이트 시트 열기",
11
+ uploadHint: "PNG 또는 WebP를 놓아 프레임을 수정 작업대에 배치하세요",
12
+ chooseImage: "이미지 선택",
13
+ sourceFile: "원본 파일",
14
+ noImage: "스프라이트 시트가 없습니다",
15
+ gridSettings: "그리드 등록",
16
+ columns: "열",
17
+ rows: "행",
18
+ cellWidth: "셀 너비",
19
+ cellHeight: "셀 높이",
20
+ marginX: "왼쪽 여백",
21
+ marginY: "위쪽 여백",
22
+ gapX: "열 간격",
23
+ gapY: "행 간격",
24
+ frameTools: "프레임 조정 도구",
25
+ cropX: "왼쪽 자르기",
26
+ cropY: "위쪽 자르기",
27
+ cropWidth: "자르기 너비",
28
+ cropHeight: "자르기 높이",
29
+ offsetX: "X 오프셋",
30
+ offsetY: "Y 오프셋",
31
+ trimTransparent: "투명 픽셀 자르기",
32
+ trimAll: "모든 프레임 자동 자르기",
33
+ autoDetectGrid: "그리드 자동 감지",
34
+ resetFrame: "선택한 프레임 초기화",
35
+ nudgeStep: "이동 단위",
36
+ stepOne: "1픽셀",
37
+ stepTwo: "2픽셀",
38
+ stepFour: "4픽셀",
39
+ history: "수정 기록",
40
+ undo: "실행 취소",
41
+ redo: "다시 실행",
42
+ resetAll: "시트 초기화",
43
+ saveProject: "프로젝트 저장",
44
+ loadProject: "프로젝트 불러오기",
45
+ exportSheet: "수정된 시트 내보내기",
46
+ exportJson: "프레임 JSON 내보내기",
47
+ sheetView: "등록 보기",
48
+ correctedView: "수정된 시트",
49
+ activeFrame: "프레임 검사기",
50
+ frameStrip: "프레임 목록",
51
+ flipbook: "플립북",
52
+ play: "재생",
53
+ pause: "일시정지",
54
+ fps: "FPS",
55
+ zoom: "미리보기 확대",
56
+ ready: "조정 결과가 즉시 표시됩니다",
57
+ loaded: "스프라이트 시트 로드됨",
58
+ modified: "수정됨",
59
+ unchanged: "원래 위치",
60
+ frameCount: "프레임",
61
+ correctionCount: "수정된 프레임",
62
+ imageSize: "이미지 크기",
63
+ statusEmpty: "스프라이트 시트를 기다리는 중",
64
+ statusSaved: "프로젝트를 로컬에 저장했습니다",
65
+ statusLoaded: "프로젝트를 불러왔습니다",
66
+ statusExported: "내보낼 준비가 되었습니다",
67
+ statusInvalidImage: "이미지를 열 수 없습니다",
68
+ statusInvalidProject: "프로젝트 파일이 올바르지 않습니다",
69
+ statusProjectNeedsImage:
70
+ "프로젝트를 기억했습니다. 적용할 원본 이미지를 여세요",
71
+ statusImageMismatch: "원본 크기가 다른 프로젝트입니다",
72
+ metadataNote: "투명 픽셀은 내보낼 때도 투명하게 유지됩니다",
73
+ sourceLabel: "원본 시트",
74
+ resultLabel: "수정된 시트",
75
+ selectFrame: "프레임 선택",
76
+ moveUp: "프레임 위로 이동",
77
+ moveDown: "프레임 아래로 이동",
78
+ moveLeft: "프레임 왼쪽으로 이동",
79
+ moveRight: "프레임 오른쪽으로 이동",
80
+ },
81
+ });