cyberia 2.96.1 → 2.98.3

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 (200) hide show
  1. package/.dockerignore +1 -2
  2. package/.env.development +0 -3
  3. package/.env.production +0 -3
  4. package/.env.test +0 -3
  5. package/.github/workflows/engine-cyberia.ci.yml +1 -1
  6. package/.prettierignore +1 -2
  7. package/.vscode/settings.json +7 -8
  8. package/README.md +140 -5
  9. package/baremetal/commission-workflows.json +94 -17
  10. package/bin/build.js +21 -5
  11. package/bin/cyberia.js +335 -85
  12. package/bin/deploy.js +11 -1
  13. package/bin/file.js +2 -1
  14. package/bin/index.js +335 -85
  15. package/bin/util.js +0 -17
  16. package/cli.md +77 -41
  17. package/conf.js +24 -396
  18. package/deployment.yaml +4 -4
  19. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  20. package/manifests/deployment/dd-test-development/deployment.yaml +4 -4
  21. package/package.json +11 -7
  22. package/packer/scripts/fuse-tar-root +3 -3
  23. package/scripts/disk-clean.sh +128 -187
  24. package/scripts/gpu-diag.sh +2 -2
  25. package/scripts/ip-info.sh +11 -11
  26. package/scripts/ipxe-setup.sh +197 -0
  27. package/scripts/maas-upload-boot-resource.sh +1 -1
  28. package/scripts/nvim.sh +1 -1
  29. package/scripts/packer-setup.sh +13 -13
  30. package/scripts/ports-ls.sh +31 -0
  31. package/scripts/quick-tftp.sh +19 -0
  32. package/scripts/rocky-pwa.sh +200 -0
  33. package/scripts/rocky-setup.sh +12 -39
  34. package/scripts/rpmfusion-ffmpeg-setup.sh +4 -4
  35. package/scripts/ssl.sh +7 -7
  36. package/src/api/{ipfs/ipfs.controller.js → atlas-sprite-sheet/atlas-sprite-sheet.controller.js} +29 -6
  37. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +126 -0
  38. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +27 -0
  39. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +46 -0
  40. package/src/api/core/core.service.js +0 -5
  41. package/src/api/default/default.service.js +7 -5
  42. package/src/api/document/document.controller.js +15 -0
  43. package/src/api/document/document.model.js +44 -1
  44. package/src/api/document/document.router.js +7 -0
  45. package/src/api/document/document.service.js +463 -43
  46. package/src/api/file/file.model.js +112 -4
  47. package/src/api/file/file.ref.json +42 -0
  48. package/src/api/file/file.service.js +380 -32
  49. package/src/api/instance/instance.service.js +15 -10
  50. package/src/api/object-layer/README.md +140 -5
  51. package/src/api/object-layer/object-layer.model.js +18 -72
  52. package/src/api/object-layer/object-layer.service.js +87 -44
  53. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +74 -0
  54. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +104 -0
  55. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +27 -0
  56. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +42 -0
  57. package/src/api/user/user.model.js +38 -1
  58. package/src/api/user/user.router.js +96 -63
  59. package/src/api/user/user.service.js +81 -48
  60. package/src/cli/baremetal.js +2001 -463
  61. package/src/cli/cloud-init.js +354 -231
  62. package/src/cli/cluster.js +56 -62
  63. package/src/cli/db.js +440 -160
  64. package/src/cli/deploy.js +7 -3
  65. package/src/cli/image.js +1 -0
  66. package/src/cli/index.js +48 -37
  67. package/src/cli/lxd.js +3 -3
  68. package/src/cli/repository.js +10 -10
  69. package/src/cli/run.js +186 -117
  70. package/src/cli/ssh.js +11 -11
  71. package/src/client/Itemledger.index.js +962 -2
  72. package/src/client/components/core/Account.js +327 -36
  73. package/src/client/components/core/AgGrid.js +3 -0
  74. package/src/client/components/core/Auth.js +11 -3
  75. package/src/client/components/core/Chat.js +2 -2
  76. package/src/client/components/core/Content.js +214 -83
  77. package/src/client/components/core/Css.js +46 -2
  78. package/src/client/components/core/CssCore.js +16 -12
  79. package/src/client/components/core/FileExplorer.js +813 -49
  80. package/src/client/components/core/FullScreen.js +202 -9
  81. package/src/client/components/core/Input.js +210 -13
  82. package/src/client/components/core/LogIn.js +42 -20
  83. package/src/client/components/core/Modal.js +257 -177
  84. package/src/client/components/core/Panel.js +546 -33
  85. package/src/client/components/core/PanelForm.js +481 -108
  86. package/src/client/components/core/PublicProfile.js +888 -0
  87. package/src/client/components/core/Responsive.js +15 -7
  88. package/src/client/components/core/Router.js +117 -15
  89. package/src/client/components/core/SearchBox.js +1007 -0
  90. package/src/client/components/core/SignUp.js +26 -7
  91. package/src/client/components/core/SocketIo.js +6 -3
  92. package/src/client/components/core/Translate.js +167 -0
  93. package/src/client/components/core/Validator.js +15 -0
  94. package/src/client/components/core/VanillaJs.js +80 -29
  95. package/src/client/components/core/windowGetDimensions.js +6 -6
  96. package/src/client/components/{core → cyberia}/ObjectLayerEngine.js +2 -3
  97. package/src/client/components/{core → cyberia}/ObjectLayerEngineModal.js +167 -124
  98. package/src/client/components/{core → cyberia}/ObjectLayerEngineViewer.js +54 -31
  99. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +8 -1
  100. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +3 -0
  101. package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +2 -2
  102. package/src/client/components/default/MenuDefault.js +59 -12
  103. package/src/client/components/default/RoutesDefault.js +1 -0
  104. package/src/client/services/{ipfs/ipfs.service.js → atlas-sprite-sheet/atlas-sprite-sheet.service.js} +38 -6
  105. package/src/client/services/core/core.service.js +163 -1
  106. package/src/client/services/default/default.management.js +752 -186
  107. package/src/client/services/default/default.service.js +13 -6
  108. package/src/client/services/document/document.service.js +42 -0
  109. package/src/client/services/file/file.service.js +43 -16
  110. package/src/client/services/instance/instance.service.js +20 -5
  111. package/src/client/services/object-layer/object-layer.management.js +24 -8
  112. package/src/client/services/object-layer/object-layer.service.js +4 -5
  113. package/src/client/services/{blockchain/blockchain.service.js → object-layer-render-frames/object-layer-render-frames.service.js} +38 -6
  114. package/src/client/services/user/user.service.js +13 -9
  115. package/src/client/sw/default.sw.js +107 -184
  116. package/src/db/DataBaseProvider.js +1 -1
  117. package/src/db/mongo/MongooseDB.js +1 -1
  118. package/src/index.js +58 -20
  119. package/src/mailer/MailerProvider.js +4 -4
  120. package/src/runtime/express/Express.js +2 -1
  121. package/src/runtime/lampp/Lampp.js +2 -2
  122. package/src/server/atlas-sprite-sheet-generator.js +411 -0
  123. package/src/server/auth.js +3 -6
  124. package/src/server/data-query.js +449 -0
  125. package/src/server/dns.js +12 -6
  126. package/src/server/object-layer.js +34 -34
  127. package/src/server/start.js +14 -6
  128. package/src/ws/IoInterface.js +2 -2
  129. package/src/api/blockchain/blockchain.controller.js +0 -51
  130. package/src/api/blockchain/blockchain.model.js +0 -90
  131. package/src/api/blockchain/blockchain.router.js +0 -21
  132. package/src/api/blockchain/blockchain.service.js +0 -24
  133. package/src/api/ipfs/ipfs.model.js +0 -17
  134. package/src/api/ipfs/ipfs.router.js +0 -20
  135. package/src/api/ipfs/ipfs.service.js +0 -25
  136. package/src/client/Cyberia.index.js +0 -50
  137. package/src/client/CyberiaAdmin.index.js +0 -34
  138. package/src/client/components/cyberia/BagCyberia.js +0 -1253
  139. package/src/client/components/cyberia/BiomeCyberia.js +0 -130
  140. package/src/client/components/cyberia/CharacterCyberia.js +0 -321
  141. package/src/client/components/cyberia/CommonCyberia.js +0 -1834
  142. package/src/client/components/cyberia/CssCyberia.js +0 -816
  143. package/src/client/components/cyberia/ElementPreviewCyberia.js +0 -183
  144. package/src/client/components/cyberia/ElementsCyberia.js +0 -146
  145. package/src/client/components/cyberia/InteractionPanelCyberia.js +0 -1043
  146. package/src/client/components/cyberia/JoyStickCyberia.js +0 -53
  147. package/src/client/components/cyberia/LogInCyberia.js +0 -68
  148. package/src/client/components/cyberia/LogOutCyberia.js +0 -24
  149. package/src/client/components/cyberia/MainUserCyberia.js +0 -424
  150. package/src/client/components/cyberia/MapCyberia.js +0 -160
  151. package/src/client/components/cyberia/MatrixCyberia.js +0 -147
  152. package/src/client/components/cyberia/MenuCyberia.js +0 -544
  153. package/src/client/components/cyberia/PixiCyberia.js +0 -1639
  154. package/src/client/components/cyberia/PointAndClickMovementCyberia.js +0 -146
  155. package/src/client/components/cyberia/QuestCyberia.js +0 -1420
  156. package/src/client/components/cyberia/RoutesCyberia.js +0 -47
  157. package/src/client/components/cyberia/SettingsCyberia.js +0 -16
  158. package/src/client/components/cyberia/SignUpCyberia.js +0 -14
  159. package/src/client/components/cyberia/SkillCyberia.js +0 -124
  160. package/src/client/components/cyberia/SocketIoCyberia.js +0 -211
  161. package/src/client/components/cyberia/TileCyberia.js +0 -685
  162. package/src/client/components/cyberia/TranslateCyberia.js +0 -96
  163. package/src/client/components/cyberia/UniverseCyberia.js +0 -14
  164. package/src/client/components/cyberia/WebhookCyberia.js +0 -13
  165. package/src/client/components/cyberia/WikiCyberia.js +0 -144
  166. package/src/client/components/cyberia/WorldCyberia.js +0 -680
  167. package/src/client/components/cyberia-admin/BiomeCyberiaAdmin.js +0 -978
  168. package/src/client/components/cyberia-admin/CommonCyberiaAdmin.js +0 -29
  169. package/src/client/components/cyberia-admin/CssCyberiaAdmin.js +0 -15
  170. package/src/client/components/cyberia-admin/ElementsCyberiaAdmin.js +0 -38
  171. package/src/client/components/cyberia-admin/InstanceEngineCyberiaAdmin.js +0 -180
  172. package/src/client/components/cyberia-admin/LogInCyberiaAdmin.js +0 -34
  173. package/src/client/components/cyberia-admin/LogOutCyberiaAdmin.js +0 -24
  174. package/src/client/components/cyberia-admin/MenuCyberiaAdmin.js +0 -621
  175. package/src/client/components/cyberia-admin/RoutesCyberiaAdmin.js +0 -57
  176. package/src/client/components/cyberia-admin/ServerCyberiaAdmin.js +0 -129
  177. package/src/client/components/cyberia-admin/SettingsCyberiaAdmin.js +0 -16
  178. package/src/client/components/cyberia-admin/SignUpCyberiaAdmin.js +0 -11
  179. package/src/client/components/cyberia-admin/SocketIoCyberiaAdmin.js +0 -53
  180. package/src/client/components/cyberia-admin/TranslateCyberiaAdmin.js +0 -7
  181. package/src/client/components/cyberia-biome/CityCyberiaBiome.js +0 -209
  182. package/src/client/components/cyberia-biome/CityInteriorCyberiaBiome.js +0 -253
  183. package/src/client/components/cyberia-biome/ColorChaosCyberiaBiome.js +0 -26
  184. package/src/client/components/cyberia-biome/ForestCyberiaBiome.js +0 -191
  185. package/src/client/components/cyberia-biome/GridBaseCyberiaBiome.js +0 -364
  186. package/src/client/components/cyberia-biome/SeedCityCyberiaBiome.js +0 -347
  187. package/src/client/components/cyberia-biome/ShopCyberiaBiome.js +0 -12
  188. package/src/client/components/cyberia-biome/SpaceCyberiaBiome.js +0 -58
  189. package/src/client/ssr/body/CyberiaSplashScreenLore.js +0 -424
  190. package/src/client/ssr/head/CyberiaAdminScripts.js +0 -6
  191. package/src/client/ssr/head/CyberiaScripts.js +0 -6
  192. package/src/ws/cyberia/channels/cyberia.ws.bot.js +0 -56
  193. package/src/ws/cyberia/channels/cyberia.ws.skill.js +0 -51
  194. package/src/ws/cyberia/channels/cyberia.ws.user.js +0 -437
  195. package/src/ws/cyberia/cyberia.ws.connection.js +0 -36
  196. package/src/ws/cyberia/cyberia.ws.emit.js +0 -14
  197. package/src/ws/cyberia/cyberia.ws.server.js +0 -67
  198. package/src/ws/cyberia/management/cyberia.ws.bot.js +0 -669
  199. package/src/ws/cyberia/management/cyberia.ws.skill.js +0 -441
  200. package/src/ws/cyberia/management/cyberia.ws.user.js +0 -188
