@nice2dev/game-engine 1.0.5 → 1.0.11

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 (721) hide show
  1. package/dist/cjs/accessibility/Accessibility.js +55 -20
  2. package/dist/cjs/accessibility/Accessibility.js.map +1 -1
  3. package/dist/cjs/ai/AI.js +74 -40
  4. package/dist/cjs/ai/AI.js.map +1 -1
  5. package/dist/cjs/ai/BehaviorTree.js +39 -47
  6. package/dist/cjs/ai/BehaviorTree.js.map +1 -1
  7. package/dist/cjs/ai/StateMachine.js +64 -100
  8. package/dist/cjs/ai/StateMachine.js.map +1 -1
  9. package/dist/cjs/animation/Animation.js +58 -34
  10. package/dist/cjs/animation/Animation.js.map +1 -1
  11. package/dist/cjs/audio/AudioAdvanced.js +71 -37
  12. package/dist/cjs/audio/AudioAdvanced.js.map +1 -1
  13. package/dist/cjs/audio/AudioBridge.js +61 -49
  14. package/dist/cjs/audio/AudioBridge.js.map +1 -1
  15. package/dist/cjs/audio/AudioManager.js +45 -29
  16. package/dist/cjs/audio/AudioManager.js.map +1 -1
  17. package/dist/cjs/build-cloud/BuildOrchestration.js +1142 -0
  18. package/dist/cjs/build-cloud/BuildOrchestration.js.map +1 -0
  19. package/dist/cjs/build-cloud/GodotBuildCloud.js +722 -0
  20. package/dist/cjs/build-cloud/GodotBuildCloud.js.map +1 -0
  21. package/dist/cjs/build-cloud/UnityBuildCloud.js +652 -0
  22. package/dist/cjs/build-cloud/UnityBuildCloud.js.map +1 -0
  23. package/dist/cjs/build-cloud/UnrealBuildCloud.js +674 -0
  24. package/dist/cjs/build-cloud/UnrealBuildCloud.js.map +1 -0
  25. package/dist/cjs/core/EventBus.js +2 -1
  26. package/dist/cjs/core/EventBus.js.map +1 -1
  27. package/dist/cjs/core/GameConfig.js +1 -1
  28. package/dist/cjs/core/GameConfig.js.map +1 -1
  29. package/dist/cjs/core/GameLoop.js +6 -3
  30. package/dist/cjs/core/GameLoop.js.map +1 -1
  31. package/dist/cjs/core/ServiceLocator.js +1 -2
  32. package/dist/cjs/core/ServiceLocator.js.map +1 -1
  33. package/dist/cjs/devtools/DevTools.js +73 -43
  34. package/dist/cjs/devtools/DevTools.js.map +1 -1
  35. package/dist/cjs/devtools/DeveloperExperience.js +84 -42
  36. package/dist/cjs/devtools/DeveloperExperience.js.map +1 -1
  37. package/dist/cjs/devtools/GameplayAnalytics.js +71 -43
  38. package/dist/cjs/devtools/GameplayAnalytics.js.map +1 -1
  39. package/dist/cjs/dialogue/DialogueSystem.js +153 -129
  40. package/dist/cjs/dialogue/DialogueSystem.js.map +1 -1
  41. package/dist/cjs/docs/DocGenerator.js +70 -28
  42. package/dist/cjs/docs/DocGenerator.js.map +1 -1
  43. package/dist/cjs/ecs/World.js +159 -33
  44. package/dist/cjs/ecs/World.js.map +1 -1
  45. package/dist/cjs/editor/AchievementEditor.js +650 -0
  46. package/dist/cjs/editor/AchievementEditor.js.map +1 -0
  47. package/dist/cjs/editor/AdvancedEditor.js +95 -23
  48. package/dist/cjs/editor/AdvancedEditor.js.map +1 -1
  49. package/dist/cjs/editor/AnimationRetargeting.js +742 -0
  50. package/dist/cjs/editor/AnimationRetargeting.js.map +1 -0
  51. package/dist/cjs/editor/AssetBrowser.js +1191 -0
  52. package/dist/cjs/editor/AssetBrowser.js.map +1 -0
  53. package/dist/cjs/editor/AssetManager.js +22 -14
  54. package/dist/cjs/editor/AssetManager.js.map +1 -1
  55. package/dist/cjs/editor/ConsolePro.js +1092 -0
  56. package/dist/cjs/editor/ConsolePro.js.map +1 -0
  57. package/dist/cjs/editor/CraftingEditor.js +749 -0
  58. package/dist/cjs/editor/CraftingEditor.js.map +1 -0
  59. package/dist/cjs/editor/DebugTools.js +46 -23
  60. package/dist/cjs/editor/DebugTools.js.map +1 -1
  61. package/dist/cjs/editor/DialogueSystem.js +924 -0
  62. package/dist/cjs/editor/DialogueSystem.js.map +1 -0
  63. package/dist/cjs/editor/LeaderboardSystem.js +496 -0
  64. package/dist/cjs/editor/LeaderboardSystem.js.map +1 -0
  65. package/dist/cjs/editor/NiceGameEditor.js +532 -142
  66. package/dist/cjs/editor/NiceGameEditor.js.map +1 -1
  67. package/dist/cjs/editor/PrefabSystem.js +864 -0
  68. package/dist/cjs/editor/PrefabSystem.js.map +1 -0
  69. package/dist/cjs/editor/ProfilerPanel.js +716 -0
  70. package/dist/cjs/editor/ProfilerPanel.js.map +1 -0
  71. package/dist/cjs/editor/QuestEditor.js +850 -0
  72. package/dist/cjs/editor/QuestEditor.js.map +1 -0
  73. package/dist/cjs/editor/ReplaySystem.js +655 -0
  74. package/dist/cjs/editor/ReplaySystem.js.map +1 -0
  75. package/dist/cjs/editor/SceneEditor.js +33 -13
  76. package/dist/cjs/editor/SceneEditor.js.map +1 -1
  77. package/dist/cjs/editor/ScreenshotMode.js +710 -0
  78. package/dist/cjs/editor/ScreenshotMode.js.map +1 -0
  79. package/dist/cjs/editor/ShaderGraph.js +7 -6
  80. package/dist/cjs/editor/ShaderGraph.js.map +1 -1
  81. package/dist/cjs/editor/TimelineEditor.js +36 -30
  82. package/dist/cjs/editor/TimelineEditor.js.map +1 -1
  83. package/dist/cjs/editor/UndoRedoPro.js +920 -0
  84. package/dist/cjs/editor/UndoRedoPro.js.map +1 -0
  85. package/dist/cjs/editor/VRARMode.js +658 -0
  86. package/dist/cjs/editor/VRARMode.js.map +1 -0
  87. package/dist/cjs/engine/NiceGameEngine.js +12 -10
  88. package/dist/cjs/engine/NiceGameEngine.js.map +1 -1
  89. package/dist/cjs/engine/SaveSystemV2.js +73 -37
  90. package/dist/cjs/engine/SaveSystemV2.js.map +1 -1
  91. package/dist/cjs/enterprise/Enterprise.js +92 -44
  92. package/dist/cjs/enterprise/Enterprise.js.map +1 -1
  93. package/dist/cjs/export/BevyExporter.js +998 -0
  94. package/dist/cjs/export/BevyExporter.js.map +1 -0
  95. package/dist/cjs/export/CocosExporter.js +706 -0
  96. package/dist/cjs/export/CocosExporter.js.map +1 -0
  97. package/dist/cjs/export/Construct3Exporter.js +832 -0
  98. package/dist/cjs/export/Construct3Exporter.js.map +1 -0
  99. package/dist/cjs/export/DefoldExporter.js +1106 -0
  100. package/dist/cjs/export/DefoldExporter.js.map +1 -0
  101. package/dist/cjs/export/GDevelopExporter.js +748 -0
  102. package/dist/cjs/export/GDevelopExporter.js.map +1 -0
  103. package/dist/cjs/export/GameMakerExporter.js +846 -0
  104. package/dist/cjs/export/GameMakerExporter.js.map +1 -0
  105. package/dist/cjs/export/GodotExporter.js +45 -50
  106. package/dist/cjs/export/GodotExporter.js.map +1 -1
  107. package/dist/cjs/export/MinecraftBedrockExporter.js +606 -0
  108. package/dist/cjs/export/MinecraftBedrockExporter.js.map +1 -0
  109. package/dist/cjs/export/MonoGameExporter.js +1334 -0
  110. package/dist/cjs/export/MonoGameExporter.js.map +1 -0
  111. package/dist/cjs/export/Pico8Exporter.js +846 -0
  112. package/dist/cjs/export/Pico8Exporter.js.map +1 -0
  113. package/dist/cjs/export/PlatformExporter.js +4 -5
  114. package/dist/cjs/export/PlatformExporter.js.map +1 -1
  115. package/dist/cjs/export/RPGMakerExporter.js +906 -0
  116. package/dist/cjs/export/RPGMakerExporter.js.map +1 -0
  117. package/dist/cjs/export/RobloxExporter.js +943 -0
  118. package/dist/cjs/export/RobloxExporter.js.map +1 -0
  119. package/dist/cjs/export/Solar2DExporter.js +1283 -0
  120. package/dist/cjs/export/Solar2DExporter.js.map +1 -0
  121. package/dist/cjs/export/ThreeJSExporter.js +52 -55
  122. package/dist/cjs/export/ThreeJSExporter.js.map +1 -1
  123. package/dist/cjs/export/Tic80Exporter.js +1315 -0
  124. package/dist/cjs/export/Tic80Exporter.js.map +1 -0
  125. package/dist/cjs/export/UnityExporter.js +41 -56
  126. package/dist/cjs/export/UnityExporter.js.map +1 -1
  127. package/dist/cjs/export/UnrealExporter.js +962 -0
  128. package/dist/cjs/export/UnrealExporter.js.map +1 -0
  129. package/dist/cjs/export/WebExporter.js +42 -50
  130. package/dist/cjs/export/WebExporter.js.map +1 -1
  131. package/dist/cjs/export/index.js +50 -2
  132. package/dist/cjs/export/index.js.map +1 -1
  133. package/dist/cjs/godot-integration/GodotAssetLibrary.js +716 -0
  134. package/dist/cjs/godot-integration/GodotAssetLibrary.js.map +1 -0
  135. package/dist/cjs/godot-integration/GodotImport.js +1069 -0
  136. package/dist/cjs/godot-integration/GodotImport.js.map +1 -0
  137. package/dist/cjs/godot-integration/GodotLiveLink.js +962 -0
  138. package/dist/cjs/godot-integration/GodotLiveLink.js.map +1 -0
  139. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js +668 -0
  140. package/dist/cjs/godot-integration/components/GodotProjectBrowser.js.map +1 -0
  141. package/dist/cjs/i18n/I18n.js +56 -30
  142. package/dist/cjs/i18n/I18n.js.map +1 -1
  143. package/dist/cjs/i18n/useTranslation.js +4 -4
  144. package/dist/cjs/i18n/useTranslation.js.map +1 -1
  145. package/dist/cjs/import/AsepriteImporter.js +15 -19
  146. package/dist/cjs/import/AsepriteImporter.js.map +1 -1
  147. package/dist/cjs/import/DragonBonesImporter.js +36 -40
  148. package/dist/cjs/import/DragonBonesImporter.js.map +1 -1
  149. package/dist/cjs/import/GameMakerImporter.js +11 -17
  150. package/dist/cjs/import/GameMakerImporter.js.map +1 -1
  151. package/dist/cjs/import/GodotSceneImporter.js +43 -29
  152. package/dist/cjs/import/GodotSceneImporter.js.map +1 -1
  153. package/dist/cjs/import/LDtkImporter.js +16 -17
  154. package/dist/cjs/import/LDtkImporter.js.map +1 -1
  155. package/dist/cjs/import/Live2DImporter.js +16 -19
  156. package/dist/cjs/import/Live2DImporter.js.map +1 -1
  157. package/dist/cjs/import/NdgFormat.js +28 -35
  158. package/dist/cjs/import/NdgFormat.js.map +1 -1
  159. package/dist/cjs/import/OgmoImporter.js +16 -18
  160. package/dist/cjs/import/OgmoImporter.js.map +1 -1
  161. package/dist/cjs/import/RPGMakerImporter.js +5 -6
  162. package/dist/cjs/import/RPGMakerImporter.js.map +1 -1
  163. package/dist/cjs/import/SceneImporter.js +23 -13
  164. package/dist/cjs/import/SceneImporter.js.map +1 -1
  165. package/dist/cjs/import/SpineImporter.js +20 -20
  166. package/dist/cjs/import/SpineImporter.js.map +1 -1
  167. package/dist/cjs/import/SpriterImporter.js +38 -46
  168. package/dist/cjs/import/SpriterImporter.js.map +1 -1
  169. package/dist/cjs/import/TiledMapImporter.js +20 -24
  170. package/dist/cjs/import/TiledMapImporter.js.map +1 -1
  171. package/dist/cjs/import/UnitySceneImporter.js +15 -15
  172. package/dist/cjs/import/UnitySceneImporter.js.map +1 -1
  173. package/dist/cjs/index.js +516 -4
  174. package/dist/cjs/index.js.map +1 -1
  175. package/dist/cjs/input/GamepadNavigation.js +82 -47
  176. package/dist/cjs/input/GamepadNavigation.js.map +1 -1
  177. package/dist/cjs/input/InputManager.js +107 -52
  178. package/dist/cjs/input/InputManager.js.map +1 -1
  179. package/dist/cjs/input/useGamepads.js +35 -29
  180. package/dist/cjs/input/useGamepads.js.map +1 -1
  181. package/dist/cjs/integration/IconSprite.js +39 -21
  182. package/dist/cjs/integration/IconSprite.js.map +1 -1
  183. package/dist/cjs/inventory/InventorySystem.js +218 -127
  184. package/dist/cjs/inventory/InventorySystem.js.map +1 -1
  185. package/dist/cjs/kids/KidMode.js +491 -78
  186. package/dist/cjs/kids/KidMode.js.map +1 -1
  187. package/dist/cjs/kids/KidTools.js +154 -48
  188. package/dist/cjs/kids/KidTools.js.map +1 -1
  189. package/dist/cjs/monetization/Monetization.js +47 -35
  190. package/dist/cjs/monetization/Monetization.js.map +1 -1
  191. package/dist/cjs/multiplayer/LocalMultiplayer.js +48 -26
  192. package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -1
  193. package/dist/cjs/multiplayer/MiniGameTypes.js +23 -10
  194. package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -1
  195. package/dist/cjs/native-engine/AssetPipeline.js +540 -0
  196. package/dist/cjs/native-engine/AssetPipeline.js.map +1 -0
  197. package/dist/cjs/native-engine/AudioEngine.js +825 -0
  198. package/dist/cjs/native-engine/AudioEngine.js.map +1 -0
  199. package/dist/cjs/native-engine/InputSystem.js +1175 -0
  200. package/dist/cjs/native-engine/InputSystem.js.map +1 -0
  201. package/dist/cjs/native-engine/NetworkingSystem.js +825 -0
  202. package/dist/cjs/native-engine/NetworkingSystem.js.map +1 -0
  203. package/dist/cjs/native-engine/PhysicsEngine.js +622 -0
  204. package/dist/cjs/native-engine/PhysicsEngine.js.map +1 -0
  205. package/dist/cjs/native-engine/RenderingEngine.js +371 -0
  206. package/dist/cjs/native-engine/RenderingEngine.js.map +1 -0
  207. package/dist/cjs/native-engine/SceneGraph.js +862 -0
  208. package/dist/cjs/native-engine/SceneGraph.js.map +1 -0
  209. package/dist/cjs/network/MultiplayerTransport.js +63 -33
  210. package/dist/cjs/network/MultiplayerTransport.js.map +1 -1
  211. package/dist/cjs/network/Networking.js +87 -62
  212. package/dist/cjs/network/Networking.js.map +1 -1
  213. package/dist/cjs/pathfinding/Pathfinding.js +71 -26
  214. package/dist/cjs/pathfinding/Pathfinding.js.map +1 -1
  215. package/dist/cjs/performance/AssetStreaming.js +656 -0
  216. package/dist/cjs/performance/AssetStreaming.js.map +1 -0
  217. package/dist/cjs/performance/BenchmarkSuite.js +37 -24
  218. package/dist/cjs/performance/BenchmarkSuite.js.map +1 -1
  219. package/dist/cjs/performance/DeltaCompression.js +566 -0
  220. package/dist/cjs/performance/DeltaCompression.js.map +1 -0
  221. package/dist/cjs/performance/DeterministicPhysics.js +603 -0
  222. package/dist/cjs/performance/DeterministicPhysics.js.map +1 -0
  223. package/dist/cjs/performance/ECSOptimization.js +726 -0
  224. package/dist/cjs/performance/ECSOptimization.js.map +1 -0
  225. package/dist/cjs/performance/HotReload.js +525 -0
  226. package/dist/cjs/performance/HotReload.js.map +1 -0
  227. package/dist/cjs/performance/InputRecording.js +590 -0
  228. package/dist/cjs/performance/InputRecording.js.map +1 -0
  229. package/dist/cjs/performance/InterestManagement.js +532 -0
  230. package/dist/cjs/performance/InterestManagement.js.map +1 -0
  231. package/dist/cjs/performance/LocalizationRuntime.js +472 -0
  232. package/dist/cjs/performance/LocalizationRuntime.js.map +1 -0
  233. package/dist/cjs/performance/MemoryManagement.js +487 -0
  234. package/dist/cjs/performance/MemoryManagement.js.map +1 -0
  235. package/dist/cjs/performance/ModSupport.js +531 -0
  236. package/dist/cjs/performance/ModSupport.js.map +1 -0
  237. package/dist/cjs/performance/MultiThreadedPhysics.js +500 -0
  238. package/dist/cjs/performance/MultiThreadedPhysics.js.map +1 -0
  239. package/dist/cjs/performance/NetworkPrediction.js +521 -0
  240. package/dist/cjs/performance/NetworkPrediction.js.map +1 -0
  241. package/dist/cjs/performance/ObjectPooling.js +653 -0
  242. package/dist/cjs/performance/ObjectPooling.js.map +1 -0
  243. package/dist/cjs/performance/Performance.js +64 -25
  244. package/dist/cjs/performance/Performance.js.map +1 -1
  245. package/dist/cjs/performance/PerformanceAdvanced.js +83 -49
  246. package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -1
  247. package/dist/cjs/performance/SaveSystem.js +574 -0
  248. package/dist/cjs/performance/SaveSystem.js.map +1 -0
  249. package/dist/cjs/performance/WebGPURenderer.js +702 -0
  250. package/dist/cjs/performance/WebGPURenderer.js.map +1 -0
  251. package/dist/cjs/physics/PhysicsAdvanced.js +32 -20
  252. package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -1
  253. package/dist/cjs/physics/PhysicsEngine2D.js +63 -36
  254. package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -1
  255. package/dist/cjs/plugins/PluginSDK.js +46 -34
  256. package/dist/cjs/plugins/PluginSDK.js.map +1 -1
  257. package/dist/cjs/plugins/PluginTestKit.js +28 -29
  258. package/dist/cjs/plugins/PluginTestKit.js.map +1 -1
  259. package/dist/cjs/procedural/Procedural.js +24 -17
  260. package/dist/cjs/procedural/Procedural.js.map +1 -1
  261. package/dist/cjs/procedural/WorldBuilding.js +187 -55
  262. package/dist/cjs/procedural/WorldBuilding.js.map +1 -1
  263. package/dist/cjs/quest/QuestSystem.js +145 -111
  264. package/dist/cjs/quest/QuestSystem.js.map +1 -1
  265. package/dist/cjs/release/Release.js +142 -31
  266. package/dist/cjs/release/Release.js.map +1 -1
  267. package/dist/cjs/rendering/Camera2D.js +12 -7
  268. package/dist/cjs/rendering/Camera2D.js.map +1 -1
  269. package/dist/cjs/rendering/Renderer2D.js +62 -26
  270. package/dist/cjs/rendering/Renderer2D.js.map +1 -1
  271. package/dist/cjs/rendering/WebGPURenderPipeline.js +60 -31
  272. package/dist/cjs/rendering/WebGPURenderPipeline.js.map +1 -1
  273. package/dist/cjs/runtime3d/Runtime3D.js +80 -55
  274. package/dist/cjs/runtime3d/Runtime3D.js.map +1 -1
  275. package/dist/cjs/runtime3d/SceneEditor3D.js +20 -11
  276. package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -1
  277. package/dist/cjs/scene/SceneManager.js +26 -12
  278. package/dist/cjs/scene/SceneManager.js.map +1 -1
  279. package/dist/cjs/scripting/GraphToAST.js +36 -24
  280. package/dist/cjs/scripting/GraphToAST.js.map +1 -1
  281. package/dist/cjs/scripting/LanguageExporter.js +2 -3
  282. package/dist/cjs/scripting/LanguageExporter.js.map +1 -1
  283. package/dist/cjs/scripting/NodeGraph.js +49 -32
  284. package/dist/cjs/scripting/NodeGraph.js.map +1 -1
  285. package/dist/cjs/scripting/ScriptAST.js +19 -6
  286. package/dist/cjs/scripting/ScriptAST.js.map +1 -1
  287. package/dist/cjs/scripting/VisualScripting2.js +13 -12
  288. package/dist/cjs/scripting/VisualScripting2.js.map +1 -1
  289. package/dist/cjs/scripting/exporters/CSharpExporter.js +16 -16
  290. package/dist/cjs/scripting/exporters/CSharpExporter.js.map +1 -1
  291. package/dist/cjs/scripting/exporters/GDScriptExporter.js +3 -6
  292. package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +1 -1
  293. package/dist/cjs/scripting/exporters/LuaExporter.js +5 -9
  294. package/dist/cjs/scripting/exporters/LuaExporter.js.map +1 -1
  295. package/dist/cjs/scripting/exporters/PythonExporter.js +7 -13
  296. package/dist/cjs/scripting/exporters/PythonExporter.js.map +1 -1
  297. package/dist/cjs/scripting/exporters/RustExporter.js +7 -14
  298. package/dist/cjs/scripting/exporters/RustExporter.js.map +1 -1
  299. package/dist/cjs/scripting/exporters/TypeScriptExporter.js +28 -29
  300. package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +1 -1
  301. package/dist/cjs/social/Social.js +27 -20
  302. package/dist/cjs/social/Social.js.map +1 -1
  303. package/dist/cjs/systems/LightingSystem.js +980 -0
  304. package/dist/cjs/systems/LightingSystem.js.map +1 -0
  305. package/dist/cjs/systems/ParticleSystem2.js +34 -17
  306. package/dist/cjs/systems/ParticleSystem2.js.map +1 -1
  307. package/dist/cjs/systems/PhysicsDebugSystem.js +1228 -0
  308. package/dist/cjs/systems/PhysicsDebugSystem.js.map +1 -0
  309. package/dist/cjs/systems/TerrainSystem.js +1137 -0
  310. package/dist/cjs/systems/TerrainSystem.js.map +1 -0
  311. package/dist/cjs/templates/ActionTemplates.js +144 -24
  312. package/dist/cjs/templates/ActionTemplates.js.map +1 -1
  313. package/dist/cjs/templates/FightingTemplate.js +536 -0
  314. package/dist/cjs/templates/FightingTemplate.js.map +1 -0
  315. package/dist/cjs/templates/MetroidvaniaTemplate.js +523 -0
  316. package/dist/cjs/templates/MetroidvaniaTemplate.js.map +1 -0
  317. package/dist/cjs/templates/PartyTemplates.js +60 -28
  318. package/dist/cjs/templates/PartyTemplates.js.map +1 -1
  319. package/dist/cjs/templates/PuzzleTemplates.js +63 -22
  320. package/dist/cjs/templates/PuzzleTemplates.js.map +1 -1
  321. package/dist/cjs/templates/RPGTemplates.js +29 -15
  322. package/dist/cjs/templates/RPGTemplates.js.map +1 -1
  323. package/dist/cjs/templates/SportsTemplates.js +41 -17
  324. package/dist/cjs/templates/SportsTemplates.js.map +1 -1
  325. package/dist/cjs/templates/StrategyTemplates.js +45 -18
  326. package/dist/cjs/templates/StrategyTemplates.js.map +1 -1
  327. package/dist/cjs/templates/SurvivalTemplate.js +479 -0
  328. package/dist/cjs/templates/SurvivalTemplate.js.map +1 -0
  329. package/dist/cjs/templates/WaveDefense.js +139 -52
  330. package/dist/cjs/templates/WaveDefense.js.map +1 -1
  331. package/dist/cjs/tilemap/Tilemap.js +48 -32
  332. package/dist/cjs/tilemap/Tilemap.js.map +1 -1
  333. package/dist/cjs/tutorials/TutorialBranching.js +111 -42
  334. package/dist/cjs/tutorials/TutorialBranching.js.map +1 -1
  335. package/dist/cjs/tutorials/TutorialEngine.js +152 -80
  336. package/dist/cjs/tutorials/TutorialEngine.js.map +1 -1
  337. package/dist/cjs/tutorials/TutorialOverlay.js +117 -40
  338. package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -1
  339. package/dist/cjs/ui/GameUI.js +69 -42
  340. package/dist/cjs/ui/GameUI.js.map +1 -1
  341. package/dist/cjs/unity-integration/UnityAssetStore.js +754 -0
  342. package/dist/cjs/unity-integration/UnityAssetStore.js.map +1 -0
  343. package/dist/cjs/unity-integration/UnityImport.js +1252 -0
  344. package/dist/cjs/unity-integration/UnityImport.js.map +1 -0
  345. package/dist/cjs/unity-integration/UnityLiveLink.js +1022 -0
  346. package/dist/cjs/unity-integration/UnityLiveLink.js.map +1 -0
  347. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js +796 -0
  348. package/dist/cjs/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
  349. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js +833 -0
  350. package/dist/cjs/unity-integration/components/UnityProjectBrowser.js.map +1 -0
  351. package/dist/cjs/unreal-integration/UnrealImport.js +442 -0
  352. package/dist/cjs/unreal-integration/UnrealImport.js.map +1 -0
  353. package/dist/cjs/unreal-integration/UnrealLiveLink.js +1186 -0
  354. package/dist/cjs/unreal-integration/UnrealLiveLink.js.map +1 -0
  355. package/dist/cjs/unreal-integration/UnrealMarketplace.js +497 -0
  356. package/dist/cjs/unreal-integration/UnrealMarketplace.js.map +1 -0
  357. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js +835 -0
  358. package/dist/cjs/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
  359. package/dist/cjs/xr/ARVR.js +32 -9
  360. package/dist/cjs/xr/ARVR.js.map +1 -1
  361. package/dist/esm/accessibility/Accessibility.js +55 -20
  362. package/dist/esm/accessibility/Accessibility.js.map +1 -1
  363. package/dist/esm/ai/AI.js +74 -40
  364. package/dist/esm/ai/AI.js.map +1 -1
  365. package/dist/esm/ai/BehaviorTree.js +39 -47
  366. package/dist/esm/ai/BehaviorTree.js.map +1 -1
  367. package/dist/esm/ai/StateMachine.js +65 -99
  368. package/dist/esm/ai/StateMachine.js.map +1 -1
  369. package/dist/esm/animation/Animation.js +58 -34
  370. package/dist/esm/animation/Animation.js.map +1 -1
  371. package/dist/esm/audio/AudioAdvanced.js +71 -37
  372. package/dist/esm/audio/AudioAdvanced.js.map +1 -1
  373. package/dist/esm/audio/AudioBridge.js +61 -49
  374. package/dist/esm/audio/AudioBridge.js.map +1 -1
  375. package/dist/esm/audio/AudioManager.js +45 -29
  376. package/dist/esm/audio/AudioManager.js.map +1 -1
  377. package/dist/esm/build-cloud/BuildOrchestration.js +1129 -0
  378. package/dist/esm/build-cloud/BuildOrchestration.js.map +1 -0
  379. package/dist/esm/build-cloud/GodotBuildCloud.js +715 -0
  380. package/dist/esm/build-cloud/GodotBuildCloud.js.map +1 -0
  381. package/dist/esm/build-cloud/UnityBuildCloud.js +643 -0
  382. package/dist/esm/build-cloud/UnityBuildCloud.js.map +1 -0
  383. package/dist/esm/build-cloud/UnrealBuildCloud.js +668 -0
  384. package/dist/esm/build-cloud/UnrealBuildCloud.js.map +1 -0
  385. package/dist/esm/core/EventBus.js +2 -1
  386. package/dist/esm/core/EventBus.js.map +1 -1
  387. package/dist/esm/core/GameConfig.js +1 -1
  388. package/dist/esm/core/GameConfig.js.map +1 -1
  389. package/dist/esm/core/GameLoop.js +6 -3
  390. package/dist/esm/core/GameLoop.js.map +1 -1
  391. package/dist/esm/core/ServiceLocator.js +1 -2
  392. package/dist/esm/core/ServiceLocator.js.map +1 -1
  393. package/dist/esm/devtools/DevTools.js +73 -43
  394. package/dist/esm/devtools/DevTools.js.map +1 -1
  395. package/dist/esm/devtools/DeveloperExperience.js +84 -42
  396. package/dist/esm/devtools/DeveloperExperience.js.map +1 -1
  397. package/dist/esm/devtools/GameplayAnalytics.js +71 -43
  398. package/dist/esm/devtools/GameplayAnalytics.js.map +1 -1
  399. package/dist/esm/dialogue/DialogueSystem.js +153 -129
  400. package/dist/esm/dialogue/DialogueSystem.js.map +1 -1
  401. package/dist/esm/docs/DocGenerator.js +70 -28
  402. package/dist/esm/docs/DocGenerator.js.map +1 -1
  403. package/dist/esm/ecs/World.js +159 -33
  404. package/dist/esm/ecs/World.js.map +1 -1
  405. package/dist/esm/editor/AchievementEditor.js +645 -0
  406. package/dist/esm/editor/AchievementEditor.js.map +1 -0
  407. package/dist/esm/editor/AdvancedEditor.js +95 -23
  408. package/dist/esm/editor/AdvancedEditor.js.map +1 -1
  409. package/dist/esm/editor/AnimationRetargeting.js +738 -0
  410. package/dist/esm/editor/AnimationRetargeting.js.map +1 -0
  411. package/dist/esm/editor/AssetBrowser.js +1184 -0
  412. package/dist/esm/editor/AssetBrowser.js.map +1 -0
  413. package/dist/esm/editor/AssetManager.js +22 -14
  414. package/dist/esm/editor/AssetManager.js.map +1 -1
  415. package/dist/esm/editor/ConsolePro.js +1085 -0
  416. package/dist/esm/editor/ConsolePro.js.map +1 -0
  417. package/dist/esm/editor/CraftingEditor.js +744 -0
  418. package/dist/esm/editor/CraftingEditor.js.map +1 -0
  419. package/dist/esm/editor/DebugTools.js +46 -23
  420. package/dist/esm/editor/DebugTools.js.map +1 -1
  421. package/dist/esm/editor/DialogueSystem.js +918 -0
  422. package/dist/esm/editor/DialogueSystem.js.map +1 -0
  423. package/dist/esm/editor/LeaderboardSystem.js +491 -0
  424. package/dist/esm/editor/LeaderboardSystem.js.map +1 -0
  425. package/dist/esm/editor/NiceGameEditor.js +532 -142
  426. package/dist/esm/editor/NiceGameEditor.js.map +1 -1
  427. package/dist/esm/editor/PrefabSystem.js +858 -0
  428. package/dist/esm/editor/PrefabSystem.js.map +1 -0
  429. package/dist/esm/editor/ProfilerPanel.js +710 -0
  430. package/dist/esm/editor/ProfilerPanel.js.map +1 -0
  431. package/dist/esm/editor/QuestEditor.js +846 -0
  432. package/dist/esm/editor/QuestEditor.js.map +1 -0
  433. package/dist/esm/editor/ReplaySystem.js +648 -0
  434. package/dist/esm/editor/ReplaySystem.js.map +1 -0
  435. package/dist/esm/editor/SceneEditor.js +33 -13
  436. package/dist/esm/editor/SceneEditor.js.map +1 -1
  437. package/dist/esm/editor/ScreenshotMode.js +702 -0
  438. package/dist/esm/editor/ScreenshotMode.js.map +1 -0
  439. package/dist/esm/editor/ShaderGraph.js +7 -6
  440. package/dist/esm/editor/ShaderGraph.js.map +1 -1
  441. package/dist/esm/editor/TimelineEditor.js +37 -30
  442. package/dist/esm/editor/TimelineEditor.js.map +1 -1
  443. package/dist/esm/editor/UndoRedoPro.js +914 -0
  444. package/dist/esm/editor/UndoRedoPro.js.map +1 -0
  445. package/dist/esm/editor/VRARMode.js +653 -0
  446. package/dist/esm/editor/VRARMode.js.map +1 -0
  447. package/dist/esm/engine/NiceGameEngine.js +12 -10
  448. package/dist/esm/engine/NiceGameEngine.js.map +1 -1
  449. package/dist/esm/engine/SaveSystemV2.js +73 -37
  450. package/dist/esm/engine/SaveSystemV2.js.map +1 -1
  451. package/dist/esm/enterprise/Enterprise.js +92 -44
  452. package/dist/esm/enterprise/Enterprise.js.map +1 -1
  453. package/dist/esm/export/BevyExporter.js +995 -0
  454. package/dist/esm/export/BevyExporter.js.map +1 -0
  455. package/dist/esm/export/CocosExporter.js +703 -0
  456. package/dist/esm/export/CocosExporter.js.map +1 -0
  457. package/dist/esm/export/Construct3Exporter.js +829 -0
  458. package/dist/esm/export/Construct3Exporter.js.map +1 -0
  459. package/dist/esm/export/DefoldExporter.js +1103 -0
  460. package/dist/esm/export/DefoldExporter.js.map +1 -0
  461. package/dist/esm/export/GDevelopExporter.js +745 -0
  462. package/dist/esm/export/GDevelopExporter.js.map +1 -0
  463. package/dist/esm/export/GameMakerExporter.js +843 -0
  464. package/dist/esm/export/GameMakerExporter.js.map +1 -0
  465. package/dist/esm/export/GodotExporter.js +45 -50
  466. package/dist/esm/export/GodotExporter.js.map +1 -1
  467. package/dist/esm/export/MinecraftBedrockExporter.js +603 -0
  468. package/dist/esm/export/MinecraftBedrockExporter.js.map +1 -0
  469. package/dist/esm/export/MonoGameExporter.js +1331 -0
  470. package/dist/esm/export/MonoGameExporter.js.map +1 -0
  471. package/dist/esm/export/Pico8Exporter.js +843 -0
  472. package/dist/esm/export/Pico8Exporter.js.map +1 -0
  473. package/dist/esm/export/PlatformExporter.js +4 -5
  474. package/dist/esm/export/PlatformExporter.js.map +1 -1
  475. package/dist/esm/export/RPGMakerExporter.js +903 -0
  476. package/dist/esm/export/RPGMakerExporter.js.map +1 -0
  477. package/dist/esm/export/RobloxExporter.js +940 -0
  478. package/dist/esm/export/RobloxExporter.js.map +1 -0
  479. package/dist/esm/export/Solar2DExporter.js +1280 -0
  480. package/dist/esm/export/Solar2DExporter.js.map +1 -0
  481. package/dist/esm/export/ThreeJSExporter.js +52 -55
  482. package/dist/esm/export/ThreeJSExporter.js.map +1 -1
  483. package/dist/esm/export/Tic80Exporter.js +1312 -0
  484. package/dist/esm/export/Tic80Exporter.js.map +1 -0
  485. package/dist/esm/export/UnityExporter.js +41 -56
  486. package/dist/esm/export/UnityExporter.js.map +1 -1
  487. package/dist/esm/export/UnrealExporter.js +959 -0
  488. package/dist/esm/export/UnrealExporter.js.map +1 -0
  489. package/dist/esm/export/WebExporter.js +42 -50
  490. package/dist/esm/export/WebExporter.js.map +1 -1
  491. package/dist/esm/export/index.js +38 -2
  492. package/dist/esm/export/index.js.map +1 -1
  493. package/dist/esm/godot-integration/GodotAssetLibrary.js +711 -0
  494. package/dist/esm/godot-integration/GodotAssetLibrary.js.map +1 -0
  495. package/dist/esm/godot-integration/GodotImport.js +1062 -0
  496. package/dist/esm/godot-integration/GodotImport.js.map +1 -0
  497. package/dist/esm/godot-integration/GodotLiveLink.js +958 -0
  498. package/dist/esm/godot-integration/GodotLiveLink.js.map +1 -0
  499. package/dist/esm/godot-integration/components/GodotProjectBrowser.js +666 -0
  500. package/dist/esm/godot-integration/components/GodotProjectBrowser.js.map +1 -0
  501. package/dist/esm/i18n/I18n.js +56 -30
  502. package/dist/esm/i18n/I18n.js.map +1 -1
  503. package/dist/esm/i18n/useTranslation.js +4 -4
  504. package/dist/esm/i18n/useTranslation.js.map +1 -1
  505. package/dist/esm/import/AsepriteImporter.js +15 -19
  506. package/dist/esm/import/AsepriteImporter.js.map +1 -1
  507. package/dist/esm/import/DragonBonesImporter.js +36 -40
  508. package/dist/esm/import/DragonBonesImporter.js.map +1 -1
  509. package/dist/esm/import/GameMakerImporter.js +11 -17
  510. package/dist/esm/import/GameMakerImporter.js.map +1 -1
  511. package/dist/esm/import/GodotSceneImporter.js +43 -29
  512. package/dist/esm/import/GodotSceneImporter.js.map +1 -1
  513. package/dist/esm/import/LDtkImporter.js +16 -17
  514. package/dist/esm/import/LDtkImporter.js.map +1 -1
  515. package/dist/esm/import/Live2DImporter.js +16 -19
  516. package/dist/esm/import/Live2DImporter.js.map +1 -1
  517. package/dist/esm/import/NdgFormat.js +28 -35
  518. package/dist/esm/import/NdgFormat.js.map +1 -1
  519. package/dist/esm/import/OgmoImporter.js +16 -18
  520. package/dist/esm/import/OgmoImporter.js.map +1 -1
  521. package/dist/esm/import/RPGMakerImporter.js +5 -6
  522. package/dist/esm/import/RPGMakerImporter.js.map +1 -1
  523. package/dist/esm/import/SceneImporter.js +23 -13
  524. package/dist/esm/import/SceneImporter.js.map +1 -1
  525. package/dist/esm/import/SpineImporter.js +20 -20
  526. package/dist/esm/import/SpineImporter.js.map +1 -1
  527. package/dist/esm/import/SpriterImporter.js +38 -46
  528. package/dist/esm/import/SpriterImporter.js.map +1 -1
  529. package/dist/esm/import/TiledMapImporter.js +20 -24
  530. package/dist/esm/import/TiledMapImporter.js.map +1 -1
  531. package/dist/esm/import/UnitySceneImporter.js +15 -15
  532. package/dist/esm/import/UnitySceneImporter.js.map +1 -1
  533. package/dist/esm/index.js +76 -3
  534. package/dist/esm/index.js.map +1 -1
  535. package/dist/esm/input/GamepadNavigation.js +82 -47
  536. package/dist/esm/input/GamepadNavigation.js.map +1 -1
  537. package/dist/esm/input/InputManager.js +107 -52
  538. package/dist/esm/input/InputManager.js.map +1 -1
  539. package/dist/esm/input/useGamepads.js +35 -29
  540. package/dist/esm/input/useGamepads.js.map +1 -1
  541. package/dist/esm/integration/IconSprite.js +39 -21
  542. package/dist/esm/integration/IconSprite.js.map +1 -1
  543. package/dist/esm/inventory/InventorySystem.js +218 -127
  544. package/dist/esm/inventory/InventorySystem.js.map +1 -1
  545. package/dist/esm/kids/KidMode.js +491 -78
  546. package/dist/esm/kids/KidMode.js.map +1 -1
  547. package/dist/esm/kids/KidTools.js +154 -48
  548. package/dist/esm/kids/KidTools.js.map +1 -1
  549. package/dist/esm/monetization/Monetization.js +47 -35
  550. package/dist/esm/monetization/Monetization.js.map +1 -1
  551. package/dist/esm/multiplayer/LocalMultiplayer.js +48 -26
  552. package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -1
  553. package/dist/esm/multiplayer/MiniGameTypes.js +23 -10
  554. package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -1
  555. package/dist/esm/native-engine/AssetPipeline.js +537 -0
  556. package/dist/esm/native-engine/AssetPipeline.js.map +1 -0
  557. package/dist/esm/native-engine/AudioEngine.js +822 -0
  558. package/dist/esm/native-engine/AudioEngine.js.map +1 -0
  559. package/dist/esm/native-engine/InputSystem.js +1170 -0
  560. package/dist/esm/native-engine/InputSystem.js.map +1 -0
  561. package/dist/esm/native-engine/NetworkingSystem.js +817 -0
  562. package/dist/esm/native-engine/NetworkingSystem.js.map +1 -0
  563. package/dist/esm/native-engine/PhysicsEngine.js +619 -0
  564. package/dist/esm/native-engine/PhysicsEngine.js.map +1 -0
  565. package/dist/esm/native-engine/RenderingEngine.js +368 -0
  566. package/dist/esm/native-engine/RenderingEngine.js.map +1 -0
  567. package/dist/esm/native-engine/SceneGraph.js +857 -0
  568. package/dist/esm/native-engine/SceneGraph.js.map +1 -0
  569. package/dist/esm/network/MultiplayerTransport.js +63 -33
  570. package/dist/esm/network/MultiplayerTransport.js.map +1 -1
  571. package/dist/esm/network/Networking.js +87 -62
  572. package/dist/esm/network/Networking.js.map +1 -1
  573. package/dist/esm/pathfinding/Pathfinding.js +71 -26
  574. package/dist/esm/pathfinding/Pathfinding.js.map +1 -1
  575. package/dist/esm/performance/AssetStreaming.js +649 -0
  576. package/dist/esm/performance/AssetStreaming.js.map +1 -0
  577. package/dist/esm/performance/BenchmarkSuite.js +37 -24
  578. package/dist/esm/performance/BenchmarkSuite.js.map +1 -1
  579. package/dist/esm/performance/DeltaCompression.js +554 -0
  580. package/dist/esm/performance/DeltaCompression.js.map +1 -0
  581. package/dist/esm/performance/DeterministicPhysics.js +573 -0
  582. package/dist/esm/performance/DeterministicPhysics.js.map +1 -0
  583. package/dist/esm/performance/ECSOptimization.js +716 -0
  584. package/dist/esm/performance/ECSOptimization.js.map +1 -0
  585. package/dist/esm/performance/HotReload.js +517 -0
  586. package/dist/esm/performance/HotReload.js.map +1 -0
  587. package/dist/esm/performance/InputRecording.js +580 -0
  588. package/dist/esm/performance/InputRecording.js.map +1 -0
  589. package/dist/esm/performance/InterestManagement.js +524 -0
  590. package/dist/esm/performance/InterestManagement.js.map +1 -0
  591. package/dist/esm/performance/LocalizationRuntime.js +465 -0
  592. package/dist/esm/performance/LocalizationRuntime.js.map +1 -0
  593. package/dist/esm/performance/MemoryManagement.js +481 -0
  594. package/dist/esm/performance/MemoryManagement.js.map +1 -0
  595. package/dist/esm/performance/ModSupport.js +520 -0
  596. package/dist/esm/performance/ModSupport.js.map +1 -0
  597. package/dist/esm/performance/MultiThreadedPhysics.js +491 -0
  598. package/dist/esm/performance/MultiThreadedPhysics.js.map +1 -0
  599. package/dist/esm/performance/NetworkPrediction.js +508 -0
  600. package/dist/esm/performance/NetworkPrediction.js.map +1 -0
  601. package/dist/esm/performance/ObjectPooling.js +639 -0
  602. package/dist/esm/performance/ObjectPooling.js.map +1 -0
  603. package/dist/esm/performance/Performance.js +64 -25
  604. package/dist/esm/performance/Performance.js.map +1 -1
  605. package/dist/esm/performance/PerformanceAdvanced.js +83 -49
  606. package/dist/esm/performance/PerformanceAdvanced.js.map +1 -1
  607. package/dist/esm/performance/SaveSystem.js +567 -0
  608. package/dist/esm/performance/SaveSystem.js.map +1 -0
  609. package/dist/esm/performance/WebGPURenderer.js +697 -0
  610. package/dist/esm/performance/WebGPURenderer.js.map +1 -0
  611. package/dist/esm/physics/PhysicsAdvanced.js +32 -20
  612. package/dist/esm/physics/PhysicsAdvanced.js.map +1 -1
  613. package/dist/esm/physics/PhysicsEngine2D.js +63 -36
  614. package/dist/esm/physics/PhysicsEngine2D.js.map +1 -1
  615. package/dist/esm/plugins/PluginSDK.js +46 -34
  616. package/dist/esm/plugins/PluginSDK.js.map +1 -1
  617. package/dist/esm/plugins/PluginTestKit.js +28 -29
  618. package/dist/esm/plugins/PluginTestKit.js.map +1 -1
  619. package/dist/esm/procedural/Procedural.js +24 -17
  620. package/dist/esm/procedural/Procedural.js.map +1 -1
  621. package/dist/esm/procedural/WorldBuilding.js +188 -55
  622. package/dist/esm/procedural/WorldBuilding.js.map +1 -1
  623. package/dist/esm/quest/QuestSystem.js +145 -111
  624. package/dist/esm/quest/QuestSystem.js.map +1 -1
  625. package/dist/esm/release/Release.js +142 -31
  626. package/dist/esm/release/Release.js.map +1 -1
  627. package/dist/esm/rendering/Camera2D.js +12 -7
  628. package/dist/esm/rendering/Camera2D.js.map +1 -1
  629. package/dist/esm/rendering/Renderer2D.js +62 -26
  630. package/dist/esm/rendering/Renderer2D.js.map +1 -1
  631. package/dist/esm/rendering/WebGPURenderPipeline.js +60 -31
  632. package/dist/esm/rendering/WebGPURenderPipeline.js.map +1 -1
  633. package/dist/esm/runtime3d/Runtime3D.js +80 -55
  634. package/dist/esm/runtime3d/Runtime3D.js.map +1 -1
  635. package/dist/esm/runtime3d/SceneEditor3D.js +20 -11
  636. package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -1
  637. package/dist/esm/scene/SceneManager.js +26 -12
  638. package/dist/esm/scene/SceneManager.js.map +1 -1
  639. package/dist/esm/scripting/GraphToAST.js +36 -24
  640. package/dist/esm/scripting/GraphToAST.js.map +1 -1
  641. package/dist/esm/scripting/LanguageExporter.js +2 -3
  642. package/dist/esm/scripting/LanguageExporter.js.map +1 -1
  643. package/dist/esm/scripting/NodeGraph.js +49 -32
  644. package/dist/esm/scripting/NodeGraph.js.map +1 -1
  645. package/dist/esm/scripting/ScriptAST.js +19 -6
  646. package/dist/esm/scripting/ScriptAST.js.map +1 -1
  647. package/dist/esm/scripting/VisualScripting2.js +13 -12
  648. package/dist/esm/scripting/VisualScripting2.js.map +1 -1
  649. package/dist/esm/scripting/exporters/CSharpExporter.js +16 -16
  650. package/dist/esm/scripting/exporters/CSharpExporter.js.map +1 -1
  651. package/dist/esm/scripting/exporters/GDScriptExporter.js +3 -6
  652. package/dist/esm/scripting/exporters/GDScriptExporter.js.map +1 -1
  653. package/dist/esm/scripting/exporters/LuaExporter.js +5 -9
  654. package/dist/esm/scripting/exporters/LuaExporter.js.map +1 -1
  655. package/dist/esm/scripting/exporters/PythonExporter.js +7 -13
  656. package/dist/esm/scripting/exporters/PythonExporter.js.map +1 -1
  657. package/dist/esm/scripting/exporters/RustExporter.js +7 -14
  658. package/dist/esm/scripting/exporters/RustExporter.js.map +1 -1
  659. package/dist/esm/scripting/exporters/TypeScriptExporter.js +28 -29
  660. package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +1 -1
  661. package/dist/esm/social/Social.js +27 -20
  662. package/dist/esm/social/Social.js.map +1 -1
  663. package/dist/esm/systems/LightingSystem.js +968 -0
  664. package/dist/esm/systems/LightingSystem.js.map +1 -0
  665. package/dist/esm/systems/ParticleSystem2.js +34 -17
  666. package/dist/esm/systems/ParticleSystem2.js.map +1 -1
  667. package/dist/esm/systems/PhysicsDebugSystem.js +1219 -0
  668. package/dist/esm/systems/PhysicsDebugSystem.js.map +1 -0
  669. package/dist/esm/systems/TerrainSystem.js +1125 -0
  670. package/dist/esm/systems/TerrainSystem.js.map +1 -0
  671. package/dist/esm/templates/ActionTemplates.js +144 -24
  672. package/dist/esm/templates/ActionTemplates.js.map +1 -1
  673. package/dist/esm/templates/FightingTemplate.js +513 -0
  674. package/dist/esm/templates/FightingTemplate.js.map +1 -0
  675. package/dist/esm/templates/MetroidvaniaTemplate.js +484 -0
  676. package/dist/esm/templates/MetroidvaniaTemplate.js.map +1 -0
  677. package/dist/esm/templates/PartyTemplates.js +60 -28
  678. package/dist/esm/templates/PartyTemplates.js.map +1 -1
  679. package/dist/esm/templates/PuzzleTemplates.js +63 -22
  680. package/dist/esm/templates/PuzzleTemplates.js.map +1 -1
  681. package/dist/esm/templates/RPGTemplates.js +29 -15
  682. package/dist/esm/templates/RPGTemplates.js.map +1 -1
  683. package/dist/esm/templates/SportsTemplates.js +41 -17
  684. package/dist/esm/templates/SportsTemplates.js.map +1 -1
  685. package/dist/esm/templates/StrategyTemplates.js +45 -18
  686. package/dist/esm/templates/StrategyTemplates.js.map +1 -1
  687. package/dist/esm/templates/SurvivalTemplate.js +447 -0
  688. package/dist/esm/templates/SurvivalTemplate.js.map +1 -0
  689. package/dist/esm/templates/WaveDefense.js +139 -52
  690. package/dist/esm/templates/WaveDefense.js.map +1 -1
  691. package/dist/esm/tilemap/Tilemap.js +48 -32
  692. package/dist/esm/tilemap/Tilemap.js.map +1 -1
  693. package/dist/esm/tutorials/TutorialBranching.js +111 -42
  694. package/dist/esm/tutorials/TutorialBranching.js.map +1 -1
  695. package/dist/esm/tutorials/TutorialEngine.js +152 -80
  696. package/dist/esm/tutorials/TutorialEngine.js.map +1 -1
  697. package/dist/esm/tutorials/TutorialOverlay.js +117 -40
  698. package/dist/esm/tutorials/TutorialOverlay.js.map +1 -1
  699. package/dist/esm/ui/GameUI.js +69 -42
  700. package/dist/esm/ui/GameUI.js.map +1 -1
  701. package/dist/esm/unity-integration/UnityAssetStore.js +749 -0
  702. package/dist/esm/unity-integration/UnityAssetStore.js.map +1 -0
  703. package/dist/esm/unity-integration/UnityImport.js +1246 -0
  704. package/dist/esm/unity-integration/UnityImport.js.map +1 -0
  705. package/dist/esm/unity-integration/UnityLiveLink.js +1017 -0
  706. package/dist/esm/unity-integration/UnityLiveLink.js.map +1 -0
  707. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js +794 -0
  708. package/dist/esm/unity-integration/components/UnityAssetStoreBrowser.js.map +1 -0
  709. package/dist/esm/unity-integration/components/UnityProjectBrowser.js +831 -0
  710. package/dist/esm/unity-integration/components/UnityProjectBrowser.js.map +1 -0
  711. package/dist/esm/unreal-integration/UnrealImport.js +437 -0
  712. package/dist/esm/unreal-integration/UnrealImport.js.map +1 -0
  713. package/dist/esm/unreal-integration/UnrealLiveLink.js +1182 -0
  714. package/dist/esm/unreal-integration/UnrealLiveLink.js.map +1 -0
  715. package/dist/esm/unreal-integration/UnrealMarketplace.js +490 -0
  716. package/dist/esm/unreal-integration/UnrealMarketplace.js.map +1 -0
  717. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js +833 -0
  718. package/dist/esm/unreal-integration/components/UnrealProjectBrowser.js.map +1 -0
  719. package/dist/esm/xr/ARVR.js +32 -9
  720. package/dist/esm/xr/ARVR.js.map +1 -1
  721. package/package.json +7 -6
