@nice2dev/game-engine 1.0.4 → 1.0.10

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