package/.dockerignore CHANGED
@@ -3,7 +3,6 @@
3
3
  /engine-private
4
4
  /conf
5
5
  /tmp
6
- /bkt
7
6
  /logs
8
7
  /build
9
8
  /.env
@@ -12,4 +11,4 @@
12
11
  /grafana_data
13
12
  /manifests
14
13
  .nyc_output
15
- .cache
14
+ .cache
package/.env.development CHANGED
@@ -35,12 +35,9 @@ MAAS_ADMIN_EMAIL=admin@default.net
35
35
  MAAS_ADMIN_PASS=changethis
36
36
  TFTP_ROOT=changethis
37
37
  NETMASK=255.255.255.0
38
- RPI4_INTERFACE_NAME=changethis
39
- RPI4_IP=192.168.1.192
40
38
  MAAS_DNS=8.8.8.8
41
39
  MAAS_NTP_SERVER=changethis
42
40
  NFS_EXPORT_PATH=changethis
43
- RPI4_MAC_ADDRESS=changethis
44
41
  NVIDIA_API_KEY=changethis
45
42
  DEFAULT_ADMIN_EMAIL=admin@default.net
46
43
  DEFAULT_ADMIN_PASSWORD=changethis
package/.env.production CHANGED
@@ -36,12 +36,9 @@ MAAS_ADMIN_EMAIL=admin@default.net
36
36
  MAAS_ADMIN_PASS=changethis
