diff --git a/core/assets-raw/sprites/blocks/coalgenerator-top.png b/core/assets-raw/sprites/blocks/coalgenerator-top.png new file mode 100644 index 0000000000..211c6afbec Binary files /dev/null and b/core/assets-raw/sprites/blocks/coalgenerator-top.png differ diff --git a/core/assets-raw/sprites/blocks/rtgenerator-top.png b/core/assets-raw/sprites/blocks/rtgenerator-top.png new file mode 100644 index 0000000000..56e04563b4 Binary files /dev/null and b/core/assets-raw/sprites/blocks/rtgenerator-top.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 9e3e5f96c7..aa25c19c99 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -151,76 +151,83 @@ blocks/coalgenerator orig: 8, 8 offset: 0, 0 index: -1 -blocks/coalpurifier +blocks/coalgenerator-top rotate: false xy: 315, 163 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/combustiongenerator +blocks/coalpurifier rotate: false xy: 315, 153 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/compositewall +blocks/combustiongenerator rotate: false xy: 488, 459 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/conduit +blocks/compositewall rotate: false xy: 498, 459 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/conduitbottom +blocks/conduit rotate: false xy: 484, 449 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/conduitliquid +blocks/conduitbottom rotate: false xy: 484, 439 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/conduittop +blocks/conduitliquid rotate: false xy: 494, 449 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/conveyor +blocks/conduittop rotate: false xy: 484, 429 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/conveyormove +blocks/conveyor rotate: false xy: 494, 439 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/conveyortunnel +blocks/conveyormove rotate: false xy: 494, 429 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 +blocks/conveyortunnel + rotate: false + xy: 484, 419 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 blocks/core rotate: false xy: 413, 361 @@ -230,49 +237,49 @@ blocks/core index: -1 blocks/cross rotate: false - xy: 484, 419 + xy: 494, 419 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/crucible rotate: false - xy: 494, 419 + xy: 480, 409 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/deepwater rotate: false - xy: 480, 409 + xy: 480, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt1 rotate: false - xy: 480, 399 + xy: 490, 409 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt2 rotate: false - xy: 490, 409 + xy: 490, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt3 rotate: false - xy: 490, 399 + xy: 476, 385 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirtblock rotate: false - xy: 476, 385 + xy: 486, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -286,7 +293,7 @@ blocks/dirtedge index: -1 blocks/door rotate: false - xy: 486, 389 + xy: 461, 305 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -300,7 +307,7 @@ blocks/door-large index: -1 blocks/door-large-icon rotate: false - xy: 461, 305 + xy: 459, 295 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -314,7 +321,7 @@ blocks/door-large-open index: -1 blocks/door-open rotate: false - xy: 459, 295 + xy: 459, 285 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -328,7 +335,7 @@ blocks/doubleturret index: -1 blocks/duriumwall rotate: false - xy: 459, 285 + xy: 459, 275 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -342,7 +349,7 @@ blocks/duriumwall-large index: -1 blocks/duriumwall-large-icon rotate: false - xy: 459, 275 + xy: 459, 265 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -356,70 +363,70 @@ blocks/flameturret index: -1 blocks/fluxpump rotate: false - xy: 459, 255 + xy: 441, 223 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass1 rotate: false - xy: 441, 223 + xy: 500, 409 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass2 rotate: false - xy: 500, 409 + xy: 500, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass3 rotate: false - xy: 500, 399 + xy: 496, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock-edge-0 rotate: false - xy: 496, 379 + xy: 476, 375 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock-edge-1 rotate: false - xy: 476, 375 + xy: 475, 365 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock-edge-2 rotate: false - xy: 475, 365 + xy: 475, 355 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock-edge-3 rotate: false - xy: 475, 355 + xy: 475, 345 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock1 rotate: false - xy: 496, 389 + xy: 486, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock2 rotate: false - xy: 486, 379 + xy: 496, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -433,21 +440,21 @@ blocks/grassedge index: -1 blocks/ice1 rotate: false - xy: 475, 345 + xy: 473, 335 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ice2 rotate: false - xy: 473, 335 + xy: 471, 325 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ice3 rotate: false - xy: 471, 325 + xy: 471, 315 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -461,84 +468,84 @@ blocks/iceedge index: -1 blocks/icerock1 rotate: false - xy: 471, 315 + xy: 471, 305 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/icerock2 rotate: false - xy: 471, 305 + xy: 469, 295 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/icerockshadow1 rotate: false - xy: 469, 295 + xy: 469, 285 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rockshadow1 rotate: false - xy: 469, 295 + xy: 469, 285 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/icerockshadow2 rotate: false - xy: 469, 285 + xy: 469, 275 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rockshadow2 rotate: false - xy: 469, 285 + xy: 469, 275 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron1 rotate: false - xy: 485, 359 + xy: 485, 349 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron2 rotate: false - xy: 485, 349 + xy: 495, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron3 rotate: false - xy: 495, 359 + xy: 495, 349 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/irondrill rotate: false - xy: 495, 349 + xy: 485, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ironwall rotate: false - xy: 485, 339 + xy: 495, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/junction rotate: false - xy: 495, 339 + xy: 325, 209 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -552,7 +559,7 @@ blocks/laserturret index: -1 blocks/lava rotate: false - xy: 325, 209 + xy: 325, 199 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -566,28 +573,28 @@ blocks/lavaedge index: -1 blocks/lavasmelter rotate: false - xy: 325, 199 + xy: 325, 189 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquiditemjunction rotate: false - xy: 325, 189 + xy: 335, 211 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquidjunction rotate: false - xy: 335, 211 + xy: 345, 211 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquidrouter rotate: false - xy: 345, 211 + xy: 335, 201 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -615,14 +622,14 @@ blocks/mortarturret index: -1 blocks/mossblock rotate: false - xy: 335, 191 + xy: 345, 201 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/mossstone rotate: false - xy: 335, 191 + xy: 345, 201 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -643,7 +650,7 @@ blocks/nuclearreactor-center index: -1 blocks/nuclearreactor-icon rotate: false - xy: 345, 191 + xy: 355, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -664,7 +671,7 @@ blocks/nuclearreactor-small index: -1 blocks/oil rotate: false - xy: 355, 208 + xy: 355, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -678,14 +685,14 @@ blocks/oiledge index: -1 blocks/oilrefinery rotate: false - xy: 355, 198 + xy: 355, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/omnidrill rotate: false - xy: 355, 188 + xy: 327, 173 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -699,70 +706,70 @@ blocks/plasmaturret index: -1 blocks/powerbooster rotate: false - xy: 327, 173 + xy: 325, 163 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/poweredconveyor rotate: false - xy: 325, 163 + xy: 325, 153 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/poweredconveyormove rotate: false - xy: 325, 153 + xy: 315, 143 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlaser rotate: false - xy: 315, 143 + xy: 325, 143 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlasercorner rotate: false - xy: 325, 143 + xy: 314, 133 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlaserrouter rotate: false - xy: 314, 133 + xy: 314, 123 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pulseconduit rotate: false - xy: 314, 123 + xy: 324, 133 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pulseconduitbottom rotate: false - xy: 324, 133 + xy: 314, 113 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pulseconduittop rotate: false - xy: 314, 113 + xy: 324, 123 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pump rotate: false - xy: 324, 123 + xy: 314, 103 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -776,74 +783,81 @@ blocks/repairturret index: -1 blocks/rock1 rotate: false - xy: 324, 113 + xy: 314, 93 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2 rotate: false - xy: 314, 93 + xy: 324, 103 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/router rotate: false - xy: 324, 103 + xy: 314, 83 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rtgenerator - rotate: false - xy: 314, 83 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/sand1 rotate: false xy: 324, 93 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/sand2 +blocks/rtgenerator-top rotate: false xy: 314, 73 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/sand3 +blocks/sand1 rotate: false xy: 324, 83 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/sandblock1 +blocks/sand2 rotate: false xy: 314, 63 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/sandblock2 +blocks/sand3 rotate: false xy: 324, 73 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/sandblock3 +blocks/sandblock1 rotate: false xy: 314, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 +blocks/sandblock2 + rotate: false + xy: 324, 63 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/sandblock3 + rotate: false + xy: 314, 43 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 blocks/sandedge rotate: false xy: 452, 409 @@ -860,7 +874,7 @@ blocks/shadow index: -1 blocks/shieldgenerator rotate: false - xy: 314, 43 + xy: 314, 33 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -874,21 +888,21 @@ blocks/shotgunturret index: -1 blocks/shrub rotate: false - xy: 324, 43 + xy: 324, 33 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/shrubshadow rotate: false - xy: 314, 23 + xy: 314, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/smelter rotate: false - xy: 324, 33 + xy: 324, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -902,42 +916,42 @@ blocks/sniperturret index: -1 blocks/snow1 rotate: false - xy: 314, 13 + xy: 324, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snow2 rotate: false - xy: 324, 23 + xy: 314, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snow3 rotate: false - xy: 324, 13 + xy: 324, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snowblock1 rotate: false - xy: 314, 3 + xy: 411, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snowblock2 rotate: false - xy: 324, 3 + xy: 408, 207 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snowblock3 rotate: false - xy: 411, 217 + xy: 408, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -951,28 +965,28 @@ blocks/snowedge index: -1 blocks/sorter rotate: false - xy: 408, 207 + xy: 421, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyor rotate: false - xy: 408, 197 + xy: 431, 219 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyormove rotate: false - xy: 421, 217 + xy: 418, 207 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelwall rotate: false - xy: 431, 219 + xy: 418, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -986,7 +1000,7 @@ blocks/steelwall-large index: -1 blocks/steelwall-large-icon rotate: false - xy: 418, 207 + xy: 441, 213 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1000,84 +1014,84 @@ blocks/stone index: -1 blocks/stone1 rotate: false - xy: 418, 197 + xy: 431, 209 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone2 rotate: false - xy: 441, 213 + xy: 428, 199 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone3 rotate: false - xy: 431, 209 + xy: 441, 203 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock-edge-0 rotate: false - xy: 365, 188 + xy: 481, 315 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock-edge-1 rotate: false - xy: 481, 325 + xy: 481, 305 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock-edge-2 rotate: false - xy: 481, 315 + xy: 479, 295 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock-edge-3 rotate: false - xy: 481, 305 + xy: 479, 285 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock-smooth1 rotate: false - xy: 479, 295 + xy: 479, 275 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock1 rotate: false - xy: 428, 199 + xy: 365, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock2 rotate: false - xy: 441, 203 + xy: 365, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock3 rotate: false - xy: 365, 198 + xy: 481, 325 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stonedrill rotate: false - xy: 479, 285 + xy: 479, 265 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1091,35 +1105,35 @@ blocks/stoneedge index: -1 blocks/stoneformer rotate: false - xy: 479, 275 + xy: 479, 255 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stonewall rotate: false - xy: 479, 265 + xy: 479, 245 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/teleporter rotate: false - xy: 479, 255 + xy: 491, 329 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/teleporter-top rotate: false - xy: 479, 245 + xy: 491, 319 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/thermalgenerator rotate: false - xy: 491, 329 + xy: 491, 309 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1140,49 +1154,49 @@ blocks/titancannon-icon index: -1 blocks/titanium1 rotate: false - xy: 491, 319 + xy: 501, 329 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium2 rotate: false - xy: 491, 309 + xy: 501, 319 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium3 rotate: false - xy: 501, 329 + xy: 501, 309 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumdrill rotate: false - xy: 501, 319 + xy: 491, 299 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumpurifier rotate: false - xy: 501, 309 + xy: 501, 299 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumshieldwall rotate: false - xy: 491, 299 + xy: 489, 289 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumwall rotate: false - xy: 501, 299 + xy: 489, 279 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1196,7 +1210,7 @@ blocks/titaniumwall-large index: -1 blocks/titaniumwall-large-icon rotate: false - xy: 489, 289 + xy: 499, 289 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1210,35 +1224,35 @@ blocks/turret index: -1 blocks/uranium1 rotate: false - xy: 489, 269 + xy: 489, 259 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium2 rotate: false - xy: 499, 279 + xy: 499, 269 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium3 rotate: false - xy: 489, 259 + xy: 489, 249 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uraniumdrill rotate: false - xy: 499, 269 + xy: 499, 259 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/water rotate: false - xy: 489, 249 + xy: 499, 249 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1532,49 +1546,49 @@ enemyarrow index: -1 icon-coal rotate: false - xy: 469, 275 + xy: 469, 265 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-dirium rotate: false - xy: 469, 265 + xy: 469, 255 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-iron rotate: false - xy: 469, 255 + xy: 459, 245 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-steel rotate: false - xy: 459, 245 + xy: 469, 245 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-stone rotate: false - xy: 469, 245 + xy: 486, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-titanium rotate: false - xy: 486, 369 + xy: 496, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-uranium rotate: false - xy: 496, 369 + xy: 485, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1602,28 +1616,28 @@ mechs/mech-standard index: -1 shell rotate: false - xy: 324, 63 + xy: 324, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shot rotate: false - xy: 324, 53 + xy: 324, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shot-long rotate: false - xy: 314, 33 + xy: 314, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanshell rotate: false - xy: 489, 279 + xy: 489, 269 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2140,35 +2154,35 @@ weapons/blaster index: -1 weapons/flamer rotate: false - xy: 459, 265 + xy: 459, 255 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/mortar rotate: false - xy: 335, 201 + xy: 335, 191 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/multigun rotate: false - xy: 345, 201 + xy: 345, 191 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/railgun rotate: false - xy: 314, 103 + xy: 324, 113 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/triblaster rotate: false - xy: 499, 289 + xy: 499, 279 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 6b8133c945..acee2ab45b 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/src/io/anuke/mindustry/entities/effect/Fx.java b/core/src/io/anuke/mindustry/entities/effect/Fx.java index ec30c28fa5..f5a4ea6fe4 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Fx.java +++ b/core/src/io/anuke/mindustry/entities/effect/Fx.java @@ -143,6 +143,26 @@ public class Fx{ }); }), + redgeneratespark = new Effect(18, e -> { + Angles.randLenVectors(e.id, 5, e.ifract()*8f, (x, y)->{ + float len = e.fract()*4f; + Draw.color(Color.valueOf("fbb97f"), Color.GRAY, e.ifract()); + //Draw.alpha(e.fract()); + Draw.rect("circle", e.x + x, e.y + y, len, len); + Draw.reset(); + }); + }), + + generatespark = new Effect(18, e -> { + Angles.randLenVectors(e.id, 5, e.ifract()*8f, (x, y)->{ + float len = e.fract()*4f; + Draw.color(Color.valueOf("d2b29c"), Color.GRAY, e.ifract()); + //Draw.alpha(e.fract()); + Draw.rect("circle", e.x + x, e.y + y, len, len); + Draw.reset(); + }); + }), + laserspark = new Effect(14, e -> { Angles.randLenVectors(e.id, 8, 1f + e.ifract()*11f, (x, y)->{ float len = 1f+e.fract()*5f; diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java index dc13a2b1d4..93cf5588a4 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java @@ -216,7 +216,7 @@ public class ProductionBlocks{ //TODO formalName = "coal generator"; generateItem = Item.coal; - generateAmount = 4f; + powerOutput = 0.05f; powerCapacity = 40f; description = "Generates power from coal."; fullDescription = "The essential generator. Generates power from coal. Outputs power as lasers to its 4 sides."; @@ -227,11 +227,12 @@ public class ProductionBlocks{ formalName = "thermal generator"; //TODO generateLiquid = Liquid.lava; - inputLiquid = 25f; - generatePower = 0.5f; + maxLiquidGenerate = 0.5f; + powerPerLiquid = 0.09f; powerCapacity = 40f; description = "Generates power from lava."; fullDescription = "Generates power from lava. Outputs power as lasers to its 4 sides."; + generateEffect = Fx.redgeneratespark; } }, combustiongenerator = new LiquidPowerGenerator("combustiongenerator"){ @@ -239,8 +240,8 @@ public class ProductionBlocks{ formalName = "combustion generator"; //TODO generateLiquid = Liquid.oil; - inputLiquid = 14f; - generatePower = 1f; + maxLiquidGenerate = 0.4f; + powerPerLiquid = 0.13f; powerCapacity = 40f; description = "Generates power from oil."; fullDescription = "Generates power from oil. Outputs power as lasers to its 4 sides."; @@ -251,9 +252,9 @@ public class ProductionBlocks{ //TODO make this generate slowly formalName = "RTG generator"; generateItem = Item.uranium; - generateAmount = 10f; powerCapacity = 40f; - generateTime = 50f; + powerOutput = 0.055f; + itemDuration = 250f; description = "Generates power from uranium."; fullDescription = "Generates small amounts of power from the radioactive decay of uranium. Outputs power as lasers to its 4 sides."; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java index 69eb890414..80d2d6dc07 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java @@ -90,6 +90,7 @@ public abstract class PowerBlock extends Block implements PowerAcceptor{ public static class PowerEntity extends TileEntity{ public float power; + public float time; //generator time. this is a bit of a hack @Override public void write(DataOutputStream stream) throws IOException{ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java index b700e15750..8a34f68161 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java @@ -31,8 +31,8 @@ public class ShieldBlock extends PowerBlock{ @Override public void getStats(Array list){ super.getStats(list); - list.add("[powerinfo]Power Drain/second: " + Strings.toFixed(powerDrain*60, 2)); - list.add("[powerinfo]Power Drain/damage taken: " + Strings.toFixed(powerPerDamage, 2)); + list.add("[powerinfo]Power used: " + Strings.toFixed(powerDrain*60, 2) + "power/s"); + list.add("[powerinfo]Power Drain: " + Strings.toFixed(powerPerDamage, 2) + "power/damage"); list.add("[powerinfo]Shield Radius: " + (int)shieldRadius + " units"); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java index dea24293fb..fc12da129d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/ItemPowerGenerator.java @@ -1,26 +1,58 @@ package io.anuke.mindustry.world.blocks.types.production; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.effect.Fx; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; +import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Strings; public class ItemPowerGenerator extends Generator{ public int itemCapacity = 20; public Item generateItem; - public float generateAmount; - public float generateTime = 2f; + public float powerOutput; + public float itemDuration = 70f; + public Effect generateEffect = Fx.generatespark; + public Color heatColor = Color.valueOf("ff9b59"); public ItemPowerGenerator(String name) { super(name); outputOnly = true; } + @Override + public void getStats(Array list){ + super.getStats(list); + list.add("[powerinfo]Item Capacity: " + itemCapacity); + list.add("[powerinfo]Generation: " + Strings.toFixed(powerOutput*60f, 2) + " power/s"); + list.add("[powerinfo]Generation Time: " + Strings.toFixed(itemDuration/60f, 2) + " s/item"); + list.add("[powerinfo]Input: " + generateItem); + } + + @Override + public void draw(Tile tile){ + super.draw(tile); + + PowerEntity entity = tile.entity(); + + if(entity.time > 0){ + Draw.color(heatColor); + float alpha = (entity.hasItem(generateItem) ? 1f : Mathf.clamp(entity.time)); + alpha = alpha * 0.7f + Mathf.absin(Timers.time(), 12f, 0.3f) * alpha; + Draw.alpha(alpha); + Draw.rect(name + "-top", tile.worldx(), tile.worldy()); + Draw.reset(); + } + } + @Override public void drawPixelOverlay(Tile tile){ super.drawPixelOverlay(tile); @@ -40,9 +72,19 @@ public class ItemPowerGenerator extends Generator{ public void update(Tile tile){ PowerEntity entity = tile.entity(); - if(Timers.get(tile, "generate", generateTime) && entity.hasItem(generateItem) && tryAddPower(tile, generateAmount)){ - Effects.effect(Fx.generate, tile.entity); + float maxPower = Math.min(powerCapacity - entity.power, powerOutput); + float mfract = maxPower/powerOutput; + + if(entity.time > 0f){ + entity.time -= 1f/itemDuration*mfract; + entity.power += maxPower; + entity.time = Mathf.clamp(entity.time); + } + + if(entity.time <= 0f && entity.hasItem(generateItem)){ + Effects.effect(generateEffect, tile.worldx() + Mathf.range(3f), tile.worldy() + Mathf.range(3f)); entity.removeItem(generateItem, 1); + entity.time = 1f; } distributeLaserPower(tile); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidItemPowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidItemPowerGenerator.java index c1a609a59f..1646908731 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidItemPowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidItemPowerGenerator.java @@ -8,8 +8,6 @@ import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Draw; -import io.anuke.ucore.core.Effects; -import io.anuke.ucore.core.Timers; public class LiquidItemPowerGenerator extends LiquidPowerGenerator{ public Item generateItem; @@ -33,6 +31,8 @@ public class LiquidItemPowerGenerator extends LiquidPowerGenerator{ Draw.reset(); } + //TODO implement? + /* @Override public void update(Tile tile){ LiquidPowerEntity entity = tile.entity(); @@ -50,7 +50,7 @@ public class LiquidItemPowerGenerator extends LiquidPowerGenerator{ distributeLaserPower(tile); - } + }*/ @Override public boolean acceptItem(Item item, Tile tile, Tile source){ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java index 1a05dcc7bd..caaec77ae4 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java @@ -16,17 +16,17 @@ import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; +import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Strings; public class LiquidPowerGenerator extends Generator implements LiquidAcceptor{ public int generateTime = 15; public Liquid generateLiquid; - /**Power to generate per generateInput.*/ - public float generatePower = 1f; - /**How much liquid to consume to get one generatePower.*/ - public float inputLiquid = 5f; + public float powerPerLiquid = 0.13f; + /**Maximum liquid used per frame.*/ + public float maxLiquidGenerate = 0.4f; public float liquidCapacity = 30f; - public Effect generateEffect = Fx.generate; + public Effect generateEffect = Fx.generatespark; public LiquidPowerGenerator(String name) { super(name); @@ -37,7 +37,8 @@ public class LiquidPowerGenerator extends Generator implements LiquidAcceptor{ public void getStats(Array list){ super.getStats(list); list.add("[liquidinfo]Liquid Capacity: " + (int)liquidCapacity); - list.add("[liquidinfo]Generation: " + Strings.toFixed(generatePower / inputLiquid, 2) + " power/liquid"); + list.add("[liquidinfo]Generation: " + Strings.toFixed(powerPerLiquid, 2) + " power/liquid"); + list.add("[liquidinfo]Max liquid: " + Strings.toFixed(maxLiquidGenerate*60f, 2) + " liquid/s"); list.add("[liquidinfo]Input: " + generateLiquid); } @@ -65,13 +66,17 @@ public class LiquidPowerGenerator extends Generator implements LiquidAcceptor{ LiquidPowerEntity entity = tile.entity(); //TODO don't generate when full of energy - if(entity.liquidAmount >= inputLiquid && entity.power + generatePower < powerCapacity - && Timers.get(tile, "consume", generateTime)){ - entity.liquidAmount -= inputLiquid; - entity.power += generatePower; + if(entity.liquidAmount > 0){ + float used = Math.min(entity.liquidAmount, maxLiquidGenerate); + used = Math.min(used, (powerCapacity - entity.power)/powerPerLiquid); - Vector2 offset = getPlaceOffset(); - Effects.effect(generateEffect, tile.worldx() + offset.x, tile.worldy() + offset.y); + entity.liquidAmount -= used; + entity.power += used * powerPerLiquid; + + if(used > 0.001f && Mathf.chance(0.05 * Timers.delta())){ + Vector2 offset = getPlaceOffset(); + Effects.effect(generateEffect, tile.worldx() + offset.x + Mathf.range(3f), tile.worldy() + offset.y + Mathf.range(3f)); + } } distributeLaserPower(tile); diff --git a/desktop/mindustry-saves/0.mins b/desktop/mindustry-saves/0.mins index f2216c7edc..68c51dbf51 100644 Binary files a/desktop/mindustry-saves/0.mins and b/desktop/mindustry-saves/0.mins differ diff --git a/desktop/mindustry-saves/1.mins b/desktop/mindustry-saves/1.mins index 322eff1fa6..86411f17c3 100644 Binary files a/desktop/mindustry-saves/1.mins and b/desktop/mindustry-saves/1.mins differ diff --git a/desktop/mindustry-saves/6.mins b/desktop/mindustry-saves/6.mins index a9e038a2fe..e391674832 100644 Binary files a/desktop/mindustry-saves/6.mins and b/desktop/mindustry-saves/6.mins differ