@@ -0,0 +1,846 @@
1
+ 'use strict';
2
+
3
+ var PlatformExporter = require('./PlatformExporter.js');
4
+
5
+ /* ────────────────────────────────────────────────────────────────
6
+ PICO-8 Exporter — Fantasy Console Export
7
+
8
+ Exports Nice2Dev projects to PICO-8 format:
9
+ - P8 cartridge file format
10
+ - Lua code section
11
+ - Graphics data (sprites, map)
12
+ - Sound effects
13
+ - Music patterns
14
+
15
+ Constraints:
16
+ - 128x128 pixels
17
+ - 16 colors palette
18
+ - 8192 tokens max
19
+ - 32KB cartridge size
20
+ ──────────────────────────────────────────────────────────────── */
21
+ /* ── PICO-8 Constants ─────────────────────────────────────────── */
22
+ const PICO8_PALETTE = [
23
+ '#000000', // 0 - black
24
+ '#1D2B53', // 1 - dark blue
25
+ '#7E2553', // 2 - dark purple
26
+ '#008751', // 3 - dark green
27
+ '#AB5236', // 4 - brown
28
+ '#5F574F', // 5 - dark gray
29
+ '#C2C3C7', // 6 - light gray
30
+ '#FFF1E8', // 7 - white
31
+ '#FF004D', // 8 - red
32
+ '#FFA300', // 9 - orange
33
+ '#FFEC27', // 10 - yellow
34
+ '#00E436', // 11 - green
35
+ '#29ADFF', // 12 - blue
36
+ '#83769C', // 13 - indigo
37
+ '#FF77A8', // 14 - pink
38
+ '#FFCCAA', // 15 - peach
39
+ ];
40
+ /* ── Exporter Implementation ──────────────────────────────────── */
41
+ class Pico8Exporter extends PlatformExporter.PlatformExporter {
42
+ constructor() {
43
+ super(...arguments);
44
+ this.platformId = 'pico8';
45
+ this.platformInfo = {
46
+ id: 'pico8',
47
+ name: 'PICO-8',
48
+ description: 'PICO-8 Fantasy Console - Retro game development platform',
49
+ website: 'https://www.lexaloffle.com/pico-8.php',
50
+ features: ['2d-rendering', 'pixel-graphics', 'audio', 'music', 'retro'],
51
+ supportedAssets: ['sprite', 'tilemap', 'audio', 'music'],
52
+ exportFormats: ['.p8'],
53
+ };
54
+ }
55
+ async doExport(project, options) {
56
+ options.platformOptions ?? {};
57
+ // Generate main P8 cartridge
58
+ await this.generateCartridge(project, options);
59
+ // Generate standalone Lua for reference
60
+ await this.generateLuaSource(project, options);
61
+ // Generate README
62
+ await this.generateReadme(project, options);
63
+ }
64
+ /* ── Cartridge Generation ───────────────────────────────────── */
65
+ async generateCartridge(project, options) {
66
+ options.platformOptions ?? {};
67
+ const safeName = (options.projectName ?? project.name)
68
+ .toLowerCase()
69
+ .replace(/[^a-z0-9_]/g, '_');
70
+ // Generate code section
71
+ const code = this.generateCode(project, options);
72
+ // Generate graphics section (placeholder)
73
+ const gfx = this.generateGfxSection(project, options);
74
+ // Generate gff (sprite flags) section
75
+ const gff = this.generateGffSection(project);
76
+ // Generate map section
77
+ const map = this.generateMapSection(project);
78
+ // Generate sfx section
79
+ const sfx = this.generateSfxSection(project, options);
80
+ // Generate music section
81
+ const music = this.generateMusicSection(project, options);
82
+ // Assemble cartridge
83
+ const cartridge = `pico-8 cartridge // http://www.pico-8.com
84
+ version 41
85
+ __lua__
86
+ ${code}
87
+ __gfx__
88
+ ${gfx}
89
+ __gff__
90
+ ${gff}
91
+ __map__
92
+ ${map}
93
+ __sfx__
94
+ ${sfx}
95
+ __music__
96
+ ${music}
97
+ `;
98
+ this.addTextFile(`${safeName}.p8`, cartridge);
99
+ }
100
+ /* ── Code Generation ────────────────────────────────────────── */
101
+ generateCode(project, options) {
102
+ const platformOpts = options.platformOptions ?? {};
103
+ const optimizeTokens = platformOpts.optimizeTokens ?? false;
104
+ const lines = [];
105
+ // Header comment
106
+ lines.push(`-- ${project.name} v${project.version}`);
107
+ lines.push('-- generated from nice2dev');
108
+ lines.push('');
109
+ // Game state
110
+ lines.push('-- game state');
111
+ lines.push('game={');
112
+ lines.push(' state="play",');
113
+ lines.push(' frame=0,');
114
+ lines.push(' cam={x=0,y=0},');
115
+ lines.push(' entities={},');
116
+ lines.push(' debug=' + (platformOpts.includeDebug ? 'true' : 'false'));
117
+ lines.push('}');
118
+ lines.push('');
119
+ // Core functions
120
+ lines.push(this.generateCoreFunctions(project, options));
121
+ // Entity system
122
+ lines.push(this.generateEntitySystem(project, options));
123
+ // Entity definitions
124
+ lines.push(this.generateEntityDefinitions(project, options));
125
+ // Scene setup
126
+ lines.push(this.generateSceneSetup(project, options));
127
+ // Utility functions
128
+ lines.push(this.generateUtilityFunctions(optimizeTokens));
129
+ // Debug overlay
130
+ if (platformOpts.includeDebug) {
131
+ lines.push(this.generateDebugOverlay());
132
+ }
133
+ return lines.join('\n');
134
+ }
135
+ generateCoreFunctions(project, options) {
136
+ return `
137
+ -- initialization
138
+ function _init()
139
+ -- setup palette
140
+ palt(0,false)
141
+ palt(14,true) -- pink as transparent
142
+
143
+ -- initialize game
144
+ game.frame=0
145
+ game.entities={}
146
+
147
+ -- load first scene
148
+ load_scene(1)
149
+ end
150
+
151
+ -- update (60fps)
152
+ function _update60()
153
+ if game.state=="play" then
154
+ game.frame+=1
155
+
156
+ -- update all entities
157
+ for e in all(game.entities) do
158
+ if e.update then
159
+ e:update()
160
+ end
161
+ end
162
+
163
+ -- handle collisions
164
+ check_collisions()
165
+
166
+ -- clean dead entities
167
+ for i=#game.entities,1,-1 do
168
+ if game.entities[i].dead then
169
+ del(game.entities,game.entities[i])
170
+ end
171
+ end
172
+ end
173
+ end
174
+
175
+ -- draw
176
+ function _draw()
177
+ cls(${this.getClosestPico8Color(project.scenes[0]?.background ?? '#000000')})
178
+
179
+ -- apply camera
180
+ camera(game.cam.x,game.cam.y)
181
+
182
+ -- draw map
183
+ map(0,0,0,0,128,64)
184
+
185
+ -- draw entities (sorted by y)
186
+ sort_entities()
187
+ for e in all(game.entities) do
188
+ if e.draw then
189
+ e:draw()
190
+ end
191
+ end
192
+
193
+ camera()
194
+
195
+ -- ui
196
+ draw_ui()
197
+
198
+ -- debug
199
+ if game.debug then
200
+ draw_debug()
201
+ end
202
+ end
203
+ `;
204
+ }
205
+ generateEntitySystem(project, options) {
206
+ return `
207
+ -- entity system
208
+ function make_entity(type,x,y,props)
209
+ local e={
210
+ type=type,
211
+ x=x,
212
+ y=y,
213
+ dx=0,
214
+ dy=0,
215
+ w=8,
216
+ h=8,
217
+ spr=0,
218
+ flip_x=false,
219
+ anim={frames={0},speed=0.1,t=0,i=1},
220
+ dead=false,
221
+ tags={}
222
+ }
223
+ -- apply props
224
+ if props then
225
+ for k,v in pairs(props) do
226
+ e[k]=v
227
+ end
228
+ end
229
+ -- type-specific init
230
+ if entity_types[type] then
231
+ for k,v in pairs(entity_types[type]) do
232
+ if type(v)!="function" then
233
+ e[k]=v
234
+ else
235
+ e[k]=v
236
+ end
237
+ end
238
+ if entity_types[type].init then
239
+ entity_types[type].init(e)
240
+ end
241
+ end
242
+ add(game.entities,e)
243
+ return e
244
+ end
245
+
246
+ function kill_entity(e)
247
+ e.dead=true
248
+ end
249
+
250
+ function has_tag(e,tag)
251
+ for t in all(e.tags) do
252
+ if t==tag then return true end
253
+ end
254
+ return false
255
+ end
256
+
257
+ -- collision
258
+ function check_collisions()
259
+ for i=1,#game.entities do
260
+ local a=game.entities[i]
261
+ if not a.dead and a.solid then
262
+ for j=i+1,#game.entities do
263
+ local b=game.entities[j]
264
+ if not b.dead and b.solid then
265
+ if collides(a,b) then
266
+ if a.on_collision then a:on_collision(b) end
267
+ if b.on_collision then b:on_collision(a) end
268
+ end
269
+ end
270
+ end
271
+ end
272
+ end
273
+ end
274
+
275
+ function collides(a,b)
276
+ return a.x<b.x+b.w and
277
+ a.x+a.w>b.x and
278
+ a.y<b.y+b.h and
279
+ a.y+a.h>b.y
280
+ end
281
+ `;
282
+ }
283
+ generateEntityDefinitions(project, options) {
284
+ const lines = [];
285
+ lines.push('');
286
+ lines.push('-- entity types');
287
+ lines.push('entity_types={}');
288
+ lines.push('');
289
+ // Generate entity types from prefabs and entities
290
+ const entityTypes = new Map();
291
+ for (const prefab of project.prefabs) {
292
+ entityTypes.set(prefab.name.toLowerCase().replace(/[^a-z0-9_]/g, '_'), prefab.entity);
293
+ }
294
+ for (const scene of project.scenes) {
295
+ for (const entity of scene.entities) {
296
+ const typeName = (entity.name ?? entity.id).toLowerCase().replace(/[^a-z0-9_]/g, '_');
297
+ if (!entityTypes.has(typeName)) {
298
+ entityTypes.set(typeName, entity);
299
+ }
300
+ }
301
+ }
302
+ for (const [typeName, entity] of entityTypes) {
303
+ lines.push(this.entityTypeToLua(typeName, entity));
304
+ }
305
+ return lines.join('\n');
306
+ }
307
+ entityTypeToLua(typeName, entity) {
308
+ const tags = entity.tags ?? [];
309
+ entity.components.some((c) => c.type === 'sprite');
310
+ const hasPhysics = entity.components.some((c) => c.type === 'rigidbody');
311
+ entity.components.some((c) => c.type === 'script');
312
+ const sprIndex = this.getEntitySpriteIndex(entity);
313
+ const speed = this.getComponentProperty(entity, 'movement', 'speed', 1);
314
+ return `entity_types.${typeName}={
315
+ spr=${sprIndex},
316
+ w=8,h=8,
317
+ solid=${hasPhysics},
318
+ tags={${tags.map((t) => `"${t}"`).join(',')}},
319
+ speed=${speed / 50},
320
+ hp=${this.getComponentProperty(entity, 'health', 'max', 3)},
321
+ max_hp=${this.getComponentProperty(entity, 'health', 'max', 3)},
322
+
323
+ init=function(self)
324
+ -- custom init
325
+ end,
326
+
327
+ update=function(self)
328
+ -- movement
329
+ self.x+=self.dx
330
+ self.y+=self.dy
331
+
332
+ -- friction
333
+ self.dx*=0.9
334
+ self.dy*=0.9
335
+
336
+ -- animation
337
+ if self.anim.speed>0 then
338
+ self.anim.t+=self.anim.speed
339
+ if self.anim.t>=1 then
340
+ self.anim.t=0
341
+ self.anim.i+=1
342
+ if self.anim.i>#self.anim.frames then
343
+ self.anim.i=1
344
+ end
345
+ self.spr=self.anim.frames[self.anim.i]
346
+ end
347
+ end
348
+ end,
349
+
350
+ draw=function(self)
351
+ spr(self.spr,self.x,self.y,1,1,self.flip_x)
352
+ end,
353
+
354
+ on_collision=function(self,other)
355
+ -- handle collision
356
+ end,
357
+
358
+ hurt=function(self,dmg)
359
+ self.hp-=(dmg or 1)
360
+ if self.hp<=0 then
361
+ self:die()
362
+ end
363
+ end,
364
+
365
+ die=function(self)
366
+ -- spawn particles
367
+ for i=1,4 do
368
+ spawn_particle(self.x+4,self.y+4,7)
369
+ end
370
+ kill_entity(self)
371
+ end
372
+ }
373
+
374
+ `;
375
+ }
376
+ getEntitySpriteIndex(entity) {
377
+ // Map entity types to sprite indices (placeholder logic)
378
+ const name = (entity.name ?? 'entity').toLowerCase();
379
+ if (name.includes('player')) {
380
+ return 1;
381
+ }
382
+ if (name.includes('enemy')) {
383
+ return 16;
384
+ }
385
+ if (name.includes('item')) {
386
+ return 32;
387
+ }
388
+ if (name.includes('bullet') || name.includes('projectile')) {
389
+ return 48;
390
+ }
391
+ return 0;
392
+ }
393
+ getComponentProperty(entity, componentType, property, defaultValue) {
394
+ const comp = entity.components.find((c) => c.type === componentType);
395
+ if (comp && comp.properties && property in comp.properties) {
396
+ return comp.properties[property];
397
+ }
398
+ return defaultValue;
399
+ }
400
+ generateSceneSetup(project, options) {
401
+ const lines = [];
402
+ lines.push('');
403
+ lines.push('-- scenes');
404
+ lines.push('scenes={}');
405
+ lines.push('');
406
+ for (let i = 0; i < project.scenes.length; i++) {
407
+ const scene = project.scenes[i];
408
+ const sceneName = scene.name.toLowerCase().replace(/[^a-z0-9_]/g, '_');
409
+ lines.push(`scenes[${i + 1}]={`);
410
+ lines.push(` name="${sceneName}",`);
411
+ lines.push(` entities={`);
412
+ for (const entity of scene.entities) {
413
+ const typeName = (entity.name ?? entity.id).toLowerCase().replace(/[^a-z0-9_]/g, '_');
414
+ const pos = entity.position ?? { x: 0, y: 0 };
415
+ // Scale position for PICO-8 (128x128)
416
+ const x = Math.floor((pos.x / project.settings.resolution.width) * 128);
417
+ const y = Math.floor((pos.y / project.settings.resolution.height) * 128);
418
+ lines.push(` {type="${typeName}",x=${x},y=${y}},`);
419
+ }
420
+ lines.push(` }`);
421
+ lines.push(`}`);
422
+ lines.push('');
423
+ }
424
+ lines.push('function load_scene(n)');
425
+ lines.push(' game.entities={}');
426
+ lines.push(' local s=scenes[n]');
427
+ lines.push(' if s then');
428
+ lines.push(' for e in all(s.entities) do');
429
+ lines.push(' make_entity(e.type,e.x,e.y)');
430
+ lines.push(' end');
431
+ lines.push(' end');
432
+ lines.push('end');
433
+ return lines.join('\n');
434
+ }
435
+ generateUtilityFunctions(optimizeTokens) {
436
+ if (optimizeTokens) {
437
+ return `
438
+ -- utils (optimized)
439
+ function v(x,y) return {x=x,y=y} end
440
+ function dist(a,b) return sqrt((b.x-a.x)^2+(b.y-a.y)^2) end
441
+ function lerp(a,b,t) return a+(b-a)*t end
442
+ function clamp(v,mn,mx) return max(mn,min(mx,v)) end
443
+ function rnd_range(a,b) return a+rnd(b-a) end
444
+ function sign(v) return v>0 and 1 or v<0 and -1 or 0 end
445
+
446
+ function sort_entities()
447
+ for i=1,#game.entities do
448
+ local j=i
449
+ while j>1 and game.entities[j-1].y>game.entities[j].y do
450
+ game.entities[j],game.entities[j-1]=game.entities[j-1],game.entities[j]
451
+ j-=1
452
+ end
453
+ end
454
+ end
455
+
456
+ function spawn_particle(x,y,c)
457
+ local p={x=x,y=y,dx=rnd(2)-1,dy=rnd(2)-1,c=c,life=15+rnd(10),draw=function(s) pset(s.x,s.y,s.c) end,update=function(s) s.x+=s.dx s.y+=s.dy s.life-=1 if s.life<=0 then s.dead=true end end}
458
+ add(game.entities,p)
459
+ end
460
+
461
+ function draw_ui()
462
+ -- hud here
463
+ end
464
+ `;
465
+ }
466
+ return `
467
+ -- utility functions
468
+ function vec(x,y)
469
+ return {x=x,y=y}
470
+ end
471
+
472
+ function dist(a,b)
473
+ local dx=b.x-a.x
474
+ local dy=b.y-a.y
475
+ return sqrt(dx*dx+dy*dy)
476
+ end
477
+
478
+ function lerp(a,b,t)
479
+ return a+(b-a)*t
480
+ end
481
+
482
+ function clamp(val,min_val,max_val)
483
+ return max(min_val,min(max_val,val))
484
+ end
485
+
486
+ function rnd_range(min_val,max_val)
487
+ return min_val+rnd(max_val-min_val)
488
+ end
489
+
490
+ function sign(val)
491
+ if val>0 then return 1 end
492
+ if val<0 then return -1 end
493
+ return 0
494
+ end
495
+
496
+ function sort_entities()
497
+ -- insertion sort by y
498
+ for i=1,#game.entities do
499
+ local j=i
500
+ while j>1 and game.entities[j-1].y>game.entities[j].y do
501
+ game.entities[j],game.entities[j-1]=game.entities[j-1],game.entities[j]
502
+ j-=1
503
+ end
504
+ end
505
+ end
506
+
507
+ function spawn_particle(x,y,color)
508
+ local p={
509
+ x=x,
510
+ y=y,
511
+ dx=rnd(2)-1,
512
+ dy=rnd(2)-1,
513
+ c=color,
514
+ life=15+rnd(10),
515
+ dead=false,
516
+ draw=function(self)
517
+ pset(self.x,self.y,self.c)
518
+ end,
519
+ update=function(self)
520
+ self.x+=self.dx
521
+ self.y+=self.dy
522
+ self.dy+=0.05 -- gravity
523
+ self.life-=1
524
+ if self.life<=0 then
525
+ self.dead=true
526
+ end
527
+ end
528
+ }
529
+ add(game.entities,p)
530
+ end
531
+
532
+ function screensh()
533
+ -- screenshake
534
+ if game.shake and game.shake>0 then
535
+ game.cam.x=rnd(game.shake)-game.shake/2
536
+ game.cam.y=rnd(game.shake)-game.shake/2
537
+ game.shake-=0.5
538
+ else
539
+ game.shake=0
540
+ game.cam.x=0
541
+ game.cam.y=0
542
+ end
543
+ end
544
+
545
+ function shake(amount)
546
+ game.shake=(game.shake or 0)+amount
547
+ end
548
+
549
+ function draw_ui()
550
+ -- hud
551
+ print("nice2dev",1,1,7)
552
+ end
553
+
554
+ -- input helpers
555
+ function btn_pressed(b)
556
+ return btn(b) and not btnp(b)
557
+ end
558
+ `;
559
+ }
560
+ generateDebugOverlay() {
561
+ return `
562
+ -- debug overlay
563
+ function draw_debug()
564
+ local mem=flr(stat(0)/1024*100)/100
565
+ local cpu=flr(stat(1)*100)
566
+
567
+ rectfill(0,0,127,12,0)
568
+ print("fps:"..stat(7).." cpu:"..cpu.."%",1,1,7)
569
+ print("mem:"..mem.."kb ent:"..#game.entities,1,7,7)
570
+
571
+ -- draw hitboxes
572
+ for e in all(game.entities) do
573
+ if e.solid then
574
+ rect(e.x,e.y,e.x+e.w-1,e.y+e.h-1,8)
575
+ end
576
+ end
577
+ end
578
+ `;
579
+ }
580
+ /* ── Data Sections ──────────────────────────────────────────── */
581
+ generateGfxSection(project, options) {
582
+ // Generate placeholder sprite sheet (128x128 = 256 lines of 128 hex chars)
583
+ // Each pixel is 4 bits (one hex char)
584
+ const lines = [];
585
+ // Basic placeholder sprites
586
+ // Sprite 0: Empty
587
+ // Sprite 1: Player placeholder (simple face)
588
+ // Sprite 16: Enemy placeholder
589
+ // Sprite 32: Item placeholder
590
+ for (let row = 0; row < 128; row++) {
591
+ let line = '';
592
+ for (let col = 0; col < 128; col++) {
593
+ const spriteX = col % 8;
594
+ const spriteY = row % 8;
595
+ const spriteIndex = Math.floor(col / 8) + Math.floor(row / 8) * 16;
596
+ let pixel = 0;
597
+ // Sprite 1: Player (simple character)
598
+ if (spriteIndex === 1) {
599
+ // Draw a simple face
600
+ if (spriteY === 1 && (spriteX === 2 || spriteX === 5)) {
601
+ pixel = 12;
602
+ } // eyes (blue)
603
+ else if (spriteY === 3 && spriteX >= 2 && spriteX <= 5) {
604
+ pixel = 8;
605
+ } // mouth (red)
606
+ else if (spriteY >= 1 && spriteY <= 5 && spriteX >= 1 && spriteX <= 6) {
607
+ pixel = 15;
608
+ } // face (peach)
609
+ else if ((spriteY === 0 || spriteY === 6) && spriteX >= 2 && spriteX <= 5) {
610
+ pixel = 4;
611
+ } // hair
612
+ else if ((spriteX === 0 || spriteX === 7) && spriteY >= 1 && spriteY <= 5) {
613
+ pixel = 4;
614
+ } // hair sides
615
+ }
616
+ // Sprite 16: Enemy (red square)
617
+ else if (spriteIndex === 16) {
618
+ if (spriteX >= 1 && spriteX <= 6 && spriteY >= 1 && spriteY <= 6) {
619
+ pixel = 8;
620
+ } // red body
621
+ if (spriteY === 2 && (spriteX === 2 || spriteX === 5)) {
622
+ pixel = 7;
623
+ } // eyes
624
+ }
625
+ // Sprite 32: Item (yellow coin)
626
+ else if (spriteIndex === 32) {
627
+ if (spriteX >= 2 && spriteX <= 5 && spriteY >= 1 && spriteY <= 6) {
628
+ pixel = 10;
629
+ } // yellow
630
+ if (spriteY >= 2 && spriteY <= 5 && (spriteX === 1 || spriteX === 6)) {
631
+ pixel = 10;
632
+ }
633
+ if (spriteX >= 3 && spriteX <= 4 && spriteY >= 3 && spriteY <= 4) {
634
+ pixel = 9;
635
+ } // orange center
636
+ }
637
+ line += pixel.toString(16);
638
+ }
639
+ lines.push(line);
640
+ }
641
+ return lines.join('\n');
642
+ }
643
+ generateGffSection(project) {
644
+ // Sprite flags: 256 bytes (2 per line, 128 lines)
645
+ // All zeros for placeholder
646
+ const lines = [];
647
+ for (let i = 0; i < 2; i++) {
648
+ lines.push('0'.repeat(256));
649
+ }
650
+ return lines.join('\n');
651
+ }
652
+ generateMapSection(project) {
653
+ // Map: 128x64 tiles, stored as 128 bytes per row, 64 rows
654
+ // Actually stored as 128x32 in __map__ section
655
+ const lines = [];
656
+ for (let i = 0; i < 32; i++) {
657
+ lines.push('0'.repeat(256));
658
+ }
659
+ return lines.join('\n');
660
+ }
661
+ generateSfxSection(project, options) {
662
+ const platformOpts = options.platformOptions ?? {};
663
+ if (!platformOpts.sfxPlaceholders) {
664
+ // Empty sfx section
665
+ return '';
666
+ }
667
+ // Placeholder sound effects
668
+ const lines = [];
669
+ // SFX 0: Jump sound
670
+ lines.push('000100000c0500c0500b0500a050090500805007050060500505004050030500205001050000500005000050000500005000050000500005000050000500005');
671
+ // SFX 1: Hit sound
672
+ lines.push('001000001805018050170501605015050140501305012050110501005010050100500005000050000500005000050000500005000050000500005000050');
673
+ // SFX 2: Pickup sound
674
+ lines.push('000600002405024050260502805030050320503305034050350503605036050350503405033050300502705024050000500005000050000500005000050');
675
+ // Fill rest with empty
676
+ for (let i = 3; i < 64; i++) {
677
+ lines.push('001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
678
+ }
679
+ return lines.join('\n');
680
+ }
681
+ generateMusicSection(project, options) {
682
+ const platformOpts = options.platformOptions ?? {};
683
+ if (!platformOpts.musicPatterns) {
684
+ return '';
685
+ }
686
+ // Placeholder music patterns
687
+ const lines = [];
688
+ // Pattern 0: Simple loop
689
+ lines.push('00 41424344');
690
+ // Fill rest with empty
691
+ for (let i = 1; i < 64; i++) {
692
+ lines.push('00 41424344'.replace(/\d/g, '4'));
693
+ }
694
+ return lines.join('\n');
695
+ }
696
+ /* ── Lua Source ─────────────────────────────────────────────── */
697
+ async generateLuaSource(project, options) {
698
+ const code = this.generateCode(project, options);
699
+ this.addTextFile('source.lua', `-- ${project.name} - Source Code\n-- For reference only (use .p8 file in PICO-8)\n\n${code}`);
700
+ }
701
+ /* ── Color Utilities ────────────────────────────────────────── */
702
+ getClosestPico8Color(hex) {
703
+ const cleanHex = hex.replace('#', '').toLowerCase();
704
+ const r = parseInt(cleanHex.substring(0, 2), 16);
705
+ const g = parseInt(cleanHex.substring(2, 4), 16);
706
+ const b = parseInt(cleanHex.substring(4, 6), 16);
707
+ let closestIndex = 0;
708
+ let closestDist = Infinity;
709
+ for (let i = 0; i < PICO8_PALETTE.length; i++) {
710
+ const palHex = PICO8_PALETTE[i].replace('#', '');
711
+ const pr = parseInt(palHex.substring(0, 2), 16);
712
+ const pg = parseInt(palHex.substring(2, 4), 16);
713
+ const pb = parseInt(palHex.substring(4, 6), 16);
714
+ const dist = Math.sqrt(Math.pow(r - pr, 2) + Math.pow(g - pg, 2) + Math.pow(b - pb, 2));
715
+ if (dist < closestDist) {
716
+ closestDist = dist;
717
+ closestIndex = i;
718
+ }
719
+ }
720
+ return closestIndex;
721
+ }
722
+ /* ── README ─────────────────────────────────────────────────── */
723
+ async generateReadme(project, options) {
724
+ const safeName = (options.projectName ?? project.name)
725
+ .toLowerCase()
726
+ .replace(/[^a-z0-9_]/g, '_');
727
+ const readme = `# ${project.name} - PICO-8 Export
728
+
729
+ Generated from Nice2Dev project v${project.version}
730
+
731
+ ## Requirements
732
+
733
+ - PICO-8 ($15 from https://www.lexaloffle.com/pico-8.php)
734
+
735
+ ## Installation
736
+
737
+ 1. Open PICO-8
738
+ 2. Type: \`load ${safeName}\`
739
+ 3. Press Ctrl+R or type \`run\`
740
+
741
+ ## Files
742
+
743
+ - \`${safeName}.p8\` - PICO-8 cartridge file
744
+ - \`source.lua\` - Extracted Lua source (for reference)
745
+
746
+ ## PICO-8 Constraints
747
+
748
+ This export is designed for PICO-8's limitations:
749
+ - **Display**: 128x128 pixels
750
+ - **Colors**: 16 color palette
751
+ - **Code**: 8192 tokens max
752
+ - **Memory**: 32KB cartridge
753
+ - **Sprites**: 128 8x8 sprites
754
+ - **Map**: 128x64 tiles
755
+ - **Sound**: 64 SFX slots
756
+ - **Music**: 64 patterns
757
+
758
+ ## Controls
759
+
760
+ - ⬅️➡️⬆️⬇️ / ESDF: Move
761
+ - 🅾️ (Z/C): Action 1
762
+ - ❎ (X/V): Action 2
763
+ - P: Pause menu
764
+
765
+ ## Code Structure
766
+
767
+ \`\`\`lua
768
+ -- _init() - Called once at start
769
+ -- _update60() - Called 60 times per second
770
+ -- _draw() - Called after update for rendering
771
+ \`\`\`
772
+
773
+ ### Entity System
774
+
775
+ \`\`\`lua
776
+ -- Create entity
777
+ local e = make_entity("player", 64, 64)
778
+
779
+ -- Kill entity
780
+ kill_entity(e)
781
+
782
+ -- Check tag
783
+ if has_tag(e, "enemy") then
784
+ -- ...
785
+ end
786
+ \`\`\`
787
+
788
+ ### Scenes
789
+
790
+ ${project.scenes.map((s, i) => `- Scene ${i + 1}: ${s.name} (${s.entities.length} entities)`).join('\n')}
791
+
792
+ Load scene with: \`load_scene(1)\`
793
+
794
+ ## Customization
795
+
796
+ ### Adding Sprites
797
+
798
+ 1. In PICO-8, press Ctrl+S to open sprite editor
799
+ 2. Draw your sprites (8x8 pixels each)
800
+ 3. Update entity_types sprite indices
801
+
802
+ ### Adding Sounds
803
+
804
+ 1. Press Ctrl+N for SFX editor
805
+ 2. Create sounds in slots 0-63
806
+ 3. Play with: \`sfx(0)\`
807
+
808
+ ### Adding Music
809
+
810
+ 1. Press Ctrl+M for music editor
811
+ 2. Create patterns using SFX
812
+ 3. Play with: \`music(0)\`
813
+
814
+ ## Debug Mode
815
+
816
+ Set \`game.debug=true\` to show:
817
+ - FPS counter
818
+ - CPU usage
819
+ - Memory usage
820
+ - Entity hitboxes
821
+
822
+ ## Tips
823
+
824
+ - Keep code under 8192 tokens
825
+ - Use shorter variable names to save tokens
826
+ - Reuse sprites with flip flags
827
+ - Use map for static backgrounds
828
+ - Pool entities to avoid garbage
829
+
830
+ ## Links
831
+
832
+ - PICO-8 Manual: https://www.lexaloffle.com/dl/docs/pico-8_manual.html
833
+ - PICO-8 Wiki: https://pico-8.fandom.com/
834
+ - Splore: Built-in game browser (type \`splore\`)
835
+ `;
836
+ this.addTextFile('README.md', readme);
837
+ }
838
+ }
839
+ /* ── Factory ──────────────────────────────────────────────────── */
840
+ function createPico8Exporter() {
841
+ return new Pico8Exporter();
842
+ }
843
+
844
+ exports.Pico8Exporter = Pico8Exporter;
845
+ exports.createPico8Exporter = createPico8Exporter;
846
+ //# sourceMappingURL=Pico8Exporter.js.map