37
37
  TFTP_ROOT=changethis
38
38
  NETMASK=255.255.255.0
39
- RPI4_INTERFACE_NAME=changethis
40
- RPI4_IP=192.168.1.192
41
39
  MAAS_DNS=8.8.8.8
42
40
  MAAS_NTP_SERVER=changethis
43
41
  NFS_EXPORT_PATH=changethis
44
- RPI4_MAC_ADDRESS=changethis
45
42
  NVIDIA_API_KEY=changethis
46
43
  DEFAULT_ADMIN_EMAIL=admin@default.net
47
44
  DEFAULT_ADMIN_PASSWORD=changethis
package/.env.test CHANGED
@@ -35,12 +35,9 @@ MAAS_ADMIN_EMAIL=admin@default.net
35
35
  MAAS_ADMIN_PASS=changethis
36
36
  TFTP_ROOT=changethis
37
37
  NETMASK=255.255.255.0
38
- RPI4_INTERFACE_NAME=changethis
39
- RPI4_IP=192.168.1.192
40
38
  MAAS_DNS=8.8.8.8
41
39
  MAAS_NTP_SERVER=changethis
42
40
  NFS_EXPORT_PATH=changethis
43
- RPI4_MAC_ADDRESS=changethis
44
41
  NVIDIA_API_KEY=changethis
