melon-lua 3.4.0__py3-none-any.whl

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 (986) hide show
  1. melon_lua/__init__.py +78 -0
  2. melon_lua/__main__.py +246 -0
  3. melon_lua/backend/__init__.py +49 -0
  4. melon_lua/backend/camera_backend.py +35 -0
  5. melon_lua/backend/chip_backend.py +95 -0
  6. melon_lua/backend/entity_backend.py +459 -0
  7. melon_lua/backend/env_backend.py +68 -0
  8. melon_lua/backend/input_backend.py +100 -0
  9. melon_lua/backend/mechanic_backend.py +67 -0
  10. melon_lua/backend/print_backend.py +63 -0
  11. melon_lua/backend/spawn_backend.py +116 -0
  12. melon_lua/backend/uicontrol_backend.py +110 -0
  13. melon_lua/backend/variables_backend.py +38 -0
  14. melon_lua/backend/world_backend.py +56 -0
  15. melon_lua/catalog.py +99 -0
  16. melon_lua/constraints.py +489 -0
  17. melon_lua/data/chip_template_1132.json +365 -0
  18. melon_lua/data/item_templates/0.json +215 -0
  19. melon_lua/data/item_templates/10.json +187 -0
  20. melon_lua/data/item_templates/102.json +89 -0
  21. melon_lua/data/item_templates/1096548672.json +208 -0
  22. melon_lua/data/item_templates/115.json +89 -0
  23. melon_lua/data/item_templates/116.json +203 -0
  24. melon_lua/data/item_templates/120.json +89 -0
  25. melon_lua/data/item_templates/121.json +105 -0
  26. melon_lua/data/item_templates/122.json +144 -0
  27. melon_lua/data/item_templates/123.json +89 -0
  28. melon_lua/data/item_templates/125.json +89 -0
  29. melon_lua/data/item_templates/1294925504.json +232 -0
  30. melon_lua/data/item_templates/13.json +209 -0
  31. melon_lua/data/item_templates/130.json +170 -0
  32. melon_lua/data/item_templates/131.json +118 -0
  33. melon_lua/data/item_templates/133.json +256 -0
  34. melon_lua/data/item_templates/1353580864.json +125 -0
  35. melon_lua/data/item_templates/138.json +89 -0
  36. melon_lua/data/item_templates/14.json +122 -0
  37. melon_lua/data/item_templates/140.json +89 -0
  38. melon_lua/data/item_templates/147.json +326 -0
  39. melon_lua/data/item_templates/15.json +322 -0
  40. melon_lua/data/item_templates/177.json +169 -0
  41. melon_lua/data/item_templates/178.json +173 -0
  42. melon_lua/data/item_templates/184.json +205 -0
  43. melon_lua/data/item_templates/1971846848.json +235 -0
  44. melon_lua/data/item_templates/201.json +268 -0
  45. melon_lua/data/item_templates/202.json +131 -0
  46. melon_lua/data/item_templates/2046689600.json +481 -0
  47. melon_lua/data/item_templates/21.json +245 -0
  48. melon_lua/data/item_templates/22.json +89 -0
  49. melon_lua/data/item_templates/222.json +192 -0
  50. melon_lua/data/item_templates/225.json +89 -0
  51. melon_lua/data/item_templates/226.json +136 -0
  52. melon_lua/data/item_templates/228.json +124 -0
  53. melon_lua/data/item_templates/229.json +149 -0
  54. melon_lua/data/item_templates/23.json +138 -0
  55. melon_lua/data/item_templates/233.json +173 -0
  56. melon_lua/data/item_templates/24.json +133 -0
  57. melon_lua/data/item_templates/246.json +385 -0
  58. melon_lua/data/item_templates/247.json +385 -0
  59. melon_lua/data/item_templates/248.json +391 -0
  60. melon_lua/data/item_templates/249.json +340 -0
  61. melon_lua/data/item_templates/25.json +225 -0
  62. melon_lua/data/item_templates/252.json +125 -0
  63. melon_lua/data/item_templates/253.json +182 -0
  64. melon_lua/data/item_templates/256.json +266 -0
  65. melon_lua/data/item_templates/257.json +170 -0
  66. melon_lua/data/item_templates/258.json +197 -0
  67. melon_lua/data/item_templates/261.json +260 -0
  68. melon_lua/data/item_templates/262.json +172 -0
  69. melon_lua/data/item_templates/271.json +174 -0
  70. melon_lua/data/item_templates/272.json +149 -0
  71. melon_lua/data/item_templates/274.json +386 -0
  72. melon_lua/data/item_templates/278.json +114 -0
  73. melon_lua/data/item_templates/28.json +105 -0
  74. melon_lua/data/item_templates/3.json +133 -0
  75. melon_lua/data/item_templates/303.json +196 -0
  76. melon_lua/data/item_templates/316.json +89 -0
  77. melon_lua/data/item_templates/319.json +176 -0
  78. melon_lua/data/item_templates/32.json +173 -0
  79. melon_lua/data/item_templates/33.json +123 -0
  80. melon_lua/data/item_templates/436732224.json +148 -0
  81. melon_lua/data/item_templates/50.json +89 -0
  82. melon_lua/data/item_templates/53.json +201 -0
  83. melon_lua/data/item_templates/57.json +133 -0
  84. melon_lua/data/item_templates/62.json +111 -0
  85. melon_lua/data/item_templates/687931072.json +122 -0
  86. melon_lua/data/item_templates/758447808.json +193 -0
  87. melon_lua/data/item_templates/76.json +105 -0
  88. melon_lua/data/item_templates/87.json +191 -0
  89. melon_lua/data/item_templates/897581376.json +144 -0
  90. melon_lua/data/melon_objects.json +15446 -0
  91. melon_lua/data/object_physics.json +16273 -0
  92. melon_lua/data/object_physics_by_id.json +34900 -0
  93. melon_lua/data/sprites_by_object_id.json +2747 -0
  94. melon_lua/data/sprites_pack/images/0000_obj_plastic.png +0 -0
  95. melon_lua/data/sprites_pack/images/0001_Propeller.png +0 -0
  96. melon_lua/data/sprites_pack/images/0001_Propeller_plastic.png +0 -0
  97. melon_lua/data/sprites_pack/images/0002_Apple.png +0 -0
  98. melon_lua/data/sprites_pack/images/0003_Armchair.png +0 -0
  99. melon_lua/data/sprites_pack/images/0003_Armchair_plastic.png +0 -0
  100. melon_lua/data/sprites_pack/images/0004_Armor.png +0 -0
  101. melon_lua/data/sprites_pack/images/0004_Armor_atlas.png +0 -0
  102. melon_lua/data/sprites_pack/images/0005_Arrow_atlas.png +0 -0
  103. melon_lua/data/sprites_pack/images/0006_ArrowH_atlas.png +0 -0
  104. melon_lua/data/sprites_pack/images/0007_AutoPistol.png +0 -0
  105. melon_lua/data/sprites_pack/images/0007_AutoPistol_plastic.png +0 -0
  106. melon_lua/data/sprites_pack/images/0008_AutoRifle.png +0 -0
  107. melon_lua/data/sprites_pack/images/0008_AutoRifle_plastic.png +0 -0
  108. melon_lua/data/sprites_pack/images/0009_Ax.png +0 -0
  109. melon_lua/data/sprites_pack/images/0009_Ax_plastic.png +0 -0
  110. melon_lua/data/sprites_pack/images/0010_Wing.png +0 -0
  111. melon_lua/data/sprites_pack/images/0011_AxeHammer.png +0 -0
  112. melon_lua/data/sprites_pack/images/0011_AxeHammer_plastic.png +0 -0
  113. melon_lua/data/sprites_pack/images/0012_AxeHev.png +0 -0
  114. melon_lua/data/sprites_pack/images/0012_AxeHev_plastic.png +0 -0
  115. melon_lua/data/sprites_pack/images/0013_Ranger.png +0 -0
  116. melon_lua/data/sprites_pack/images/0013_Ranger_plastic.png +0 -0
  117. melon_lua/data/sprites_pack/images/0014_Balk.png +0 -0
  118. melon_lua/data/sprites_pack/images/0014_Balk_atlas.png +0 -0
  119. melon_lua/data/sprites_pack/images/0015_BalkShort.png +0 -0
  120. melon_lua/data/sprites_pack/images/0015_BalkShort_plastic.png +0 -0
  121. melon_lua/data/sprites_pack/images/0016_Balloon_plastic.png +0 -0
  122. melon_lua/data/sprites_pack/images/0017_Bandage.png +0 -0
  123. melon_lua/data/sprites_pack/images/0017_Bandage_plastic.png +0 -0
  124. melon_lua/data/sprites_pack/images/0018_Bat.png +0 -0
  125. melon_lua/data/sprites_pack/images/0018_Bat_atlas.png +0 -0
  126. melon_lua/data/sprites_pack/images/0019_Beard.png +0 -0
  127. melon_lua/data/sprites_pack/images/0019_Beard_plastic.png +0 -0
  128. melon_lua/data/sprites_pack/images/0020_Boots.png +0 -0
  129. melon_lua/data/sprites_pack/images/0020_Boots_plastic.png +0 -0
  130. melon_lua/data/sprites_pack/images/0021_Bottle.png +0 -0
  131. melon_lua/data/sprites_pack/images/0021_Bottle_atlas.png +0 -0
  132. melon_lua/data/sprites_pack/images/0022_Bowl.png +0 -0
  133. melon_lua/data/sprites_pack/images/0022_Bowl_plastic.png +0 -0
  134. melon_lua/data/sprites_pack/images/0023_Box.png +0 -0
  135. melon_lua/data/sprites_pack/images/0024_Brick.png +0 -0
  136. melon_lua/data/sprites_pack/images/0024_Brick_plastic.png +0 -0
  137. melon_lua/data/sprites_pack/images/0025_BrickWall.png +0 -0
  138. melon_lua/data/sprites_pack/images/0025_BrickWall_plastic.png +0 -0
  139. melon_lua/data/sprites_pack/images/0026_NuclearBomb.png +0 -0
  140. melon_lua/data/sprites_pack/images/0026_NuclearBomb_plastic.png +0 -0
  141. melon_lua/data/sprites_pack/images/0027_Bulgeon.png +0 -0
  142. melon_lua/data/sprites_pack/images/0027_Bulgeon_plastic.png +0 -0
  143. melon_lua/data/sprites_pack/images/0028_BulletproofVestHeavy.png +0 -0
  144. melon_lua/data/sprites_pack/images/0028_BulletproofVestHeavy_plastic.png +0 -0
  145. melon_lua/data/sprites_pack/images/0029_BulletproofVestLight.png +0 -0
  146. melon_lua/data/sprites_pack/images/0029_BulletproofVestLight_plastic.png +0 -0
  147. melon_lua/data/sprites_pack/images/0030_BulletproofVestMedium.png +0 -0
  148. melon_lua/data/sprites_pack/images/0030_BulletproofVestMedium_plastic.png +0 -0
  149. melon_lua/data/sprites_pack/images/0031_Business suit.png +0 -0
  150. melon_lua/data/sprites_pack/images/0031_Business suit_plastic.png +0 -0
  151. melon_lua/data/sprites_pack/images/0032_C4.png +0 -0
  152. melon_lua/data/sprites_pack/images/0032_C4_plastic.png +0 -0
  153. melon_lua/data/sprites_pack/images/0033_Lever.png +0 -0
  154. melon_lua/data/sprites_pack/images/0033_Lever_atlas.png +0 -0
  155. melon_lua/data/sprites_pack/images/0034_Cap.png +0 -0
  156. melon_lua/data/sprites_pack/images/0034_Cap_plastic.png +0 -0
  157. melon_lua/data/sprites_pack/images/0035_Chair.png +0 -0
  158. melon_lua/data/sprites_pack/images/0035_Chair_plastic.png +0 -0
  159. melon_lua/data/sprites_pack/images/0036_Christmas hat.png +0 -0
  160. melon_lua/data/sprites_pack/images/0036_Christmas hat_atlas.png +0 -0
  161. melon_lua/data/sprites_pack/images/0037_Club.png +0 -0
  162. melon_lua/data/sprites_pack/images/0037_Club_plastic.png +0 -0
  163. melon_lua/data/sprites_pack/images/0038_Corn.png +0 -0
  164. melon_lua/data/sprites_pack/images/0039_Crossbow.png +0 -0
  165. melon_lua/data/sprites_pack/images/0039_Crossbow_atlas.png +0 -0
  166. melon_lua/data/sprites_pack/images/0040_Cup.png +0 -0
  167. melon_lua/data/sprites_pack/images/0040_Cup_plastic.png +0 -0
  168. melon_lua/data/sprites_pack/images/0041_DirectBomb.png +0 -0
  169. melon_lua/data/sprites_pack/images/0041_DirectBomb_plastic.png +0 -0
  170. melon_lua/data/sprites_pack/images/0042_Desintegrator.png +0 -0
  171. melon_lua/data/sprites_pack/images/0042_Desintegrator_plastic.png +0 -0
  172. melon_lua/data/sprites_pack/images/0043_Dress.png +0 -0
  173. melon_lua/data/sprites_pack/images/0043_Dress_plastic.png +0 -0
  174. melon_lua/data/sprites_pack/images/0044_Revolver.png +0 -0
  175. melon_lua/data/sprites_pack/images/0044_Revolver_plastic.png +0 -0
  176. melon_lua/data/sprites_pack/images/0045_CircularSaw.png +0 -0
  177. melon_lua/data/sprites_pack/images/0045_CircularSaw_atlas.png +0 -0
  178. melon_lua/data/sprites_pack/images/0046_Extinguisher.png +0 -0
  179. melon_lua/data/sprites_pack/images/0046_Extinguisher_plastic.png +0 -0
  180. melon_lua/data/sprites_pack/images/0047_FlameThrower.png +0 -0
  181. melon_lua/data/sprites_pack/images/0047_FlameThrower_plastic.png +0 -0
  182. melon_lua/data/sprites_pack/images/0048_FlashGranade.png +0 -0
  183. melon_lua/data/sprites_pack/images/0048_FlashGranade_plastic.png +0 -0
  184. melon_lua/data/sprites_pack/images/0049_FragGranade.png +0 -0
  185. melon_lua/data/sprites_pack/images/0049_FragGranade_plastic.png +0 -0
  186. melon_lua/data/sprites_pack/images/0050_Glass.png +0 -0
  187. melon_lua/data/sprites_pack/images/0050_Glass_plastic.png +0 -0
  188. melon_lua/data/sprites_pack/images/0051_RocketLauncher.png +0 -0
  189. melon_lua/data/sprites_pack/images/0051_RocketLauncher_plastic.png +0 -0
  190. melon_lua/data/sprites_pack/images/0052_GranadeLauncher.png +0 -0
  191. melon_lua/data/sprites_pack/images/0052_GranadeLauncher_plastic.png +0 -0
  192. melon_lua/data/sprites_pack/images/0053_ButtonF.png +0 -0
  193. melon_lua/data/sprites_pack/images/0053_ButtonF_atlas.png +0 -0
  194. melon_lua/data/sprites_pack/images/0054_HammerHev.png +0 -0
  195. melon_lua/data/sprites_pack/images/0054_HammerHev_plastic.png +0 -0
  196. melon_lua/data/sprites_pack/images/0055_Hard hat.png +0 -0
  197. melon_lua/data/sprites_pack/images/0055_Hard hat_plastic.png +0 -0
  198. melon_lua/data/sprites_pack/images/0056_Hat.png +0 -0
  199. melon_lua/data/sprites_pack/images/0056_Hat_plastic.png +0 -0
  200. melon_lua/data/sprites_pack/images/0057_HeartMonitor.png +0 -0
  201. melon_lua/data/sprites_pack/images/0058_Helmet Medieval 1.png +0 -0
  202. melon_lua/data/sprites_pack/images/0058_Helmet Medieval 1_plastic.png +0 -0
  203. melon_lua/data/sprites_pack/images/0059_Helmet Medieval 2.png +0 -0
  204. melon_lua/data/sprites_pack/images/0059_Helmet Medieval 2_plastic.png +0 -0
  205. melon_lua/data/sprites_pack/images/0060_Helmet Medieval 3.png +0 -0
  206. melon_lua/data/sprites_pack/images/0060_Helmet Medieval 3_plastic.png +0 -0
  207. melon_lua/data/sprites_pack/images/0061_Helmet.png +0 -0
  208. melon_lua/data/sprites_pack/images/0061_Helmet_plastic.png +0 -0
  209. melon_lua/data/sprites_pack/images/0062_Human.png +0 -0
  210. melon_lua/data/sprites_pack/images/0062_Human_atlas.png +0 -0
  211. melon_lua/data/sprites_pack/images/0063_HumanA.png +0 -0
  212. melon_lua/data/sprites_pack/images/0064_HumanC.png +0 -0
  213. melon_lua/data/sprites_pack/images/0064_HumanC_atlas.png +0 -0
  214. melon_lua/data/sprites_pack/images/0065_PulseGun.png +0 -0
  215. melon_lua/data/sprites_pack/images/0065_PulseGun_plastic.png +0 -0
  216. melon_lua/data/sprites_pack/images/0066_HumanP.png +0 -0
  217. melon_lua/data/sprites_pack/images/0066_HumanP_atlas.png +0 -0
  218. melon_lua/data/sprites_pack/images/0067_Impact Grenade_plastic.png +0 -0
  219. melon_lua/data/sprites_pack/images/0068_Jeans.png +0 -0
  220. melon_lua/data/sprites_pack/images/0068_Jeans_plastic.png +0 -0
  221. melon_lua/data/sprites_pack/images/0069_Knife.png +0 -0
  222. melon_lua/data/sprites_pack/images/0070_LandMineMini.png +0 -0
  223. melon_lua/data/sprites_pack/images/0070_LandMineMini_plastic.png +0 -0
  224. melon_lua/data/sprites_pack/images/0071_Mace_plastic.png +0 -0
  225. melon_lua/data/sprites_pack/images/0072_Machete.png +0 -0
  226. melon_lua/data/sprites_pack/images/0072_Machete_plastic.png +0 -0
  227. melon_lua/data/sprites_pack/images/0073_MedicalHat.png +0 -0
  228. melon_lua/data/sprites_pack/images/0073_MedicalHat_plastic.png +0 -0
  229. melon_lua/data/sprites_pack/images/0074_Melon.png +0 -0
  230. melon_lua/data/sprites_pack/images/0075_MelonGibs_plastic.png +0 -0
  231. melon_lua/data/sprites_pack/images/0076_MetalRod.png +0 -0
  232. melon_lua/data/sprites_pack/images/0076_MetalRod_plastic.png +0 -0
  233. melon_lua/data/sprites_pack/images/0077_MilitaryHelmet.png +0 -0
  234. melon_lua/data/sprites_pack/images/0077_MilitaryHelmet_plastic.png +0 -0
  235. melon_lua/data/sprites_pack/images/0078_MilitaryHelmetMedical.png +0 -0
  236. melon_lua/data/sprites_pack/images/0078_MilitaryHelmetMedical_plastic.png +0 -0
  237. melon_lua/data/sprites_pack/images/0079_Minigun.png +0 -0
  238. melon_lua/data/sprites_pack/images/0079_Minigun_plastic.png +0 -0
  239. melon_lua/data/sprites_pack/images/0080_Molotov.png +0 -0
  240. melon_lua/data/sprites_pack/images/0080_Molotov_plastic.png +0 -0
  241. melon_lua/data/sprites_pack/images/0081_Melon cooler.png +0 -0
  242. melon_lua/data/sprites_pack/images/0081_Melon cooler_atlas.png +0 -0
  243. melon_lua/data/sprites_pack/images/0082_Mask_atlas.png +0 -0
  244. melon_lua/data/sprites_pack/images/0083_MPM.png +0 -0
  245. melon_lua/data/sprites_pack/images/0083_MPM_plastic.png +0 -0
  246. melon_lua/data/sprites_pack/images/0084_Pads.png +0 -0
  247. melon_lua/data/sprites_pack/images/0084_Pads_atlas.png +0 -0
  248. melon_lua/data/sprites_pack/images/0085_Pickaxe.png +0 -0
  249. melon_lua/data/sprites_pack/images/0085_Pickaxe_plastic.png +0 -0
  250. melon_lua/data/sprites_pack/images/0086_Pistol.png +0 -0
  251. melon_lua/data/sprites_pack/images/0086_Pistol_plastic.png +0 -0
  252. melon_lua/data/sprites_pack/images/0087_Plate.png +0 -0
  253. melon_lua/data/sprites_pack/images/0087_Plate_plastic.png +0 -0
  254. melon_lua/data/sprites_pack/images/0088_Present.png +0 -0
  255. melon_lua/data/sprites_pack/images/0089_ProtoGun.png +0 -0
  256. melon_lua/data/sprites_pack/images/0089_ProtoGun_plastic.png +0 -0
  257. melon_lua/data/sprites_pack/images/0090_Pumpkin.png +0 -0
  258. melon_lua/data/sprites_pack/images/0091_PumpkinGibs_atlas.png +0 -0
  259. melon_lua/data/sprites_pack/images/0092_PushGranade.png +0 -0
  260. melon_lua/data/sprites_pack/images/0092_PushGranade_plastic.png +0 -0
  261. melon_lua/data/sprites_pack/images/0093_Railgun.png +0 -0
  262. melon_lua/data/sprites_pack/images/0093_Railgun_plastic.png +0 -0
  263. melon_lua/data/sprites_pack/images/0094_Ring.png +0 -0
  264. melon_lua/data/sprites_pack/images/0095_SawedOff.png +0 -0
  265. melon_lua/data/sprites_pack/images/0095_SawedOff_plastic.png +0 -0
  266. melon_lua/data/sprites_pack/images/0096_Sunglasses_plastic.png +0 -0
  267. melon_lua/data/sprites_pack/images/0097_Shoes.png +0 -0
  268. melon_lua/data/sprites_pack/images/0097_Shoes_atlas.png +0 -0
  269. melon_lua/data/sprites_pack/images/0098_Sniper.png +0 -0
  270. melon_lua/data/sprites_pack/images/0098_Sniper_plastic.png +0 -0
  271. melon_lua/data/sprites_pack/images/0099_SnowMan_plastic.png +0 -0
  272. melon_lua/data/sprites_pack/images/0100_Spas.png +0 -0
  273. melon_lua/data/sprites_pack/images/0100_Spas_atlas.png +0 -0
  274. melon_lua/data/sprites_pack/images/0101_Spear.png +0 -0
  275. melon_lua/data/sprites_pack/images/0101_Spear_atlas.png +0 -0
  276. melon_lua/data/sprites_pack/images/0102_Splint.png +0 -0
  277. melon_lua/data/sprites_pack/images/0102_Splint_plastic.png +0 -0
  278. melon_lua/data/sprites_pack/images/0103_FreezeStaff.png +0 -0
  279. melon_lua/data/sprites_pack/images/0103_FreezeStaff_plastic.png +0 -0
  280. melon_lua/data/sprites_pack/images/0104_StickyBomb.png +0 -0
  281. melon_lua/data/sprites_pack/images/0104_StickyBomb_plastic.png +0 -0
  282. melon_lua/data/sprites_pack/images/0105_Sword.png +0 -0
  283. melon_lua/data/sprites_pack/images/0105_Sword_plastic.png +0 -0
  284. melon_lua/data/sprites_pack/images/0106_SyringeAcid.png +0 -0
  285. melon_lua/data/sprites_pack/images/0106_SyringeAcid_plastic.png +0 -0
  286. melon_lua/data/sprites_pack/images/0107_SyringeFireproof.png +0 -0
  287. melon_lua/data/sprites_pack/images/0107_SyringeFireproof_plastic.png +0 -0
  288. melon_lua/data/sprites_pack/images/0108_SyringeHeal.png +0 -0
  289. melon_lua/data/sprites_pack/images/0108_SyringeHeal_plastic.png +0 -0
  290. melon_lua/data/sprites_pack/images/0109_SyringeImmortal.png +0 -0
  291. melon_lua/data/sprites_pack/images/0109_SyringeImmortal_plastic.png +0 -0
  292. melon_lua/data/sprites_pack/images/0110_SyringeRegen.png +0 -0
  293. melon_lua/data/sprites_pack/images/0110_SyringeRegen_plastic.png +0 -0
  294. melon_lua/data/sprites_pack/images/0111_SyringeVirus.png +0 -0
  295. melon_lua/data/sprites_pack/images/0111_SyringeVirus_plastic.png +0 -0
  296. melon_lua/data/sprites_pack/images/0112_SyringeWater.png +0 -0
  297. melon_lua/data/sprites_pack/images/0112_SyringeWater_plastic.png +0 -0
  298. melon_lua/data/sprites_pack/images/0113_T-shirt.png +0 -0
  299. melon_lua/data/sprites_pack/images/0113_T-shirt_plastic.png +0 -0
  300. melon_lua/data/sprites_pack/images/0114_Table.png +0 -0
  301. melon_lua/data/sprites_pack/images/0114_Table_plastic.png +0 -0
  302. melon_lua/data/sprites_pack/images/0115_Tea box.png +0 -0
  303. melon_lua/data/sprites_pack/images/0115_Tea box_plastic.png +0 -0
  304. melon_lua/data/sprites_pack/images/0116_Tokarev.png +0 -0
  305. melon_lua/data/sprites_pack/images/0116_Tokarev_plastic.png +0 -0
  306. melon_lua/data/sprites_pack/images/0117_TrapMain.png +0 -0
  307. melon_lua/data/sprites_pack/images/0117_TrapMain_plastic.png +0 -0
  308. melon_lua/data/sprites_pack/images/0118_Trousers.png +0 -0
  309. melon_lua/data/sprites_pack/images/0118_Trousers_plastic.png +0 -0
  310. melon_lua/data/sprites_pack/images/0119_Watergun.png +0 -0
  311. melon_lua/data/sprites_pack/images/0119_Watergun_atlas.png +0 -0
  312. melon_lua/data/sprites_pack/images/0120_Weight.png +0 -0
  313. melon_lua/data/sprites_pack/images/0121_Wheel.png +0 -0
  314. melon_lua/data/sprites_pack/images/0121_Wheel_plastic.png +0 -0
  315. melon_lua/data/sprites_pack/images/0122_Wooden lath.png +0 -0
  316. melon_lua/data/sprites_pack/images/0122_Wooden lath_plastic.png +0 -0
  317. melon_lua/data/sprites_pack/images/0123_WoodenBarel.png +0 -0
  318. melon_lua/data/sprites_pack/images/0123_WoodenBarel_plastic.png +0 -0
  319. melon_lua/data/sprites_pack/images/0124_Sunglasses_plastic.png +0 -0
  320. melon_lua/data/sprites_pack/images/0125_WoodenStick.png +0 -0
  321. melon_lua/data/sprites_pack/images/0125_WoodenStick_plastic.png +0 -0
  322. melon_lua/data/sprites_pack/images/0126_Camouflage pants.png +0 -0
  323. melon_lua/data/sprites_pack/images/0126_Camouflage pants_plastic.png +0 -0
  324. melon_lua/data/sprites_pack/images/0127_Camouflage suit.png +0 -0
  325. melon_lua/data/sprites_pack/images/0127_Camouflage suit_plastic.png +0 -0
  326. melon_lua/data/sprites_pack/images/0128_Construction vest.png +0 -0
  327. melon_lua/data/sprites_pack/images/0128_Construction vest_plastic.png +0 -0
  328. melon_lua/data/sprites_pack/images/0129_Teapot.png +0 -0
  329. melon_lua/data/sprites_pack/images/0129_Teapot_plastic.png +0 -0
  330. melon_lua/data/sprites_pack/images/0130_Gyroscope.png +0 -0
  331. melon_lua/data/sprites_pack/images/0130_Gyroscope_plastic.png +0 -0
  332. melon_lua/data/sprites_pack/images/0131_ElectroMotor.png +0 -0
  333. melon_lua/data/sprites_pack/images/0131_ElectroMotor_plastic.png +0 -0
  334. melon_lua/data/sprites_pack/images/0132_Thruster.png +0 -0
  335. melon_lua/data/sprites_pack/images/0132_Thruster_plastic.png +0 -0
  336. melon_lua/data/sprites_pack/images/0133_Piston.png +0 -0
  337. melon_lua/data/sprites_pack/images/0133_Piston_plastic.png +0 -0
  338. melon_lua/data/sprites_pack/images/0134_Button.png +0 -0
  339. melon_lua/data/sprites_pack/images/0134_Button_atlas.png +0 -0
  340. melon_lua/data/sprites_pack/images/0135_CupThrower.png +0 -0
  341. melon_lua/data/sprites_pack/images/0135_CupThrower_plastic.png +0 -0
  342. melon_lua/data/sprites_pack/images/0136_Turret.png +0 -0
  343. melon_lua/data/sprites_pack/images/0136_Turret_plastic.png +0 -0
  344. melon_lua/data/sprites_pack/images/0137_ResizableCamoGreen.png +0 -0
  345. melon_lua/data/sprites_pack/images/0137_ResizableCamoGreen_plastic.png +0 -0
  346. melon_lua/data/sprites_pack/images/0138_ResizableCamoGrey.png +0 -0
  347. melon_lua/data/sprites_pack/images/0138_ResizableCamoGrey_plastic.png +0 -0
  348. melon_lua/data/sprites_pack/images/0139_ResizableCamoYellow.png +0 -0
  349. melon_lua/data/sprites_pack/images/0139_ResizableCamoYellow_plastic.png +0 -0
  350. melon_lua/data/sprites_pack/images/0140_ResizableMetal.png +0 -0
  351. melon_lua/data/sprites_pack/images/0140_ResizableMetal_plastic.png +0 -0
  352. melon_lua/data/sprites_pack/images/0141_ResizableWood.png +0 -0
  353. melon_lua/data/sprites_pack/images/0141_ResizableWood_plastic.png +0 -0
  354. melon_lua/data/sprites_pack/images/0142_ToolGun.png +0 -0
  355. melon_lua/data/sprites_pack/images/0142_ToolGun_plastic.png +0 -0
  356. melon_lua/data/sprites_pack/images/0143_Sunglasses.png +0 -0
  357. melon_lua/data/sprites_pack/images/0143_Sunglasses_plastic.png +0 -0
  358. melon_lua/data/sprites_pack/images/0144_Mask.png +0 -0
  359. melon_lua/data/sprites_pack/images/0144_Mask_atlas.png +0 -0
  360. melon_lua/data/sprites_pack/images/0145_Toy1_plastic.png +0 -0
  361. melon_lua/data/sprites_pack/images/0146_Toy2_plastic.png +0 -0
  362. melon_lua/data/sprites_pack/images/0147_Toy3_plastic.png +0 -0
  363. melon_lua/data/sprites_pack/images/0148_Toy4_plastic.png +0 -0
  364. melon_lua/data/sprites_pack/images/0149_Toy5_plastic.png +0 -0
  365. melon_lua/data/sprites_pack/images/0150_Toy6_plastic.png +0 -0
  366. melon_lua/data/sprites_pack/images/0151_Toy7_plastic.png +0 -0
  367. melon_lua/data/sprites_pack/images/0152_Toy8_plastic.png +0 -0
  368. melon_lua/data/sprites_pack/images/0153_Parachute.png +0 -0
  369. melon_lua/data/sprites_pack/images/0153_Parachute_plastic.png +0 -0
  370. melon_lua/data/sprites_pack/images/0154_LimbConnector.png +0 -0
  371. melon_lua/data/sprites_pack/images/0154_LimbConnector_plastic.png +0 -0
  372. melon_lua/data/sprites_pack/images/0155_ResizableCamoSand.png +0 -0
  373. melon_lua/data/sprites_pack/images/0155_ResizableCamoSand_plastic.png +0 -0
  374. melon_lua/data/sprites_pack/images/0156_SpaceSuit.png +0 -0
  375. melon_lua/data/sprites_pack/images/0156_SpaceSuit_plastic.png +0 -0
  376. melon_lua/data/sprites_pack/images/0157_SpaceHelmet.png +0 -0
  377. melon_lua/data/sprites_pack/images/0157_SpaceHelmet_plastic.png +0 -0
  378. melon_lua/data/sprites_pack/images/0158_Cactus.png +0 -0
  379. melon_lua/data/sprites_pack/images/0159_Jeep.png +0 -0
  380. melon_lua/data/sprites_pack/images/0159_Jeep_plastic.png +0 -0
  381. melon_lua/data/sprites_pack/images/0160_SportsShorts.png +0 -0
  382. melon_lua/data/sprites_pack/images/0160_SportsShorts_plastic.png +0 -0
  383. melon_lua/data/sprites_pack/images/0161_BasketballBall.png +0 -0
  384. melon_lua/data/sprites_pack/images/0161_BasketballBall_plastic.png +0 -0
  385. melon_lua/data/sprites_pack/images/0162_BasketballHoop.png +0 -0
  386. melon_lua/data/sprites_pack/images/0162_BasketballHoop_plastic.png +0 -0
  387. melon_lua/data/sprites_pack/images/0163_FootballBall.png +0 -0
  388. melon_lua/data/sprites_pack/images/0163_FootballBall_plastic.png +0 -0
  389. melon_lua/data/sprites_pack/images/0164_FootballGoal.png +0 -0
  390. melon_lua/data/sprites_pack/images/0164_FootballGoal_plastic.png +0 -0
  391. melon_lua/data/sprites_pack/images/0165_TennisBall.png +0 -0
  392. melon_lua/data/sprites_pack/images/0165_TennisBall_plastic.png +0 -0
  393. melon_lua/data/sprites_pack/images/0166_TennisRacket.png +0 -0
  394. melon_lua/data/sprites_pack/images/0166_TennisRacket_plastic.png +0 -0
  395. melon_lua/data/sprites_pack/images/0167_HumanRobot_plastic.png +0 -0
  396. melon_lua/data/sprites_pack/images/0168_AxeHev_B.png +0 -0
  397. melon_lua/data/sprites_pack/images/0168_AxeHev_B_plastic.png +0 -0
  398. melon_lua/data/sprites_pack/images/0169_Pistol_B.png +0 -0
  399. melon_lua/data/sprites_pack/images/0169_Pistol_B_plastic.png +0 -0
  400. melon_lua/data/sprites_pack/images/0170_Revolver_B.png +0 -0
  401. melon_lua/data/sprites_pack/images/0170_Revolver_B_plastic.png +0 -0
  402. melon_lua/data/sprites_pack/images/0171_Sword_B.png +0 -0
  403. melon_lua/data/sprites_pack/images/0171_Sword_B_plastic.png +0 -0
  404. melon_lua/data/sprites_pack/images/0172_BTR_Vehicle.png +0 -0
  405. melon_lua/data/sprites_pack/images/0172_BTR_Vehicle_plastic.png +0 -0
  406. melon_lua/data/sprites_pack/images/0173_LaserGun.png +0 -0
  407. melon_lua/data/sprites_pack/images/0173_LaserGun_plastic.png +0 -0
  408. melon_lua/data/sprites_pack/images/0174_ScooterVehicle.png +0 -0
  409. melon_lua/data/sprites_pack/images/0174_ScooterVehicle_plastic.png +0 -0
  410. melon_lua/data/sprites_pack/images/0175_PaintballGun.png +0 -0
  411. melon_lua/data/sprites_pack/images/0175_PaintballGun_plastic.png +0 -0
  412. melon_lua/data/sprites_pack/images/0176_StreetLight.png +0 -0
  413. melon_lua/data/sprites_pack/images/0176_StreetLight_plastic.png +0 -0
  414. melon_lua/data/sprites_pack/images/0177_FlashLight.png +0 -0
  415. melon_lua/data/sprites_pack/images/0177_FlashLight_plastic.png +0 -0
  416. melon_lua/data/sprites_pack/images/0178_EdisonLamp.png +0 -0
  417. melon_lua/data/sprites_pack/images/0178_EdisonLamp_plastic.png +0 -0
  418. melon_lua/data/sprites_pack/images/0179_CandleLight.png +0 -0
  419. melon_lua/data/sprites_pack/images/0179_CandleLight_atlas.png +0 -0
  420. melon_lua/data/sprites_pack/images/0180_Candlestick.png +0 -0
  421. melon_lua/data/sprites_pack/images/0180_Candlestick_plastic.png +0 -0
  422. melon_lua/data/sprites_pack/images/0181_FestoonLight.png +0 -0
  423. melon_lua/data/sprites_pack/images/0181_FestoonLight_plastic.png +0 -0
  424. melon_lua/data/sprites_pack/images/0182_Firework.png +0 -0
  425. melon_lua/data/sprites_pack/images/0182_Firework_plastic.png +0 -0
  426. melon_lua/data/sprites_pack/images/0183_Cake.png +0 -0
  427. melon_lua/data/sprites_pack/images/0183_Cake_plastic.png +0 -0
  428. melon_lua/data/sprites_pack/images/0184_ContraptionSpawner.png +0 -0
  429. melon_lua/data/sprites_pack/images/0184_ContraptionSpawner_plastic.png +0 -0
  430. melon_lua/data/sprites_pack/images/0185_VacuumCleaner.png +0 -0
  431. melon_lua/data/sprites_pack/images/0185_VacuumCleaner_plastic.png +0 -0
  432. melon_lua/data/sprites_pack/images/0186_HumanCactus.png +0 -0
  433. melon_lua/data/sprites_pack/images/0186_HumanCactus_atlas.png +0 -0
  434. melon_lua/data/sprites_pack/images/0187_HalloweenPumpkin.png +0 -0
  435. melon_lua/data/sprites_pack/images/0187_HalloweenPumpkin_plastic.png +0 -0
  436. melon_lua/data/sprites_pack/images/0188_RabbitHat.png +0 -0
  437. melon_lua/data/sprites_pack/images/0188_RabbitHat_plastic.png +0 -0
  438. melon_lua/data/sprites_pack/images/0189_RabbitCostume.png +0 -0
  439. melon_lua/data/sprites_pack/images/0189_RabbitCostume_plastic.png +0 -0
  440. melon_lua/data/sprites_pack/images/0190_WitchHat.png +0 -0
  441. melon_lua/data/sprites_pack/images/0190_WitchHat_plastic.png +0 -0
  442. melon_lua/data/sprites_pack/images/0191_FairyWings.png +0 -0
  443. melon_lua/data/sprites_pack/images/0191_FairyWings_plastic.png +0 -0
  444. melon_lua/data/sprites_pack/images/0192_Bus.png +0 -0
  445. melon_lua/data/sprites_pack/images/0193_Spruce.png +0 -0
  446. melon_lua/data/sprites_pack/images/0193_Spruce_atlas.png +0 -0
  447. melon_lua/data/sprites_pack/images/0194_KefiaFull.png +0 -0
  448. melon_lua/data/sprites_pack/images/0194_KefiaFull_plastic.png +0 -0
  449. melon_lua/data/sprites_pack/images/0195_KefiaPartial.png +0 -0
  450. melon_lua/data/sprites_pack/images/0195_KefiaPartial_plastic.png +0 -0
  451. melon_lua/data/sprites_pack/images/0196_Shirt.png +0 -0
  452. melon_lua/data/sprites_pack/images/0196_Shirt_plastic.png +0 -0
  453. melon_lua/data/sprites_pack/images/0197_Santa_Costume.png +0 -0
  454. melon_lua/data/sprites_pack/images/0197_Santa_Costume_plastic.png +0 -0
  455. melon_lua/data/sprites_pack/images/0198_ElfHat.png +0 -0
  456. melon_lua/data/sprites_pack/images/0198_ElfHat_plastic.png +0 -0
  457. melon_lua/data/sprites_pack/images/0199_ElfCostume.png +0 -0
  458. melon_lua/data/sprites_pack/images/0199_ElfCostume_plastic.png +0 -0
  459. melon_lua/data/sprites_pack/images/0200_Sweater.png +0 -0
  460. melon_lua/data/sprites_pack/images/0200_Sweater_atlas.png +0 -0
  461. melon_lua/data/sprites_pack/images/0201_ResizableConcrete.png +0 -0
  462. melon_lua/data/sprites_pack/images/0201_ResizableConcrete_plastic.png +0 -0
  463. melon_lua/data/sprites_pack/images/0202_ResizablePlastic.png +0 -0
  464. melon_lua/data/sprites_pack/images/0202_ResizablePlastic_plastic.png +0 -0
  465. melon_lua/data/sprites_pack/images/0202_plastic_fallback.png +0 -0
  466. melon_lua/data/sprites_pack/images/0203_RedCoat.png +0 -0
  467. melon_lua/data/sprites_pack/images/0203_RedCoat_plastic.png +0 -0
  468. melon_lua/data/sprites_pack/images/0204_FurCoat.png +0 -0
  469. melon_lua/data/sprites_pack/images/0204_FurCoat_plastic.png +0 -0
  470. melon_lua/data/sprites_pack/images/0205_ResizableBrick.png +0 -0
  471. melon_lua/data/sprites_pack/images/0205_ResizableBrick_plastic.png +0 -0
  472. melon_lua/data/sprites_pack/images/0206_WinterJacket.png +0 -0
  473. melon_lua/data/sprites_pack/images/0206_WinterJacket_plastic.png +0 -0
  474. melon_lua/data/sprites_pack/images/0207_WinterCoat.png +0 -0
  475. melon_lua/data/sprites_pack/images/0207_WinterCoat_plastic.png +0 -0
  476. melon_lua/data/sprites_pack/images/0208_WinterSocks.png +0 -0
  477. melon_lua/data/sprites_pack/images/0208_WinterSocks_plastic.png +0 -0
  478. melon_lua/data/sprites_pack/images/0209_WarmPants.png +0 -0
  479. melon_lua/data/sprites_pack/images/0209_WarmPants_plastic.png +0 -0
  480. melon_lua/data/sprites_pack/images/0210_PompomHat.png +0 -0
  481. melon_lua/data/sprites_pack/images/0210_PompomHat_plastic.png +0 -0
  482. melon_lua/data/sprites_pack/images/0211_WinterBoots.png +0 -0
  483. melon_lua/data/sprites_pack/images/0211_WinterBoots_plastic.png +0 -0
  484. melon_lua/data/sprites_pack/images/0212_PilotHat.png +0 -0
  485. melon_lua/data/sprites_pack/images/0212_PilotHat_plastic.png +0 -0
  486. melon_lua/data/sprites_pack/images/0213_Truck.png +0 -0
  487. melon_lua/data/sprites_pack/images/0213_Truck_plastic.png +0 -0
  488. melon_lua/data/sprites_pack/images/0214_HumanTomato.png +0 -0
  489. melon_lua/data/sprites_pack/images/0214_HumanTomato_plastic.png +0 -0
  490. melon_lua/data/sprites_pack/images/0215_Thing_plastic.png +0 -0
  491. melon_lua/data/sprites_pack/images/0216_AppleTree.png +0 -0
  492. melon_lua/data/sprites_pack/images/0216_AppleTree_plastic.png +0 -0
  493. melon_lua/data/sprites_pack/images/0217_Tree.png +0 -0
  494. melon_lua/data/sprites_pack/images/0218_Bush.png +0 -0
  495. melon_lua/data/sprites_pack/images/0218_Bush_plastic.png +0 -0
  496. melon_lua/data/sprites_pack/images/0219_Palm.png +0 -0
  497. melon_lua/data/sprites_pack/images/0219_Palm_plastic.png +0 -0
  498. melon_lua/data/sprites_pack/images/0220_SpruceBig.png +0 -0
  499. melon_lua/data/sprites_pack/images/0220_SpruceBig_plastic.png +0 -0
  500. melon_lua/data/sprites_pack/images/0221_FireStaff.png +0 -0
  501. melon_lua/data/sprites_pack/images/0221_FireStaff_plastic.png +0 -0
  502. melon_lua/data/sprites_pack/images/0222_TriplexGlass.png +0 -0
  503. melon_lua/data/sprites_pack/images/0222_TriplexGlass_plastic.png +0 -0
  504. melon_lua/data/sprites_pack/images/0223_ResizableGothicBrick.png +0 -0
  505. melon_lua/data/sprites_pack/images/0223_ResizableGothicBrick_plastic.png +0 -0
  506. melon_lua/data/sprites_pack/images/0224_LogSide.png +0 -0
  507. melon_lua/data/sprites_pack/images/0224_LogSide_plastic.png +0 -0
  508. melon_lua/data/sprites_pack/images/0225_LogFront.png +0 -0
  509. melon_lua/data/sprites_pack/images/0225_LogFront_plastic.png +0 -0
  510. melon_lua/data/sprites_pack/images/0226_Cobblestone.png +0 -0
  511. melon_lua/data/sprites_pack/images/0226_Cobblestone_plastic.png +0 -0
  512. melon_lua/data/sprites_pack/images/0227_FuelBarrel1.png +0 -0
  513. melon_lua/data/sprites_pack/images/0227_FuelBarrel1_plastic.png +0 -0
  514. melon_lua/data/sprites_pack/images/0228_FuelBarrel2.png +0 -0
  515. melon_lua/data/sprites_pack/images/0228_FuelBarrel2_plastic.png +0 -0
  516. melon_lua/data/sprites_pack/images/0229_Generator.png +0 -0
  517. melon_lua/data/sprites_pack/images/0229_Generator_plastic.png +0 -0
  518. melon_lua/data/sprites_pack/images/0230_Adapter.png +0 -0
  519. melon_lua/data/sprites_pack/images/0230_Adapter_plastic.png +0 -0
  520. melon_lua/data/sprites_pack/images/0231_SyringeElectricityProtection.png +0 -0
  521. melon_lua/data/sprites_pack/images/0231_SyringeElectricityProtection_plastic.png +0 -0
  522. melon_lua/data/sprites_pack/images/0232_DuckNeon.png +0 -0
  523. melon_lua/data/sprites_pack/images/0232_DuckNeon_plastic.png +0 -0
  524. melon_lua/data/sprites_pack/images/0233_GlowLabel.png +0 -0
  525. melon_lua/data/sprites_pack/images/0233_GlowLabel_plastic.png +0 -0
  526. melon_lua/data/sprites_pack/images/0234_MelonNeon.png +0 -0
  527. melon_lua/data/sprites_pack/images/0234_MelonNeon_atlas.png +0 -0
  528. melon_lua/data/sprites_pack/images/0235_WatermelonNeon.png +0 -0
  529. melon_lua/data/sprites_pack/images/0235_WatermelonNeon_plastic.png +0 -0
  530. melon_lua/data/sprites_pack/images/0236_SyringeEmbalming.png +0 -0
  531. melon_lua/data/sprites_pack/images/0236_SyringeEmbalming_plastic.png +0 -0
  532. melon_lua/data/sprites_pack/images/0237_SyringeDamageResist.png +0 -0
  533. melon_lua/data/sprites_pack/images/0237_SyringeDamageResist_plastic.png +0 -0
  534. melon_lua/data/sprites_pack/images/0238_FreezeGrenade.png +0 -0
  535. melon_lua/data/sprites_pack/images/0238_FreezeGrenade_plastic.png +0 -0
  536. melon_lua/data/sprites_pack/images/0239_SyringeJointDiluent.png +0 -0
  537. melon_lua/data/sprites_pack/images/0239_SyringeJointDiluent_plastic.png +0 -0
  538. melon_lua/data/sprites_pack/images/0240_DarkStaff.png +0 -0
  539. melon_lua/data/sprites_pack/images/0240_DarkStaff_plastic.png +0 -0
  540. melon_lua/data/sprites_pack/images/0241_SmokeGrenade.png +0 -0
  541. melon_lua/data/sprites_pack/images/0241_SmokeGrenade_plastic.png +0 -0
  542. melon_lua/data/sprites_pack/images/0242_GasGrenade.png +0 -0
  543. melon_lua/data/sprites_pack/images/0242_GasGrenade_plastic.png +0 -0
  544. melon_lua/data/sprites_pack/images/0243_FragmentionGrenade.png +0 -0
  545. melon_lua/data/sprites_pack/images/0243_FragmentionGrenade_plastic.png +0 -0
  546. melon_lua/data/sprites_pack/images/0244_HumanDragonFruit_plastic.png +0 -0
  547. melon_lua/data/sprites_pack/images/0245_HumanDragonFruitNew.png +0 -0
  548. melon_lua/data/sprites_pack/images/0245_HumanDragonFruitNew_plastic.png +0 -0
  549. melon_lua/data/sprites_pack/images/0246_Door.png +0 -0
  550. melon_lua/data/sprites_pack/images/0246_Door_plastic.png +0 -0
  551. melon_lua/data/sprites_pack/images/0247_Grabber.png +0 -0
  552. melon_lua/data/sprites_pack/images/0247_Grabber_plastic.png +0 -0
  553. melon_lua/data/sprites_pack/images/0248_VPchip.png +0 -0
  554. melon_lua/data/sprites_pack/images/0248_VPchip_plastic.png +0 -0
  555. melon_lua/data/sprites_pack/images/0249_VPchipTutorial1.png +0 -0
  556. melon_lua/data/sprites_pack/images/0249_VPchipTutorial1_plastic.png +0 -0
  557. melon_lua/data/sprites_pack/images/0250_VPchipTutorial2.png +0 -0
  558. melon_lua/data/sprites_pack/images/0250_VPchipTutorial2_plastic.png +0 -0
  559. melon_lua/data/sprites_pack/images/0251_VPchipTutorial3.png +0 -0
  560. melon_lua/data/sprites_pack/images/0251_VPchipTutorial3_plastic.png +0 -0
  561. melon_lua/data/sprites_pack/images/0252_Trigger.png +0 -0
  562. melon_lua/data/sprites_pack/images/0252_Trigger_plastic.png +0 -0
  563. melon_lua/data/sprites_pack/images/0253_Timer.png +0 -0
  564. melon_lua/data/sprites_pack/images/0253_Timer_atlas.png +0 -0
  565. melon_lua/data/sprites_pack/images/0254_ContextActivator.png +0 -0
  566. melon_lua/data/sprites_pack/images/0254_ContextActivator_plastic.png +0 -0
  567. melon_lua/data/sprites_pack/images/0255_ElectricBaton.png +0 -0
  568. melon_lua/data/sprites_pack/images/0255_ElectricBaton_plastic.png +0 -0
  569. melon_lua/data/sprites_pack/images/0256_CameraDevice.png +0 -0
  570. melon_lua/data/sprites_pack/images/0256_CameraDevice_atlas.png +0 -0
  571. melon_lua/data/sprites_pack/images/0257_ScreenDevice.png +0 -0
  572. melon_lua/data/sprites_pack/images/0257_ScreenDevice_plastic.png +0 -0
  573. melon_lua/data/sprites_pack/images/0258_Radio.png +0 -0
  574. melon_lua/data/sprites_pack/images/0259_StunGun.png +0 -0
  575. melon_lua/data/sprites_pack/images/0259_StunGun_plastic.png +0 -0
  576. melon_lua/data/sprites_pack/images/0260_Helicopter.png +0 -0
  577. melon_lua/data/sprites_pack/images/0260_Helicopter_plastic.png +0 -0
  578. melon_lua/data/sprites_pack/images/0261_ScreenTextDevice.png +0 -0
  579. melon_lua/data/sprites_pack/images/0261_ScreenTextDevice_plastic.png +0 -0
  580. melon_lua/data/sprites_pack/images/0262_Synthesizer.png +0 -0
  581. melon_lua/data/sprites_pack/images/0262_Synthesizer_plastic.png +0 -0
  582. melon_lua/data/sprites_pack/images/0263_SyringeRegrowth.png +0 -0
  583. melon_lua/data/sprites_pack/images/0263_SyringeRegrowth_plastic.png +0 -0
  584. melon_lua/data/sprites_pack/images/0264_GasMask.png +0 -0
  585. melon_lua/data/sprites_pack/images/0264_GasMask_plastic.png +0 -0
  586. melon_lua/data/sprites_pack/images/0265_DragonFruit.png +0 -0
  587. melon_lua/data/sprites_pack/images/0265_DragonFruit_plastic.png +0 -0
  588. melon_lua/data/sprites_pack/images/0266_Icicle.png +0 -0
  589. melon_lua/data/sprites_pack/images/0266_Icicle_atlas.png +0 -0
  590. melon_lua/data/sprites_pack/images/0267_TomatoCan.png +0 -0
  591. melon_lua/data/sprites_pack/images/0267_TomatoCan_plastic.png +0 -0
  592. melon_lua/data/sprites_pack/images/0268_HumanRobotLivingMetal.png +0 -0
  593. melon_lua/data/sprites_pack/images/0268_HumanRobotLivingMetal_atlas.png +0 -0
  594. melon_lua/data/sprites_pack/images/0269_Snowblock.png +0 -0
  595. melon_lua/data/sprites_pack/images/0269_Snowblock_plastic.png +0 -0
  596. melon_lua/data/sprites_pack/images/0270_SnowMan2024.png +0 -0
  597. melon_lua/data/sprites_pack/images/0270_SnowMan2024_plastic.png +0 -0
  598. melon_lua/data/sprites_pack/images/0271_FreezeGun.png +0 -0
  599. melon_lua/data/sprites_pack/images/0271_FreezeGun_plastic.png +0 -0
  600. melon_lua/data/sprites_pack/images/0272_ImpulseThruster.png +0 -0
  601. melon_lua/data/sprites_pack/images/0272_ImpulseThruster_plastic.png +0 -0
  602. melon_lua/data/sprites_pack/images/0273_DirectionalEngineOld_plastic.png +0 -0
  603. melon_lua/data/sprites_pack/images/0274_WeightingAgent.png +0 -0
  604. melon_lua/data/sprites_pack/images/0274_WeightingAgent_plastic.png +0 -0
  605. melon_lua/data/sprites_pack/images/0275_Magnet.png +0 -0
  606. melon_lua/data/sprites_pack/images/0275_Magnet_atlas.png +0 -0
  607. melon_lua/data/sprites_pack/images/0276_DamageSensor.png +0 -0
  608. melon_lua/data/sprites_pack/images/0276_DamageSensor_plastic.png +0 -0
  609. melon_lua/data/sprites_pack/images/0277_ExplosiveCharge.png +0 -0
  610. melon_lua/data/sprites_pack/images/0277_ExplosiveCharge_plastic.png +0 -0
  611. melon_lua/data/sprites_pack/images/0278_BubbleLevel.png +0 -0
  612. melon_lua/data/sprites_pack/images/0278_BubbleLevel_plastic.png +0 -0
  613. melon_lua/data/sprites_pack/images/0279_Nanoassembler.png +0 -0
  614. melon_lua/data/sprites_pack/images/0279_Nanoassembler_plastic.png +0 -0
  615. melon_lua/data/sprites_pack/images/0280_Brick golem_plastic.png +0 -0
  616. melon_lua/data/sprites_pack/images/0281_Ceramic golem_plastic.png +0 -0
  617. melon_lua/data/sprites_pack/images/0282_Glass golem_plastic.png +0 -0
  618. melon_lua/data/sprites_pack/images/0283_Iron golem_plastic.png +0 -0
  619. melon_lua/data/sprites_pack/images/0284_Plastic golem_plastic.png +0 -0
  620. melon_lua/data/sprites_pack/images/0285_Toy golem_plastic.png +0 -0
  621. melon_lua/data/sprites_pack/images/0286_Wood golem_plastic.png +0 -0
  622. melon_lua/data/sprites_pack/images/0287_ChemicalProtectionHelmet.png +0 -0
  623. melon_lua/data/sprites_pack/images/0287_ChemicalProtectionHelmet_plastic.png +0 -0
  624. melon_lua/data/sprites_pack/images/0288_ChemicalProtectionSuit.png +0 -0
  625. melon_lua/data/sprites_pack/images/0288_ChemicalProtectionSuit_plastic.png +0 -0
  626. melon_lua/data/sprites_pack/images/0289_FlaskAcid.png +0 -0
  627. melon_lua/data/sprites_pack/images/0289_FlaskAcid_plastic.png +0 -0
  628. melon_lua/data/sprites_pack/images/0290_FlaskDamageResist.png +0 -0
  629. melon_lua/data/sprites_pack/images/0290_FlaskDamageResist_plastic.png +0 -0
  630. melon_lua/data/sprites_pack/images/0291_FlaskElectricityProtection.png +0 -0
  631. melon_lua/data/sprites_pack/images/0291_FlaskElectricityProtection_plastic.png +0 -0
  632. melon_lua/data/sprites_pack/images/0292_FlaskEmbalming.png +0 -0
  633. melon_lua/data/sprites_pack/images/0292_FlaskEmbalming_plastic.png +0 -0
  634. melon_lua/data/sprites_pack/images/0293_FlaskFireproof.png +0 -0
  635. melon_lua/data/sprites_pack/images/0293_FlaskFireproof_plastic.png +0 -0
  636. melon_lua/data/sprites_pack/images/0294_FlaskHeal.png +0 -0
  637. melon_lua/data/sprites_pack/images/0294_FlaskHeal_plastic.png +0 -0
  638. melon_lua/data/sprites_pack/images/0295_FlaskImmortal.png +0 -0
  639. melon_lua/data/sprites_pack/images/0295_FlaskImmortal_plastic.png +0 -0
  640. melon_lua/data/sprites_pack/images/0296_FlaskJointDiluent.png +0 -0
  641. melon_lua/data/sprites_pack/images/0296_FlaskJointDiluent_plastic.png +0 -0
  642. melon_lua/data/sprites_pack/images/0297_FlaskRegen.png +0 -0
  643. melon_lua/data/sprites_pack/images/0297_FlaskRegen_plastic.png +0 -0
  644. melon_lua/data/sprites_pack/images/0298_FlaskRegrowth.png +0 -0
  645. melon_lua/data/sprites_pack/images/0298_FlaskRegrowth_plastic.png +0 -0
  646. melon_lua/data/sprites_pack/images/0299_FlaskVirus.png +0 -0
  647. melon_lua/data/sprites_pack/images/0299_FlaskVirus_plastic.png +0 -0
  648. melon_lua/data/sprites_pack/images/0300_FlaskWater.png +0 -0
  649. melon_lua/data/sprites_pack/images/0300_FlaskWater_plastic.png +0 -0
  650. melon_lua/data/sprites_pack/images/0301_RackDecor.png +0 -0
  651. melon_lua/data/sprites_pack/images/0301_RackDecor_plastic.png +0 -0
  652. melon_lua/data/sprites_pack/images/0302_FluorescentLamp 2.png +0 -0
  653. melon_lua/data/sprites_pack/images/0302_FluorescentLamp 2_plastic.png +0 -0
  654. melon_lua/data/sprites_pack/images/0303_FluorescentLamp 1.png +0 -0
  655. melon_lua/data/sprites_pack/images/0303_FluorescentLamp 1_plastic.png +0 -0
  656. melon_lua/data/sprites_pack/images/0304_DecorConicalFlask.png +0 -0
  657. melon_lua/data/sprites_pack/images/0304_DecorConicalFlask_plastic.png +0 -0
  658. melon_lua/data/sprites_pack/images/0305_DecorMeasuringFlask.png +0 -0
  659. melon_lua/data/sprites_pack/images/0305_DecorMeasuringFlask_plastic.png +0 -0
  660. melon_lua/data/sprites_pack/images/0306_DecorReactionFlask.png +0 -0
  661. melon_lua/data/sprites_pack/images/0306_DecorReactionFlask_plastic.png +0 -0
  662. melon_lua/data/sprites_pack/images/0307_DecorSectionalTestTube.png +0 -0
  663. melon_lua/data/sprites_pack/images/0307_DecorSectionalTestTube_plastic.png +0 -0
  664. melon_lua/data/sprites_pack/images/0308_DecorThinTestTube.png +0 -0
  665. melon_lua/data/sprites_pack/images/0308_DecorThinTestTube_plastic.png +0 -0
  666. melon_lua/data/sprites_pack/images/0309_DecorWideTestTube.png +0 -0
  667. melon_lua/data/sprites_pack/images/0309_DecorWideTestTube_plastic.png +0 -0
  668. melon_lua/data/sprites_pack/images/0310_EffectGenerator.png +0 -0
  669. melon_lua/data/sprites_pack/images/0310_EffectGenerator_plastic.png +0 -0
  670. melon_lua/data/sprites_pack/images/0311_WelderGloves.png +0 -0
  671. melon_lua/data/sprites_pack/images/0311_WelderGloves_plastic.png +0 -0
  672. melon_lua/data/sprites_pack/images/0312_WelderMask.png +0 -0
  673. melon_lua/data/sprites_pack/images/0312_WelderMask_plastic.png +0 -0
  674. melon_lua/data/sprites_pack/images/0313_WelderSuit.png +0 -0
  675. melon_lua/data/sprites_pack/images/0313_WelderSuit_plastic.png +0 -0
  676. melon_lua/data/sprites_pack/images/0314_VatOfAcid.png +0 -0
  677. melon_lua/data/sprites_pack/images/0314_VatOfAcid_plastic.png +0 -0
  678. melon_lua/data/sprites_pack/images/0315_VirusBarrel.png +0 -0
  679. melon_lua/data/sprites_pack/images/0315_VirusBarrel_plastic.png +0 -0
  680. melon_lua/data/sprites_pack/images/0316_WasteBarrel.png +0 -0
  681. melon_lua/data/sprites_pack/images/0316_WasteBarrel_plastic.png +0 -0
  682. melon_lua/data/sprites_pack/images/0317_Wings.png +0 -0
  683. melon_lua/data/sprites_pack/images/0317_Wings_plastic.png +0 -0
  684. melon_lua/data/sprites_pack/images/0318_Nimbus.png +0 -0
  685. melon_lua/data/sprites_pack/images/0318_Nimbus_plastic.png +0 -0
  686. melon_lua/data/sprites_pack/images/0319_Iceblock.png +0 -0
  687. melon_lua/data/sprites_pack/images/0319_Iceblock_plastic.png +0 -0
  688. melon_lua/data/sprites_pack/images/0320_HeadPhones.png +0 -0
  689. melon_lua/data/sprites_pack/images/0320_HeadPhones_plastic.png +0 -0
  690. melon_lua/data/sprites_pack/images/0321_Wig.png +0 -0
  691. melon_lua/data/sprites_pack/images/0321_Wig_plastic.png +0 -0
  692. melon_lua/data/sprites_pack/images/0322_DarkWig.png +0 -0
  693. melon_lua/data/sprites_pack/images/0322_DarkWig_plastic.png +0 -0
  694. melon_lua/data/sprites_pack/images/0323_EmoWig.png +0 -0
  695. melon_lua/data/sprites_pack/images/0323_EmoWig_plastic.png +0 -0
  696. melon_lua/data/sprites_pack/images/0324_Iroquois.png +0 -0
  697. melon_lua/data/sprites_pack/images/0324_Iroquois_plastic.png +0 -0
  698. melon_lua/data/sprites_pack/images/0325_Piano.png +0 -0
  699. melon_lua/data/sprites_pack/images/0325_Piano_plastic.png +0 -0
  700. melon_lua/data/sprites_pack/images/0326_Guitar.png +0 -0
  701. melon_lua/data/sprites_pack/images/0326_Guitar_plastic.png +0 -0
  702. melon_lua/data/sprites_pack/images/0327_Xylophone.png +0 -0
  703. melon_lua/data/sprites_pack/images/0327_Xylophone_plastic.png +0 -0
  704. melon_lua/data/sprites_pack/images/0328_Flutes.png +0 -0
  705. melon_lua/data/sprites_pack/images/0328_Flutes_plastic.png +0 -0
  706. melon_lua/data/sprites_pack/images/0329_Drums.png +0 -0
  707. melon_lua/data/sprites_pack/images/0329_Drums_plastic.png +0 -0
  708. melon_lua/data/sprites_pack/images/0330_Chainsaw.png +0 -0
  709. melon_lua/data/sprites_pack/images/0330_Chainsaw_plastic.png +0 -0
  710. melon_lua/data/sprites_pack/images/0331_Battery.png +0 -0
  711. melon_lua/data/sprites_pack/images/0331_Battery_plastic.png +0 -0
  712. melon_lua/data/sprites_pack/images/0332_AcidicAmmoBox.png +0 -0
  713. melon_lua/data/sprites_pack/images/0332_AcidicAmmoBox_plastic.png +0 -0
  714. melon_lua/data/sprites_pack/images/0333_ArmorPiercingAmmoBox.png +0 -0
  715. melon_lua/data/sprites_pack/images/0333_ArmorPiercingAmmoBox_plastic.png +0 -0
  716. melon_lua/data/sprites_pack/images/0334_BouncingAmmoBox.png +0 -0
  717. melon_lua/data/sprites_pack/images/0334_BouncingAmmoBox_plastic.png +0 -0
  718. melon_lua/data/sprites_pack/images/0335_ExpandingAmmoBox.png +0 -0
  719. melon_lua/data/sprites_pack/images/0335_ExpandingAmmoBox_plastic.png +0 -0
  720. melon_lua/data/sprites_pack/images/0336_ExplosiveAmmoBox.png +0 -0
  721. melon_lua/data/sprites_pack/images/0336_ExplosiveAmmoBox_plastic.png +0 -0
  722. melon_lua/data/sprites_pack/images/0337_IncendiaryAmmoBox.png +0 -0
  723. melon_lua/data/sprites_pack/images/0337_IncendiaryAmmoBox_plastic.png +0 -0
  724. melon_lua/data/sprites_pack/images/0338_InvisibleAmmoBox.png +0 -0
  725. melon_lua/data/sprites_pack/images/0338_InvisibleAmmoBox_plastic.png +0 -0
  726. melon_lua/data/sprites_pack/images/0339_MixedAmmoBox_plastic.png +0 -0
  727. melon_lua/data/sprites_pack/images/0340_StandardAmmoBox.png +0 -0
  728. melon_lua/data/sprites_pack/images/0340_StandardAmmoBox_plastic.png +0 -0
  729. melon_lua/data/sprites_pack/images/0341_UnderwaterAmmoBox.png +0 -0
  730. melon_lua/data/sprites_pack/images/0341_UnderwaterAmmoBox_plastic.png +0 -0
  731. melon_lua/data/sprites_pack/images/0342_AmmoMixer.png +0 -0
  732. melon_lua/data/sprites_pack/images/0342_AmmoMixer_plastic.png +0 -0
  733. melon_lua/data/sprites_pack/images/0343_Relay.png +0 -0
  734. melon_lua/data/sprites_pack/images/0343_Relay_plastic.png +0 -0
  735. melon_lua/data/sprites_pack/images/0344_Defibrillator.png +0 -0
  736. melon_lua/data/sprites_pack/images/0344_Defibrillator_plastic.png +0 -0
  737. melon_lua/data/sprites_pack/images/0345_Slider.png +0 -0
  738. melon_lua/data/sprites_pack/images/0346_Voltmeter.png +0 -0
  739. melon_lua/data/sprites_pack/images/0346_Voltmeter_plastic.png +0 -0
  740. melon_lua/data/sprites_pack/images/0347_Conveyor.png +0 -0
  741. melon_lua/data/sprites_pack/images/0347_Conveyor_plastic.png +0 -0
  742. melon_lua/data/sprites_pack/images/0348_Transformer.png +0 -0
  743. melon_lua/data/sprites_pack/images/0348_Transformer_plastic.png +0 -0
  744. melon_lua/data/sprites_pack/images/0349_Plug.png +0 -0
  745. melon_lua/data/sprites_pack/images/0349_Plug_atlas.png +0 -0
  746. melon_lua/data/sprites_pack/images/0350_Socket.png +0 -0
  747. melon_lua/data/sprites_pack/images/0350_Socket_atlas.png +0 -0
  748. melon_lua/data/sprites_pack/images/0351_Old shawl.png +0 -0
  749. melon_lua/data/sprites_pack/images/0351_Old shawl_plastic.png +0 -0
  750. melon_lua/data/sprites_pack/images/0352_Old skirt.png +0 -0
  751. melon_lua/data/sprites_pack/images/0352_Old skirt_plastic.png +0 -0
  752. melon_lua/data/sprites_pack/images/0353_Old slippers.png +0 -0
  753. melon_lua/data/sprites_pack/images/0353_Old slippers_plastic.png +0 -0
  754. melon_lua/data/sprites_pack/images/0354_Old sweater.png +0 -0
  755. melon_lua/data/sprites_pack/images/0354_Old sweater_plastic.png +0 -0
  756. melon_lua/data/sprites_pack/images/0355_SpikedStaff.png +0 -0
  757. melon_lua/data/sprites_pack/images/0355_SpikedStaff_plastic.png +0 -0
  758. melon_lua/data/sprites_pack/images/0356_FluorescentStaff.png +0 -0
  759. melon_lua/data/sprites_pack/images/0356_FluorescentStaff_plastic.png +0 -0
  760. melon_lua/data/sprites_pack/images/0357_GlueStaff.png +0 -0
  761. melon_lua/data/sprites_pack/images/0357_GlueStaff_plastic.png +0 -0
  762. melon_lua/data/sprites_pack/images/0358_SlickStaff.png +0 -0
  763. melon_lua/data/sprites_pack/images/0358_SlickStaff_plastic.png +0 -0
  764. melon_lua/data/sprites_pack/images/0359_BallooningStaff.png +0 -0
  765. melon_lua/data/sprites_pack/images/0359_BallooningStaff_plastic.png +0 -0
  766. melon_lua/data/sprites_pack/images/0360_GhostlyStaff.png +0 -0
  767. melon_lua/data/sprites_pack/images/0360_GhostlyStaff_plastic.png +0 -0
  768. melon_lua/data/sprites_pack/images/0361_MutationStaff.png +0 -0
  769. melon_lua/data/sprites_pack/images/0361_MutationStaff_plastic.png +0 -0
  770. melon_lua/data/sprites_pack/images/0362_RoachesStaff.png +0 -0
  771. melon_lua/data/sprites_pack/images/0362_RoachesStaff_plastic.png +0 -0
  772. melon_lua/data/sprites_pack/images/0363_UIControl.png +0 -0
  773. melon_lua/data/sprites_pack/images/0363_UIControl_plastic.png +0 -0
  774. melon_lua/data/sprites_pack/images/0364_Policeman cap.png +0 -0
  775. melon_lua/data/sprites_pack/images/0364_Policeman cap_plastic.png +0 -0
  776. melon_lua/data/sprites_pack/images/0365_Policeman shirt.png +0 -0
  777. melon_lua/data/sprites_pack/images/0365_Policeman shirt_plastic.png +0 -0
  778. melon_lua/data/sprites_pack/images/0366_Policeman trousers.png +0 -0
  779. melon_lua/data/sprites_pack/images/0366_Policeman trousers_plastic.png +0 -0
  780. melon_lua/data/sprites_pack/images/0367_Clown nose.png +0 -0
  781. melon_lua/data/sprites_pack/images/0367_Clown nose_plastic.png +0 -0
  782. melon_lua/data/sprites_pack/images/0368_Clown shirt.png +0 -0
  783. melon_lua/data/sprites_pack/images/0368_Clown shirt_plastic.png +0 -0
  784. melon_lua/data/sprites_pack/images/0369_Clown shoes.png +0 -0
  785. melon_lua/data/sprites_pack/images/0369_Clown shoes_plastic.png +0 -0
  786. melon_lua/data/sprites_pack/images/0370_Clown trousers.png +0 -0
  787. melon_lua/data/sprites_pack/images/0370_Clown trousers_plastic.png +0 -0
  788. melon_lua/data/sprites_pack/images/0371_Clown wig.png +0 -0
  789. melon_lua/data/sprites_pack/images/0371_Clown wig_plastic.png +0 -0
  790. melon_lua/data/sprites_pack/images/0372_WizardBeard.png +0 -0
  791. melon_lua/data/sprites_pack/images/0372_WizardBeard_plastic.png +0 -0
  792. melon_lua/data/sprites_pack/images/0373_WizardRobe.png +0 -0
  793. melon_lua/data/sprites_pack/images/0373_WizardRobe_plastic.png +0 -0
  794. melon_lua/data/sprites_pack/images/0374_WizardShoes.png +0 -0
  795. melon_lua/data/sprites_pack/images/0374_WizardShoes_plastic.png +0 -0
  796. melon_lua/data/sprites_pack/images/0375_StopSign.png +0 -0
  797. melon_lua/data/sprites_pack/images/0375_StopSign_plastic.png +0 -0
  798. melon_lua/data/sprites_pack/images/0376_DirectionalEngine.png +0 -0
  799. melon_lua/data/sprites_pack/images/0376_DirectionalEngine_plastic.png +0 -0
  800. melon_lua/data/sprites_pack/images/0377_HeliumCylinder.png +0 -0
  801. melon_lua/data/sprites_pack/images/0377_HeliumCylinder_plastic.png +0 -0
  802. melon_lua/data/sprites_pack/images/0378_HeliumBalloon_plastic.png +0 -0
  803. melon_lua/data/sprites_pack/images/0379_PartyHat.png +0 -0
  804. melon_lua/data/sprites_pack/images/0379_PartyHat_plastic.png +0 -0
  805. melon_lua/data/sprites_pack/images/0380_PartyHorn.png +0 -0
  806. melon_lua/data/sprites_pack/images/0380_PartyHorn_plastic.png +0 -0
  807. melon_lua/data/sprites_pack/images/0381_HumanCake_plastic.png +0 -0
  808. melon_lua/data/sprites_pack/images/0382_ModularTurret.png +0 -0
  809. melon_lua/data/sprites_pack/images/0382_ModularTurret_plastic.png +0 -0
  810. melon_lua/data/sprites_pack/images/0383_HealingTurret.png +0 -0
  811. melon_lua/data/sprites_pack/images/0383_HealingTurret_plastic.png +0 -0
  812. melon_lua/data/sprites_pack/images/0384_RocketTurret.png +0 -0
  813. melon_lua/data/sprites_pack/images/0384_RocketTurret_plastic.png +0 -0
  814. melon_lua/data/sprites_pack/images/0385_KnifeTurret.png +0 -0
  815. melon_lua/data/sprites_pack/images/0385_KnifeTurret_plastic.png +0 -0
  816. melon_lua/data/sprites_pack/images/0386_KnifeProjectile_plastic.png +0 -0
  817. melon_lua/data/sprites_pack/images/0387_RocketTurretProjectile_plastic.png +0 -0
  818. melon_lua/data/sprites_pack/images/0388_Servo.png +0 -0
  819. melon_lua/data/sprites_pack/images/0388_Servo_plastic.png +0 -0
  820. melon_lua/data/sprites_pack/images/0389_BladeTrap.png +0 -0
  821. melon_lua/data/sprites_pack/images/0389_BladeTrap_plastic.png +0 -0
  822. melon_lua/data/sprites_pack/images/0390_SyringeFrozeProtection.png +0 -0
  823. melon_lua/data/sprites_pack/images/0390_SyringeFrozeProtection_plastic.png +0 -0
  824. melon_lua/data/sprites_pack/images/0391_RopeControllerDevice.png +0 -0
  825. melon_lua/data/sprites_pack/images/0391_RopeControllerDevice_plastic.png +0 -0
  826. melon_lua/data/sprites_pack/images/0392_FluidTank.png +0 -0
  827. melon_lua/data/sprites_pack/images/0392_FluidTank_plastic.png +0 -0
  828. melon_lua/data/sprites_pack/images/0393_OilCan.png +0 -0
  829. melon_lua/data/sprites_pack/images/0393_OilCan_plastic.png +0 -0
  830. melon_lua/data/sprites_pack/images/0394_JuiceBottle.png +0 -0
  831. melon_lua/data/sprites_pack/images/0394_JuiceBottle_plastic.png +0 -0
  832. melon_lua/data/sprites_pack/images/0395_TomatoBottle.png +0 -0
  833. melon_lua/data/sprites_pack/images/0395_TomatoBottle_plastic.png +0 -0
  834. melon_lua/data/sprites_pack/images/0396_PumpkinBottle.png +0 -0
  835. melon_lua/data/sprites_pack/images/0396_PumpkinBottle_atlas.png +0 -0
  836. melon_lua/data/sprites_pack/images/0397_MelonBottle.png +0 -0
  837. melon_lua/data/sprites_pack/images/0397_MelonBottle_plastic.png +0 -0
  838. melon_lua/data/sprites_pack/images/0398_DragonFruitBottle.png +0 -0
  839. melon_lua/data/sprites_pack/images/0398_DragonFruitBottle_plastic.png +0 -0
  840. melon_lua/data/sprites_pack/images/0399_CornBottle.png +0 -0
  841. melon_lua/data/sprites_pack/images/0399_CornBottle_plastic.png +0 -0
  842. melon_lua/data/sprites_pack/images/0400_CactusBottle.png +0 -0
  843. melon_lua/data/sprites_pack/images/0400_CactusBottle_plastic.png +0 -0
  844. melon_lua/data/sprites_pack/images/0401_AppleBottle.png +0 -0
  845. melon_lua/data/sprites_pack/images/0401_AppleBottle_plastic.png +0 -0
  846. melon_lua/data/sprites_pack/images/0402_WateringCan.png +0 -0
  847. melon_lua/data/sprites_pack/images/0402_WateringCan_atlas.png +0 -0
  848. melon_lua/data/sprites_pack/images/0403_GlassJar.png +0 -0
  849. melon_lua/data/sprites_pack/images/0403_GlassJar_plastic.png +0 -0
  850. melon_lua/data/sprites_pack/images/0404_LiquidCollector.png +0 -0
  851. melon_lua/data/sprites_pack/images/0404_LiquidCollector_plastic.png +0 -0
  852. melon_lua/data/sprites_pack/images/0405_LiquidValve.png +0 -0
  853. melon_lua/data/sprites_pack/images/0405_LiquidValve_plastic.png +0 -0
  854. melon_lua/data/sprites_pack/images/0406_Engine.png +0 -0
  855. melon_lua/data/sprites_pack/images/0406_Engine_plastic.png +0 -0
  856. melon_lua/data/sprites_pack/images/0407_Copywriter.png +0 -0
  857. melon_lua/data/sprites_pack/images/0407_Copywriter_plastic.png +0 -0
  858. melon_lua/data/sprites_pack/images/0408_NailGun.png +0 -0
  859. melon_lua/data/sprites_pack/images/0408_NailGun_plastic.png +0 -0
  860. melon_lua/data/sprites_pack/images/0409_Nail_plastic.png +0 -0
  861. melon_lua/data/sprites_pack/images/0410_Syringe_plastic.png +0 -0
  862. melon_lua/data/sprites_pack/images/0411_SyringeMachine.png +0 -0
  863. melon_lua/data/sprites_pack/images/0411_SyringeMachine_plastic.png +0 -0
  864. melon_lua/data/sprites_pack/images/0412_PumpkinLauncher.png +0 -0
  865. melon_lua/data/sprites_pack/images/0412_PumpkinLauncher_atlas.png +0 -0
  866. melon_lua/data/sprites_pack/images/0413_PumpkinProjectile_atlas.png +0 -0
  867. melon_lua/data/sprites_pack/images/0414_LiquidProbe.png +0 -0
  868. melon_lua/data/sprites_pack/images/0414_LiquidProbe_plastic.png +0 -0
  869. melon_lua/data/sprites_pack/images/0415_LiquidScanner.png +0 -0
  870. melon_lua/data/sprites_pack/images/0415_LiquidScanner_plastic.png +0 -0
  871. melon_lua/data/sprites_pack/images/0416_LeafBlower.png +0 -0
  872. melon_lua/data/sprites_pack/images/0416_LeafBlower_plastic.png +0 -0
  873. melon_lua/data/sprites_pack/images/0417_LiquidPump.png +0 -0
  874. melon_lua/data/sprites_pack/images/0417_LiquidPump_plastic.png +0 -0
  875. melon_lua/data/sprites_pack/images/0418_FlaskFrostProtection.png +0 -0
  876. melon_lua/data/sprites_pack/images/0418_FlaskFrostProtection_plastic.png +0 -0
  877. melon_lua/data/sprites_pack/images/0419_Radar.png +0 -0
  878. melon_lua/data/sprites_pack/images/0419_Radar_plastic.png +0 -0
  879. melon_lua/data/sprites_pack/images/0420_EntitiesMarker.png +0 -0
  880. melon_lua/data/sprites_pack/images/0420_EntitiesMarker_plastic.png +0 -0
  881. melon_lua/data/sprites_pack/images/0421_Saw_plastic.png +0 -0
  882. melon_lua/data/sprites_pack/images/0422_SawGun.png +0 -0
  883. melon_lua/data/sprites_pack/images/0422_SawGun_plastic.png +0 -0
  884. melon_lua/data/sprites_pack/images/0423_EnergySaber.png +0 -0
  885. melon_lua/data/sprites_pack/images/0423_EnergySaber_plastic.png +0 -0
  886. melon_lua/data/sprites_pack/images/0424_LEDMatrix.png +0 -0
  887. melon_lua/data/sprites_pack/images/0424_LEDMatrix_plastic.png +0 -0
  888. melon_lua/data/sprites_pack/images/0425_VPchipTutorial4_ArrayExample.png +0 -0
  889. melon_lua/data/sprites_pack/images/0425_VPchipTutorial4_ArrayExample_plastic.png +0 -0
  890. melon_lua/data/sprites_pack/images/0426_ImprovisedCharge.png +0 -0
  891. melon_lua/data/sprites_pack/images/0426_ImprovisedCharge_plastic.png +0 -0
  892. melon_lua/data/sprites_pack/images/0427_HomingLauncher.png +0 -0
  893. melon_lua/data/sprites_pack/images/0427_HomingLauncher_plastic.png +0 -0
  894. melon_lua/data/sprites_pack/images/0428_LetterGun.png +0 -0
  895. melon_lua/data/sprites_pack/images/0428_LetterGun_plastic.png +0 -0
  896. melon_lua/data/sprites_pack/images/0429_ParasiteCap.png +0 -0
  897. melon_lua/data/sprites_pack/images/0429_ParasiteCap_plastic.png +0 -0
  898. melon_lua/data/sprites_pack/images/0430_BouncyBombBox.png +0 -0
  899. melon_lua/data/sprites_pack/images/0430_BouncyBombBox_plastic.png +0 -0
  900. melon_lua/data/sprites_pack/images/0431_HoneyGrenade.png +0 -0
  901. melon_lua/data/sprites_pack/images/0431_HoneyGrenade_plastic.png +0 -0
  902. melon_lua/data/sprites_pack/images/0432_MutationGrenade.png +0 -0
  903. melon_lua/data/sprites_pack/images/0432_MutationGrenade_plastic.png +0 -0
  904. melon_lua/data/sprites_pack/images/0433_NastyBomb.png +0 -0
  905. melon_lua/data/sprites_pack/images/0433_NastyBomb_plastic.png +0 -0
  906. melon_lua/data/sprites_pack/images/0434_SpikeGrenade.png +0 -0
  907. melon_lua/data/sprites_pack/images/0434_SpikeGrenade_plastic.png +0 -0
  908. melon_lua/data/sprites_pack/images/0435_BouncyBomb_plastic.png +0 -0
  909. melon_lua/data/sprites_pack/images/0436_TeslaCoil.png +0 -0
  910. melon_lua/data/sprites_pack/images/0436_TeslaCoil_plastic.png +0 -0
  911. melon_lua/data/sprites_pack/images/0437_NewYearPresent.png +0 -0
  912. melon_lua/data/sprites_pack/images/0438_RectEndlessOceanRoom.png +0 -0
  913. melon_lua/data/sprites_pack/images/0438_RectEndlessOceanRoom_plastic.png +0 -0
  914. melon_lua/data/sprites_pack/images/0439_DepthAndPressureSensor.png +0 -0
  915. melon_lua/data/sprites_pack/images/0439_DepthAndPressureSensor_plastic.png +0 -0
  916. melon_lua/data/sprites_pack/images/0440_Speedboat.png +0 -0
  917. melon_lua/data/sprites_pack/images/0440_Speedboat_plastic.png +0 -0
  918. melon_lua/data/sprites_pack/images/0441_Submarine.png +0 -0
  919. melon_lua/data/sprites_pack/images/0441_Submarine_plastic.png +0 -0
  920. melon_lua/data/sprites_pack/images/0442_BoatVehicle.png +0 -0
  921. melon_lua/data/sprites_pack/images/0443_Wetsuit.png +0 -0
  922. melon_lua/data/sprites_pack/images/0443_Wetsuit_plastic.png +0 -0
  923. melon_lua/data/sprites_pack/images/0444_Diving armor.png +0 -0
  924. melon_lua/data/sprites_pack/images/0444_Diving armor_plastic.png +0 -0
  925. melon_lua/data/sprites_pack/images/0445_Diving suit.png +0 -0
  926. melon_lua/data/sprites_pack/images/0445_Diving suit_plastic.png +0 -0
  927. melon_lua/data/sprites_pack/images/0446_Ballast.png +0 -0
  928. melon_lua/data/sprites_pack/images/0446_Ballast_plastic.png +0 -0
  929. melon_lua/data/sprites_pack/images/0447_HermeticDoor.png +0 -0
  930. melon_lua/data/sprites_pack/images/0447_HermeticDoor_plastic.png +0 -0
  931. melon_lua/data/sprites_pack/images/0448_HumanCoral.png +0 -0
  932. melon_lua/data/sprites_pack/images/0448_HumanCoral_plastic.png +0 -0
  933. melon_lua/data/sprites_pack/images/0449_Passageway.png +0 -0
  934. melon_lua/data/sprites_pack/images/0449_Passageway_plastic.png +0 -0
  935. melon_lua/data/sprites_pack/images/0450_GlassDome.png +0 -0
  936. melon_lua/data/sprites_pack/images/0450_GlassDome_plastic.png +0 -0
  937. melon_lua/data/sprites_pack/images/0451_HermeticDoorBlue.png +0 -0
  938. melon_lua/data/sprites_pack/images/0451_HermeticDoorBlue_plastic.png +0 -0
  939. melon_lua/data/sprites_pack/images/0452_PassagewayBlue.png +0 -0
  940. melon_lua/data/sprites_pack/images/0452_PassagewayBlue_plastic.png +0 -0
  941. melon_lua/data/sprites_pack/images/0453_RectEndlessOceanRoomBlue.png +0 -0
  942. melon_lua/data/sprites_pack/images/0453_RectEndlessOceanRoomBlue_plastic.png +0 -0
  943. melon_lua/data/sprites_pack/images/0454_RectEndlessOceanDockingHatch.png +0 -0
  944. melon_lua/data/sprites_pack/images/0454_RectEndlessOceanDockingHatch_plastic.png +0 -0
  945. melon_lua/data/sprites_pack/images/0455_GlassDomeBlue.png +0 -0
  946. melon_lua/data/sprites_pack/images/0455_GlassDomeBlue_plastic.png +0 -0
  947. melon_lua/data/sprites_pack/images.zip +0 -0
  948. melon_lua/data/sprites_pack/sprites_by_object_id.json +2747 -0
  949. melon_lua/data/ui_controller_template.json +1 -0
  950. melon_lua/data/ui_element_prototypes.json +3590 -0
  951. melon_lua/entity.py +88 -0
  952. melon_lua/melmod.py +164 -0
  953. melon_lua/melsave.py +275 -0
  954. melon_lua/melsave_builder.py +744 -0
  955. melon_lua/melsave_writer.py +738 -0
  956. melon_lua/preamble.lua +388 -0
  957. melon_lua/preview.py +335 -0
  958. melon_lua/runner.py +409 -0
  959. melon_lua/session.py +396 -0
  960. melon_lua/spawn_queue.py +190 -0
  961. melon_lua/stdlib_bit32_shim.lua +105 -0
  962. melon_lua/stdlib_melon.py +113 -0
  963. melon_lua/uicontrol_builder.py +802 -0
  964. melon_lua/visuals.py +115 -0
  965. melon_lua/vpcompile/__init__.py +5 -0
  966. melon_lua/vpcompile/codegen.py +163 -0
  967. melon_lua/vpcompile/compile.py +20 -0
  968. melon_lua/vpcompile/graph.py +112 -0
  969. melon_lua/vpcompile/ir.py +33 -0
  970. melon_lua/vpcompile/nodes/__init__.py +22 -0
  971. melon_lua/vpcompile/nodes/_base.py +8 -0
  972. melon_lua/vpcompile/nodes/entity_read.py +164 -0
  973. melon_lua/vpcompile/nodes/entity_write.py +170 -0
  974. melon_lua/vpcompile/nodes/flow.py +323 -0
  975. melon_lua/vpcompile/nodes/logic.py +131 -0
  976. melon_lua/vpcompile/nodes/math_basic.py +235 -0
  977. melon_lua/vpcompile/nodes/math_trig.py +71 -0
  978. melon_lua/vpcompile/nodes/vector.py +101 -0
  979. melon_lua/vpcompile/ops.py +195 -0
  980. melon_lua/vpcompile/save_data.py +20 -0
  981. melon_lua/world.py +536 -0
  982. melon_lua-3.4.0.dist-info/METADATA +230 -0
  983. melon_lua-3.4.0.dist-info/RECORD +986 -0
  984. melon_lua-3.4.0.dist-info/WHEEL +5 -0
  985. melon_lua-3.4.0.dist-info/entry_points.txt +2 -0
  986. melon_lua-3.4.0.dist-info/top_level.txt +1 -0
