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
@@ -0,0 +1,170 @@
1
+ """Shard E: entity write NodeOperationType emitters (Entity API side effects)."""
2
+ from __future__ import annotations
3
+
4
+ from ..ir import VPNode
5
+ from ._base import NodeEmitter
6
+
7
+
8
+ def _g(i: int, ins: list[str], default: str = "0") -> str:
9
+ return ins[i] if i < len(ins) else default
10
+
11
+
12
+ def _ent(ins: list[str], idx: int = 0) -> str:
13
+ if idx < len(ins):
14
+ return f"Entity(({_g(idx, ins)}))"
15
+ return "Entity(1)"
16
+
17
+
18
+ def _truthy(expr: str) -> str:
19
+ return f"(({expr}) ~= 0 and ({expr}) ~= nil)"
20
+
21
+
22
+ def _vec2(ins: list[str], idx: int) -> tuple[str, str]:
23
+ if idx >= len(ins):
24
+ return "0", "0"
25
+ base = ins[idx]
26
+ if base.startswith('G["') and base.endswith('"]'):
27
+ key = base[3:-2]
28
+ return base, f'G["{key}_o1"]'
29
+ return f"({base})", "0"
30
+
31
+
32
+ def emit_add_force(uid: str, ins: list[str], _n: VPNode) -> list[str]:
33
+ e = _ent(ins, 0)
34
+ fx, fy = _vec2(ins, 1)
35
+ return [f" {e}:addForce({fx}, {fy})"]
36
+
37
+
38
+ def emit_add_angular_force(uid: str, ins: list[str], _n: VPNode) -> list[str]:
39
+ e = _ent(ins, 0)
40
+ t = _g(1, ins)
41
+ return [f" {e}:addTorque(({t}))"]
42
+
43
+
44
+ def emit_add_force_at_position(uid: str, ins: list[str], _n: VPNode) -> list[str]:
45
+ e = _ent(ins, 0)
46
+ fx, fy = _vec2(ins, 1)
47
+ px, py = _vec2(ins, 2)
48
+ return [f" {e}:addForceAtPosition({fx}, {fy}, {px}, {py})"]
49
+
50
+
51
+ def emit_activate(uid: str, ins: list[str], _n: VPNode) -> list[str]:
52
+ e = _ent(ins, 0)
53
+ flag = _g(1, ins)
54
+ lines = [
55
+ f" if {_truthy(flag)} then",
56
+ f" {e}:activate(1)",
57
+ " else",
58
+ f" {e}:activate(0)",
59
+ " end",
60
+ f' G["{uid}"] = {e}:getActivationInput()',
61
+ ]
62
+ return lines
63
+
64
+
65
+ def emit_freeze(uid: str, ins: list[str], _n: VPNode) -> list[str]:
66
+ e = _ent(ins, 0)
67
+ flag = _g(1, ins)
68
+ lines = [
69
+ f" if {_truthy(flag)} then",
70
+ f" {e}:freeze(1)",
71
+ " else",
72
+ f" {e}:freeze(0)",
73
+ " end",
74
+ f' G["{uid}"] = {e}:isFrozen()',
75
+ ]
76
+ return lines
77
+
78
+
79
+ def emit_ignite(uid: str, ins: list[str], _n: VPNode) -> list[str]:
80
+ e = _ent(ins, 0)
81
+ flag = _g(1, ins)
82
+ lines = [
83
+ f" if {_truthy(flag)} then",
84
+ f" {e}:ignite()",
85
+ " end",
86
+ f' G["{uid}"] = {e}:isOnFire()',
87
+ ]
88
+ return lines
89
+
90
+
91
+ def emit_extinguish(uid: str, ins: list[str], _n: VPNode) -> list[str]:
92
+ e = _ent(ins, 0)
93
+ flag = _g(1, ins)
94
+ lines = [
95
+ f" if {_truthy(flag)} then",
96
+ f" {e}:extinguish()",
97
+ " end",
98
+ ]
99
+ return lines
100
+
101
+
102
+ def emit_delete(uid: str, ins: list[str], _n: VPNode) -> list[str]:
103
+ e = _ent(ins, 0)
104
+ flag = _g(1, ins)
105
+ return [
106
+ f" if {_truthy(flag)} then",
107
+ f" {e}:delete()",
108
+ " end",
109
+ ]
110
+
111
+
112
+ def emit_look_at(uid: str, ins: list[str], _n: VPNode) -> list[str]:
113
+ e = _ent(ins, 0)
114
+ rate = _g(2, ins, "360")
115
+ return [f" {e}:lookAt(({_g(1, ins)}), ({rate}))"]
116
+
117
+
118
+ def emit_draggable(uid: str, ins: list[str], _n: VPNode) -> list[str]:
119
+ e = _ent(ins, 0)
120
+ flag = _g(1, ins)
121
+ lines = [
122
+ f" if {_truthy(flag)} then",
123
+ f" {e}:setDraggable(1)",
124
+ " else",
125
+ f" {e}:setDraggable(0)",
126
+ " end",
127
+ f' G["{uid}"] = {e}:isDraggable()',
128
+ ]
129
+ return lines
130
+
131
+
132
+ def emit_gravity(uid: str, ins: list[str], _n: VPNode) -> list[str]:
133
+ e = _ent(ins, 0)
134
+ scale = _g(1, ins)
135
+ lines = [
136
+ f" {e}:setGravityScale(({scale}))",
137
+ f' G["{uid}"] = {e}:getGravityScale()',
138
+ ]
139
+ return lines
140
+
141
+
142
+ def emit_follow(uid: str, ins: list[str], _n: VPNode) -> list[str]:
143
+ on = _g(1, ins)
144
+ off = _g(2, ins)
145
+ ent_id = _g(0, ins)
146
+ lines = [
147
+ f" if {_truthy(on)} then",
148
+ f" if camera and camera.follow then camera.follow(({ent_id})) end",
149
+ f" elseif {_truthy(off)} then",
150
+ " if camera and camera.unfollow then camera.unfollow() end",
151
+ " end",
152
+ f' G["{uid}"] = (camera and camera.isFollowing and camera.isFollowing()) or 0',
153
+ ]
154
+ return lines
155
+
156
+
157
+ ENTITY_WRITE_EMITTERS: dict[str, NodeEmitter] = {
158
+ "AddForce": emit_add_force,
159
+ "AddAngularForce": emit_add_angular_force,
160
+ "AddForceAtPosition": emit_add_force_at_position,
161
+ "Activate": emit_activate,
162
+ "Freeze": emit_freeze,
163
+ "Ignite": emit_ignite,
164
+ "Extinguish": emit_extinguish,
165
+ "Delete": emit_delete,
166
+ "LookAt": emit_look_at,
167
+ "Draggable": emit_draggable,
168
+ "Gravity": emit_gravity,
169
+ "Follow": emit_follow,
170
+ }
@@ -0,0 +1,323 @@
1
+ """Shard G: flow / IO / time nodes (Root, Exit, constants, state)."""
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import math
6
+
7
+ from ..save_data import constant_value
8
+ from ..ir import VPNode
9
+ from ._base import NodeEmitter
10
+
11
+
12
+ # Module-level chip_variables map (Key -> Value), set by codegen before emission.
13
+ # Variable nodes look up their initial value here via MechanicConnectionId.
14
+ _chip_variables: dict[str, float] = {}
15
+
16
+
17
+ def set_chip_variables(variables: dict[str, float]) -> None:
18
+ """Inject chip_variables (Key -> Value) for emit_variable lookups."""
19
+ global _chip_variables
20
+ _chip_variables = dict(variables) if variables else {}
21
+
22
+
23
+ def _variable_init_value(n: VPNode) -> float:
24
+ """Get a Variable node's initial value.
25
+
26
+ Variable nodes store user-set values in chip_variables (keyed by the node's
27
+ MechanicConnectionId, e.g. 'variable 7'), NOT in SaveData. If the variable
28
+ is found in chip_variables, use that value. Otherwise fall back to
29
+ SaveData.DataValue (constant_value), then 0.0.
30
+ """
31
+ mci = n.raw.get("MechanicConnectionId")
32
+ if mci and mci in _chip_variables:
33
+ return _chip_variables[mci]
34
+ return constant_value(n)
35
+
36
+
37
+ def _assign(uid: str, expr: str) -> list[str]:
38
+ return [f' G["{uid}"] = {expr}']
39
+
40
+
41
+ def _g(i: int, ins: list[str], default: str = "0") -> str:
42
+ return ins[i] if i < len(ins) else default
43
+
44
+
45
+ def _save_data_obj(node: VPNode) -> dict:
46
+ sd = node.save_data
47
+ if not sd:
48
+ return {}
49
+ try:
50
+ obj = json.loads(sd)
51
+ return obj if isinstance(obj, dict) else {}
52
+ except (json.JSONDecodeError, TypeError):
53
+ return {}
54
+
55
+
56
+ def _gate_name_from_save(node: VPNode, fallback: str) -> str:
57
+ """Return the raw gate name (NOT lua-identifier-converted) from SaveData.
58
+ Gate names may contain spaces ("input 1"); callers must use bracket notation
59
+ when emitting Lua table accesses."""
60
+ obj = _save_data_obj(node)
61
+ for key in ("DataName", "MechanicInputId", "MechanicOutputId", "Name"):
62
+ v = obj.get(key)
63
+ if v is not None and str(v).strip():
64
+ return str(v).strip()
65
+ return fallback
66
+
67
+
68
+ def _lua_ident(name: str, fallback: str) -> str:
69
+ s = "".join(c if c.isalnum() or c == "_" else "_" for c in name)
70
+ if not s or s[0].isdigit():
71
+ return fallback
72
+ return s
73
+
74
+
75
+ def _lua_str(s: str) -> str:
76
+ """Quote a string for use as a Lua table key (bracket notation).
77
+ Escapes backslash, quote, and newline so the key is safe for any gate name
78
+ including those with spaces ("input 1") or special characters."""
79
+ esc = s.replace("\\", "\\\\").replace('"', '\\"').replace("\n", "\\n")
80
+ return '"{}"'.format(esc)
81
+
82
+
83
+ # GateDataType -> inputs/outputs subtable name (matches runner.py sub_categories)
84
+ _GATE_TO_SUBTABLE: dict[str, str] = {
85
+ "Entity": "entity",
86
+ "Number": "num",
87
+ "IntegerNumber": "int",
88
+ "String": "string",
89
+ "Vector": "vec",
90
+ "Color": "color",
91
+ "ArrayNumber": "array_num",
92
+ "ArrayString": "array_string",
93
+ "ArrayVector": "array_vec",
94
+ "ArrayEntity": "array_entity",
95
+ }
96
+
97
+
98
+ def _gate_subtable(node: VPNode) -> str:
99
+ """Return the inputs/outputs subtable name for this Root/Exit node's gate type."""
100
+ gdt = node.raw.get("GateDataType")
101
+ if isinstance(gdt, str):
102
+ gdt = gdt.strip()
103
+ elif isinstance(gdt, int):
104
+ # Some saves store GateDataType as int (enum value)
105
+ int_map = {1: "Entity", 2: "Number", 4: "String", 8: "Vector",
106
+ 24: "Color", 32: "IntegerNumber"}
107
+ gdt = int_map.get(gdt, "Number")
108
+ else:
109
+ gdt = "Number"
110
+ return _GATE_TO_SUBTABLE.get(gdt, "num")
111
+
112
+
113
+ def emit_constant(uid: str, _ins: list[str], n: VPNode) -> list[str]:
114
+ v = constant_value(n)
115
+ if v == int(v):
116
+ return _assign(uid, str(int(v)))
117
+ return _assign(uid, str(v))
118
+
119
+
120
+ def emit_pi(uid: str, _ins: list[str], _n: VPNode) -> list[str]:
121
+ return _assign(uid, str(math.pi))
122
+
123
+
124
+ def emit_e(uid: str, _ins: list[str], _n: VPNode) -> list[str]:
125
+ return _assign(uid, str(math.e))
126
+
127
+
128
+ def emit_identity(uid: str, ins: list[str], _n: VPNode) -> list[str]:
129
+ return _assign(uid, _g(0, ins))
130
+
131
+
132
+ def emit_root(uid: str, ins: list[str], n: VPNode) -> list[str]:
133
+ # Root node's MechanicConnectionId (top-level field) maps to the input gate name.
134
+ # Gate names may contain spaces ("input 1") — use bracket notation to access them.
135
+ mec = n.raw.get("MechanicConnectionId") or ""
136
+ if mec:
137
+ gate_raw = mec.strip()
138
+ else:
139
+ gate_raw = _gate_name_from_save(n, "a")
140
+ obj = _save_data_obj(n)
141
+ ent = obj.get("EntityId") or obj.get("entityId")
142
+ sub = _gate_subtable(n) # subtable name: num/entity/string/vec/...
143
+ gkey = '[{}]'.format(_lua_str(gate_raw)) # bracket-quoted key, safe for spaces
144
+ lines = [f" -- Root {uid}: {sub}/{gate_raw} input gate"]
145
+
146
+ if ent is not None:
147
+ # Entity-reference Root: hard-wired entity id
148
+ lines.append(f' G["{uid}"] = {int(ent)}')
149
+ elif sub == "vec":
150
+ # Vector input: store scalar primary + vector form in _vec
151
+ lines.append(f' local _rv = inputs.vec and inputs.vec{gkey}')
152
+ lines.append(f' if _rv then')
153
+ lines.append(f' G["{uid}_vec"] = _rv')
154
+ lines.append(f' G["{uid}"] = type(_rv) == "table" and (_rv.x or _rv[1] or 0) or _rv')
155
+ lines.append(f' else')
156
+ lines.append(f' local _n = (inputs.num and inputs.num{gkey}) or 0')
157
+ lines.append(f' G["{uid}"] = _n')
158
+ lines.append(f' G["{uid}_vec"] = {{x = _n, y = 0, z = 0, w = 0}}')
159
+ lines.append(f' end')
160
+ elif sub == "entity":
161
+ # Entity input: read entity id from inputs.entity["<gate>"]
162
+ lines.append(f' G["{uid}"] = (inputs.entity and inputs.entity{gkey}) or 0')
163
+ elif sub == "string":
164
+ # String input
165
+ lines.append(f' G["{uid}"] = (inputs.string and inputs.string{gkey}) or ""')
166
+ elif ins:
167
+ lines.append(f' G["{uid}"] = {ins[0]}')
168
+ else:
169
+ # Number / int / color / array_* — default to num subtable
170
+ lines.append(f' G["{uid}"] = (inputs.{sub} and inputs.{sub}{gkey}) or 0')
171
+ return lines
172
+
173
+
174
+ def emit_exit(uid: str, ins: list[str], n: VPNode) -> list[str]:
175
+ if not ins:
176
+ return [f" -- Exit {uid}: no wired input"]
177
+ # Exit node's MechanicConnectionId (top-level field) maps to the output gate name.
178
+ # Gate names may contain spaces ("input 2") — use bracket notation to access them.
179
+ mec = n.raw.get("MechanicConnectionId") or ""
180
+ if mec:
181
+ gate_raw = mec.strip()
182
+ else:
183
+ gate_raw = _gate_name_from_save(n, "out")
184
+ sub = _gate_subtable(n) # subtable name: num/entity/string/vec/color/array_*
185
+ gkey = '[{}]'.format(_lua_str(gate_raw)) # bracket-quoted key, safe for spaces
186
+ return [f" outputs.{sub}{gkey} = {ins[0]}"]
187
+
188
+
189
+ def emit_variable(uid: str, ins: list[str], n: VPNode) -> list[str]:
190
+ # Variable nodes with the same MechanicConnectionId share state in VP chips.
191
+ # The shared G key is the MechanicConnectionId (e.g. "variable 10").
192
+ # Other nodes reference this variable by uid; _input_exprs remaps those
193
+ # references to the shared key (see codegen._build_var_uid_map).
194
+ mci = n.raw.get("MechanicConnectionId")
195
+ key = mci if mci else uid
196
+ init = _variable_init_value(n)
197
+ init_s = str(int(init)) if init == int(init) else str(init)
198
+ has_set_input = len(ins) >= 2 and ins[0] != "0"
199
+ lines = []
200
+ if has_set_input:
201
+ # Writer node: update shared state when condition is non-zero
202
+ lines.append(
203
+ f" if ({ins[1]}) ~= 0 then G[\"{key}\"] = {ins[0]} end"
204
+ )
205
+ # Initialize shared state on first tick (only if not yet set)
206
+ lines.append(f' G["{key}"] = G["{key}"] or {init_s}')
207
+ return lines
208
+
209
+
210
+ def emit_counter(uid: str, ins: list[str], _n: VPNode) -> list[str]:
211
+ mem = f'["_cnt_{uid}"]'
212
+ num = _g(0, ins)
213
+ inc = _g(1, ins, "0")
214
+ dec = _g(2, ins, "0")
215
+ rst = _g(3, ins, "0")
216
+ return [
217
+ f" G{mem} = G{mem} or {num}",
218
+ f" if ({rst}) ~= 0 then G{mem} = {num} end",
219
+ f" G{mem} = G{mem} + ({inc}) - ({dec})",
220
+ f' G["{uid}"] = G{mem}',
221
+ ]
222
+
223
+
224
+ def emit_delay(uid: str, ins: list[str], _n: VPNode) -> list[str]:
225
+ tmem = f'["_delay_{uid}"]'
226
+ arm = f'["_delay_arm_{uid}"]'
227
+ delay = _g(1, ins, "0")
228
+ enable = _g(2, ins, "0")
229
+ rst = _g(3, ins, "0")
230
+ hold = _g(4, ins, "0")
231
+ return [
232
+ f" G{tmem} = G{tmem} or 0",
233
+ f" G{arm} = G{arm} or false",
234
+ f" if ({rst}) ~= 0 then G{tmem} = 0 G{arm} = false end",
235
+ f" if ({enable}) ~= 0 and not G{arm} then G{arm} = true G{tmem} = 0 end",
236
+ f" if G{arm} then G{tmem} = G{tmem} + (1 / math.max(1, chip_tps or 20)) end",
237
+ f" local _dready = G{arm} and G{tmem} >= ({delay})",
238
+ f' G["{uid}"] = (_dready and ({hold}) ~= 0) and 1 or 0',
239
+ ]
240
+
241
+
242
+ def emit_trigger(uid: str, ins: list[str], _n: VPNode) -> list[str]:
243
+ prev = f'["_trg_{uid}"]'
244
+ cur = _g(0, ins)
245
+ return [
246
+ f" G{prev} = G{prev} or 0",
247
+ f' G["{uid}"] = (({cur}) ~= 0 and G{prev} == 0) and 1 or 0',
248
+ f" G{prev} = ({cur}) ~= 0 and 1 or 0",
249
+ ]
250
+
251
+
252
+ def emit_time(uid: str, _ins: list[str], n: VPNode) -> list[str]:
253
+ outs = n.outputs or []
254
+ lines = [f" -- Time {uid}: sandbox tick time stub"]
255
+ keys = ("time", "delta", "frame", "unscaled")
256
+ for i in range(min(4, max(1, len(outs)))):
257
+ key = f"{uid}_o{i}"
258
+ if i == 0:
259
+ lines.append(f' G["{key}"] = (G._vp_tick or 0) / math.max(1, chip_tps or 20)')
260
+ elif i == 1:
261
+ lines.append(f' G["{key}"] = 1 / math.max(1, chip_tps or 20)')
262
+ else:
263
+ lines.append(f' G["{key}"] = G._vp_tick or 0')
264
+ lines.append(f' G["{uid}_{keys[i]}"] = G["{key}"]')
265
+ # Always set primary G[uid] so downstream nodes can reference it
266
+ lines.append(f' G["{uid}"] = G["{uid}_o0"]')
267
+ return lines
268
+
269
+
270
+ def emit_random(uid: str, ins: list[str], _n: VPNode) -> list[str]:
271
+ lo = _g(0, ins, "0")
272
+ hi = _g(1, ins, "1")
273
+ return [
274
+ f" local _rlo, _rhi = ({lo}), ({hi})",
275
+ f" if _rlo > _rhi then _rlo, _rhi = _rhi, _rlo end",
276
+ f' G["{uid}"] = _rlo + math.random() * (_rhi - _rlo)',
277
+ ]
278
+
279
+
280
+ def emit_sticker(uid: str, _ins: list[str], _n: VPNode) -> list[str]:
281
+ return [f" -- Sticker {uid}: editor-only (no runtime)"]
282
+
283
+
284
+ def emit_delta_previous_current(uid: str, ins: list[str], _n: VPNode) -> list[str]:
285
+ cur = _g(0, ins)
286
+ mem = f'["_dpc_prev_{uid}"]'
287
+ return [
288
+ f" G{mem} = G{mem}",
289
+ f' G["{uid}"] = (({cur}) or 0) - (G{mem} or 0)',
290
+ f" G{mem} = ({cur}) or 0",
291
+ ]
292
+
293
+
294
+ def emit_accumulate(uid: str, ins: list[str], _n: VPNode) -> list[str]:
295
+ val = _g(0, ins, "0")
296
+ rst = _g(1, ins, "0")
297
+ mem = f'["_acc_{uid}"]'
298
+ dt = "1 / math.max(1, chip_tps or 20)"
299
+ return [
300
+ f" G{mem} = G{mem} or 0",
301
+ f" if ({rst}) ~= 0 then G{mem} = 0 end",
302
+ f" G{mem} = G{mem} + ({val}) * ({dt})",
303
+ f' G["{uid}"] = G{mem}',
304
+ ]
305
+
306
+
307
+ FLOW_EMITTERS: dict[str, NodeEmitter] = {
308
+ "Root": emit_root,
309
+ "Exit": emit_exit,
310
+ "Constant": emit_constant,
311
+ "Variable": emit_variable,
312
+ "Counter": emit_counter,
313
+ "Delay": emit_delay,
314
+ "Trigger": emit_trigger,
315
+ "Identity": emit_identity,
316
+ "Sticker": emit_sticker,
317
+ "Pi": emit_pi,
318
+ "E": emit_e,
319
+ "Time": emit_time,
320
+ "Random": emit_random,
321
+ "DeltaPreviousCurrent": emit_delta_previous_current,
322
+ "Accumulate": emit_accumulate,
323
+ }
@@ -0,0 +1,131 @@
1
+ """Shard C: logic, compare, branch, and select node emitters."""
2
+ from __future__ import annotations
3
+
4
+ from ..ir import VPNode
5
+ from ._base import NodeEmitter
6
+
7
+
8
+ def _assign(uid: str, expr: str) -> list[str]:
9
+ return [f' G["{uid}"] = {expr}']
10
+
11
+
12
+ def _g(i: int, ins: list[str], default: str = "0") -> str:
13
+ return ins[i] if i < len(ins) else default
14
+
15
+
16
+ def emit_and(uid: str, ins: list[str], _n: VPNode) -> list[str]:
17
+ a, b = _g(0, ins), _g(1, ins)
18
+ return _assign(uid, f"(({a}) ~= 0 and ({b}) ~= 0) and 1 or 0")
19
+
20
+
21
+ def emit_or(uid: str, ins: list[str], _n: VPNode) -> list[str]:
22
+ a, b = _g(0, ins), _g(1, ins)
23
+ return _assign(uid, f"(({a}) ~= 0 or ({b}) ~= 0) and 1 or 0")
24
+
25
+
26
+ def emit_not(uid: str, ins: list[str], _n: VPNode) -> list[str]:
27
+ a = _g(0, ins)
28
+ return _assign(uid, f"(({a}) ~= 0) and 0 or 1")
29
+
30
+
31
+ def emit_nand(uid: str, ins: list[str], _n: VPNode) -> list[str]:
32
+ a, b = _g(0, ins), _g(1, ins)
33
+ return _assign(uid, f"(({a}) ~= 0 and ({b}) ~= 0) and 0 or 1")
34
+
35
+
36
+ def emit_nor(uid: str, ins: list[str], _n: VPNode) -> list[str]:
37
+ a, b = _g(0, ins), _g(1, ins)
38
+ return _assign(uid, f"(({a}) ~= 0 or ({b}) ~= 0) and 0 or 1")
39
+
40
+
41
+ def emit_xor(uid: str, ins: list[str], _n: VPNode) -> list[str]:
42
+ a, b = _g(0, ins), _g(1, ins)
43
+ return _assign(
44
+ uid,
45
+ f"((({a}) ~= 0) ~= (({b}) ~= 0)) and 1 or 0",
46
+ )
47
+
48
+
49
+ def emit_branch(uid: str, ins: list[str], _n: VPNode) -> list[str]:
50
+ cond = _g(0, ins)
51
+ true_v = _g(1, ins)
52
+ false_v = _g(2, ins)
53
+ return [
54
+ f' G["{uid}_o0"] = ({true_v})',
55
+ f' G["{uid}_o1"] = ({false_v})',
56
+ f' G["{uid}"] = (({cond}) > 0 and ({true_v}) or ({false_v}))',
57
+ ]
58
+
59
+
60
+ def emit_select(uid: str, ins: list[str], _n: VPNode) -> list[str]:
61
+ idx = _g(0, ins)
62
+ arms = ", ".join(f"({_g(i, ins)})" for i in range(1, 11))
63
+ return [
64
+ f" local _seli = math.floor(({idx}))",
65
+ f" local _selarms = {{{arms}}}",
66
+ f' G["{uid}"] = _selarms[_seli + 1] or 0',
67
+ ]
68
+
69
+
70
+ def emit_equal(uid: str, ins: list[str], _n: VPNode) -> list[str]:
71
+ a, b = _g(0, ins), _g(1, ins)
72
+ return _assign(uid, f"(({a}) == ({b})) and 1 or 0")
73
+
74
+
75
+ def emit_not_equal(uid: str, ins: list[str], _n: VPNode) -> list[str]:
76
+ a, b = _g(0, ins), _g(1, ins)
77
+ return _assign(uid, f"(({a}) ~= ({b})) and 1 or 0")
78
+
79
+
80
+ def emit_greater(uid: str, ins: list[str], _n: VPNode) -> list[str]:
81
+ a, b = _g(0, ins), _g(1, ins)
82
+ return _assign(uid, f"(({a}) > ({b})) and 1 or 0")
83
+
84
+
85
+ def emit_less(uid: str, ins: list[str], _n: VPNode) -> list[str]:
86
+ a, b = _g(0, ins), _g(1, ins)
87
+ return _assign(uid, f"(({a}) < ({b})) and 1 or 0")
88
+
89
+
90
+ def emit_greater_or_equal(uid: str, ins: list[str], _n: VPNode) -> list[str]:
91
+ a, b = _g(0, ins), _g(1, ins)
92
+ return _assign(uid, f"(({a}) >= ({b})) and 1 or 0")
93
+
94
+
95
+ def emit_less_or_equal(uid: str, ins: list[str], _n: VPNode) -> list[str]:
96
+ a, b = _g(0, ins), _g(1, ins)
97
+ return _assign(uid, f"(({a}) <= ({b})) and 1 or 0")
98
+
99
+
100
+ def emit_in_range_inclusive(uid: str, ins: list[str], _n: VPNode) -> list[str]:
101
+ v, a, b = _g(0, ins), _g(1, ins), _g(2, ins)
102
+ return [
103
+ f" local _rv, _rlo, _rhi = ({v}), ({a}), ({b})",
104
+ f" if _rlo > _rhi then _rlo, _rhi = _rhi, _rlo end",
105
+ f' G["{uid}"] = (_rv >= _rlo and _rv <= _rhi) and 1 or 0',
106
+ ]
107
+
108
+
109
+ def emit_nxor(uid: str, ins: list[str], _n: VPNode) -> list[str]:
110
+ a, b = _g(0, ins), _g(1, ins)
111
+ return _assign(uid, f"((({a}) ~= 0) == (({b}) ~= 0)) and 1 or 0")
112
+
113
+
114
+ LOGIC_EMITTERS: dict[str, NodeEmitter] = {
115
+ "And": emit_and,
116
+ "Or": emit_or,
117
+ "Not": emit_not,
118
+ "Nand": emit_nand,
119
+ "Nor": emit_nor,
120
+ "Xor": emit_xor,
121
+ "Branch": emit_branch,
122
+ "Select": emit_select,
123
+ "Equal": emit_equal,
124
+ "NotEqual": emit_not_equal,
125
+ "Greater": emit_greater,
126
+ "Less": emit_less,
127
+ "GreaterOrEqual": emit_greater_or_equal,
128
+ "LessOrEqual": emit_less_or_equal,
129
+ "InRangeInclusive": emit_in_range_inclusive,
130
+ "Nxor": emit_nxor,
131
+ }