45
42
  DEFAULT_ADMIN_EMAIL=admin@default.net
46
43
  DEFAULT_ADMIN_PASSWORD=changethis
@@ -13,7 +13,7 @@ jobs:
13
13
  # if: github.repository == 'underpostnet/engine' && startsWith(github.event.head_commit.message, 'ci(engine-cyberia-repo-build)')
14
14
  name: Update github repo package Jobs
15
15
  env:
16
- SYNC: ${{ startsWith(github.event.workflow_run.head_commit.message, 'ci(package-pwa-microservices-template-sync-dd-cyberia)') }}
16
+ SYNC: ${{ startsWith(github.event.workflow_run.head_commit.message, 'ci(package-pwa-microservices-template-sync-engine-cyberia)') }}
17
17
  runs-on: ubuntu-latest
18
18
  container:
19
19
  image: quay.io/rockylinux/rockylinux:9
package/.prettierignore CHANGED
@@ -2,7 +2,6 @@
2
2
  /public
3
3
  /conf
4
4
  /tmp
5
- /bkt
6
5
  /logs
7
6
  /build
8
7
  /.env
@@ -10,4 +9,4 @@
10
9
  /prometheus_data
11
10
  /grafana_data
12
11
  .nyc_output
13
- .cache
12
+ .cache
@@ -4,10 +4,10 @@
4
4
  "explorer.compactFolders": false,
5
5
  "javascript.preferences.importModuleSpecifierEnding": "js",
6
6
  "[javascript]": {
7
- "editor.defaultFormatter": "esbenp.prettier-vscode"
7
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
8
8
  },