melon_lua/session.py ADDED
@@ -0,0 +1,396 @@
1
+ """High-level session: bind a .melsave file to a sandbox lifecycle.
2
+
3
+ A `MelsaveSession` owns the full pipeline: read the save, spawn its objects
4
+ into a WorldContext, compile/run Lua chips against that world, create/remove
5
+ ropes, snapshot state, and write the modified scene back to a new .melsave.
6
+
7
+ Typical agent workflow::
8
+
9
+ from melon_lua import MelsaveSession
10
+
11
+ session = MelsaveSession("input.melsave")
12
+ session.load()
13
+ session.run_chip(chip_source, ticks=100)
14
+ session.create_rope(from_id=1, to_id=2, kind="Simple")
15
+ snap = session.snapshot()
16
+ session.save_as("output.melsave")
17
+ session.close()
18
+
19
+ The original `MelsaveDocument` is held internally so `save_as` can diff the
20
+ live world against it without the caller managing references.
21
+ """
22
+ from __future__ import annotations
23
+
24
+ from pathlib import Path
25
+ from typing import Any, Optional
26
+
27
+ from .melsave import MelsaveDocument, read_melsave, spawn_document_into_world
28
+ from .melsave_writer import write_world_to_melsave, build_diff_from_world
29
+ from .world import WorldContext
30
+ from .runner import MelonScriptRunner
31
+
32
+
33
+ class MelsaveSession:
34
+ """One session = one save file + one world + one chip runner.
35
+
36
+ Lifecycle: created -> load() -> [run_chip / create_rope / snapshot]* ->
37
+ save_as() -> close().
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ melsave_path: str | Path,
43
+ *,
44
+ tps: float = 20.0,
45
+ quiet: bool = True,
46
+ ):
47
+ self.melsave_path = Path(melsave_path)
48
+ self.tps = float(tps)
49
+ self._quiet = bool(quiet)
50
+ self._doc: Optional[MelsaveDocument] = None
51
+ self._world: Optional[WorldContext] = None
52
+ self._runner: Optional[MelonScriptRunner] = None
53
+ self._loaded = False
54
+
55
+ # ===== Lifecycle =====
56
+
57
+ def load(self) -> "MelsaveSession":
58
+ """Read the melsave, spawn all objects into a fresh world, build runner."""
59
+ if self._loaded:
60
+ return self
61
+ self._doc = read_melsave(self.melsave_path)
62
+ self._world = WorldContext()
63
+ spawn_document_into_world(self._doc, self._world)
64
+ self._runner = MelonScriptRunner(
65
+ tps=self.tps,
66
+ world=self._world,
67
+ quiet=self._quiet,
68
+ )
69
+ # Load existing mechanic gate wires from the save's raw constraints
70
+ self._load_gate_wires_from_doc()
71
+ self._loaded = True
72
+ return self
73
+
74
+ def _load_gate_wires_from_doc(self) -> None:
75
+ """Populate ``world.gate_wires`` from the document's raw constraints."""
76
+ assert self._world is not None
77
+ assert self._doc is not None
78
+ first = True
79
+ for obj in self._doc.objects:
80
+ raw = getattr(obj, "raw", None) or {}
81
+ cs = raw.get("constraints")
82
+ if not isinstance(cs, list) or not cs:
83
+ continue
84
+ self._world.gate_wires.from_constraint_dicts(cs, append=not first)
85
+ first = False
86
+
87
+ def close(self) -> None:
88
+ """Release the Box2D world and Lua VM. Idempotent."""
89
+ if self._world is not None:
90
+ self._world.b2_world = None
91
+ self._world._b2_bodies.clear()
92
+ self._world._b2_joints.clear()
93
+ self._runner = None
94
+ self._world = None
95
+ self._doc = None
96
+ self._loaded = False
97
+
98
+ def __enter__(self) -> "MelsaveSession":
99
+ return self.load()
100
+
101
+ def __exit__(self, exc_type, exc, tb) -> None:
102
+ self.close()
103
+
104
+ # ===== Chip execution =====
105
+
106
+ def run_chip(
107
+ self,
108
+ source: str,
109
+ *,
110
+ ticks: int = 1,
111
+ inputs: Optional[dict] = None,
112
+ chunk_name: str = "@session_chip.lua",
113
+ ) -> dict:
114
+ """Compile a Lua chip and run it for `ticks` ticks. Returns last tick result.
115
+
116
+ If ticks == 0, only compiles + calls OnInit (no OnTick). If ticks >= 1,
117
+ OnInit is called first, then OnTick runs `ticks` times.
118
+ """
119
+ self._require_loaded()
120
+ r = self._runner
121
+ assert r is not None
122
+ if not r.compile(source, chunk_name=chunk_name):
123
+ return {"error": r.last_error or "compile failed", "outputs": {}}
124
+ r.call_on_init()
125
+ if ticks <= 0:
126
+ return {"error": None, "outputs": r.get_outputs()}
127
+ if ticks == 1:
128
+ return r.run_tick(inputs=inputs)
129
+ provider = (lambda i: inputs) if inputs is not None else None
130
+ r.run_loop(ticks=ticks, inputs_provider=provider)
131
+ return {"error": r.last_error, "outputs": r.get_outputs()}
132
+
133
+ def compile_only(self, source: str, chunk_name: str = "@session_chip.lua") -> bool:
134
+ """Compile a chip without running. Returns True on success."""
135
+ self._require_loaded()
136
+ assert self._runner is not None
137
+ return self._runner.compile(source, chunk_name=chunk_name)
138
+
139
+ def tick(self, inputs: Optional[dict] = None) -> dict:
140
+ """Run a single OnTick on the already-compiled chip."""
141
+ self._require_loaded()
142
+ assert self._runner is not None
143
+ return self._runner.run_tick(inputs=inputs)
144
+
145
+ # ===== Entity / world access =====
146
+
147
+ @property
148
+ def world(self) -> WorldContext:
149
+ self._require_loaded()
150
+ assert self._world is not None
151
+ return self._world
152
+
153
+ @property
154
+ def runner(self) -> MelonScriptRunner:
155
+ self._require_loaded()
156
+ assert self._runner is not None
157
+ return self._runner
158
+
159
+ @property
160
+ def document(self) -> MelsaveDocument:
161
+ self._require_loaded()
162
+ assert self._doc is not None
163
+ return self._doc
164
+
165
+ def entities(self) -> list[dict]:
166
+ """Snapshot list of alive entities: {entity_id, local_id, object_id, name, x, y, angle}."""
167
+ self._require_loaded()
168
+ assert self._world is not None
169
+ out = []
170
+ for e in self._world.entities.values():
171
+ if not getattr(e, "alive", True):
172
+ continue
173
+ out.append({
174
+ "entity_id": e.entity_id,
175
+ "local_id": e.local_id,
176
+ "object_id": e.object_id,
177
+ "name": e.name,
178
+ "x": float(e.position_x),
179
+ "y": float(e.position_y),
180
+ "angle": float(e.angle),
181
+ })
182
+ return out
183
+
184
+ def get_entity(self, entity_id: int):
185
+ return self._world.get_entity(entity_id) if self._world else None
186
+
187
+ def spawn(self, name_or_id, x: float = 0.0, y: float = 0.0, **kw):
188
+ """Spawn a new entity into the world. Returns the Entity."""
189
+ self._require_loaded()
190
+ assert self._world is not None
191
+ return self._world.spawn_entity(name_or_id, x, y, **kw)
192
+
193
+ def remove(self, entity_id: int) -> bool:
194
+ """Remove an entity. Returns True if it existed."""
195
+ self._require_loaded()
196
+ assert self._world is not None
197
+ e = self._world.entities.get(entity_id)
198
+ if e is None:
199
+ return False
200
+ self._world.remove_entity(entity_id)
201
+ return True
202
+
203
+ # ===== Ropes / constraints =====
204
+
205
+ def create_rope(
206
+ self,
207
+ from_id: int,
208
+ to_id: int,
209
+ kind: str | int = "Simple",
210
+ **params,
211
+ ) -> int:
212
+ """Create a rope/constraint between two entities. Returns constraint_id."""
213
+ self._require_loaded()
214
+ assert self._world is not None
215
+ return self._world.create_rope(from_id, to_id, kind, **params)
216
+
217
+ def remove_rope(self, constraint_id: int) -> bool:
218
+ """Alias for destroy_rope. Removes a rope and its Box2D joint."""
219
+ self._require_loaded()
220
+ assert self._world is not None
221
+ return self._world.destroy_rope(constraint_id)
222
+
223
+ def set_rope_param(self, constraint_id: int, key: str, value) -> bool:
224
+ self._require_loaded()
225
+ assert self._world is not None
226
+ return self._world.set_rope_param(constraint_id, key, value)
227
+
228
+ def ropes(self) -> list[dict]:
229
+ """List all constraints in the registry."""
230
+ self._require_loaded()
231
+ assert self._world is not None
232
+ reg = self._world.constraints
233
+ from .constraints import KIND_IDS
234
+ out = []
235
+ for cid, c in reg._constraints.items():
236
+ out.append({
237
+ "id": cid,
238
+ "kind_id": c.constraint_id,
239
+ "kind": KIND_IDS.get(c.constraint_id, "Unknown"),
240
+ "start_local_id": c.start_object_id,
241
+ "end_local_id": c.end_object_id,
242
+ "distance": c.distance,
243
+ })
244
+ return out
245
+
246
+ # ===== Mechanic gate wires (signal connections) =====
247
+
248
+ def wire_gate(
249
+ self,
250
+ source_idx: int,
251
+ output_gate: str,
252
+ target_idx: int,
253
+ input_gate: str,
254
+ *,
255
+ name: str = "",
256
+ start_point: tuple[float, float] = (0.0, 0.0),
257
+ end_point: tuple[float, float] = (0.0, 0.0),
258
+ ) -> int:
259
+ """Hot-wire a mechanic gate connection between two containers.
260
+
261
+ Adds a signal wire from ``output_gate`` on container ``source_idx``
262
+ to ``input_gate`` on container ``target_idx``. The wire lives in the
263
+ session's ``GateWireRegistry`` and is serialized on ``save_as()``.
264
+
265
+ Args:
266
+ source_idx: Container index of the source (output) object.
267
+ output_gate: Output gate name on the source object.
268
+ target_idx: Container index of the target (input) object.
269
+ input_gate: Input gate name on the target object.
270
+ name: Optional display name for the wire.
271
+ start_point: Visual offset of the source port (local space).
272
+ end_point: Visual offset of the target port (local space).
273
+
274
+ Returns:
275
+ The wire_id (auto-incremented).
276
+ """
277
+ self._require_loaded()
278
+ assert self._world is not None
279
+ return self._world.gate_wires.connect(
280
+ source_idx, output_gate, target_idx, input_gate,
281
+ name=name, start_point=start_point, end_point=end_point,
282
+ )
283
+
284
+ def unwire_gate(
285
+ self,
286
+ wire_id: int | None = None,
287
+ *,
288
+ source_idx: int | None = None,
289
+ target_idx: int | None = None,
290
+ output_gate: str | None = None,
291
+ input_gate: str | None = None,
292
+ ) -> int:
293
+ """Hot-disconnect gate wire(s).
294
+
295
+ If ``wire_id`` is given, removes that specific wire.
296
+ Otherwise removes all wires matching the filter combination.
297
+ Returns the number of wires removed.
298
+ """
299
+ self._require_loaded()
300
+ assert self._world is not None
301
+ if wire_id is not None:
302
+ return 1 if self._world.gate_wires.disconnect(wire_id) else 0
303
+ return self._world.gate_wires.disconnect_matching(
304
+ source_idx=source_idx,
305
+ target_idx=target_idx,
306
+ output_gate=output_gate,
307
+ input_gate=input_gate,
308
+ )
309
+
310
+ def wires(self) -> list[dict]:
311
+ """List all gate wires in the registry."""
312
+ self._require_loaded()
313
+ assert self._world is not None
314
+ out = []
315
+ for w in self._world.gate_wires.list_all():
316
+ out.append({
317
+ "wire_id": w.wire_id,
318
+ "source_idx": w.source_idx,
319
+ "target_idx": w.target_idx,
320
+ "output_gate": w.output_gate,
321
+ "input_gate": w.input_gate,
322
+ "name": w.name,
323
+ })
324
+ return out
325
+
326
+ # ===== Snapshot / diff =====
327
+
328
+ def snapshot(self) -> dict:
329
+ """Return a serializable snapshot of the current world state."""
330
+ self._require_loaded()
331
+ assert self._world is not None
332
+ w = self._world
333
+ return {
334
+ "tick": w.current_tick,
335
+ "elapsed": w.elapsed_time,
336
+ "entities": self.entities(),
337
+ "ropes": self.ropes(),
338
+ "variables": dict(w.chip_variables),
339
+ "entity_count": sum(1 for e in w.entities.values() if getattr(e, "alive", True)),
340
+ }
341
+
342
+ def diff(self) -> dict:
343
+ """Return the WorldDiff as a plain dict (for inspection/logging)."""
344
+ self._require_loaded()
345
+ assert self._world is not None
346
+ assert self._doc is not None
347
+ d = build_diff_from_world(self._world, self._doc)
348
+ return {
349
+ "modified": {str(k): v for k, v in d.modified_objects.items()},
350
+ "added_count": len(d.added_objects),
351
+ "removed": sorted(d.removed_local_ids),
352
+ "constraint_lids": sorted(d.modified_constraints.keys()),
353
+ }
354
+
355
+ # ===== Write back =====
356
+
357
+ def save_as(
358
+ self,
359
+ out_path: str | Path,
360
+ *,
361
+ write_icon: bool = True,
362
+ ) -> Path:
363
+ """Diff the live world against the original save and write a new .melsave."""
364
+ self._require_loaded()
365
+ assert self._world is not None
366
+ assert self._doc is not None
367
+ return write_world_to_melsave(
368
+ self._world,
369
+ self._doc,
370
+ out_path,
371
+ write_icon=write_icon,
372
+ )
373
+
374
+ # ===== Logs / errors =====
375
+
376
+ @property
377
+ def logs(self) -> list:
378
+ self._require_loaded()
379
+ assert self._runner is not None
380
+ return self._runner.logs
381
+
382
+ @property
383
+ def last_error(self) -> Optional[str]:
384
+ return self._runner.last_error if self._runner else None
385
+
386
+ @property
387
+ def outputs(self) -> dict:
388
+ self._require_loaded()
389
+ assert self._runner is not None
390
+ return self._runner.get_outputs()
391
+
392
+ # ===== Internal =====
393
+
394
+ def _require_loaded(self) -> None:
395
+ if not self._loaded or self._world is None or self._runner is None or self._doc is None:
396
+ raise RuntimeError("MelsaveSession not loaded; call .load() or use as context manager")
@@ -0,0 +1,190 @@
1
+ """Spawn requests — spawn.create returns requestId; entities created immediately (no artificial delay)."""
2
+ from __future__ import annotations
3
+
4
+ from dataclasses import dataclass, field
5
+ from typing import Any, Literal, Optional
6
+
7
+ from .catalog import resolve_spawn_name
8
+ from .entity import Entity
9
+ from .world import WorldContext
10
+
11
+ SpawnKind = Literal["create", "clone", "clone_temp", "save", "mod"]
12
+
13
+
14
+ @dataclass
15
+ class SpawnOp:
16
+ request_id: int
17
+ kind: SpawnKind
18
+ alias_or_name: str = ""
19
+ x: float = 0.0
20
+ y: float = 0.0
21
+ angle: Optional[float] = None
22
+ object_id: Optional[int] = None
23
+ clone_entity_id: Optional[int] = None
24
+ save_or_mod_name: str = ""
25
+ dynamic: bool = True
26
+
27
+
28
+ @dataclass
29
+ class SpawnQueue:
30
+ world: WorldContext
31
+ pending_ops: list[SpawnOp] = field(default_factory=list)
32
+ _ready_callbacks: list[tuple[int, list[int]]] = field(default_factory=list)
33
+
34
+ def allocate_request_id(self) -> int:
35
+ self.world.spawn_request_counter += 1
36
+ rid = self.world.spawn_request_counter
37
+ self.world.spawn_requests[rid] = []
38
+ return rid
39
+
40
+ def enqueue_create(
41
+ self,
42
+ alias_or_name: str,
43
+ x: float,
44
+ y: float,
45
+ angle: Optional[float] = None,
46
+ ) -> int:
47
+ key = str(alias_or_name).strip()
48
+ oid = int(key) if key.isdigit() else None
49
+ rid = self.allocate_request_id()
50
+ op = SpawnOp(
51
+ request_id=rid,
52
+ kind="create",
53
+ alias_or_name=key,
54
+ x=float(x),
55
+ y=float(y),
56
+ angle=angle,
57
+ object_id=oid,
58
+ )
59
+ ent_ids = self._execute_one(op)
60
+ self.world.spawn_requests[rid] = ent_ids
61
+ self._ready_callbacks.append((rid, ent_ids))
62
+ return rid
63
+
64
+ def enqueue_clone(
65
+ self,
66
+ entity_id: int,
67
+ x: float,
68
+ y: float,
69
+ *,
70
+ temp: bool = False,
71
+ ) -> int:
72
+ rid = self.allocate_request_id()
73
+ op = SpawnOp(
74
+ request_id=rid,
75
+ kind="clone_temp" if temp else "clone",
76
+ x=float(x),
77
+ y=float(y),
78
+ clone_entity_id=int(entity_id),
79
+ )
80
+ ent_ids = self._execute_one(op)
81
+ self.world.spawn_requests[rid] = ent_ids
82
+ self._ready_callbacks.append((rid, ent_ids))
83
+ return rid
84
+
85
+ def enqueue_save(self, name: str, x: float, y: float) -> int:
86
+ rid = self.allocate_request_id()
87
+ op = SpawnOp(
88
+ request_id=rid,
89
+ kind="save",
90
+ x=float(x),
91
+ y=float(y),
92
+ save_or_mod_name=str(name),
93
+ )
94
+ ent_ids = self._execute_one(op)
95
+ self.world.spawn_requests[rid] = ent_ids
96
+ self._ready_callbacks.append((rid, ent_ids))
97
+ return rid
98
+
99
+ def enqueue_mod(self, name: str, x: float, y: float) -> int:
100
+ rid = self.allocate_request_id()
101
+ op = SpawnOp(
102
+ request_id=rid,
103
+ kind="mod",
104
+ x=float(x),
105
+ y=float(y),
106
+ save_or_mod_name=str(name),
107
+ )
108
+ ent_ids = self._execute_one(op)
109
+ self.world.spawn_requests[rid] = ent_ids
110
+ self._ready_callbacks.append((rid, ent_ids))
111
+ return rid
112
+
113
+ def flush(self) -> list[tuple[int, list[int]]]:
114
+ """Fire OnSpawned for entities already created this frame."""
115
+ results = list(self._ready_callbacks)
116
+ self._ready_callbacks = []
117
+ for op in self.pending_ops:
118
+ ent_ids = self._execute_one(op)
119
+ self.world.spawn_requests[op.request_id] = ent_ids
120
+ results.append((op.request_id, ent_ids))
121
+ self.pending_ops = []
122
+ return results
123
+
124
+ def _execute_one(self, op: SpawnOp) -> list[int]:
125
+ w = self.world
126
+ if op.kind in ("clone", "clone_temp"):
127
+ src = w.get_entity(op.clone_entity_id or 0)
128
+ if not src:
129
+ return []
130
+ e = w.spawn_entity(
131
+ name=src.name,
132
+ x=op.x,
133
+ y=op.y,
134
+ object_id=src.object_id,
135
+ dynamic=op.kind != "clone_temp" or True,
136
+ )
137
+ self._copy_entity_state(src, e, temp=op.kind == "clone_temp")
138
+ w.sync_body_from_entity(e.entity_id)
139
+ return [e.entity_id]
140
+
141
+ if op.kind == "save":
142
+ display = f"[save]{op.save_or_mod_name}"
143
+ e = w.spawn_entity(display, op.x, op.y, dynamic=True)
144
+ if op.angle is not None:
145
+ e.angle = float(op.angle)
146
+ return [e.entity_id]
147
+
148
+ if op.kind == "mod":
149
+ display = f"[mod]{op.save_or_mod_name}"
150
+ e = w.spawn_entity(display, op.x, op.y, dynamic=True)
151
+ if op.angle is not None:
152
+ e.angle = float(op.angle)
153
+ return [e.entity_id]
154
+
155
+ resolved = resolve_spawn_name(op.alias_or_name) or op.alias_or_name
156
+ e = w.spawn_entity(
157
+ name=resolved,
158
+ x=op.x,
159
+ y=op.y,
160
+ object_id=op.object_id,
161
+ dynamic=op.dynamic,
162
+ )
163
+ if op.angle is not None:
164
+ e.angle = float(op.angle)
165
+ if w.get_body(e.entity_id) is not None:
166
+ import math
167
+
168
+ body = w.get_body(e.entity_id)
169
+ if body is not None:
170
+ body.angle = math.radians(float(op.angle))
171
+ return [e.entity_id]
172
+
173
+ @staticmethod
174
+ def _copy_entity_state(src: Entity, dst: Entity, *, temp: bool) -> None:
175
+ dst.scale_x = src.scale_x
176
+ dst.scale_y = src.scale_y
177
+ dst.angle = src.angle
178
+ dst.mass = src.mass
179
+ dst.gravity_scale = src.gravity_scale
180
+ dst.velocity_x = src.velocity_x if not temp else 0.0
181
+ dst.velocity_y = src.velocity_y if not temp else 0.0
182
+ dst.angular_velocity = src.angular_velocity if not temp else 0.0
183
+ dst.color_r, dst.color_g, dst.color_b, dst.color_a = (
184
+ src.color_r,
185
+ src.color_g,
186
+ src.color_b,
187
+ src.color_a,
188
+ )
189
+ dst.temperature = src.temperature
190
+ dst.health = src.health
@@ -0,0 +1,105 @@
1
+ -- Full bit32 for melon (Lua 5.2); works without LuaJIT `bit` library
2
+ if bit32 ~= nil and type(bit32.band) == 'function' and type(bit32.btest) == 'function' then
3
+ return
4
+ end
5
+
6
+ local function to_u32(n)
7
+ n = math.floor(tonumber(n) or 0)
8
+ if n < 0 then n = n + 4294967296 end
9
+ return n % 4294967296
10
+ end
11
+
12
+ local function band(a, b)
13
+ a, b = to_u32(a), to_u32(b)
14
+ local r, p = 0, 1
15
+ for _ = 1, 32 do
16
+ if a % 2 == 1 and b % 2 == 1 then r = r + p end
17
+ a, b = math.floor(a / 2), math.floor(b / 2)
18
+ p = p * 2
19
+ end
20
+ return r
21
+ end
22
+
23
+ local function bor(a, b)
24
+ a, b = to_u32(a), to_u32(b)
25
+ local r, p = 0, 1
26
+ for _ = 1, 32 do
27
+ if a % 2 == 1 or b % 2 == 1 then r = r + p end
28
+ a, b = math.floor(a / 2), math.floor(b / 2)
29
+ p = p * 2
30
+ end
31
+ return r
32
+ end
33
+
34
+ local function bxor(a, b)
35
+ a, b = to_u32(a), to_u32(b)
36
+ local r, p = 0, 1
37
+ for _ = 1, 32 do
38
+ if a % 2 ~= b % 2 then r = r + p end
39
+ a, b = math.floor(a / 2), math.floor(b / 2)
40
+ p = p * 2
41
+ end
42
+ return r
43
+ end
44
+
45
+ local function bnot(a)
46
+ return to_u32(4294967295 - to_u32(a))
47
+ end
48
+
49
+ local function lshift(a, n)
50
+ return to_u32(to_u32(a) * (2 ^ (n % 32)))
51
+ end
52
+
53
+ local function rshift(a, n)
54
+ return math.floor(to_u32(a) / (2 ^ (n % 32)))
55
+ end
56
+
57
+ local function arshift(a, n)
58
+ a = to_u32(a)
59
+ n = n % 32
60
+ if a >= 2147483648 then
61
+ return to_u32(math.floor(a / (2 ^ n)) + (2 ^ (32 - n) - 1) * (2 ^ n))
62
+ end
63
+ return rshift(a, n)
64
+ end
65
+
66
+ bit32 = {
67
+ band = function(...) local a = select(1, ...); for i = 2, select('#', ...) do a = band(a, select(i, ...)) end; return a end,
68
+ bor = function(...) local a = select(1, ...); for i = 2, select('#', ...) do a = bor(a, select(i, ...)) end; return a end,
69
+ bxor = function(...) local a = select(1, ...); for i = 2, select('#', ...) do a = bxor(a, select(i, ...)) end; return a end,
70
+ bnot = bnot,
71
+ lshift = lshift,
72
+ rshift = rshift,
73
+ arshift = arshift,
74
+ lrotate = function(x, disp)
75
+ x, disp = to_u32(x), disp % 32
76
+ return to_u32(bor(lshift(x, disp), rshift(x, 32 - disp)))
77
+ end,
78
+ rrotate = function(x, disp)
79
+ x, disp = to_u32(x), disp % 32
80
+ return to_u32(bor(rshift(x, disp), lshift(x, 32 - disp)))
81
+ end,
82
+ btest = function(...)
83
+ local n = select('#', ...)
84
+ if n < 1 then return false end
85
+ local acc = to_u32(select(1, ...))
86
+ for i = 2, n do acc = band(acc, to_u32(select(i, ...))) end
87
+ return acc ~= 0
88
+ end,
89
+ extract = function(n, field, width)
90
+ n = to_u32(n)
91
+ field = field or 0
92
+ width = width or 1
93
+ local mask = lshift(1, width) - 1
94
+ return band(rshift(n, field), mask)
95
+ end,
96
+ replace = function(n, v, field, width)
97
+ n, v = to_u32(n), to_u32(v)
98
+ field = field or 0
99
+ width = width or 1
100
+ local mask = lshift(1, width) - 1
101
+ v = band(v, mask)
102
+ local cleared = band(n, bnot(lshift(mask, field)))
103
+ return to_u32(cleared + lshift(v, field))
104
+ end,
105
+ }