9
9
  "[python]": {
10
- "editor.defaultFormatter": "ms-python.python"
10
+ "editor.defaultFormatter": "ms-python.python",
11
11
  },
12
12
  "cSpell.words": [
13
13
  "adminer",
@@ -40,7 +40,6 @@
40
40
  "htmls",
41
41
  "inet",
42
42
  "inlt",
43
- "ipfs",
44
43
  "Itemledger",
45
44
  "jsonld",
46
45
  "lampp",
@@ -72,16 +71,16 @@
72
71
  "webroot",
73
72
  "xampp",
74
73
  "xfwd",
75
- "youtu"
74
+ "youtu",
76
75
  ],
77
76
  "[php]": {
78
- "editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
77
+ "editor.defaultFormatter": "bmewburn.vscode-intelephense-client",
79
78
  },
80
79
  "[xml]": {
81
- "editor.defaultFormatter": "redhat.vscode-xml"
80
+ "editor.defaultFormatter": "redhat.vscode-xml",
82
81
  },
83
82
 
84
83
  "files.watcherExclude": {
85
- "**/target": true
86
- }
84
+ "**/target": true,
85
+ },
87
86
  }
package/README.md CHANGED
@@ -14,17 +14,21 @@
14
14
 
15
15
  This Command Line Interface (CLI) is a core tool for the **Cyberia Network Object Layer Engine**, specifically designed for processing, generating, and managing game assets, primarily **Object Layer** elements like skins, floors, and weapons.
16
16
 
17
- It handles image asset quantization, generates data matrices and color palettes, and persists the resulting structured data into the game's database.
17
+ It handles image asset quantization, generates data matrices and color palettes, creates separate render frame documents, and persists the resulting structured data into the game's database with top-level references to render frames and atlas sprite sheets.
18
18
 
19
19
  ## What this tool does
20
20
 
21
- The CLI scans the local asset folders (`./src/client/public/cyberia/assets/{type}/{id}/{direction}/{frame}`), quantizes images to a tile matrix and color palette, and persists the resulting object-layer documents to your configured MongoDB. It also supports reconstructing a visual PNG from the stored matrix for inspection.
21
+ The CLI scans the local asset folders (`./src/client/public/cyberia/assets/{type}/{id}/{direction}/{frame}`), quantizes images to a tile matrix and color palette, creates separate ObjectLayerRenderFrames documents, and persists the resulting object-layer documents with references to your configured MongoDB. It also supports reconstructing a visual PNG from the stored matrix for inspection.
22
22
 
23
23
  Key features:
24
24
 
25
25
  - Walks the asset directory structure and processes PNG/GIF files.
26
26
  - Produces `frame_matrix` and `map_color` arrays from images.
27
- - Saves processed objects to the `ObjectLayer` model in MongoDB.
27
+ - Saves processed objects to the `ObjectLayer` model with top-level references to `ObjectLayerRenderFrames`.
28
+ - Creates separate `ObjectLayerRenderFrames` documents for render data.
29
+ - Links ObjectLayers to AtlasSpriteSheet documents via top-level `atlasSpriteSheetId`.
30
+ - Generates unique UUID v4 seeds (via `crypto.randomUUID()`) for SHA256 hash uniqueness.
31
+ - Generates SHA256 hash using `fast-json-stable-stringify` for deterministic serialization.
28
32
  - Reconstructs PNG frames from stored tile data for debugging.
29
33
 
30
34
  ## Getting Started
@@ -66,8 +70,139 @@ cyberia ol --import all
66
70
 
67
71
  ## Visualize a processed frame
68
72
 
69
- Reconstructs and opens a PNG from the processed frame data. The input format is `objectLayerId_direction_frameIndex`.
73
+ Reconstructs and opens a PNG from the database-stored frame data. Requires item-id as the first positional argument, followed by direction and frame index in the format `[direction]_[frameIndex]`.
70
74
 
71
75
  ```bash
72
- cyberia ol --import skin --show-frame anon_08_0
76
+ # Show frame with default direction and frame (08_0)
77
+ cyberia ol anon --show-frame
78
+
79
+ # Show specific direction and frame
80
+ cyberia ol anon --show-frame 08_0
81
+
82
+ # Show different directions
83
+ cyberia ol anon --show-frame 02_0 # up_idle
84
+ cyberia ol anon --show-frame 04_1 # left_idle (second frame)
85
+ ```
86
+
87
+ **Valid direction codes:**
88
+ - `08`: down_idle, none_idle, default_idle
89
+ - `18`: down_walking
90
+ - `02`: up_idle
91
+ - `12`: up_walking
92
+ - `04`: left_idle, up_left_idle, down_left_idle
93
+ - `14`: left_walking, up_left_walking, down_left_walking
94
+ - `06`: right_idle, up_right_idle, down_right_idle
95
+ - `16`: right_walking, up_right_walking, down_right_walking
96
+
97
+ This command:
98
+ - Finds the ObjectLayer by item-id
99
+ - Loads the associated ObjectLayerRenderFrames document
100
+ - Reconstructs the PNG from the stored `frame_matrix` and `map_color`
101
+ - Saves it temporarily to disk as `{item-id}_{direction}_{frame}.png`
102
+ - Opens it with Firefox for visual inspection
103
+
104
+ ### Generate Atlas Sprite Sheet
105
+
106
+ Consolidates all frames (8 directions, multiple modes) from an object layer's render frames into a single optimized PNG atlas with metadata.
107
+
108
+ ```bash
109
+ # Generate atlas sprite sheet with auto-calculated dimensions (recommended)
110
+ cyberia ol anon --to-atlas-sprite-sheet
111
+
112
+ # Generate atlas with custom dimensions (manual override)
113
+ cyberia ol anon --to-atlas-sprite-sheet 4096
114
+
115
+
116
+ ```
117
+
118
+ This command:
119
+ - Finds the ObjectLayer by item-id or MongoDB `_id`
120
+ - Loads the associated ObjectLayerRenderFrames document
121
+ - **Auto-calculates optimal atlas dimensions** based on total frame count (8 directions × all animation modes)
122
+ - Generates a consolidated PNG with all animation frames properly arranged
123
+ - Stores the PNG in the File collection
124
+ - Creates/updates an AtlasSpriteSheet document with frame positions
125
+ - Updates the ObjectLayer with top-level `atlasSpriteSheetId` reference
126
+ - Uses power-of-2 dimensions for GPU efficiency
127
+
128
+ **Atlas Dimension Calculation:**
129
+ - **Auto (default)**: Dynamically calculates optimal size based on:
130
+ - Total number of frames across all directions and modes
131
+ - Individual frame dimensions
132
+ - Grid layout to minimize wasted space
133
+ - Power-of-2 optimization (1024, 2048, 4096, etc.)
134
+ - **Manual override**: Specify exact dimension (e.g., `--to-atlas-sprite-sheet 4096`)
135
+
136
+ **Common Atlas Sizes:**
137
+ - **1024x1024**: ~6-10 frames
138
+ - **2048x2048**: ~20-40 frames (typical for character sprites)
139
+ - **4096x4096**: ~80-160 frames (complex animations)
140
+ - **8192x8192**: Maximum, for extreme cases
141
+
142
+ The tool automatically warns if frames exceed the specified dimension and suggests a larger size.
143
+
144
+ ### View Atlas Sprite Sheet
145
+
146
+ Opens the consolidated atlas sprite sheet PNG for inspection.
147
+
148
+ ```bash
149
+ # Show atlas sprite sheet by item-id
150
+ cyberia ol anon --show-atlas-sprite-sheet
151
+
152
+ ```
153
+
154
+ This command:
155
+ - Finds the ObjectLayer by item-id
156
+ - Retrieves the associated AtlasSpriteSheet via top-level `atlasSpriteSheetId` or by matching `metadata.itemKey`
157
+ - Saves it temporarily to disk
158
+ - Opens it with Firefox for visual inspection
159
+ - Displays atlas dimensions in the console
160
+
161
+ ## Common Workflows
162
+
163
+ ### Complete Asset Processing Pipeline
164
+
165
+ Process assets from source files through to atlas generation:
166
+
167
+ ```bash
168
+ # 1. Import object layers from asset directories
169
+ cyberia ol --import skin
170
+
171
+ # 2. Verify a specific frame was imported correctly
172
+ cyberia ol anon --show-frame 08_0
173
+
174
+ # 3. Generate optimized atlas sprite sheet
175
+ cyberia ol anon --to-atlas-sprite-sheet
176
+
177
+ # 4. View the generated atlas
178
+ cyberia ol anon --show-atlas-sprite-sheet
179
+ ```
180
+
181
+ ### Debugging Asset Issues
182
+
183
+ ```bash
184
+ # Check if frame data is correct for all directions
185
+ cyberia ol anon --show-frame 08_0 # down_idle
186
+ cyberia ol anon --show-frame 02_0 # up_idle
187
+ cyberia ol anon --show-frame 04_0 # left_idle
188
+ cyberia ol anon --show-frame 06_0 # right_idle
189
+
190
+ # Verify walking animations
191
+ cyberia ol anon --show-frame 18_0 # down_walking
192
+ cyberia ol anon --show-frame 12_0 # up_walking
193
+ cyberia ol anon --show-frame 14_0 # left_walking
194
+ cyberia ol anon --show-frame 16_0 # right_walking
195
+ ```
196
+
197
+ ### Working with Multiple Items
198
+
199
+ ```bash
200
+ # Import multiple types at once
201
+ cyberia ol --import skin,floor,weapon
202
+
203
+ # Process individual items
204
+ cyberia ol sword --show-frame 08_0
205
+ cyberia ol sword --to-atlas-sprite-sheet
206
+ cyberia ol shield --show-frame 08_0
207
+ cyberia ol shield --to-atlas-sprite-sheet
73
208
  ```
@@ -1,10 +1,40 @@
1
1
  {
2
- "rpi4mb": {
3
- "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 commissioning (ARM64)",
4
- "systemProvisioning": "ubuntu",
5
- "kernelLibVersion": "6.8.0-41-generic",
2
+ "rpi4mbarm64-iso-ram": {
3
+ "type": "iso-ram",
4
+ "osIdLike": "debian ubuntu",
5
+ "isoUrl": "https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.3-live-server-arm64.iso",
6
+ "tftpPrefix": "rpi4mb",
7
+ "bootstrapHttpServerPort": 8888,
8
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-RAM commissioning (ARM64)",
9
+ "networkInterfaceName": "enabcm6e4ei0",
10
+ "chronyc": {
11
+ "timezone": "America/Santiago",
12
+ "chronyConfPath": "/etc/chrony/chrony.conf"
13
+ },
14
+ "firmwares": [
15
+ {
16
+ "url": "https://github.com/pftf/RPi4/releases/download/v1.41/RPi4_UEFI_Firmware_v1.41.zip",
17
+ "gateway": "192.168.1.1",
18
+ "subnet": "255.255.255.0"
19
+ }
20
+ ],
21
+ "maas": {
22
+ "commissioning": {
23
+ "architecture": "arm64/hwe-24.04-edge",
24
+ "name": "ubuntu/noble"
25
+ }
26
+ },
27
+ "keyboard": {
28
+ "layout": "es"
29
+ }
30
+ },
31
+ "rpi4mbarm64-chroot": {
32
+ "type": "chroot-debootstrap",
33
+ "osIdLike": "debian ubuntu",
34
+ "tftpPrefix": "rpi4mb",
35
+ "bootstrapHttpServerPort": 8888,
36
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 CHROOT commissioning (ARM64)",
6
37
  "networkInterfaceName": "enabcm6e4ei0",
7
- "netmask": "255.255.255.0",
8
38
  "firmwares": [
9
39
  {
10
40
  "url": "https://github.com/pftf/RPi4/releases/download/v1.41/RPi4_UEFI_Firmware_v1.41.zip",
@@ -13,7 +43,7 @@
13
43
  }
14
44
  ],
15
45
  "chronyc": {
16
- "timezone": "America/New_York",
46
+ "timezone": "America/Santiago",
17
47
  "chronyConfPath": "/etc/chrony/chrony.conf"
18
48
  },
19
49
  "debootstrap": {
@@ -23,22 +53,69 @@
23
53
  }
24
54
  },
25
55
  "maas": {
26
- "image": {
56
+ "commissioning": {
27
57
  "architecture": "arm64/ga-24.04",
28
58
  "name": "ubuntu/noble"
29
59
  }
30
60
  },
31
- "nfs": {
32
- "mounts": {
33
- "bind": [
34
- "/proc",
35
- "/sys",
36
- "/run"
37
- ],
38
- "rbind": [
39
- "/dev"
40
- ]
61
+ "keyboard": {
62
+ "layout": "es"
63
+ }
64
+ },
65
+ "rpi4mbarm64-iso-nfs": {
66
+ "type": "iso-nfs",
67
+ "osIdLike": "debian ubuntu",
68
+ "isoUrl": "https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.3-live-server-arm64.iso",
69
+ "tftpPrefix": "rpi4mb",
70
+ "bootstrapHttpServerPort": 8888,
71
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-NFS commissioning (ARM64)",
72
+ "networkInterfaceName": "enabcm6e4ei0",
73
+ "chronyc": {
74
+ "timezone": "America/Santiago",
75
+ "chronyConfPath": "/etc/chrony/chrony.conf"
76
+ },
77
+ "firmwares": [
78
+ {
79
+ "url": "https://github.com/pftf/RPi4/releases/download/v1.41/RPi4_UEFI_Firmware_v1.41.zip",
80
+ "gateway": "192.168.1.1",
81
+ "subnet": "255.255.255.0"
82
+ }
83
+ ],
84
+ "maas": {
85
+ "commissioning": {
86
+ "architecture": "arm64/hwe-24.04-edge",
87
+ "name": "ubuntu/noble"
88
+ }
89
+ },
90
+ "keyboard": {
91
+ "layout": "es"
92
+ }
93
+ },
94
+ "rpi4mbarm64-chroot-rocky9": {
95
+ "type": "chroot-container",
96
+ "osIdLike": "rhel centos fedora",
97
+ "tftpPrefix": "rpi4mb",
98
+ "bootstrapHttpServerPort": 8888,
99
+ "menuentryStr": "UNDERPOST.NET Rocky9 Container CHROOT NFS (ARM64)",
100
+ "networkInterfaceName": "eth0",
101
+ "firmwares": [
102
+ {
103
+ "url": "https://github.com/pftf/RPi4/releases/download/v1.41/RPi4_UEFI_Firmware_v1.41.zip",
104
+ "gateway": "192.168.1.1",
105
+ "subnet": "255.255.255.0"
41
106
  }
107
+ ],
108
+ "chronyc": {
109
+ "timezone": "America/Santiago",
110
+ "chronyConfPath": "/etc/chrony/chrony.conf"
111
+ },
112
+ "container": {
113
+ "image": "quay.io/rockylinux/rockylinux:9",
114
+ "architecture": "arm64",
115
+ "packages": ["kernel", "chrony", "kbd", "glibc-langpack-en", "glibc-langpack-es", "tzdata"]
116
+ },
117
+ "keyboard": {
118
+ "layout": "es"
42
119
  }
43
120
  }
44
121
  }
package/bin/build.js CHANGED
@@ -159,6 +159,7 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
159
159
  recursive: true,
160
160
  });
161
161
 
162
+ const originPackageJson = JSON.parse(fs.readFileSync(`./package.json`, 'utf8'));
162
163
  const packageJson = JSON.parse(fs.readFileSync(`${basePath}/package.json`, 'utf8'));
163
164
  packageJson.name = repoName.replace('engine-', '');
164
165
 
@@ -171,16 +172,31 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
171
172
  );
172
173
  delete packageJson.bin.underpost;
173
174
  packageJson.bin.cyberia = 'bin/index.js';
174
- packageJson.keywords = ['cyberia', 'object-layer', 'game-engine', 'assets-management', 'web3'];
175
+ packageJson.keywords = [
176
+ 'cyberia',
177
+ 'object-layer',
178
+ 'game-engine',
179
+ 'assets-management',
180
+ 'web3',
181
+ 'atlas-sprite-sheet',
182
+ ];
175
183
  packageJson.description = 'Cyberia Engine - Object Layer and Assets Management Microservice';
184
+ const { CyberiaDependencies } = await import(`../src/client/components/cyberia-portal/CommonCyberiaPortal.js`);
185
+ packageJson.dependencies = {
186
+ ...packageJson.dependencies,
187
+ ...CyberiaDependencies,
188
+ };
176
189
  fs.writeFileSync(`${basePath}/bin/index.js`, fs.readFileSync(`./bin/cyberia.js`, 'utf8'), 'utf8');
177
190
  fs.copyFileSync(`./src/api/object-layer/README.md`, `${basePath}/README.md`);
178
191
  fs.copySync(`./hardhat`, `${basePath}/hardhat`);
179
192
  fs.copySync(`./hardhat/white-paper.md`, `${basePath}/white-paper.md`);
180
- fs.copySync(
181
- `./src/client/ssr/pages/CyberiaServerMetrics.js`,
182
- `${basePath}/src/client/ssr/pages/CyberiaServerMetrics.js`,
183
- );
193
+ for (const path of [
194
+ '/src/client/ssr/pages/CyberiaServerMetrics.js',
195
+ '/src/server/object-layer.js',
196
+ '/src/server/atlas-sprite-sheet-generator.js',
197
+ ])
198
+ fs.copySync(`.${path}`, `${basePath}${path}`);
199
+
184
200
  default:
185
201
  break;
186
202
  }