diff --git a/gulp/image-resources.js b/gulp/image-resources.js
index 2d0d5fb1..80c4ca85 100644
--- a/gulp/image-resources.js
+++ b/gulp/image-resources.js
@@ -1,148 +1,141 @@
-// @ts-ignore
-const path = require("path");
-
-// Globs for non-ui resources
-const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/*.webm"];
-
-// Globs for ui resources
-const imageResourcesGlobs = ["../res/**/*.png", "../res/**/*.svg", "../res/**/*.jpg", "../res/**/*.gif"];
-
-function gulptasksImageResources($, gulp, buildFolder) {
- // Lossless options
- const minifyImagesOptsLossless = () => [
- $.imageminJpegtran({
- progressive: true,
- }),
- $.imagemin.svgo({}),
- $.imagemin.optipng({
- optimizationLevel: 3,
- }),
- $.imageminGifsicle({
- optimizationLevel: 3,
- colors: 128,
- }),
- ];
-
- // Lossy options
- const minifyImagesOpts = () => [
- $.imagemin.mozjpeg({
- quality: 80,
- maxMemory: 1024 * 1024 * 8,
- }),
- $.imagemin.svgo({}),
- $.imageminPngquant({
- speed: 1,
- strip: true,
- quality: [0.65, 0.9],
- dithering: false,
- verbose: false,
- }),
- $.imagemin.optipng({
- optimizationLevel: 3,
- }),
- $.imageminGifsicle({
- optimizationLevel: 3,
- colors: 128,
- }),
- ];
-
- // Where the resources folder are
- const resourcesDestFolder = path.join(buildFolder, "res");
-
- /**
- * Determines if an atlas must use lossless compression
- * @param {string} fname
- */
- function fileMustBeLossless(fname) {
- return fname.indexOf("lossless") >= 0;
- }
-
- /////////////// ATLAS /////////////////////
-
- // Copies the atlas to the final destination
- gulp.task("imgres.atlas", () => {
- return gulp
- .src(["../res_built/atlas/*.png"])
- .pipe($.cached("imgres.atlas"))
- .pipe(gulp.dest(resourcesDestFolder));
- });
-
- // Copies the atlas to the final destination after optimizing it (lossy compression)
- gulp.task("imgres.atlasOptimized", () => {
- return gulp
- .src(["../res_built/atlas/*.png"])
- .pipe($.cached("imgres.atlasOptimized"))
- .pipe(
- $.if(
- fname => fileMustBeLossless(fname.history[0]),
- $.imagemin(minifyImagesOptsLossless()),
- $.imagemin(minifyImagesOpts())
- )
- )
- .pipe(gulp.dest(resourcesDestFolder));
- });
-
- //////////////////// RESOURCES //////////////////////
-
- // Copies all resources which are no ui resources
- gulp.task("imgres.copyNonImageResources", () => {
- return gulp
- .src(nonImageResourcesGlobs)
- .pipe($.cached("imgres.copyNonImageResources"))
- .pipe(gulp.dest(resourcesDestFolder));
- });
-
- // Copies all ui resources
- gulp.task("imgres.copyImageResources", () => {
- return gulp
- .src(imageResourcesGlobs)
- .pipe($.cached("copyImageResources"))
- .pipe(gulp.dest(path.join(resourcesDestFolder)));
- });
-
- // Copies all ui resources and optimizes them
- gulp.task("imgres.copyImageResourcesOptimized", () => {
- return gulp
- .src(imageResourcesGlobs)
- .pipe($.cached("imgres.copyImageResourcesOptimized"))
- .pipe(
- $.if(
- fname => fileMustBeLossless(fname.history[0]),
- $.imagemin(minifyImagesOptsLossless()),
- $.imagemin(minifyImagesOpts())
- )
- )
- .pipe(gulp.dest(path.join(resourcesDestFolder)));
- });
-
- // Copies all resources and optimizes them
- gulp.task(
- "imgres.allOptimized",
- gulp.parallel(
- "imgres.atlasOptimized",
- "imgres.copyNonImageResources",
- "imgres.copyImageResourcesOptimized"
- )
- );
-
- // Cleans up unused images which are instead inline into the css
- gulp.task("imgres.cleanupUnusedCssInlineImages", () => {
- return gulp
- .src(
- [
- path.join(buildFolder, "res", "ui", "**", "*.png"),
- path.join(buildFolder, "res", "ui", "**", "*.jpg"),
- path.join(buildFolder, "res", "ui", "**", "*.svg"),
- path.join(buildFolder, "res", "ui", "**", "*.gif"),
- ],
- { read: false }
- )
- .pipe($.if(fname => fname.history[0].indexOf("noinline") < 0, $.clean({ force: true })));
- });
-}
-
-module.exports = {
- nonImageResourcesGlobs,
- imageResourcesGlobs,
- gulptasksImageResources,
-};
+// @ts-ignore
+const path = require("path");
+
+// Globs for non-ui resources
+const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/*.webm"];
+
+// Globs for ui resources
+const imageResourcesGlobs = ["../res/**/*.png", "../res/**/*.svg", "../res/**/*.jpg", "../res/**/*.gif"];
+
+function gulptasksImageResources($, gulp, buildFolder) {
+ // Lossless options
+ const minifyImagesOptsLossless = () => [
+ $.imageminJpegtran({
+ progressive: true,
+ }),
+ $.imagemin.svgo({}),
+ $.imagemin.optipng({
+ optimizationLevel: 3,
+ }),
+ $.imageminGifsicle({
+ optimizationLevel: 3,
+ colors: 128,
+ }),
+ ];
+
+ // Lossy options
+ const minifyImagesOpts = () => [
+ $.imagemin.mozjpeg({
+ quality: 80,
+ maxMemory: 1024 * 1024 * 8,
+ }),
+ $.imagemin.svgo({}),
+ $.imageminPngquant({
+ speed: 1,
+ strip: true,
+ quality: [0.65, 0.9],
+ dithering: false,
+ verbose: false,
+ }),
+ $.imagemin.optipng({
+ optimizationLevel: 3,
+ }),
+ $.imageminGifsicle({
+ optimizationLevel: 3,
+ colors: 128,
+ }),
+ ];
+
+ // Where the resources folder are
+ const resourcesDestFolder = path.join(buildFolder, "res");
+
+ /**
+ * Determines if an atlas must use lossless compression
+ * @param {string} fname
+ */
+ function fileMustBeLossless(fname) {
+ return fname.indexOf("lossless") >= 0;
+ }
+
+ /////////////// ATLAS /////////////////////
+
+ // Copies the atlas to the final destination
+ gulp.task("imgres.atlas", () => {
+ return gulp.src(["../res_built/atlas/*.png"]).pipe(gulp.dest(resourcesDestFolder));
+ });
+
+ // Copies the atlas to the final destination after optimizing it (lossy compression)
+ gulp.task("imgres.atlasOptimized", () => {
+ return gulp
+ .src(["../res_built/atlas/*.png"])
+ .pipe(
+ $.if(
+ fname => fileMustBeLossless(fname.history[0]),
+ $.imagemin(minifyImagesOptsLossless()),
+ $.imagemin(minifyImagesOpts())
+ )
+ )
+ .pipe(gulp.dest(resourcesDestFolder));
+ });
+
+ //////////////////// RESOURCES //////////////////////
+
+ // Copies all resources which are no ui resources
+ gulp.task("imgres.copyNonImageResources", () => {
+ return gulp.src(nonImageResourcesGlobs).pipe(gulp.dest(resourcesDestFolder));
+ });
+
+ // Copies all ui resources
+ gulp.task("imgres.copyImageResources", () => {
+ return gulp
+ .src(imageResourcesGlobs)
+
+ .pipe($.cached("imgres.copyImageResources"))
+ .pipe(gulp.dest(path.join(resourcesDestFolder)));
+ });
+
+ // Copies all ui resources and optimizes them
+ gulp.task("imgres.copyImageResourcesOptimized", () => {
+ return gulp
+ .src(imageResourcesGlobs)
+ .pipe(
+ $.if(
+ fname => fileMustBeLossless(fname.history[0]),
+ $.imagemin(minifyImagesOptsLossless()),
+ $.imagemin(minifyImagesOpts())
+ )
+ )
+ .pipe(gulp.dest(path.join(resourcesDestFolder)));
+ });
+
+ // Copies all resources and optimizes them
+ gulp.task(
+ "imgres.allOptimized",
+ gulp.parallel(
+ "imgres.atlasOptimized",
+ "imgres.copyNonImageResources",
+ "imgres.copyImageResourcesOptimized"
+ )
+ );
+
+ // Cleans up unused images which are instead inline into the css
+ gulp.task("imgres.cleanupUnusedCssInlineImages", () => {
+ return gulp
+ .src(
+ [
+ path.join(buildFolder, "res", "ui", "**", "*.png"),
+ path.join(buildFolder, "res", "ui", "**", "*.jpg"),
+ path.join(buildFolder, "res", "ui", "**", "*.svg"),
+ path.join(buildFolder, "res", "ui", "**", "*.gif"),
+ ],
+ { read: false }
+ )
+ .pipe($.if(fname => fname.history[0].indexOf("noinline") < 0, $.clean({ force: true })));
+ });
+}
+
+module.exports = {
+ nonImageResourcesGlobs,
+ imageResourcesGlobs,
+ gulptasksImageResources,
+};
diff --git a/gulp/sounds.js b/gulp/sounds.js
index aaae606f..1cffd897 100644
--- a/gulp/sounds.js
+++ b/gulp/sounds.js
@@ -18,7 +18,7 @@ function gulptasksSounds($, gulp, buildFolder) {
function getFileCacheValue(file) {
const { _isVinyl, base, cwd, contents, history, stat, path } = file;
- const encodedContents = Buffer.from(contents).toString('base64');
+ const encodedContents = Buffer.from(contents).toString("base64");
return { _isVinyl, base, cwd, contents: encodedContents, history, stat, path };
}
@@ -118,7 +118,6 @@ function gulptasksSounds($, gulp, buildFolder) {
return gulp
.src(path.join(builtSoundsDir, "**", "*.mp3"))
.pipe($.plumber())
- .pipe($.cached("sounds.copy"))
.pipe(gulp.dest(path.join(buildFolder, "res", "sounds")));
});
diff --git a/res/ui/building_icons/analyzer.png b/res/ui/building_icons/analyzer.png
new file mode 100644
index 00000000..61f9e1ba
Binary files /dev/null and b/res/ui/building_icons/analyzer.png differ
diff --git a/res/ui/building_icons/comparator.png b/res/ui/building_icons/comparator.png
new file mode 100644
index 00000000..d8c95df5
Binary files /dev/null and b/res/ui/building_icons/comparator.png differ
diff --git a/res/ui/building_icons/constant_signal.png b/res/ui/building_icons/constant_signal.png
index c913837a..b88506ca 100644
Binary files a/res/ui/building_icons/constant_signal.png and b/res/ui/building_icons/constant_signal.png differ
diff --git a/res/ui/building_icons/display.png b/res/ui/building_icons/display.png
index 322d84e2..56548fde 100644
Binary files a/res/ui/building_icons/display.png and b/res/ui/building_icons/display.png differ
diff --git a/res/ui/building_icons/logic_gate.png b/res/ui/building_icons/logic_gate.png
index d71ddbc5..1de56dfa 100644
Binary files a/res/ui/building_icons/logic_gate.png and b/res/ui/building_icons/logic_gate.png differ
diff --git a/res/ui/building_icons/transistor.png b/res/ui/building_icons/transistor.png
new file mode 100644
index 00000000..5296edbb
Binary files /dev/null and b/res/ui/building_icons/transistor.png differ
diff --git a/res/ui/building_icons/virtual_processor.png b/res/ui/building_icons/virtual_processor.png
index 310f130e..f67f4c84 100644
Binary files a/res/ui/building_icons/virtual_processor.png and b/res/ui/building_icons/virtual_processor.png differ
diff --git a/res/ui/building_icons/wire.png b/res/ui/building_icons/wire.png
index bc2a128d..1f07a846 100644
Binary files a/res/ui/building_icons/wire.png and b/res/ui/building_icons/wire.png differ
diff --git a/res/ui/building_tutorials/analyzer.png b/res/ui/building_tutorials/analyzer.png
new file mode 100644
index 00000000..d0e820c1
Binary files /dev/null and b/res/ui/building_tutorials/analyzer.png differ
diff --git a/res/ui/building_tutorials/logic_gate-and.png b/res/ui/building_tutorials/logic_gate-and.png
new file mode 100644
index 00000000..e8c31683
Binary files /dev/null and b/res/ui/building_tutorials/logic_gate-and.png differ
diff --git a/res/ui/building_tutorials/logic_gate-not.png b/res/ui/building_tutorials/logic_gate-not.png
new file mode 100644
index 00000000..47fbeb1b
Binary files /dev/null and b/res/ui/building_tutorials/logic_gate-not.png differ
diff --git a/res/ui/building_tutorials/logic_gate-or.png b/res/ui/building_tutorials/logic_gate-or.png
new file mode 100644
index 00000000..d1c82770
Binary files /dev/null and b/res/ui/building_tutorials/logic_gate-or.png differ
diff --git a/res/ui/building_tutorials/logic_gate-xor.png b/res/ui/building_tutorials/logic_gate-xor.png
new file mode 100644
index 00000000..d9d282f7
Binary files /dev/null and b/res/ui/building_tutorials/logic_gate-xor.png differ
diff --git a/res/ui/building_tutorials/transistor.png b/res/ui/building_tutorials/transistor.png
new file mode 100644
index 00000000..e3ca0ba6
Binary files /dev/null and b/res/ui/building_tutorials/transistor.png differ
diff --git a/res/ui/building_tutorials/virtual_processor-cutter.png b/res/ui/building_tutorials/virtual_processor-cutter.png
new file mode 100644
index 00000000..45ad6d3a
Binary files /dev/null and b/res/ui/building_tutorials/virtual_processor-cutter.png differ
diff --git a/res/ui/building_tutorials/virtual_processor-painter.png b/res/ui/building_tutorials/virtual_processor-painter.png
new file mode 100644
index 00000000..2b9387eb
Binary files /dev/null and b/res/ui/building_tutorials/virtual_processor-painter.png differ
diff --git a/res/ui/building_tutorials/virtual_processor-rotater.png b/res/ui/building_tutorials/virtual_processor-rotater.png
new file mode 100644
index 00000000..25eccaf6
Binary files /dev/null and b/res/ui/building_tutorials/virtual_processor-rotater.png differ
diff --git a/res/ui/building_tutorials/virtual_processor-stacker.png b/res/ui/building_tutorials/virtual_processor-stacker.png
new file mode 100644
index 00000000..fdaccb02
Binary files /dev/null and b/res/ui/building_tutorials/virtual_processor-stacker.png differ
diff --git a/res/ui/building_tutorials/virtual_processor-unstacker.png b/res/ui/building_tutorials/virtual_processor-unstacker.png
new file mode 100644
index 00000000..697c21cd
Binary files /dev/null and b/res/ui/building_tutorials/virtual_processor-unstacker.png differ
diff --git a/res/ui/building_tutorials/wire-second.png b/res/ui/building_tutorials/wire-second.png
new file mode 100644
index 00000000..cac945f2
Binary files /dev/null and b/res/ui/building_tutorials/wire-second.png differ
diff --git a/res/ui/building_tutorials/wire.png b/res/ui/building_tutorials/wire.png
new file mode 100644
index 00000000..d5cf0bed
Binary files /dev/null and b/res/ui/building_tutorials/wire.png differ
diff --git a/res/ui/building_tutorials/wire_tunnel.png b/res/ui/building_tutorials/wire_tunnel.png
new file mode 100644
index 00000000..e8b25063
Binary files /dev/null and b/res/ui/building_tutorials/wire_tunnel.png differ
diff --git a/res_built/atlas/atlas0_hq.json b/res_built/atlas/atlas0_hq.json
index 6dbf5d17..ec0c5f81 100644
--- a/res_built/atlas/atlas0_hq.json
+++ b/res_built/atlas/atlas0_hq.json
@@ -2,7 +2,7 @@
"sprites/belt/built/forward_0.png":
{
- "frame": {"x":1239,"y":1197,"w":116,"h":144},
+ "frame": {"x":1888,"y":604,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -10,7 +10,7 @@
},
"sprites/belt/built/forward_1.png":
{
- "frame": {"x":1361,"y":1195,"w":116,"h":144},
+ "frame": {"x":527,"y":1010,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -18,7 +18,7 @@
},
"sprites/belt/built/forward_2.png":
{
- "frame": {"x":1436,"y":753,"w":116,"h":144},
+ "frame": {"x":774,"y":1139,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -26,7 +26,7 @@
},
"sprites/belt/built/forward_3.png":
{
- "frame": {"x":1433,"y":903,"w":116,"h":144},
+ "frame": {"x":791,"y":1289,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -34,7 +34,7 @@
},
"sprites/belt/built/forward_4.png":
{
- "frame": {"x":1483,"y":1195,"w":116,"h":144},
+ "frame": {"x":896,"y":1137,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -42,7 +42,7 @@
},
"sprites/belt/built/forward_5.png":
{
- "frame": {"x":1501,"y":1345,"w":116,"h":144},
+ "frame": {"x":913,"y":1287,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -50,7 +50,7 @@
},
"sprites/belt/built/forward_6.png":
{
- "frame": {"x":1510,"y":1495,"w":116,"h":144},
+ "frame": {"x":1035,"y":1285,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -58,7 +58,7 @@
},
"sprites/belt/built/forward_7.png":
{
- "frame": {"x":1555,"y":903,"w":116,"h":144},
+ "frame": {"x":847,"y":1439,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -66,7 +66,7 @@
},
"sprites/belt/built/forward_8.png":
{
- "frame": {"x":1696,"y":1053,"w":116,"h":144},
+ "frame": {"x":969,"y":1437,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -74,7 +74,7 @@
},
"sprites/belt/built/forward_9.png":
{
- "frame": {"x":1623,"y":1339,"w":116,"h":144},
+ "frame": {"x":1091,"y":1435,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -82,7 +82,7 @@
},
"sprites/belt/built/forward_10.png":
{
- "frame": {"x":1379,"y":1345,"w":116,"h":144},
+ "frame": {"x":649,"y":989,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -90,7 +90,7 @@
},
"sprites/belt/built/forward_11.png":
{
- "frame": {"x":706,"y":1711,"w":116,"h":144},
+ "frame": {"x":652,"y":1139,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -98,7 +98,7 @@
},
"sprites/belt/built/forward_12.png":
{
- "frame": {"x":1861,"y":593,"w":116,"h":144},
+ "frame": {"x":669,"y":1289,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -106,7 +106,7 @@
},
"sprites/belt/built/forward_13.png":
{
- "frame": {"x":1875,"y":743,"w":116,"h":144},
+ "frame": {"x":771,"y":989,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
@@ -114,7 +114,7 @@
},
"sprites/belt/built/left_0.png":
{
- "frame": {"x":1238,"y":1464,"w":130,"h":130},
+ "frame": {"x":1166,"y":893,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -122,7 +122,7 @@
},
"sprites/belt/built/left_1.png":
{
- "frame": {"x":1374,"y":1495,"w":130,"h":130},
+ "frame": {"x":1302,"y":893,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -130,7 +130,7 @@
},
"sprites/belt/built/left_2.png":
{
- "frame": {"x":1741,"y":1203,"w":130,"h":130},
+ "frame": {"x":1394,"y":1554,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -138,7 +138,7 @@
},
"sprites/belt/built/left_3.png":
{
- "frame": {"x":1745,"y":1339,"w":130,"h":130},
+ "frame": {"x":1406,"y":1690,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -146,7 +146,7 @@
},
"sprites/belt/built/left_4.png":
{
- "frame": {"x":1754,"y":1475,"w":130,"h":130},
+ "frame": {"x":1406,"y":1826,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -154,7 +154,7 @@
},
"sprites/belt/built/left_5.png":
{
- "frame": {"x":1813,"y":917,"w":130,"h":130},
+ "frame": {"x":1454,"y":1418,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -162,7 +162,7 @@
},
"sprites/belt/built/left_6.png":
{
- "frame": {"x":1818,"y":1053,"w":130,"h":130},
+ "frame": {"x":1530,"y":1554,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -170,7 +170,7 @@
},
"sprites/belt/built/left_7.png":
{
- "frame": {"x":1877,"y":1189,"w":130,"h":130},
+ "frame": {"x":1542,"y":1690,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -178,7 +178,7 @@
},
"sprites/belt/built/left_8.png":
{
- "frame": {"x":1881,"y":1325,"w":130,"h":130},
+ "frame": {"x":1542,"y":1826,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -186,7 +186,7 @@
},
"sprites/belt/built/left_9.png":
{
- "frame": {"x":1890,"y":1461,"w":130,"h":130},
+ "frame": {"x":1881,"y":890,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -194,7 +194,7 @@
},
"sprites/belt/built/left_10.png":
{
- "frame": {"x":939,"y":1712,"w":130,"h":130},
+ "frame": {"x":1304,"y":1029,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -202,7 +202,7 @@
},
"sprites/belt/built/left_11.png":
{
- "frame": {"x":1677,"y":917,"w":130,"h":130},
+ "frame": {"x":1881,"y":754,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -210,7 +210,7 @@
},
"sprites/belt/built/left_12.png":
{
- "frame": {"x":1560,"y":1053,"w":130,"h":130},
+ "frame": {"x":1304,"y":1165,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -218,7 +218,7 @@
},
"sprites/belt/built/left_13.png":
{
- "frame": {"x":1605,"y":1203,"w":130,"h":130},
+ "frame": {"x":1318,"y":1418,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -226,7 +226,7 @@
},
"sprites/belt/built/right_0.png":
{
- "frame": {"x":1754,"y":1611,"w":130,"h":130},
+ "frame": {"x":707,"y":1880,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -234,7 +234,7 @@
},
"sprites/belt/built/right_1.png":
{
- "frame": {"x":1890,"y":1597,"w":130,"h":130},
+ "frame": {"x":571,"y":1884,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -242,7 +242,7 @@
},
"sprites/belt/built/right_2.png":
{
- "frame": {"x":842,"y":1848,"w":130,"h":130},
+ "frame": {"x":1574,"y":892,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -250,7 +250,7 @@
},
"sprites/belt/built/right_3.png":
{
- "frame": {"x":978,"y":1848,"w":130,"h":130},
+ "frame": {"x":1576,"y":1028,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -258,7 +258,7 @@
},
"sprites/belt/built/right_4.png":
{
- "frame": {"x":1114,"y":1848,"w":130,"h":130},
+ "frame": {"x":1576,"y":1164,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -266,7 +266,7 @@
},
"sprites/belt/built/right_5.png":
{
- "frame": {"x":271,"y":1885,"w":130,"h":130},
+ "frame": {"x":1712,"y":1007,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -274,7 +274,7 @@
},
"sprites/belt/built/right_6.png":
{
- "frame": {"x":407,"y":1885,"w":130,"h":130},
+ "frame": {"x":1712,"y":1143,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -282,7 +282,7 @@
},
"sprites/belt/built/right_7.png":
{
- "frame": {"x":1211,"y":1600,"w":130,"h":130},
+ "frame": {"x":1848,"y":1026,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -290,7 +290,7 @@
},
"sprites/belt/built/right_8.png":
{
- "frame": {"x":1347,"y":1631,"w":130,"h":130},
+ "frame": {"x":1848,"y":1162,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -298,7 +298,7 @@
},
"sprites/belt/built/right_9.png":
{
- "frame": {"x":1483,"y":1645,"w":130,"h":130},
+ "frame": {"x":1712,"y":1279,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -306,7 +306,7 @@
},
"sprites/belt/built/right_10.png":
{
- "frame": {"x":1075,"y":1712,"w":130,"h":130},
+ "frame": {"x":843,"y":1881,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -314,7 +314,7 @@
},
"sprites/belt/built/right_11.png":
{
- "frame": {"x":1890,"y":1733,"w":130,"h":130},
+ "frame": {"x":1438,"y":893,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -322,7 +322,7 @@
},
"sprites/belt/built/right_12.png":
{
- "frame": {"x":570,"y":1878,"w":130,"h":130},
+ "frame": {"x":1440,"y":1029,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -330,15 +330,23 @@
},
"sprites/belt/built/right_13.png":
{
- "frame": {"x":706,"y":1861,"w":130,"h":130},
+ "frame": {"x":1440,"y":1165,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
"sourceSize": {"w":144,"h":144}
},
+"sprites/blueprints/analyzer.png":
+{
+ "frame": {"x":1419,"y":154,"w":144,"h":144},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
"sprites/blueprints/balancer-merger-inverse.png":
{
- "frame": {"x":993,"y":753,"w":142,"h":138},
+ "frame": {"x":521,"y":1310,"w":142,"h":138},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":142,"h":138},
@@ -346,7 +354,7 @@
},
"sprites/blueprints/balancer-merger.png":
{
- "frame": {"x":1281,"y":1051,"w":139,"h":138},
+ "frame": {"x":702,"y":1439,"w":139,"h":138},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":2,"w":139,"h":138},
@@ -354,7 +362,7 @@
},
"sprites/blueprints/balancer-splitter-inverse.png":
{
- "frame": {"x":1141,"y":753,"w":142,"h":138},
+ "frame": {"x":844,"y":752,"w":142,"h":138},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":142,"h":138},
@@ -362,7 +370,7 @@
},
"sprites/blueprints/balancer-splitter.png":
{
- "frame": {"x":664,"y":1174,"w":139,"h":138},
+ "frame": {"x":1159,"y":1029,"w":139,"h":138},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":2,"w":139,"h":138},
@@ -370,7 +378,7 @@
},
"sprites/blueprints/balancer.png":
{
- "frame": {"x":298,"y":709,"w":257,"h":144},
+ "frame": {"x":299,"y":710,"w":257,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":257,"h":144},
@@ -378,7 +386,7 @@
},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":1250,"y":1838,"w":130,"h":130},
+ "frame": {"x":1848,"y":1298,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -386,7 +394,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":1726,"y":1747,"w":130,"h":130},
+ "frame": {"x":1694,"y":1415,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -394,15 +402,23 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":1632,"y":1489,"w":116,"h":144},
+ "frame": {"x":1157,"y":1275,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
"sourceSize": {"w":144,"h":144}
},
+"sprites/blueprints/comparator.png":
+{
+ "frame": {"x":1140,"y":754,"w":144,"h":133},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133},
+ "sourceSize": {"w":144,"h":144}
+},
"sprites/blueprints/constant_signal.png":
{
- "frame": {"x":828,"y":1709,"w":105,"h":127},
+ "frame": {"x":1830,"y":1434,"w":105,"h":127},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":105,"h":127},
@@ -410,7 +426,7 @@
},
"sprites/blueprints/cutter-quad.png":
{
- "frame": {"x":4,"y":559,"w":548,"h":144},
+ "frame": {"x":5,"y":560,"w":548,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":548,"h":144},
@@ -418,7 +434,7 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":4,"y":1589,"w":256,"h":144},
+ "frame": {"x":5,"y":1590,"w":256,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":256,"h":144},
@@ -426,7 +442,7 @@
},
"sprites/blueprints/display.png":
{
- "frame": {"x":1426,"y":1053,"w":128,"h":136},
+ "frame": {"x":845,"y":1589,"w":128,"h":136},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":8,"w":128,"h":136},
@@ -434,7 +450,7 @@
},
"sprites/blueprints/filter.png":
{
- "frame": {"x":852,"y":304,"w":268,"h":144},
+ "frame": {"x":853,"y":305,"w":268,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":16,"y":0,"w":268,"h":144},
@@ -442,7 +458,7 @@
},
"sprites/blueprints/lever.png":
{
- "frame": {"x":1719,"y":453,"w":100,"h":116},
+ "frame": {"x":1941,"y":1434,"w":100,"h":116},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":22,"y":9,"w":100,"h":116},
@@ -450,7 +466,7 @@
},
"sprites/blueprints/logic_gate-not.png":
{
- "frame": {"x":1596,"y":603,"w":123,"h":144},
+ "frame": {"x":523,"y":1160,"w":123,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":123,"h":144},
@@ -458,23 +474,15 @@
},
"sprites/blueprints/logic_gate-or.png":
{
- "frame": {"x":258,"y":1456,"w":144,"h":123},
+ "frame": {"x":259,"y":1457,"w":144,"h":123},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":123},
"sourceSize": {"w":144,"h":144}
},
-"sprites/blueprints/logic_gate-transistor.png":
-{
- "frame": {"x":1568,"y":153,"w":102,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":102,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/blueprints/logic_gate-xor.png":
{
- "frame": {"x":1676,"y":154,"w":144,"h":143},
+ "frame": {"x":1677,"y":155,"w":144,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":143},
@@ -482,7 +490,7 @@
},
"sprites/blueprints/logic_gate.png":
{
- "frame": {"x":1825,"y":454,"w":144,"h":133},
+ "frame": {"x":1290,"y":754,"w":144,"h":133},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":133},
@@ -490,7 +498,7 @@
},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":522,"y":1159,"w":136,"h":143},
+ "frame": {"x":561,"y":1585,"w":136,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
@@ -498,7 +506,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":951,"y":1328,"w":136,"h":143},
+ "frame": {"x":703,"y":1583,"w":136,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":143},
@@ -506,7 +514,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":298,"y":859,"w":261,"h":144},
+ "frame": {"x":299,"y":860,"w":261,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":261,"h":144},
@@ -514,7 +522,7 @@
},
"sprites/blueprints/painter-double.png":
{
- "frame": {"x":558,"y":304,"w":288,"h":287},
+ "frame": {"x":559,"y":305,"w":288,"h":287},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":287},
@@ -522,7 +530,7 @@
},
"sprites/blueprints/painter-mirrored.png":
{
- "frame": {"x":1124,"y":153,"w":288,"h":144},
+ "frame": {"x":1125,"y":154,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -530,7 +538,7 @@
},
"sprites/blueprints/painter-quad.png":
{
- "frame": {"x":558,"y":4,"w":560,"h":144},
+ "frame": {"x":559,"y":5,"w":560,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":560,"h":144},
@@ -538,7 +546,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":1678,"y":4,"w":288,"h":144},
+ "frame": {"x":1679,"y":5,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -546,7 +554,7 @@
},
"sprites/blueprints/reader.png":
{
- "frame": {"x":266,"y":1585,"w":141,"h":144},
+ "frame": {"x":267,"y":1586,"w":141,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":144},
@@ -554,7 +562,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":1420,"y":303,"w":143,"h":144},
+ "frame": {"x":1421,"y":304,"w":143,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
@@ -562,7 +570,7 @@
},
"sprites/blueprints/rotater-rotate180.png":
{
- "frame": {"x":271,"y":1735,"w":143,"h":144},
+ "frame": {"x":272,"y":1736,"w":143,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
@@ -570,7 +578,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":1826,"y":154,"w":143,"h":144},
+ "frame": {"x":1827,"y":155,"w":143,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":144},
@@ -578,7 +586,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":4,"y":1739,"w":261,"h":144},
+ "frame": {"x":5,"y":1740,"w":261,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":261,"h":144},
@@ -586,15 +594,31 @@
},
"sprites/blueprints/storage.png":
{
- "frame": {"x":4,"y":1001,"w":250,"h":288},
+ "frame": {"x":5,"y":1002,"w":250,"h":288},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":21,"y":0,"w":250,"h":288},
"sourceSize": {"w":288,"h":288}
},
+"sprites/blueprints/transistor-mirrored.png":
+{
+ "frame": {"x":1720,"y":304,"w":100,"h":144},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":44,"y":0,"w":100,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
+"sprites/blueprints/transistor.png":
+{
+ "frame": {"x":1569,"y":154,"w":102,"h":144},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":102,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
"sprites/blueprints/trash.png":
{
- "frame": {"x":1418,"y":153,"w":144,"h":144},
+ "frame": {"x":1420,"y":454,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
@@ -602,7 +626,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":806,"y":1461,"w":138,"h":125},
+ "frame": {"x":558,"y":1454,"w":138,"h":125},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":19,"w":138,"h":125},
@@ -610,7 +634,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":950,"y":1477,"w":138,"h":112},
+ "frame": {"x":272,"y":1886,"w":138,"h":112},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":32,"w":138,"h":112},
@@ -618,7 +642,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":661,"y":1460,"w":139,"h":112},
+ "frame": {"x":985,"y":1871,"w":139,"h":112},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":139,"h":112},
@@ -626,23 +650,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":1094,"y":1475,"w":138,"h":112},
+ "frame": {"x":416,"y":1886,"w":138,"h":112},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":138,"h":112},
"sourceSize": {"w":144,"h":144}
},
-"sprites/blueprints/virtual_processor-analyzer.png":
-{
- "frame": {"x":1419,"y":453,"w":144,"h":144},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/blueprints/virtual_processor-painter.png":
{
- "frame": {"x":711,"y":597,"w":130,"h":144},
+ "frame": {"x":712,"y":598,"w":130,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":130,"h":144},
@@ -650,23 +666,15 @@
},
"sprites/blueprints/virtual_processor-rotater.png":
{
- "frame": {"x":1162,"y":897,"w":118,"h":144},
+ "frame": {"x":893,"y":987,"w":118,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":118,"h":144},
"sourceSize": {"w":144,"h":144}
},
-"sprites/blueprints/virtual_processor-shapecompare.png":
-{
- "frame": {"x":715,"y":897,"w":144,"h":133},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/blueprints/virtual_processor-stacker.png":
{
- "frame": {"x":560,"y":1578,"w":130,"h":144},
+ "frame": {"x":571,"y":1734,"w":130,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":130,"h":144},
@@ -674,7 +682,7 @@
},
"sprites/blueprints/virtual_processor-unstacker.png":
{
- "frame": {"x":1569,"y":303,"w":144,"h":144},
+ "frame": {"x":1570,"y":304,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
@@ -682,63 +690,31 @@
},
"sprites/blueprints/virtual_processor.png":
{
- "frame": {"x":847,"y":604,"w":144,"h":141},
+ "frame": {"x":848,"y":605,"w":144,"h":141},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":144,"h":141},
"sourceSize": {"w":144,"h":144}
},
-"sprites/blueprints/wire-cross.png":
-{
- "frame": {"x":1569,"y":453,"w":144,"h":144},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/blueprints/wire-split.png":
-{
- "frame": {"x":558,"y":597,"w":144,"h":82},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":62,"w":144,"h":82},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/blueprints/wire-turn.png":
-{
- "frame": {"x":1386,"y":1767,"w":82,"h":82},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":62,"y":62,"w":82,"h":82},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/blueprints/wire.png":
-{
- "frame": {"x":1954,"y":1033,"w":20,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":62,"y":0,"w":20,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/blueprints/wire_tunnel-coating.png":
-{
- "frame": {"x":526,"y":1009,"w":33,"h":134},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":56,"y":5,"w":33,"h":134},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/blueprints/wire_tunnel.png":
{
- "frame": {"x":807,"y":1320,"w":138,"h":135},
+ "frame": {"x":1130,"y":1727,"w":138,"h":135},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":138,"h":135},
"sourceSize": {"w":144,"h":144}
},
+"sprites/buildings/analyzer.png":
+{
+ "frame": {"x":1570,"y":454,"w":144,"h":144},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
"sprites/buildings/balancer-merger-inverse.png":
{
- "frame": {"x":864,"y":1036,"w":141,"h":136},
+ "frame": {"x":979,"y":1587,"w":141,"h":136},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":141,"h":136},
@@ -746,7 +722,7 @@
},
"sprites/buildings/balancer-merger.png":
{
- "frame": {"x":662,"y":1318,"w":139,"h":136},
+ "frame": {"x":985,"y":1729,"w":139,"h":136},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":3,"w":139,"h":136},
@@ -754,7 +730,7 @@
},
"sprites/buildings/balancer-splitter-inverse.png":
{
- "frame": {"x":1014,"y":897,"w":142,"h":136},
+ "frame": {"x":992,"y":754,"w":142,"h":136},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":3,"w":142,"h":136},
@@ -762,7 +738,7 @@
},
"sprites/buildings/balancer-splitter.png":
{
- "frame": {"x":809,"y":1178,"w":139,"h":136},
+ "frame": {"x":1126,"y":1585,"w":139,"h":136},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":3,"w":139,"h":136},
@@ -770,7 +746,7 @@
},
"sprites/buildings/balancer.png":
{
- "frame": {"x":260,"y":1158,"w":256,"h":143},
+ "frame": {"x":261,"y":1159,"w":256,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":256,"h":143},
@@ -778,7 +754,7 @@
},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":1238,"y":1464,"w":130,"h":130},
+ "frame": {"x":1166,"y":893,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":14,"w":130,"h":130},
@@ -786,7 +762,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":1754,"y":1611,"w":130,"h":130},
+ "frame": {"x":707,"y":1880,"w":130,"h":130},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":14,"w":130,"h":130},
@@ -794,15 +770,23 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":1239,"y":1197,"w":116,"h":144},
+ "frame": {"x":1888,"y":604,"w":116,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":116,"h":144},
"sourceSize": {"w":144,"h":144}
},
+"sprites/buildings/comparator.png":
+{
+ "frame": {"x":1440,"y":753,"w":143,"h":133},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":1,"y":0,"w":143,"h":133},
+ "sourceSize": {"w":144,"h":144}
+},
"sprites/buildings/constant_signal.png":
{
- "frame": {"x":696,"y":1578,"w":104,"h":127},
+ "frame": {"x":1666,"y":1554,"w":104,"h":127},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":104,"h":127},
@@ -810,7 +794,7 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":1124,"y":4,"w":548,"h":143},
+ "frame": {"x":1125,"y":5,"w":548,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":548,"h":143},
@@ -818,7 +802,7 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":258,"y":1307,"w":256,"h":143},
+ "frame": {"x":259,"y":1308,"w":256,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":256,"h":143},
@@ -826,7 +810,7 @@
},
"sprites/buildings/display.png":
{
- "frame": {"x":1558,"y":753,"w":126,"h":135},
+ "frame": {"x":1274,"y":1725,"w":126,"h":135},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":126,"h":135},
@@ -834,7 +818,7 @@
},
"sprites/buildings/filter.png":
{
- "frame": {"x":1146,"y":453,"w":267,"h":144},
+ "frame": {"x":1147,"y":454,"w":267,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":0,"w":267,"h":144},
@@ -842,7 +826,7 @@
},
"sprites/buildings/hub.png":
{
- "frame": {"x":4,"y":4,"w":548,"h":549},
+ "frame": {"x":5,"y":5,"w":548,"h":549},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":16,"w":548,"h":549},
@@ -850,7 +834,7 @@
},
"sprites/buildings/lever.png":
{
- "frame": {"x":557,"y":1456,"w":98,"h":114},
+ "frame": {"x":1590,"y":1434,"w":98,"h":114},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":23,"y":10,"w":98,"h":114},
@@ -858,7 +842,7 @@
},
"sprites/buildings/logic_gate-not.png":
{
- "frame": {"x":715,"y":747,"w":122,"h":144},
+ "frame": {"x":716,"y":748,"w":122,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":12,"y":0,"w":122,"h":144},
@@ -866,23 +850,15 @@
},
"sprites/buildings/logic_gate-or.png":
{
- "frame": {"x":408,"y":1456,"w":143,"h":123},
+ "frame": {"x":409,"y":1457,"w":143,"h":123},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":123},
"sourceSize": {"w":144,"h":144}
},
-"sprites/buildings/logic_gate-transistor.png":
-{
- "frame": {"x":1719,"y":303,"w":100,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":0,"w":100,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/buildings/logic_gate-xor.png":
{
- "frame": {"x":997,"y":604,"w":143,"h":143},
+ "frame": {"x":998,"y":605,"w":143,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":143},
@@ -890,7 +866,7 @@
},
"sprites/buildings/logic_gate.png":
{
- "frame": {"x":715,"y":1036,"w":143,"h":132},
+ "frame": {"x":1589,"y":753,"w":143,"h":132},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":143,"h":132},
@@ -898,7 +874,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":520,"y":1308,"w":136,"h":142},
+ "frame": {"x":707,"y":1732,"w":136,"h":142},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
@@ -906,7 +882,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":1097,"y":1197,"w":136,"h":142},
+ "frame": {"x":1017,"y":987,"w":136,"h":142},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":136,"h":142},
@@ -914,7 +890,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":4,"y":1889,"w":260,"h":143},
+ "frame": {"x":5,"y":1890,"w":260,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":260,"h":143},
@@ -922,7 +898,7 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":4,"y":709,"w":288,"h":286},
+ "frame": {"x":5,"y":710,"w":288,"h":286},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":286},
@@ -930,7 +906,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":1126,"y":303,"w":288,"h":144},
+ "frame": {"x":1127,"y":304,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -938,7 +914,7 @@
},
"sprites/buildings/painter-quad.png":
{
- "frame": {"x":558,"y":154,"w":560,"h":144},
+ "frame": {"x":559,"y":155,"w":560,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":560,"h":144},
@@ -946,7 +922,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":852,"y":454,"w":288,"h":144},
+ "frame": {"x":853,"y":455,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -954,7 +930,7 @@
},
"sprites/buildings/reader.png":
{
- "frame": {"x":413,"y":1585,"w":141,"h":144},
+ "frame": {"x":414,"y":1586,"w":141,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":144},
@@ -962,7 +938,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":1289,"y":753,"w":141,"h":143},
+ "frame": {"x":1297,"y":604,"w":141,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
@@ -970,7 +946,7 @@
},
"sprites/buildings/rotater-rotate180.png":
{
- "frame": {"x":1286,"y":902,"w":141,"h":143},
+ "frame": {"x":1444,"y":604,"w":141,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
@@ -978,7 +954,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":1011,"y":1039,"w":141,"h":143},
+ "frame": {"x":1591,"y":604,"w":141,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":141,"h":143},
@@ -986,7 +962,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":260,"y":1009,"w":260,"h":143},
+ "frame": {"x":261,"y":1010,"w":260,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":260,"h":143},
@@ -994,15 +970,31 @@
},
"sprites/buildings/storage.png":
{
- "frame": {"x":4,"y":1295,"w":248,"h":288},
+ "frame": {"x":5,"y":1296,"w":248,"h":288},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":22,"y":0,"w":248,"h":288},
"sourceSize": {"w":288,"h":288}
},
+"sprites/buildings/transistor-mirrored.png":
+{
+ "frame": {"x":1213,"y":1425,"w":99,"h":144},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
+"sprites/buildings/transistor.png":
+{
+ "frame": {"x":1720,"y":454,"w":100,"h":144},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":1,"y":0,"w":100,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
"sprites/buildings/trash.png":
{
- "frame": {"x":1825,"y":304,"w":144,"h":144},
+ "frame": {"x":1826,"y":305,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
@@ -1010,7 +1002,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":1093,"y":1345,"w":137,"h":124},
+ "frame": {"x":1130,"y":1868,"w":137,"h":124},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":20,"w":137,"h":124},
@@ -1018,7 +1010,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":1236,"y":1347,"w":137,"h":111},
+ "frame": {"x":1279,"y":1301,"w":137,"h":111},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":33,"w":137,"h":111},
@@ -1026,7 +1018,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":806,"y":1592,"w":137,"h":111},
+ "frame": {"x":1422,"y":1301,"w":137,"h":111},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
@@ -1034,23 +1026,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":949,"y":1595,"w":137,"h":111},
+ "frame": {"x":1738,"y":890,"w":137,"h":111},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":137,"h":111},
"sourceSize": {"w":144,"h":144}
},
-"sprites/buildings/virtual_processor-analyzer.png":
-{
- "frame": {"x":420,"y":1735,"w":144,"h":144},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/buildings/virtual_processor-painter.png":
{
- "frame": {"x":570,"y":1728,"w":130,"h":144},
+ "frame": {"x":1018,"y":1135,"w":130,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":130,"h":144},
@@ -1058,23 +1042,15 @@
},
"sprites/buildings/virtual_processor-rotater.png":
{
- "frame": {"x":1158,"y":1047,"w":117,"h":144},
+ "frame": {"x":1271,"y":1575,"w":117,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":117,"h":144},
"sourceSize": {"w":144,"h":144}
},
-"sprites/buildings/virtual_processor-shapecompare.png":
-{
- "frame": {"x":865,"y":897,"w":143,"h":133},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":1,"y":0,"w":143,"h":133},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/buildings/virtual_processor-stacker.png":
{
- "frame": {"x":1725,"y":593,"w":130,"h":144},
+ "frame": {"x":849,"y":1731,"w":130,"h":144},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":130,"h":144},
@@ -1082,7 +1058,7 @@
},
"sprites/buildings/virtual_processor-unstacker.png":
{
- "frame": {"x":1446,"y":603,"w":144,"h":143},
+ "frame": {"x":1826,"y":455,"w":144,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":144,"h":143},
@@ -1090,55 +1066,15 @@
},
"sprites/buildings/virtual_processor.png":
{
- "frame": {"x":843,"y":751,"w":144,"h":140},
+ "frame": {"x":1738,"y":604,"w":144,"h":140},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":144,"h":140},
"sourceSize": {"w":144,"h":144}
},
-"sprites/buildings/wire-cross.png":
-{
- "frame": {"x":561,"y":685,"w":144,"h":144},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/buildings/wire-split.png":
-{
- "frame": {"x":565,"y":985,"w":144,"h":81},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/buildings/wire-turn.png":
-{
- "frame": {"x":1386,"y":1855,"w":81,"h":81},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/buildings/wire.png":
-{
- "frame": {"x":2026,"y":116,"w":18,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":63,"y":0,"w":18,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/buildings/wire_tunnel-coating.png":
-{
- "frame": {"x":1949,"y":893,"w":32,"h":134},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":56,"y":5,"w":32,"h":134},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/buildings/wire_tunnel.png":
{
- "frame": {"x":954,"y":1188,"w":137,"h":134},
+ "frame": {"x":1738,"y":750,"w":137,"h":134},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":5,"w":137,"h":134},
@@ -1146,7 +1082,7 @@
},
"sprites/colors/blue.png":
{
- "frame": {"x":960,"y":1984,"w":54,"h":49},
+ "frame": {"x":1785,"y":1745,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1154,7 +1090,7 @@
},
"sprites/colors/cyan.png":
{
- "frame": {"x":1020,"y":1984,"w":54,"h":49},
+ "frame": {"x":1984,"y":1026,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1162,7 +1098,7 @@
},
"sprites/colors/green.png":
{
- "frame": {"x":1080,"y":1984,"w":54,"h":49},
+ "frame": {"x":1984,"y":1081,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1170,7 +1106,7 @@
},
"sprites/colors/purple.png":
{
- "frame": {"x":1140,"y":1984,"w":54,"h":49},
+ "frame": {"x":1984,"y":1136,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1178,7 +1114,7 @@
},
"sprites/colors/red.png":
{
- "frame": {"x":1987,"y":928,"w":54,"h":49},
+ "frame": {"x":1984,"y":1191,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1186,7 +1122,7 @@
},
"sprites/colors/uncolored.png":
{
- "frame": {"x":1987,"y":983,"w":54,"h":49},
+ "frame": {"x":1984,"y":1246,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1194,7 +1130,7 @@
},
"sprites/colors/white.png":
{
- "frame": {"x":1980,"y":1038,"w":54,"h":49},
+ "frame": {"x":1984,"y":1301,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1202,7 +1138,7 @@
},
"sprites/colors/yellow.png":
{
- "frame": {"x":1980,"y":1093,"w":54,"h":49},
+ "frame": {"x":1984,"y":1356,"w":54,"h":49},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":54,"h":49},
@@ -1210,7 +1146,7 @@
},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":1719,"y":575,"w":12,"h":12},
+ "frame": {"x":1830,"y":1415,"w":12,"h":12},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":12,"h":12},
@@ -1218,7 +1154,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":1737,"y":575,"w":12,"h":12},
+ "frame": {"x":566,"y":989,"w":12,"h":12},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":12,"h":12},
@@ -1226,7 +1162,7 @@
},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":1386,"y":1942,"w":48,"h":48},
+ "frame": {"x":1074,"y":1989,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1234,7 +1170,7 @@
},
"sprites/misc/processor_disabled.png":
{
- "frame": {"x":1561,"y":1781,"w":78,"h":81},
+ "frame": {"x":1785,"y":1658,"w":78,"h":81},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":10,"y":10,"w":78,"h":81},
@@ -1242,7 +1178,7 @@
},
"sprites/misc/processor_disconnected.png":
{
- "frame": {"x":1645,"y":1765,"w":65,"h":84},
+ "frame": {"x":1869,"y":1658,"w":65,"h":84},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":17,"y":8,"w":65,"h":84},
@@ -1250,7 +1186,7 @@
},
"sprites/misc/reader_overlay.png":
{
- "frame": {"x":1250,"y":1974,"w":104,"h":70},
+ "frame": {"x":1678,"y":1807,"w":104,"h":70},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":20,"y":38,"w":104,"h":70},
@@ -1258,7 +1194,7 @@
},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":1980,"y":1148,"w":35,"h":35},
+ "frame": {"x":2008,"y":200,"w":35,"h":35},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":35,"h":35},
@@ -1266,7 +1202,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":1766,"y":1883,"w":35,"h":39},
+ "frame": {"x":2008,"y":155,"w":35,"h":39},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":35,"h":39},
@@ -1274,7 +1210,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":865,"y":1984,"w":89,"h":44},
+ "frame": {"x":979,"y":1989,"w":89,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":89,"h":44},
@@ -1282,7 +1218,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":1414,"y":1996,"w":38,"h":48},
+ "frame": {"x":1769,"y":1883,"w":38,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":38,"h":48},
@@ -1290,7 +1226,7 @@
},
"sprites/wires/boolean_false.png":
{
- "frame": {"x":2013,"y":1189,"w":31,"h":41},
+ "frame": {"x":2008,"y":241,"w":31,"h":41},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":5,"w":31,"h":41},
@@ -1298,7 +1234,7 @@
},
"sprites/wires/boolean_true.png":
{
- "frame": {"x":1862,"y":1747,"w":22,"h":41},
+ "frame": {"x":1710,"y":891,"w":22,"h":41},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":5,"w":22,"h":41},
@@ -1306,7 +1242,7 @@
},
"sprites/wires/display/blue.png":
{
- "frame": {"x":706,"y":1997,"w":47,"h":47},
+ "frame": {"x":1769,"y":1937,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@@ -1314,7 +1250,7 @@
},
"sprites/wires/display/cyan.png":
{
- "frame": {"x":759,"y":1997,"w":47,"h":47},
+ "frame": {"x":1822,"y":1927,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@@ -1322,7 +1258,7 @@
},
"sprites/wires/display/green.png":
{
- "frame": {"x":812,"y":1997,"w":47,"h":47},
+ "frame": {"x":1940,"y":1658,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@@ -1330,7 +1266,7 @@
},
"sprites/wires/display/purple.png":
{
- "frame": {"x":1997,"y":716,"w":47,"h":47},
+ "frame": {"x":1993,"y":1647,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@@ -1338,7 +1274,7 @@
},
"sprites/wires/display/red.png":
{
- "frame": {"x":1997,"y":769,"w":47,"h":47},
+ "frame": {"x":1940,"y":1711,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@@ -1346,7 +1282,7 @@
},
"sprites/wires/display/white.png":
{
- "frame": {"x":1997,"y":822,"w":47,"h":47},
+ "frame": {"x":1993,"y":1700,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@@ -1354,7 +1290,7 @@
},
"sprites/wires/display/yellow.png":
{
- "frame": {"x":1997,"y":875,"w":47,"h":47},
+ "frame": {"x":1565,"y":1301,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":47},
@@ -1362,7 +1298,7 @@
},
"sprites/wires/lever_on.png":
{
- "frame": {"x":1619,"y":1645,"w":101,"h":114},
+ "frame": {"x":1678,"y":1687,"w":101,"h":114},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":21,"y":10,"w":101,"h":114},
@@ -1370,7 +1306,7 @@
},
"sprites/wires/logical_acceptor.png":
{
- "frame": {"x":1972,"y":4,"w":62,"h":106},
+ "frame": {"x":1976,"y":455,"w":62,"h":106},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":43,"y":0,"w":62,"h":106},
@@ -1378,7 +1314,7 @@
},
"sprites/wires/logical_ejector.png":
{
- "frame": {"x":1647,"y":1855,"w":60,"h":67},
+ "frame": {"x":1788,"y":1800,"w":60,"h":67},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":44,"y":0,"w":60,"h":67},
@@ -1386,7 +1322,7 @@
},
"sprites/wires/network_conflict.png":
{
- "frame": {"x":1713,"y":1883,"w":47,"h":44},
+ "frame": {"x":1128,"y":1998,"w":47,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":2,"w":47,"h":44},
@@ -1394,7 +1330,7 @@
},
"sprites/wires/network_empty.png":
{
- "frame": {"x":1200,"y":1984,"w":41,"h":48},
+ "frame": {"x":1256,"y":1173,"w":41,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":41,"h":48},
@@ -1402,47 +1338,15 @@
},
"sprites/wires/overlay_tile.png":
{
- "frame": {"x":1211,"y":1736,"w":96,"h":96},
+ "frame": {"x":1154,"y":1173,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/color_cross.png":
-{
- "frame": {"x":565,"y":835,"w":144,"h":144},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/wires/sets/color_forward.png":
-{
- "frame": {"x":2026,"y":266,"w":18,"h":144},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":63,"y":0,"w":18,"h":144},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/wires/sets/color_split.png":
-{
- "frame": {"x":565,"y":1072,"w":144,"h":81},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
- "sourceSize": {"w":144,"h":144}
-},
-"sprites/wires/sets/color_turn.png":
-{
- "frame": {"x":1474,"y":1781,"w":81,"h":81},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
- "sourceSize": {"w":144,"h":144}
-},
"sprites/wires/sets/conflict_cross.png":
{
- "frame": {"x":1146,"y":603,"w":144,"h":144},
+ "frame": {"x":421,"y":1736,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
@@ -1450,95 +1354,127 @@
},
"sprites/wires/sets/conflict_forward.png":
{
- "frame": {"x":2026,"y":416,"w":18,"h":144},
+ "frame": {"x":1973,"y":5,"w":26,"h":144},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":63,"y":0,"w":18,"h":144},
+ "spriteSourceSize": {"x":59,"y":0,"w":26,"h":144},
"sourceSize": {"w":144,"h":144}
},
"sprites/wires/sets/conflict_split.png":
{
- "frame": {"x":1725,"y":743,"w":144,"h":81},
+ "frame": {"x":559,"y":598,"w":144,"h":85},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
+ "spriteSourceSize": {"x":0,"y":59,"w":144,"h":85},
"sourceSize": {"w":144,"h":144}
},
"sprites/wires/sets/conflict_turn.png":
{
- "frame": {"x":1473,"y":1868,"w":81,"h":81},
+ "frame": {"x":1678,"y":1883,"w":85,"h":85},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
+ "spriteSourceSize": {"x":59,"y":59,"w":85,"h":85},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/regular_cross.png":
+"sprites/wires/sets/first_cross.png":
{
- "frame": {"x":561,"y":685,"w":144,"h":144},
+ "frame": {"x":562,"y":689,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/regular_forward.png":
+"sprites/wires/sets/first_forward.png":
{
- "frame": {"x":2026,"y":116,"w":18,"h":144},
+ "frame": {"x":2005,"y":5,"w":26,"h":144},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":63,"y":0,"w":18,"h":144},
+ "spriteSourceSize": {"x":59,"y":0,"w":26,"h":144},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/regular_split.png":
+"sprites/wires/sets/first_split.png":
{
- "frame": {"x":565,"y":985,"w":144,"h":81},
+ "frame": {"x":716,"y":898,"w":144,"h":85},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
+ "spriteSourceSize": {"x":0,"y":59,"w":144,"h":85},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/regular_turn.png":
+"sprites/wires/sets/first_turn.png":
{
- "frame": {"x":1386,"y":1855,"w":81,"h":81},
+ "frame": {"x":1776,"y":1567,"w":85,"h":85},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
+ "spriteSourceSize": {"x":59,"y":59,"w":85,"h":85},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/shape_cross.png":
+"sprites/wires/sets/second_cross.png":
{
- "frame": {"x":1296,"y":603,"w":144,"h":144},
+ "frame": {"x":566,"y":839,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/shape_forward.png":
+"sprites/wires/sets/second_forward.png":
{
- "frame": {"x":2026,"y":566,"w":18,"h":144},
+ "frame": {"x":1976,"y":155,"w":26,"h":144},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":63,"y":0,"w":18,"h":144},
+ "spriteSourceSize": {"x":59,"y":0,"w":26,"h":144},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/shape_split.png":
+"sprites/wires/sets/second_split.png":
{
- "frame": {"x":1690,"y":830,"w":144,"h":81},
+ "frame": {"x":866,"y":896,"w":144,"h":85},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":63,"w":144,"h":81},
+ "spriteSourceSize": {"x":0,"y":59,"w":144,"h":85},
"sourceSize": {"w":144,"h":144}
},
-"sprites/wires/sets/shape_turn.png":
+"sprites/wires/sets/second_turn.png":
{
- "frame": {"x":1560,"y":1868,"w":81,"h":81},
+ "frame": {"x":1867,"y":1567,"w":85,"h":85},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":63,"y":63,"w":81,"h":81},
+ "spriteSourceSize": {"x":59,"y":59,"w":85,"h":85},
+ "sourceSize": {"w":144,"h":144}
+},
+"sprites/wires/sets/third_cross.png":
+{
+ "frame": {"x":1147,"y":604,"w":144,"h":144},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
+"sprites/wires/sets/third_forward.png":
+{
+ "frame": {"x":1976,"y":305,"w":26,"h":144},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":59,"y":0,"w":26,"h":144},
+ "sourceSize": {"w":144,"h":144}
+},
+"sprites/wires/sets/third_split.png":
+{
+ "frame": {"x":1016,"y":896,"w":144,"h":85},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":59,"w":144,"h":85},
+ "sourceSize": {"w":144,"h":144}
+},
+"sprites/wires/sets/third_turn.png":
+{
+ "frame": {"x":1958,"y":1556,"w":85,"h":85},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":59,"y":59,"w":85,"h":85},
"sourceSize": {"w":144,"h":144}
},
"sprites/wires/wires_preview.png":
{
- "frame": {"x":1360,"y":1996,"w":48,"h":48},
+ "frame": {"x":1813,"y":1873,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1551,6 +1487,6 @@
"format": "RGBA8888",
"size": {"w":2048,"h":2048},
"scale": "0.75",
- "smartupdate": "$TexturePacker:SmartUpdate:5429cdf3b92834776437a91974e89d3c:fa61fb225cd312db144ce6a38d97871b:908b89f5ca8ff73e331a35a3b14d0604$"
+ "smartupdate": "$TexturePacker:SmartUpdate:d64dc60885c70016feef302a1c9d887e:b61ebeff39ec84001fc764203098f3eb:908b89f5ca8ff73e331a35a3b14d0604$"
}
}
diff --git a/res_built/atlas/atlas0_hq.png b/res_built/atlas/atlas0_hq.png
index 63dbe6ea..446b104a 100644
Binary files a/res_built/atlas/atlas0_hq.png and b/res_built/atlas/atlas0_hq.png differ
diff --git a/res_built/atlas/atlas0_lq.json b/res_built/atlas/atlas0_lq.json
index de5ae000..7acb5a5b 100644
--- a/res_built/atlas/atlas0_lq.json
+++ b/res_built/atlas/atlas0_lq.json
@@ -2,7 +2,7 @@
"sprites/belt/built/forward_0.png":
{
- "frame": {"x":902,"y":294,"w":40,"h":48},
+ "frame": {"x":901,"y":349,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -10,7 +10,7 @@
},
"sprites/belt/built/forward_1.png":
{
- "frame": {"x":200,"y":476,"w":40,"h":48},
+ "frame": {"x":901,"y":403,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -18,7 +18,7 @@
},
"sprites/belt/built/forward_2.png":
{
- "frame": {"x":146,"y":514,"w":40,"h":48},
+ "frame": {"x":853,"y":507,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -26,7 +26,7 @@
},
"sprites/belt/built/forward_3.png":
{
- "frame": {"x":50,"y":552,"w":40,"h":48},
+ "frame": {"x":939,"y":520,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -34,7 +34,7 @@
},
"sprites/belt/built/forward_4.png":
{
- "frame": {"x":4,"y":553,"w":40,"h":48},
+ "frame": {"x":462,"y":405,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -42,7 +42,7 @@
},
"sprites/belt/built/forward_5.png":
{
- "frame": {"x":96,"y":552,"w":40,"h":48},
+ "frame": {"x":508,"y":405,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -50,7 +50,7 @@
},
"sprites/belt/built/forward_6.png":
{
- "frame": {"x":559,"y":432,"w":40,"h":48},
+ "frame": {"x":358,"y":453,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -58,7 +58,7 @@
},
"sprites/belt/built/forward_7.png":
{
- "frame": {"x":605,"y":432,"w":40,"h":48},
+ "frame": {"x":308,"y":479,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -66,7 +66,7 @@
},
"sprites/belt/built/forward_8.png":
{
- "frame": {"x":651,"y":480,"w":40,"h":48},
+ "frame": {"x":258,"y":525,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -74,7 +74,7 @@
},
"sprites/belt/built/forward_9.png":
{
- "frame": {"x":697,"y":499,"w":40,"h":48},
+ "frame": {"x":404,"y":453,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -82,7 +82,7 @@
},
"sprites/belt/built/forward_10.png":
{
- "frame": {"x":246,"y":476,"w":40,"h":48},
+ "frame": {"x":162,"y":473,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -90,7 +90,7 @@
},
"sprites/belt/built/forward_11.png":
{
- "frame": {"x":54,"y":498,"w":40,"h":48},
+ "frame": {"x":715,"y":419,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -98,7 +98,7 @@
},
"sprites/belt/built/forward_12.png":
{
- "frame": {"x":4,"y":499,"w":40,"h":48},
+ "frame": {"x":761,"y":427,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -106,7 +106,7 @@
},
"sprites/belt/built/forward_13.png":
{
- "frame": {"x":100,"y":498,"w":40,"h":48},
+ "frame": {"x":807,"y":472,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
@@ -114,7 +114,7 @@
},
"sprites/belt/built/left_0.png":
{
- "frame": {"x":668,"y":380,"w":44,"h":44},
+ "frame": {"x":839,"y":422,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -122,7 +122,7 @@
},
"sprites/belt/built/left_1.png":
{
- "frame": {"x":718,"y":399,"w":44,"h":44},
+ "frame": {"x":889,"y":457,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -130,7 +130,7 @@
},
"sprites/belt/built/left_2.png":
{
- "frame": {"x":932,"y":480,"w":44,"h":44},
+ "frame": {"x":436,"y":303,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -138,7 +138,7 @@
},
"sprites/belt/built/left_3.png":
{
- "frame": {"x":718,"y":449,"w":44,"h":44},
+ "frame": {"x":316,"y":329,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -146,7 +146,7 @@
},
"sprites/belt/built/left_4.png":
{
- "frame": {"x":768,"y":449,"w":44,"h":44},
+ "frame": {"x":262,"y":375,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -154,7 +154,7 @@
},
"sprites/belt/built/left_5.png":
{
- "frame": {"x":832,"y":478,"w":44,"h":44},
+ "frame": {"x":208,"y":377,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -162,7 +162,7 @@
},
"sprites/belt/built/left_6.png":
{
- "frame": {"x":882,"y":500,"w":44,"h":44},
+ "frame": {"x":112,"y":446,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -170,7 +170,7 @@
},
"sprites/belt/built/left_7.png":
{
- "frame": {"x":932,"y":530,"w":44,"h":44},
+ "frame": {"x":58,"y":495,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -178,7 +178,7 @@
},
"sprites/belt/built/left_8.png":
{
- "frame": {"x":384,"y":302,"w":44,"h":44},
+ "frame": {"x":5,"y":504,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -186,7 +186,7 @@
},
"sprites/belt/built/left_9.png":
{
- "frame": {"x":207,"y":376,"w":44,"h":44},
+ "frame": {"x":366,"y":353,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -194,7 +194,7 @@
},
"sprites/belt/built/left_10.png":
{
- "frame": {"x":668,"y":430,"w":44,"h":44},
+ "frame": {"x":939,"y":470,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -202,7 +202,7 @@
},
"sprites/belt/built/left_11.png":
{
- "frame": {"x":768,"y":399,"w":44,"h":44},
+ "frame": {"x":567,"y":329,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -210,7 +210,7 @@
},
"sprites/belt/built/left_12.png":
{
- "frame": {"x":832,"y":428,"w":44,"h":44},
+ "frame": {"x":617,"y":329,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -218,7 +218,7 @@
},
"sprites/belt/built/left_13.png":
{
- "frame": {"x":882,"y":450,"w":44,"h":44},
+ "frame": {"x":386,"y":303,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -226,7 +226,7 @@
},
"sprites/belt/built/right_0.png":
{
- "frame": {"x":257,"y":376,"w":44,"h":44},
+ "frame": {"x":312,"y":379,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -234,7 +234,7 @@
},
"sprites/belt/built/right_1.png":
{
- "frame": {"x":434,"y":302,"w":44,"h":44},
+ "frame": {"x":258,"y":425,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -242,7 +242,7 @@
},
"sprites/belt/built/right_2.png":
{
- "frame": {"x":252,"y":426,"w":44,"h":44},
+ "frame": {"x":416,"y":353,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -250,7 +250,7 @@
},
"sprites/belt/built/right_3.png":
{
- "frame": {"x":427,"y":352,"w":44,"h":44},
+ "frame": {"x":466,"y":355,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -258,7 +258,7 @@
},
"sprites/belt/built/right_4.png":
{
- "frame": {"x":477,"y":352,"w":44,"h":44},
+ "frame": {"x":516,"y":355,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -266,7 +266,7 @@
},
"sprites/belt/built/right_5.png":
{
- "frame": {"x":561,"y":382,"w":44,"h":44},
+ "frame": {"x":362,"y":403,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -274,7 +274,7 @@
},
"sprites/belt/built/right_6.png":
{
- "frame": {"x":58,"y":448,"w":44,"h":44},
+ "frame": {"x":308,"y":429,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -282,7 +282,7 @@
},
"sprites/belt/built/right_7.png":
{
- "frame": {"x":4,"y":449,"w":44,"h":44},
+ "frame": {"x":258,"y":475,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -290,7 +290,7 @@
},
"sprites/belt/built/right_8.png":
{
- "frame": {"x":108,"y":448,"w":44,"h":44},
+ "frame": {"x":208,"y":477,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -298,7 +298,7 @@
},
"sprites/belt/built/right_9.png":
{
- "frame": {"x":376,"y":402,"w":44,"h":44},
+ "frame": {"x":412,"y":403,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -306,7 +306,7 @@
},
"sprites/belt/built/right_10.png":
{
- "frame": {"x":484,"y":302,"w":44,"h":44},
+ "frame": {"x":208,"y":427,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -314,7 +314,7 @@
},
"sprites/belt/built/right_11.png":
{
- "frame": {"x":377,"y":352,"w":44,"h":44},
+ "frame": {"x":108,"y":496,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -322,7 +322,7 @@
},
"sprites/belt/built/right_12.png":
{
- "frame": {"x":307,"y":382,"w":44,"h":44},
+ "frame": {"x":55,"y":545,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -330,15 +330,23 @@
},
"sprites/belt/built/right_13.png":
{
- "frame": {"x":202,"y":426,"w":44,"h":44},
+ "frame": {"x":5,"y":554,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
"sourceSize": {"w":48,"h":48}
},
+"sprites/blueprints/analyzer.png":
+{
+ "frame": {"x":311,"y":113,"w":48,"h":48},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
"sprites/blueprints/balancer-merger-inverse.png":
{
- "frame": {"x":310,"y":112,"w":48,"h":48},
+ "frame": {"x":311,"y":167,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -346,7 +354,7 @@
},
"sprites/blueprints/balancer-merger.png":
{
- "frame": {"x":678,"y":274,"w":47,"h":47},
+ "frame": {"x":795,"y":269,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@@ -354,7 +362,7 @@
},
"sprites/blueprints/balancer-splitter-inverse.png":
{
- "frame": {"x":310,"y":166,"w":48,"h":48},
+ "frame": {"x":966,"y":5,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -362,7 +370,7 @@
},
"sprites/blueprints/balancer-splitter.png":
{
- "frame": {"x":731,"y":302,"w":47,"h":47},
+ "frame": {"x":848,"y":269,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@@ -370,7 +378,7 @@
},
"sprites/blueprints/balancer.png":
{
- "frame": {"x":770,"y":58,"w":87,"h":48},
+ "frame": {"x":771,"y":59,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
@@ -378,7 +386,7 @@
},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":302,"y":432,"w":44,"h":44},
+ "frame": {"x":566,"y":379,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -386,7 +394,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":426,"y":402,"w":44,"h":44},
+ "frame": {"x":616,"y":379,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -394,15 +402,23 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":743,"y":499,"w":40,"h":48},
+ "frame": {"x":158,"y":527,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
"sourceSize": {"w":48,"h":48}
},
+"sprites/blueprints/comparator.png":
+{
+ "frame": {"x":497,"y":250,"w":48,"h":45},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
+ "sourceSize": {"w":48,"h":48}
+},
"sprites/blueprints/constant_signal.png":
{
- "frame": {"x":166,"y":268,"w":36,"h":43},
+ "frame": {"x":167,"y":269,"w":36,"h":43},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":36,"h":43},
@@ -410,7 +426,7 @@
},
"sprites/blueprints/cutter-quad.png":
{
- "frame": {"x":4,"y":58,"w":184,"h":48},
+ "frame": {"x":5,"y":59,"w":184,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":184,"h":48},
@@ -418,7 +434,7 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":863,"y":58,"w":87,"h":48},
+ "frame": {"x":864,"y":59,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
@@ -426,7 +442,7 @@
},
"sprites/blueprints/display.png":
{
- "frame": {"x":618,"y":328,"w":44,"h":46},
+ "frame": {"x":739,"y":367,"w":44,"h":46},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":44,"h":46},
@@ -434,7 +450,7 @@
},
"sprites/blueprints/filter.png":
{
- "frame": {"x":582,"y":4,"w":91,"h":48},
+ "frame": {"x":583,"y":5,"w":91,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":91,"h":48},
@@ -442,7 +458,7 @@
},
"sprites/blueprints/lever.png":
{
- "frame": {"x":982,"y":483,"w":35,"h":41},
+ "frame": {"x":167,"y":426,"w":35,"h":41},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":2,"w":35,"h":41},
@@ -450,7 +466,7 @@
},
"sprites/blueprints/logic_gate-not.png":
{
- "frame": {"x":316,"y":220,"w":42,"h":48},
+ "frame": {"x":317,"y":221,"w":42,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":42,"h":48},
@@ -458,23 +474,15 @@
},
"sprites/blueprints/logic_gate-or.png":
{
- "frame": {"x":58,"y":322,"w":48,"h":42},
+ "frame": {"x":5,"y":323,"w":48,"h":42},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":42},
"sourceSize": {"w":48,"h":48}
},
-"sprites/blueprints/logic_gate-transistor.png":
-{
- "frame": {"x":166,"y":317,"w":35,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":35,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/blueprints/logic_gate-xor.png":
{
- "frame": {"x":965,"y":4,"w":48,"h":48},
+ "frame": {"x":957,"y":59,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -482,7 +490,7 @@
},
"sprites/blueprints/logic_gate.png":
{
- "frame": {"x":208,"y":274,"w":48,"h":45},
+ "frame": {"x":209,"y":275,"w":48,"h":45},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
@@ -490,7 +498,7 @@
},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":849,"y":268,"w":47,"h":48},
+ "frame": {"x":59,"y":441,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -498,7 +506,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":948,"y":328,"w":47,"h":48},
+ "frame": {"x":5,"y":450,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -506,7 +514,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":775,"y":4,"w":89,"h":48},
+ "frame": {"x":776,"y":5,"w":89,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":89,"h":48},
@@ -514,7 +522,7 @@
},
"sprites/blueprints/painter-double.png":
{
- "frame": {"x":4,"y":112,"w":96,"h":96},
+ "frame": {"x":5,"y":113,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -522,7 +530,7 @@
},
"sprites/blueprints/painter-mirrored.png":
{
- "frame": {"x":208,"y":112,"w":96,"h":48},
+ "frame": {"x":209,"y":113,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -530,7 +538,7 @@
},
"sprites/blueprints/painter-quad.png":
{
- "frame": {"x":4,"y":4,"w":188,"h":48},
+ "frame": {"x":5,"y":5,"w":188,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":188,"h":48},
@@ -538,7 +546,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":208,"y":166,"w":96,"h":48},
+ "frame": {"x":209,"y":167,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -546,7 +554,7 @@
},
"sprites/blueprints/reader.png":
{
- "frame": {"x":956,"y":58,"w":48,"h":48},
+ "frame": {"x":951,"y":113,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -554,7 +562,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":950,"y":112,"w":48,"h":48},
+ "frame": {"x":951,"y":167,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -562,7 +570,7 @@
},
"sprites/blueprints/rotater-rotate180.png":
{
- "frame": {"x":950,"y":166,"w":48,"h":48},
+ "frame": {"x":583,"y":167,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -570,7 +578,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":582,"y":166,"w":48,"h":48},
+ "frame": {"x":637,"y":167,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -578,7 +586,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":870,"y":4,"w":89,"h":48},
+ "frame": {"x":871,"y":5,"w":89,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":89,"h":48},
@@ -586,15 +594,31 @@
},
"sprites/blueprints/storage.png":
{
- "frame": {"x":768,"y":112,"w":85,"h":96},
+ "frame": {"x":769,"y":113,"w":85,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":85,"h":96},
"sourceSize": {"w":96,"h":96}
},
+"sprites/blueprints/transistor-mirrored.png":
+{
+ "frame": {"x":899,"y":507,"w":34,"h":48},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
+"sprites/blueprints/transistor.png":
+{
+ "frame": {"x":167,"y":318,"w":35,"h":48},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":35,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
"sprites/blueprints/trash.png":
{
- "frame": {"x":636,"y":166,"w":48,"h":48},
+ "frame": {"x":691,"y":167,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -602,7 +626,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":4,"y":322,"w":48,"h":43},
+ "frame": {"x":262,"y":326,"w":48,"h":43},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":5,"w":48,"h":43},
@@ -610,7 +634,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":58,"y":370,"w":48,"h":38},
+ "frame": {"x":113,"y":323,"w":48,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":10,"w":48,"h":38},
@@ -618,7 +642,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":4,"y":371,"w":48,"h":38},
+ "frame": {"x":113,"y":367,"w":48,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
@@ -626,23 +650,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":112,"y":370,"w":48,"h":38},
+ "frame": {"x":5,"y":371,"w":48,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":38},
"sourceSize": {"w":48,"h":48}
},
-"sprites/blueprints/virtual_processor-analyzer.png":
-{
- "frame": {"x":690,"y":166,"w":48,"h":48},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/blueprints/virtual_processor-painter.png":
{
- "frame": {"x":837,"y":374,"w":44,"h":48},
+ "frame": {"x":573,"y":275,"w":44,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":44,"h":48},
@@ -650,23 +666,15 @@
},
"sprites/blueprints/virtual_processor-rotater.png":
{
- "frame": {"x":316,"y":274,"w":41,"h":48},
+ "frame": {"x":317,"y":275,"w":41,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":41,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/blueprints/virtual_processor-shapecompare.png":
-{
- "frame": {"x":262,"y":274,"w":48,"h":45},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/blueprints/virtual_processor-stacker.png":
{
- "frame": {"x":887,"y":396,"w":44,"h":48},
+ "frame": {"x":497,"y":301,"w":44,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":44,"h":48},
@@ -674,7 +682,7 @@
},
"sprites/blueprints/virtual_processor-unstacker.png":
{
- "frame": {"x":388,"y":195,"w":48,"h":48},
+ "frame": {"x":389,"y":196,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -682,63 +690,31 @@
},
"sprites/blueprints/virtual_processor.png":
{
- "frame": {"x":442,"y":195,"w":48,"h":48},
+ "frame": {"x":443,"y":196,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/blueprints/wire-cross.png":
-{
- "frame": {"x":496,"y":195,"w":48,"h":48},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/blueprints/wire-split.png":
-{
- "frame": {"x":58,"y":414,"w":48,"h":28},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/blueprints/wire-turn.png":
-{
- "frame": {"x":166,"y":446,"w":28,"h":28},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":20,"w":28,"h":28},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/blueprints/wire.png":
-{
- "frame": {"x":1010,"y":79,"w":8,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/blueprints/wire_tunnel-coating.png":
-{
- "frame": {"x":550,"y":294,"w":12,"h":46},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":18,"y":1,"w":12,"h":46},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/blueprints/wire_tunnel.png":
{
- "frame": {"x":388,"y":249,"w":48,"h":47},
+ "frame": {"x":688,"y":221,"w":48,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
"sourceSize": {"w":48,"h":48}
},
+"sprites/buildings/analyzer.png":
+{
+ "frame": {"x":497,"y":196,"w":48,"h":48},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
"sprites/buildings/balancer-merger-inverse.png":
{
- "frame": {"x":442,"y":249,"w":48,"h":47},
+ "frame": {"x":389,"y":250,"w":48,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
@@ -746,7 +722,7 @@
},
"sprites/buildings/balancer-merger.png":
{
- "frame": {"x":678,"y":327,"w":47,"h":47},
+ "frame": {"x":948,"y":329,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@@ -754,7 +730,7 @@
},
"sprites/buildings/balancer-splitter-inverse.png":
{
- "frame": {"x":496,"y":249,"w":48,"h":47},
+ "frame": {"x":443,"y":250,"w":48,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":47},
@@ -762,7 +738,7 @@
},
"sprites/buildings/balancer-splitter.png":
{
- "frame": {"x":784,"y":302,"w":47,"h":47},
+ "frame": {"x":795,"y":322,"w":47,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":47},
@@ -770,7 +746,7 @@
},
"sprites/buildings/balancer.png":
{
- "frame": {"x":582,"y":112,"w":87,"h":48},
+ "frame": {"x":583,"y":113,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
@@ -778,7 +754,7 @@
},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":668,"y":380,"w":44,"h":44},
+ "frame": {"x":839,"y":422,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":4,"w":44,"h":44},
@@ -786,7 +762,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":257,"y":376,"w":44,"h":44},
+ "frame": {"x":312,"y":379,"w":44,"h":44},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":44,"h":44},
@@ -794,15 +770,23 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":902,"y":294,"w":40,"h":48},
+ "frame": {"x":901,"y":349,"w":40,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":40,"h":48},
"sourceSize": {"w":48,"h":48}
},
+"sprites/buildings/comparator.png":
+{
+ "frame": {"x":263,"y":275,"w":48,"h":45},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
+ "sourceSize": {"w":48,"h":48}
+},
"sprites/buildings/constant_signal.png":
{
- "frame": {"x":906,"y":214,"w":36,"h":43},
+ "frame": {"x":907,"y":215,"w":36,"h":43},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":36,"h":43},
@@ -810,7 +794,7 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":194,"y":58,"w":184,"h":48},
+ "frame": {"x":195,"y":59,"w":184,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":184,"h":48},
@@ -818,7 +802,7 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":675,"y":112,"w":87,"h":48},
+ "frame": {"x":676,"y":113,"w":87,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":87,"h":48},
@@ -826,7 +810,7 @@
},
"sprites/buildings/display.png":
{
- "frame": {"x":618,"y":380,"w":44,"h":46},
+ "frame": {"x":789,"y":375,"w":44,"h":46},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":44,"h":46},
@@ -834,7 +818,7 @@
},
"sprites/buildings/filter.png":
{
- "frame": {"x":679,"y":4,"w":90,"h":48},
+ "frame": {"x":680,"y":5,"w":90,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":0,"w":90,"h":48},
@@ -842,7 +826,7 @@
},
"sprites/buildings/hub.png":
{
- "frame": {"x":392,"y":4,"w":184,"h":185},
+ "frame": {"x":393,"y":5,"w":184,"h":185},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":4,"w":184,"h":185},
@@ -850,7 +834,7 @@
},
"sprites/buildings/lever.png":
{
- "frame": {"x":982,"y":576,"w":34,"h":40},
+ "frame": {"x":204,"y":527,"w":34,"h":40},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":2,"w":34,"h":40},
@@ -858,7 +842,7 @@
},
"sprites/buildings/logic_gate-not.png":
{
- "frame": {"x":476,"y":402,"w":43,"h":48},
+ "frame": {"x":666,"y":382,"w":43,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":43,"h":48},
@@ -866,23 +850,15 @@
},
"sprites/buildings/logic_gate-or.png":
{
- "frame": {"x":112,"y":322,"w":48,"h":42},
+ "frame": {"x":59,"y":323,"w":48,"h":42},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":42},
"sourceSize": {"w":48,"h":48}
},
-"sprites/buildings/logic_gate-transistor.png":
-{
- "frame": {"x":166,"y":371,"w":35,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":35,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/buildings/logic_gate-xor.png":
{
- "frame": {"x":208,"y":220,"w":48,"h":48},
+ "frame": {"x":209,"y":221,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -890,7 +866,7 @@
},
"sprites/buildings/logic_gate.png":
{
- "frame": {"x":207,"y":325,"w":48,"h":45},
+ "frame": {"x":208,"y":326,"w":48,"h":45},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
@@ -898,7 +874,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":572,"y":274,"w":47,"h":48},
+ "frame": {"x":742,"y":269,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -906,7 +882,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":625,"y":274,"w":47,"h":48},
+ "frame": {"x":688,"y":274,"w":47,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":48},
@@ -914,7 +890,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":582,"y":58,"w":88,"h":48},
+ "frame": {"x":583,"y":59,"w":88,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":88,"h":48},
@@ -922,7 +898,7 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":106,"y":112,"w":96,"h":96},
+ "frame": {"x":107,"y":113,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -930,7 +906,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":4,"y":214,"w":96,"h":48},
+ "frame": {"x":5,"y":215,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -938,7 +914,7 @@
},
"sprites/buildings/painter-quad.png":
{
- "frame": {"x":198,"y":4,"w":188,"h":48},
+ "frame": {"x":199,"y":5,"w":188,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":188,"h":48},
@@ -946,7 +922,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":106,"y":214,"w":96,"h":48},
+ "frame": {"x":107,"y":215,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -954,7 +930,7 @@
},
"sprites/buildings/reader.png":
{
- "frame": {"x":262,"y":220,"w":48,"h":48},
+ "frame": {"x":263,"y":221,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -962,7 +938,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":4,"y":268,"w":48,"h":48},
+ "frame": {"x":5,"y":269,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -970,7 +946,7 @@
},
"sprites/buildings/rotater-rotate180.png":
{
- "frame": {"x":58,"y":268,"w":48,"h":48},
+ "frame": {"x":59,"y":269,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -978,7 +954,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":112,"y":268,"w":48,"h":48},
+ "frame": {"x":113,"y":269,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -986,7 +962,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":676,"y":58,"w":88,"h":48},
+ "frame": {"x":677,"y":59,"w":88,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":88,"h":48},
@@ -994,15 +970,31 @@
},
"sprites/buildings/storage.png":
{
- "frame": {"x":859,"y":112,"w":85,"h":96},
+ "frame": {"x":860,"y":113,"w":85,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":85,"h":96},
"sourceSize": {"w":96,"h":96}
},
+"sprites/buildings/transistor-mirrored.png":
+{
+ "frame": {"x":985,"y":521,"w":34,"h":48},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
+"sprites/buildings/transistor.png":
+{
+ "frame": {"x":167,"y":372,"w":35,"h":48},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":35,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
"sprites/buildings/trash.png":
{
- "frame": {"x":744,"y":214,"w":48,"h":48},
+ "frame": {"x":745,"y":215,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1010,7 +1002,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":890,"y":348,"w":47,"h":42},
+ "frame": {"x":848,"y":374,"w":47,"h":42},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":6,"w":47,"h":42},
@@ -1018,7 +1010,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":943,"y":382,"w":47,"h":38},
+ "frame": {"x":947,"y":382,"w":47,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":10,"w":47,"h":38},
@@ -1026,7 +1018,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":731,"y":355,"w":47,"h":38},
+ "frame": {"x":741,"y":323,"w":47,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
@@ -1034,23 +1026,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":784,"y":355,"w":47,"h":38},
+ "frame": {"x":947,"y":426,"w":47,"h":38},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":47,"h":38},
"sourceSize": {"w":48,"h":48}
},
-"sprites/buildings/virtual_processor-analyzer.png":
-{
- "frame": {"x":798,"y":214,"w":48,"h":48},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/buildings/virtual_processor-painter.png":
{
- "frame": {"x":937,"y":426,"w":44,"h":48},
+ "frame": {"x":623,"y":275,"w":44,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":44,"h":48},
@@ -1058,23 +1042,15 @@
},
"sprites/buildings/virtual_processor-rotater.png":
{
- "frame": {"x":315,"y":328,"w":41,"h":48},
+ "frame": {"x":901,"y":295,"w":41,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":41,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/buildings/virtual_processor-shapecompare.png":
-{
- "frame": {"x":261,"y":325,"w":48,"h":45},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/buildings/virtual_processor-stacker.png":
{
- "frame": {"x":568,"y":328,"w":44,"h":48},
+ "frame": {"x":673,"y":328,"w":44,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":44,"h":48},
@@ -1082,7 +1058,7 @@
},
"sprites/buildings/virtual_processor-unstacker.png":
{
- "frame": {"x":852,"y":214,"w":48,"h":48},
+ "frame": {"x":799,"y":215,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1090,55 +1066,15 @@
},
"sprites/buildings/virtual_processor.png":
{
- "frame": {"x":948,"y":220,"w":48,"h":48},
+ "frame": {"x":853,"y":215,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/buildings/wire-cross.png":
-{
- "frame": {"x":948,"y":274,"w":48,"h":48},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/buildings/wire-split.png":
-{
- "frame": {"x":4,"y":415,"w":48,"h":28},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/buildings/wire-turn.png":
-{
- "frame": {"x":527,"y":381,"w":28,"h":28},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":20,"w":28,"h":28},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/buildings/wire.png":
-{
- "frame": {"x":818,"y":420,"w":8,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/buildings/wire_tunnel-coating.png":
-{
- "frame": {"x":996,"y":393,"w":12,"h":46},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":18,"y":1,"w":12,"h":46},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/buildings/wire_tunnel.png":
{
- "frame": {"x":837,"y":322,"w":47,"h":46},
+ "frame": {"x":848,"y":322,"w":47,"h":46},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":47,"h":46},
@@ -1146,7 +1082,7 @@
},
"sprites/colors/blue.png":
{
- "frame": {"x":364,"y":141,"w":18,"h":18},
+ "frame": {"x":365,"y":142,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1154,7 +1090,7 @@
},
"sprites/colors/cyan.png":
{
- "frame": {"x":364,"y":165,"w":18,"h":18},
+ "frame": {"x":365,"y":166,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1162,7 +1098,7 @@
},
"sprites/colors/green.png":
{
- "frame": {"x":364,"y":189,"w":18,"h":18},
+ "frame": {"x":365,"y":190,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1170,7 +1106,7 @@
},
"sprites/colors/purple.png":
{
- "frame": {"x":744,"y":166,"w":18,"h":18},
+ "frame": {"x":745,"y":167,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1178,7 +1114,7 @@
},
"sprites/colors/red.png":
{
- "frame": {"x":744,"y":190,"w":18,"h":18},
+ "frame": {"x":745,"y":191,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1186,7 +1122,7 @@
},
"sprites/colors/uncolored.png":
{
- "frame": {"x":364,"y":213,"w":18,"h":18},
+ "frame": {"x":365,"y":214,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1194,7 +1130,7 @@
},
"sprites/colors/white.png":
{
- "frame": {"x":364,"y":237,"w":18,"h":18},
+ "frame": {"x":365,"y":238,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1202,7 +1138,7 @@
},
"sprites/colors/yellow.png":
{
- "frame": {"x":1002,"y":221,"w":18,"h":18},
+ "frame": {"x":365,"y":262,"w":18,"h":18},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":18,"h":18},
@@ -1210,7 +1146,7 @@
},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":731,"y":274,"w":4,"h":4},
+ "frame": {"x":1011,"y":59,"w":4,"h":4},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":4,"h":4},
@@ -1218,7 +1154,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":731,"y":284,"w":4,"h":4},
+ "frame": {"x":1011,"y":69,"w":4,"h":4},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":4,"h":4},
@@ -1226,7 +1162,7 @@
},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":1004,"y":133,"w":16,"h":16},
+ "frame": {"x":1003,"y":248,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1234,7 +1170,7 @@
},
"sprites/misc/processor_disabled.png":
{
- "frame": {"x":534,"y":346,"w":28,"h":29},
+ "frame": {"x":5,"y":604,"w":28,"h":29},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":28,"h":29},
@@ -1242,7 +1178,7 @@
},
"sprites/misc/processor_disconnected.png":
{
- "frame": {"x":550,"y":237,"w":23,"h":29},
+ "frame": {"x":551,"y":238,"w":23,"h":29},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":2,"w":23,"h":29},
@@ -1250,7 +1186,7 @@
},
"sprites/misc/reader_overlay.png":
{
- "frame": {"x":906,"y":263,"w":36,"h":25},
+ "frame": {"x":907,"y":264,"w":36,"h":25},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":12,"w":36,"h":25},
@@ -1258,7 +1194,7 @@
},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":1001,"y":355,"w":13,"h":13},
+ "frame": {"x":1005,"y":135,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -1266,7 +1202,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":1001,"y":374,"w":13,"h":13},
+ "frame": {"x":1005,"y":154,"w":13,"h":13},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":13,"h":13},
@@ -1274,7 +1210,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":166,"y":425,"w":30,"h":15},
+ "frame": {"x":989,"y":500,"w":30,"h":15},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":30,"h":15},
@@ -1282,7 +1218,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":1001,"y":333,"w":14,"h":16},
+ "frame": {"x":1005,"y":113,"w":14,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":14,"h":16},
@@ -1290,7 +1226,7 @@
},
"sprites/wires/boolean_false.png":
{
- "frame": {"x":818,"y":399,"w":12,"h":15},
+ "frame": {"x":1005,"y":173,"w":12,"h":15},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":1,"w":12,"h":15},
@@ -1298,7 +1234,7 @@
},
"sprites/wires/boolean_true.png":
{
- "frame": {"x":1010,"y":58,"w":9,"h":15},
+ "frame": {"x":673,"y":275,"w":9,"h":15},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":1,"w":9,"h":15},
@@ -1306,7 +1242,7 @@
},
"sprites/wires/display/blue.png":
{
- "frame": {"x":1004,"y":155,"w":16,"h":16},
+ "frame": {"x":1003,"y":270,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1314,7 +1250,7 @@
},
"sprites/wires/display/cyan.png":
{
- "frame": {"x":1004,"y":177,"w":16,"h":16},
+ "frame": {"x":1003,"y":292,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1322,7 +1258,7 @@
},
"sprites/wires/display/green.png":
{
- "frame": {"x":1004,"y":199,"w":16,"h":16},
+ "frame": {"x":1003,"y":314,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1330,7 +1266,7 @@
},
"sprites/wires/display/purple.png":
{
- "frame": {"x":1002,"y":245,"w":16,"h":16},
+ "frame": {"x":551,"y":273,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1338,7 +1274,7 @@
},
"sprites/wires/display/red.png":
{
- "frame": {"x":1002,"y":267,"w":16,"h":16},
+ "frame": {"x":364,"y":286,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1346,7 +1282,7 @@
},
"sprites/wires/display/white.png":
{
- "frame": {"x":1002,"y":289,"w":16,"h":16},
+ "frame": {"x":1001,"y":336,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1354,7 +1290,7 @@
},
"sprites/wires/display/yellow.png":
{
- "frame": {"x":1002,"y":311,"w":16,"h":16},
+ "frame": {"x":1001,"y":358,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1362,7 +1298,7 @@
},
"sprites/wires/lever_on.png":
{
- "frame": {"x":982,"y":530,"w":35,"h":40},
+ "frame": {"x":105,"y":546,"w":35,"h":40},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":2,"w":35,"h":40},
@@ -1370,7 +1306,7 @@
},
"sprites/wires/logical_acceptor.png":
{
- "frame": {"x":550,"y":195,"w":23,"h":36},
+ "frame": {"x":551,"y":196,"w":23,"h":36},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":23,"h":36},
@@ -1378,7 +1314,7 @@
},
"sprites/wires/logical_ejector.png":
{
- "frame": {"x":364,"y":112,"w":22,"h":23},
+ "frame": {"x":365,"y":113,"w":22,"h":23},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":22,"h":23},
@@ -1386,7 +1322,7 @@
},
"sprites/wires/network_conflict.png":
{
- "frame": {"x":364,"y":261,"w":16,"h":16},
+ "frame": {"x":1001,"y":380,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1394,7 +1330,7 @@
},
"sprites/wires/network_empty.png":
{
- "frame": {"x":363,"y":283,"w":15,"h":16},
+ "frame": {"x":1000,"y":424,"w":15,"h":16},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":15,"h":16},
@@ -1402,47 +1338,15 @@
},
"sprites/wires/overlay_tile.png":
{
- "frame": {"x":987,"y":445,"w":32,"h":32},
+ "frame": {"x":204,"y":573,"w":32,"h":32},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":32,"h":32},
"sourceSize": {"w":32,"h":32}
},
-"sprites/wires/sets/color_cross.png":
-{
- "frame": {"x":579,"y":220,"w":48,"h":48},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/sets/color_forward.png":
-{
- "frame": {"x":818,"y":474,"w":8,"h":48},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/sets/color_split.png":
-{
- "frame": {"x":112,"y":414,"w":48,"h":28},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
- "sourceSize": {"w":48,"h":48}
-},
-"sprites/wires/sets/color_turn.png":
-{
- "frame": {"x":525,"y":415,"w":28,"h":28},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":20,"y":20,"w":28,"h":28},
- "sourceSize": {"w":48,"h":48}
-},
"sprites/wires/sets/conflict_cross.png":
{
- "frame": {"x":633,"y":220,"w":48,"h":48},
+ "frame": {"x":949,"y":221,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1450,95 +1354,127 @@
},
"sprites/wires/sets/conflict_forward.png":
{
- "frame": {"x":363,"y":305,"w":8,"h":48},
+ "frame": {"x":1005,"y":194,"w":10,"h":48},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
+ "spriteSourceSize": {"x":19,"y":0,"w":10,"h":48},
"sourceSize": {"w":48,"h":48}
},
"sprites/wires/sets/conflict_split.png":
{
- "frame": {"x":741,"y":268,"w":48,"h":28},
+ "frame": {"x":59,"y":371,"w":48,"h":29},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
+ "spriteSourceSize": {"x":0,"y":19,"w":48,"h":29},
"sourceSize": {"w":48,"h":48}
},
"sprites/wires/sets/conflict_turn.png":
{
- "frame": {"x":158,"y":480,"w":28,"h":28},
+ "frame": {"x":853,"y":472,"w":29,"h":29},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":20,"y":20,"w":28,"h":28},
+ "spriteSourceSize": {"x":19,"y":19,"w":29,"h":29},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/regular_cross.png":
+"sprites/wires/sets/first_cross.png":
{
- "frame": {"x":948,"y":274,"w":48,"h":48},
+ "frame": {"x":949,"y":275,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/regular_forward.png":
+"sprites/wires/sets/first_forward.png":
{
- "frame": {"x":818,"y":420,"w":8,"h":48},
+ "frame": {"x":1000,"y":446,"w":10,"h":48},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
+ "spriteSourceSize": {"x":19,"y":0,"w":10,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/regular_split.png":
+"sprites/wires/sets/first_split.png":
{
- "frame": {"x":4,"y":415,"w":48,"h":28},
+ "frame": {"x":59,"y":406,"w":48,"h":29},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
+ "spriteSourceSize": {"x":0,"y":19,"w":48,"h":29},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/regular_turn.png":
+"sprites/wires/sets/first_turn.png":
{
- "frame": {"x":527,"y":381,"w":28,"h":28},
+ "frame": {"x":146,"y":581,"w":29,"h":29},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":20,"y":20,"w":28,"h":28},
+ "spriteSourceSize": {"x":19,"y":19,"w":29,"h":29},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/shape_cross.png":
+"sprites/wires/sets/second_cross.png":
{
- "frame": {"x":687,"y":220,"w":48,"h":48},
+ "frame": {"x":580,"y":221,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/shape_forward.png":
+"sprites/wires/sets/second_forward.png":
{
- "frame": {"x":362,"y":359,"w":8,"h":48},
+ "frame": {"x":551,"y":295,"w":10,"h":48},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":20,"y":0,"w":8,"h":48},
+ "spriteSourceSize": {"x":19,"y":0,"w":10,"h":48},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/shape_split.png":
+"sprites/wires/sets/second_split.png":
{
- "frame": {"x":795,"y":268,"w":48,"h":28},
+ "frame": {"x":5,"y":415,"w":48,"h":29},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":20,"w":48,"h":28},
+ "spriteSourceSize": {"x":0,"y":19,"w":48,"h":29},
"sourceSize": {"w":48,"h":48}
},
-"sprites/wires/sets/shape_turn.png":
+"sprites/wires/sets/second_turn.png":
{
- "frame": {"x":525,"y":449,"w":28,"h":28},
+ "frame": {"x":105,"y":592,"w":29,"h":29},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":20,"y":20,"w":28,"h":28},
+ "spriteSourceSize": {"x":19,"y":19,"w":29,"h":29},
+ "sourceSize": {"w":48,"h":48}
+},
+"sprites/wires/sets/third_cross.png":
+{
+ "frame": {"x":634,"y":221,"w":48,"h":48},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
+"sprites/wires/sets/third_forward.png":
+{
+ "frame": {"x":723,"y":328,"w":10,"h":48},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":19,"y":0,"w":10,"h":48},
+ "sourceSize": {"w":48,"h":48}
+},
+"sprites/wires/sets/third_split.png":
+{
+ "frame": {"x":113,"y":411,"w":48,"h":29},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":19,"w":48,"h":29},
+ "sourceSize": {"w":48,"h":48}
+},
+"sprites/wires/sets/third_turn.png":
+{
+ "frame": {"x":55,"y":595,"w":29,"h":29},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":19,"y":19,"w":29,"h":29},
"sourceSize": {"w":48,"h":48}
},
"sprites/wires/wires_preview.png":
{
- "frame": {"x":550,"y":272,"w":16,"h":16},
+ "frame": {"x":1000,"y":402,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1551,6 +1487,6 @@
"format": "RGBA8888",
"size": {"w":1024,"h":1024},
"scale": "0.25",
- "smartupdate": "$TexturePacker:SmartUpdate:5429cdf3b92834776437a91974e89d3c:fa61fb225cd312db144ce6a38d97871b:908b89f5ca8ff73e331a35a3b14d0604$"
+ "smartupdate": "$TexturePacker:SmartUpdate:d64dc60885c70016feef302a1c9d887e:b61ebeff39ec84001fc764203098f3eb:908b89f5ca8ff73e331a35a3b14d0604$"
}
}
diff --git a/res_built/atlas/atlas0_lq.png b/res_built/atlas/atlas0_lq.png
index 15cdd7bc..9c74e26e 100644
Binary files a/res_built/atlas/atlas0_lq.png and b/res_built/atlas/atlas0_lq.png differ
diff --git a/res_built/atlas/atlas0_mq.json b/res_built/atlas/atlas0_mq.json
index 98dfe66a..a2b03906 100644
--- a/res_built/atlas/atlas0_mq.json
+++ b/res_built/atlas/atlas0_mq.json
@@ -2,7 +2,7 @@
"sprites/belt/built/forward_0.png":
{
- "frame": {"x":97,"y":1812,"w":78,"h":96},
+ "frame": {"x":93,"y":1850,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -10,7 +10,7 @@
},
"sprites/belt/built/forward_1.png":
{
- "frame": {"x":4,"y":1831,"w":78,"h":96},
+ "frame": {"x":177,"y":1850,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -18,7 +18,7 @@
},
"sprites/belt/built/forward_2.png":
{
- "frame": {"x":566,"y":1691,"w":78,"h":96},
+ "frame": {"x":429,"y":1727,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -26,7 +26,7 @@
},
"sprites/belt/built/forward_3.png":
{
- "frame": {"x":466,"y":1760,"w":78,"h":96},
+ "frame": {"x":656,"y":1594,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -34,7 +34,7 @@
},
"sprites/belt/built/forward_4.png":
{
- "frame": {"x":368,"y":1792,"w":78,"h":96},
+ "frame": {"x":740,"y":1606,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -42,7 +42,7 @@
},
"sprites/belt/built/forward_5.png":
{
- "frame": {"x":275,"y":1818,"w":78,"h":96},
+ "frame": {"x":513,"y":1687,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -50,7 +50,7 @@
},
"sprites/belt/built/forward_6.png":
{
- "frame": {"x":181,"y":1882,"w":78,"h":96},
+ "frame": {"x":597,"y":1696,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -58,7 +58,7 @@
},
"sprites/belt/built/forward_7.png":
{
- "frame": {"x":88,"y":1914,"w":78,"h":96},
+ "frame": {"x":513,"y":1789,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -66,7 +66,7 @@
},
"sprites/belt/built/forward_8.png":
{
- "frame": {"x":265,"y":1920,"w":78,"h":96},
+ "frame": {"x":452,"y":1891,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -74,7 +74,7 @@
},
"sprites/belt/built/forward_9.png":
{
- "frame": {"x":349,"y":1920,"w":78,"h":96},
+ "frame": {"x":536,"y":1891,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -82,7 +82,7 @@
},
"sprites/belt/built/forward_10.png":
{
- "frame": {"x":4,"y":1933,"w":78,"h":96},
+ "frame": {"x":261,"y":1813,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -90,7 +90,7 @@
},
"sprites/belt/built/forward_11.png":
{
- "frame": {"x":868,"y":1567,"w":78,"h":96},
+ "frame": {"x":284,"y":1915,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -98,7 +98,7 @@
},
"sprites/belt/built/forward_12.png":
{
- "frame": {"x":769,"y":1608,"w":78,"h":96},
+ "frame": {"x":345,"y":1773,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -106,7 +106,7 @@
},
"sprites/belt/built/forward_13.png":
{
- "frame": {"x":665,"y":1690,"w":78,"h":96},
+ "frame": {"x":368,"y":1875,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
@@ -114,7 +114,7 @@
},
"sprites/belt/built/left_0.png":
{
- "frame": {"x":102,"y":1440,"w":87,"h":87},
+ "frame": {"x":385,"y":1448,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -122,7 +122,7 @@
},
"sprites/belt/built/left_1.png":
{
- "frame": {"x":4,"y":1459,"w":87,"h":87},
+ "frame": {"x":478,"y":1498,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -130,7 +130,7 @@
},
"sprites/belt/built/left_2.png":
{
- "frame": {"x":195,"y":1501,"w":87,"h":87},
+ "frame": {"x":377,"y":1541,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -138,7 +138,7 @@
},
"sprites/belt/built/left_3.png":
{
- "frame": {"x":97,"y":1533,"w":87,"h":87},
+ "frame": {"x":5,"y":1478,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -146,7 +146,7 @@
},
"sprites/belt/built/left_4.png":
{
- "frame": {"x":4,"y":1552,"w":87,"h":87},
+ "frame": {"x":98,"y":1478,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -154,7 +154,7 @@
},
"sprites/belt/built/left_5.png":
{
- "frame": {"x":688,"y":1411,"w":87,"h":87},
+ "frame": {"x":191,"y":1534,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -162,7 +162,7 @@
},
"sprites/belt/built/left_6.png":
{
- "frame": {"x":589,"y":1412,"w":87,"h":87},
+ "frame": {"x":284,"y":1587,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -170,7 +170,7 @@
},
"sprites/belt/built/left_7.png":
{
- "frame": {"x":490,"y":1477,"w":87,"h":87},
+ "frame": {"x":5,"y":1571,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -178,7 +178,7 @@
},
"sprites/belt/built/left_8.png":
{
- "frame": {"x":386,"y":1510,"w":87,"h":87},
+ "frame": {"x":98,"y":1571,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -186,7 +186,7 @@
},
"sprites/belt/built/left_9.png":
{
- "frame": {"x":288,"y":1530,"w":87,"h":87},
+ "frame": {"x":191,"y":1627,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -194,7 +194,7 @@
},
"sprites/belt/built/left_10.png":
{
- "frame": {"x":595,"y":1319,"w":87,"h":87},
+ "frame": {"x":5,"y":1385,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -202,7 +202,7 @@
},
"sprites/belt/built/left_11.png":
{
- "frame": {"x":496,"y":1384,"w":87,"h":87},
+ "frame": {"x":98,"y":1385,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -210,7 +210,7 @@
},
"sprites/belt/built/left_12.png":
{
- "frame": {"x":397,"y":1417,"w":87,"h":87},
+ "frame": {"x":191,"y":1441,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -218,7 +218,7 @@
},
"sprites/belt/built/left_13.png":
{
- "frame": {"x":293,"y":1437,"w":87,"h":87},
+ "frame": {"x":284,"y":1494,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -226,7 +226,7 @@
},
"sprites/belt/built/right_0.png":
{
- "frame": {"x":190,"y":1594,"w":87,"h":87},
+ "frame": {"x":5,"y":1664,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -234,7 +234,7 @@
},
"sprites/belt/built/right_1.png":
{
- "frame": {"x":97,"y":1626,"w":87,"h":87},
+ "frame": {"x":98,"y":1664,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -242,7 +242,7 @@
},
"sprites/belt/built/right_2.png":
{
- "frame": {"x":479,"y":1570,"w":87,"h":87},
+ "frame": {"x":191,"y":1720,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -250,7 +250,7 @@
},
"sprites/belt/built/right_3.png":
{
- "frame": {"x":381,"y":1603,"w":87,"h":87},
+ "frame": {"x":664,"y":1501,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -258,7 +258,7 @@
},
"sprites/belt/built/right_4.png":
{
- "frame": {"x":283,"y":1623,"w":87,"h":87},
+ "frame": {"x":757,"y":1513,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -266,7 +266,7 @@
},
"sprites/belt/built/right_5.png":
{
- "frame": {"x":190,"y":1687,"w":87,"h":87},
+ "frame": {"x":850,"y":1546,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -274,7 +274,7 @@
},
"sprites/belt/built/right_6.png":
{
- "frame": {"x":97,"y":1719,"w":87,"h":87},
+ "frame": {"x":5,"y":1757,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -282,7 +282,7 @@
},
"sprites/belt/built/right_7.png":
{
- "frame": {"x":4,"y":1738,"w":87,"h":87},
+ "frame": {"x":98,"y":1757,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -290,7 +290,7 @@
},
"sprites/belt/built/right_8.png":
{
- "frame": {"x":874,"y":1474,"w":87,"h":87},
+ "frame": {"x":5,"y":1952,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -298,7 +298,7 @@
},
"sprites/belt/built/right_9.png":
{
- "frame": {"x":775,"y":1515,"w":87,"h":87},
+ "frame": {"x":98,"y":1952,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -306,7 +306,7 @@
},
"sprites/belt/built/right_10.png":
{
- "frame": {"x":4,"y":1645,"w":87,"h":87},
+ "frame": {"x":571,"y":1501,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -314,7 +314,7 @@
},
"sprites/belt/built/right_11.png":
{
- "frame": {"x":781,"y":1422,"w":87,"h":87},
+ "frame": {"x":470,"y":1591,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -322,7 +322,7 @@
},
"sprites/belt/built/right_12.png":
{
- "frame": {"x":682,"y":1504,"w":87,"h":87},
+ "frame": {"x":377,"y":1634,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -330,15 +330,23 @@
},
"sprites/belt/built/right_13.png":
{
- "frame": {"x":583,"y":1505,"w":87,"h":87},
+ "frame": {"x":284,"y":1680,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
"sourceSize": {"w":96,"h":96}
},
+"sprites/blueprints/analyzer.png":
+{
+ "frame": {"x":573,"y":707,"w":96,"h":96},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
"sprites/blueprints/balancer-merger-inverse.png":
{
- "frame": {"x":716,"y":1215,"w":95,"h":93},
+ "frame": {"x":245,"y":1047,"w":95,"h":93},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":95,"h":93},
@@ -346,7 +354,7 @@
},
"sprites/blueprints/balancer-merger.png":
{
- "frame": {"x":4,"y":1081,"w":93,"h":93},
+ "frame": {"x":772,"y":1414,"w":93,"h":93},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":1,"w":93,"h":93},
@@ -354,7 +362,7 @@
},
"sprites/blueprints/balancer-splitter-inverse.png":
{
- "frame": {"x":614,"y":1220,"w":95,"h":93},
+ "frame": {"x":346,"y":1114,"w":95,"h":93},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":95,"h":93},
@@ -362,7 +370,7 @@
},
"sprites/blueprints/balancer-splitter.png":
{
- "frame": {"x":103,"y":1081,"w":93,"h":93},
+ "frame": {"x":871,"y":1447,"w":93,"h":93},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":1,"w":93,"h":93},
@@ -370,7 +378,7 @@
},
"sprites/blueprints/balancer.png":
{
- "frame": {"x":184,"y":581,"w":172,"h":96},
+ "frame": {"x":185,"y":582,"w":172,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":172,"h":96},
@@ -378,7 +386,7 @@
},
"sprites/blueprints/belt_left.png":
{
- "frame": {"x":676,"y":1597,"w":87,"h":87},
+ "frame": {"x":191,"y":1952,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -386,7 +394,7 @@
},
"sprites/blueprints/belt_right.png":
{
- "frame": {"x":572,"y":1598,"w":87,"h":87},
+ "frame": {"x":563,"y":1594,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -394,15 +402,23 @@
},
"sprites/blueprints/belt_top.png":
{
- "frame": {"x":853,"y":1669,"w":78,"h":96},
+ "frame": {"x":824,"y":1639,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
"sourceSize": {"w":96,"h":96}
},
+"sprites/blueprints/comparator.png":
+{
+ "frame": {"x":921,"y":1250,"w":96,"h":89},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89},
+ "sourceSize": {"w":96,"h":96}
+},
"sprites/blueprints/constant_signal.png":
{
- "frame": {"x":946,"y":245,"w":71,"h":85},
+ "frame": {"x":947,"y":206,"w":71,"h":85},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":71,"h":85},
@@ -410,7 +426,7 @@
},
"sprites/blueprints/cutter-quad.png":
{
- "frame": {"x":376,"y":106,"w":366,"h":96},
+ "frame": {"x":377,"y":107,"w":366,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":366,"h":96},
@@ -418,7 +434,7 @@
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":362,"y":616,"w":172,"h":96},
+ "frame": {"x":363,"y":617,"w":172,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":172,"h":96},
@@ -426,7 +442,7 @@
},
"sprites/blueprints/display.png":
{
- "frame": {"x":474,"y":1663,"w":86,"h":91},
+ "frame": {"x":933,"y":645,"w":86,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":5,"y":5,"w":86,"h":91},
@@ -434,7 +450,7 @@
},
"sprites/blueprints/filter.png":
{
- "frame": {"x":746,"y":603,"w":180,"h":96},
+ "frame": {"x":747,"y":604,"w":180,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":10,"y":0,"w":180,"h":96},
@@ -442,7 +458,7 @@
},
"sprites/blueprints/lever.png":
{
- "frame": {"x":283,"y":683,"w":68,"h":78},
+ "frame": {"x":284,"y":684,"w":68,"h":78},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":6,"w":68,"h":78},
@@ -450,7 +466,7 @@
},
"sprites/blueprints/logic_gate-not.png":
{
- "frame": {"x":816,"y":1320,"w":83,"h":96},
+ "frame": {"x":832,"y":1210,"w":83,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":0,"w":83,"h":96},
@@ -458,23 +474,15 @@
},
"sprites/blueprints/logic_gate-or.png":
{
- "frame": {"x":525,"y":1012,"w":96,"h":82},
+ "frame": {"x":455,"y":1102,"w":96,"h":82},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":82},
"sourceSize": {"w":96,"h":96}
},
-"sprites/blueprints/logic_gate-transistor.png":
-{
- "frame": {"x":945,"y":480,"w":68,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/blueprints/logic_gate-xor.png":
{
- "frame": {"x":572,"y":706,"w":96,"h":96},
+ "frame": {"x":182,"y":684,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -482,7 +490,7 @@
},
"sprites/blueprints/logic_gate.png":
{
- "frame": {"x":321,"y":922,"w":96,"h":89},
+ "frame": {"x":5,"y":888,"w":96,"h":89},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":89},
@@ -490,7 +498,7 @@
},
"sprites/blueprints/miner-chainable.png":
{
- "frame": {"x":4,"y":1277,"w":92,"h":96},
+ "frame": {"x":5,"y":1182,"w":92,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":96},
@@ -498,7 +506,7 @@
},
"sprites/blueprints/miner.png":
{
- "frame": {"x":301,"y":1234,"w":92,"h":96},
+ "frame": {"x":103,"y":1182,"w":92,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":96},
@@ -506,7 +514,7 @@
},
"sprites/blueprints/mixer.png":
{
- "frame": {"x":4,"y":479,"w":175,"h":96},
+ "frame": {"x":5,"y":480,"w":175,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":175,"h":96},
@@ -514,7 +522,7 @@
},
"sprites/blueprints/painter-double.png":
{
- "frame": {"x":764,"y":4,"w":192,"h":192},
+ "frame": {"x":765,"y":5,"w":192,"h":192},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":192},
@@ -522,7 +530,7 @@
},
"sprites/blueprints/painter-mirrored.png":
{
- "frame": {"x":376,"y":310,"w":192,"h":96},
+ "frame": {"x":377,"y":311,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -530,7 +538,7 @@
},
"sprites/blueprints/painter-quad.png":
{
- "frame": {"x":4,"y":4,"w":374,"h":96},
+ "frame": {"x":5,"y":5,"w":374,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":374,"h":96},
@@ -538,7 +546,7 @@
},
"sprites/blueprints/painter.png":
{
- "frame": {"x":376,"y":412,"w":192,"h":96},
+ "frame": {"x":377,"y":413,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -546,7 +554,7 @@
},
"sprites/blueprints/reader.png":
{
- "frame": {"x":514,"y":1100,"w":95,"h":96},
+ "frame": {"x":924,"y":844,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":95,"h":96},
@@ -554,7 +562,7 @@
},
"sprites/blueprints/rotater-ccw.png":
{
- "frame": {"x":921,"y":888,"w":96,"h":96},
+ "frame": {"x":358,"y":719,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -562,7 +570,7 @@
},
"sprites/blueprints/rotater-rotate180.png":
{
- "frame": {"x":181,"y":683,"w":96,"h":96},
+ "frame": {"x":358,"y":821,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -570,7 +578,7 @@
},
"sprites/blueprints/rotater.png":
{
- "frame": {"x":357,"y":718,"w":96,"h":96},
+ "frame": {"x":572,"y":809,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -578,7 +586,7 @@
},
"sprites/blueprints/stacker.png":
{
- "frame": {"x":185,"y":479,"w":175,"h":96},
+ "frame": {"x":186,"y":480,"w":175,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":175,"h":96},
@@ -586,15 +594,31 @@
},
"sprites/blueprints/storage.png":
{
- "frame": {"x":574,"y":310,"w":167,"h":192},
+ "frame": {"x":575,"y":311,"w":167,"h":192},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":167,"h":192},
"sourceSize": {"w":192,"h":192}
},
+"sprites/blueprints/transistor-mirrored.png":
+{
+ "frame": {"x":460,"y":719,"w":67,"h":96},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":29,"y":0,"w":67,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
+"sprites/blueprints/transistor.png":
+{
+ "frame": {"x":946,"y":441,"w":68,"h":96},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
"sprites/blueprints/trash.png":
{
- "frame": {"x":459,"y":720,"w":96,"h":96},
+ "frame": {"x":571,"y":911,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -602,7 +626,7 @@
},
"sprites/blueprints/underground_belt_entry-tier2.png":
{
- "frame": {"x":103,"y":1180,"w":93,"h":84},
+ "frame": {"x":302,"y":1213,"w":93,"h":84},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":12,"w":93,"h":84},
@@ -610,7 +634,7 @@
},
"sprites/blueprints/underground_belt_entry.png":
{
- "frame": {"x":202,"y":1222,"w":93,"h":75},
+ "frame": {"x":401,"y":1287,"w":93,"h":75},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":21,"w":93,"h":75},
@@ -618,7 +642,7 @@
},
"sprites/blueprints/underground_belt_exit-tier2.png":
{
- "frame": {"x":905,"y":1393,"w":94,"h":75},
+ "frame": {"x":672,"y":1340,"w":94,"h":75},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":94,"h":75},
@@ -626,23 +650,15 @@
},
"sprites/blueprints/underground_belt_exit.png":
{
- "frame": {"x":103,"y":1270,"w":93,"h":75},
+ "frame": {"x":500,"y":1337,"w":93,"h":75},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":0,"w":93,"h":75},
"sourceSize": {"w":96,"h":96}
},
-"sprites/blueprints/virtual_processor-analyzer.png":
-{
- "frame": {"x":357,"y":820,"w":96,"h":96},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/blueprints/virtual_processor-painter.png":
{
- "frame": {"x":932,"y":684,"w":87,"h":96},
+ "frame": {"x":932,"y":742,"w":87,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":87,"h":96},
@@ -650,23 +666,15 @@
},
"sprites/blueprints/virtual_processor-rotater.png":
{
- "frame": {"x":283,"y":1716,"w":79,"h":96},
+ "frame": {"x":839,"y":910,"w":79,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":79,"h":96},
"sourceSize": {"w":96,"h":96}
},
-"sprites/blueprints/virtual_processor-shapecompare.png":
-{
- "frame": {"x":208,"y":970,"w":96,"h":89},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/blueprints/virtual_processor-stacker.png":
{
- "frame": {"x":931,"y":786,"w":87,"h":96},
+ "frame": {"x":827,"y":1312,"w":87,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":87,"h":96},
@@ -674,7 +682,7 @@
},
"sprites/blueprints/virtual_processor-unstacker.png":
{
- "frame": {"x":561,"y":808,"w":96,"h":96},
+ "frame": {"x":737,"y":910,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -682,63 +690,31 @@
},
"sprites/blueprints/virtual_processor.png":
{
- "frame": {"x":106,"y":886,"w":96,"h":94},
+ "frame": {"x":730,"y":1114,"w":96,"h":94},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":96,"h":94},
"sourceSize": {"w":96,"h":96}
},
-"sprites/blueprints/wire-cross.png":
-{
- "frame": {"x":459,"y":822,"w":96,"h":96},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/blueprints/wire-split.png":
-{
- "frame": {"x":423,"y":1013,"w":96,"h":55},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":41,"w":96,"h":55},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/blueprints/wire-turn.png":
-{
- "frame": {"x":962,"y":4,"w":55,"h":55},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":41,"y":41,"w":55,"h":55},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/blueprints/wire.png":
-{
- "frame": {"x":723,"y":929,"w":14,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":41,"y":0,"w":14,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/blueprints/wire_tunnel-coating.png":
-{
- "frame": {"x":250,"y":847,"w":23,"h":90},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":37,"y":3,"w":23,"h":90},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/blueprints/wire_tunnel.png":
{
- "frame": {"x":202,"y":1125,"w":93,"h":91},
+ "frame": {"x":5,"y":1085,"w":93,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":2,"y":2,"w":93,"h":91},
"sourceSize": {"w":96,"h":96}
},
+"sprites/buildings/analyzer.png":
+{
+ "frame": {"x":736,"y":1012,"w":96,"h":96},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
"sprites/buildings/balancer-merger-inverse.png":
{
- "frame": {"x":905,"y":1296,"w":94,"h":91},
+ "frame": {"x":548,"y":1240,"w":94,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":94,"h":91},
@@ -746,7 +722,7 @@
},
"sprites/buildings/balancer-merger.png":
{
- "frame": {"x":301,"y":1137,"w":93,"h":91},
+ "frame": {"x":104,"y":1085,"w":93,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":2,"w":93,"h":91},
@@ -754,7 +730,7 @@
},
"sprites/buildings/balancer-splitter-inverse.png":
{
- "frame": {"x":715,"y":1314,"w":95,"h":91},
+ "frame": {"x":447,"y":1190,"w":95,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":95,"h":91},
@@ -762,7 +738,7 @@
},
"sprites/buildings/balancer-splitter.png":
{
- "frame": {"x":4,"y":1180,"w":93,"h":91},
+ "frame": {"x":203,"y":1146,"w":93,"h":91},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":2,"w":93,"h":91},
@@ -770,7 +746,7 @@
},
"sprites/buildings/balancer.png":
{
- "frame": {"x":744,"y":807,"w":171,"h":96},
+ "frame": {"x":747,"y":808,"w":171,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":171,"h":96},
@@ -778,7 +754,7 @@
},
"sprites/buildings/belt_left.png":
{
- "frame": {"x":102,"y":1440,"w":87,"h":87},
+ "frame": {"x":385,"y":1448,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":9,"w":87,"h":87},
@@ -786,7 +762,7 @@
},
"sprites/buildings/belt_right.png":
{
- "frame": {"x":190,"y":1594,"w":87,"h":87},
+ "frame": {"x":5,"y":1664,"w":87,"h":87},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":9,"w":87,"h":87},
@@ -794,15 +770,23 @@
},
"sprites/buildings/belt_top.png":
{
- "frame": {"x":97,"y":1812,"w":78,"h":96},
+ "frame": {"x":93,"y":1850,"w":78,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":78,"h":96},
"sourceSize": {"w":96,"h":96}
},
+"sprites/buildings/comparator.png":
+{
+ "frame": {"x":107,"y":888,"w":96,"h":89},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89},
+ "sourceSize": {"w":96,"h":96}
+},
"sprites/buildings/constant_signal.png":
{
- "frame": {"x":946,"y":336,"w":70,"h":85},
+ "frame": {"x":947,"y":297,"w":70,"h":85},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":70,"h":85},
@@ -810,7 +794,7 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":376,"y":208,"w":366,"h":96},
+ "frame": {"x":377,"y":209,"w":366,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":366,"h":96},
@@ -818,7 +802,7 @@
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":4,"y":683,"w":171,"h":96},
+ "frame": {"x":5,"y":684,"w":171,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":171,"h":96},
@@ -826,7 +810,7 @@
},
"sprites/buildings/display.png":
{
- "frame": {"x":376,"y":1696,"w":84,"h":90},
+ "frame": {"x":832,"y":1114,"w":84,"h":90},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":84,"h":90},
@@ -834,7 +818,7 @@
},
"sprites/buildings/filter.png":
{
- "frame": {"x":746,"y":705,"w":179,"h":96},
+ "frame": {"x":747,"y":706,"w":179,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":0,"w":179,"h":96},
@@ -842,7 +826,7 @@
},
"sprites/buildings/hub.png":
{
- "frame": {"x":4,"y":106,"w":366,"h":367},
+ "frame": {"x":5,"y":107,"w":366,"h":367},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":10,"w":366,"h":367},
@@ -850,7 +834,7 @@
},
"sprites/buildings/lever.png":
{
- "frame": {"x":674,"y":706,"w":66,"h":77},
+ "frame": {"x":460,"y":821,"w":66,"h":77},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":15,"y":6,"w":66,"h":77},
@@ -858,7 +842,7 @@
},
"sprites/buildings/logic_gate-not.png":
{
- "frame": {"x":817,"y":1218,"w":82,"h":96},
+ "frame": {"x":5,"y":1850,"w":82,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":8,"y":0,"w":82,"h":96},
@@ -866,23 +850,15 @@
},
"sprites/buildings/logic_gate-or.png":
{
- "frame": {"x":423,"y":924,"w":96,"h":83},
+ "frame": {"x":353,"y":1025,"w":96,"h":83},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":83},
"sourceSize": {"w":96,"h":96}
},
-"sprites/buildings/logic_gate-transistor.png":
-{
- "frame": {"x":945,"y":582,"w":68,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/buildings/logic_gate-xor.png":
{
- "frame": {"x":106,"y":785,"w":96,"h":95},
+ "frame": {"x":562,"y":1013,"w":96,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":95},
@@ -890,7 +866,7 @@
},
"sprites/buildings/logic_gate.png":
{
- "frame": {"x":4,"y":987,"w":96,"h":88},
+ "frame": {"x":251,"y":953,"w":96,"h":88},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":88},
@@ -898,7 +874,7 @@
},
"sprites/buildings/miner-chainable.png":
{
- "frame": {"x":399,"y":1316,"w":91,"h":95},
+ "frame": {"x":5,"y":1284,"w":91,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":91,"h":95},
@@ -906,7 +882,7 @@
},
"sprites/buildings/miner.png":
{
- "frame": {"x":300,"y":1336,"w":91,"h":95},
+ "frame": {"x":102,"y":1284,"w":91,"h":95},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":91,"h":95},
@@ -914,7 +890,7 @@
},
"sprites/buildings/mixer.png":
{
- "frame": {"x":366,"y":514,"w":174,"h":96},
+ "frame": {"x":367,"y":515,"w":174,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":174,"h":96},
@@ -922,7 +898,7 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":748,"y":202,"w":192,"h":191},
+ "frame": {"x":749,"y":203,"w":192,"h":191},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":191},
@@ -930,7 +906,7 @@
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":747,"y":399,"w":192,"h":96},
+ "frame": {"x":748,"y":400,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -938,7 +914,7 @@
},
"sprites/buildings/painter-quad.png":
{
- "frame": {"x":384,"y":4,"w":374,"h":96},
+ "frame": {"x":385,"y":5,"w":374,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":374,"h":96},
@@ -946,7 +922,7 @@
},
"sprites/buildings/painter.png":
{
- "frame": {"x":747,"y":501,"w":192,"h":96},
+ "frame": {"x":748,"y":502,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -954,7 +930,7 @@
},
"sprites/buildings/reader.png":
{
- "frame": {"x":412,"y":1134,"w":95,"h":96},
+ "frame": {"x":924,"y":946,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":95,"h":96},
@@ -962,7 +938,7 @@
},
"sprites/buildings/rotater-ccw.png":
{
- "frame": {"x":720,"y":1113,"w":95,"h":96},
+ "frame": {"x":920,"y":1345,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":95,"h":96},
@@ -970,7 +946,7 @@
},
"sprites/buildings/rotater-rotate180.png":
{
- "frame": {"x":615,"y":1118,"w":95,"h":96},
+ "frame": {"x":5,"y":983,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":95,"h":96},
@@ -978,7 +954,7 @@
},
"sprites/buildings/rotater.png":
{
- "frame": {"x":513,"y":1202,"w":95,"h":96},
+ "frame": {"x":106,"y":983,"w":95,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":95,"h":96},
@@ -986,7 +962,7 @@
},
"sprites/buildings/stacker.png":
{
- "frame": {"x":4,"y":581,"w":174,"h":96},
+ "frame": {"x":5,"y":582,"w":174,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":174,"h":96},
@@ -994,15 +970,31 @@
},
"sprites/buildings/storage.png":
{
- "frame": {"x":574,"y":508,"w":166,"h":192},
+ "frame": {"x":575,"y":509,"w":166,"h":192},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":166,"h":192},
"sourceSize": {"w":192,"h":192}
},
+"sprites/buildings/transistor-mirrored.png":
+{
+ "frame": {"x":675,"y":707,"w":66,"h":96},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
+"sprites/buildings/transistor.png":
+{
+ "frame": {"x":946,"y":543,"w":68,"h":96},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
"sprites/buildings/trash.png":
{
- "frame": {"x":561,"y":910,"w":96,"h":96},
+ "frame": {"x":923,"y":1048,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -1010,7 +1002,7 @@
},
"sprites/buildings/underground_belt_entry-tier2.png":
{
- "frame": {"x":102,"y":1351,"w":92,"h":83},
+ "frame": {"x":299,"y":1303,"w":92,"h":83},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":13,"w":92,"h":83},
@@ -1018,7 +1010,7 @@
},
"sprites/buildings/underground_belt_entry.png":
{
- "frame": {"x":4,"y":1379,"w":92,"h":74},
+ "frame": {"x":397,"y":1368,"w":92,"h":74},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":22,"w":92,"h":74},
@@ -1026,7 +1018,7 @@
},
"sprites/buildings/underground_belt_exit-tier2.png":
{
- "frame": {"x":399,"y":1236,"w":92,"h":74},
+ "frame": {"x":495,"y":1418,"w":92,"h":74},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":74},
@@ -1034,23 +1026,15 @@
},
"sprites/buildings/underground_belt_exit.png":
{
- "frame": {"x":497,"y":1304,"w":92,"h":74},
+ "frame": {"x":593,"y":1421,"w":92,"h":74},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":92,"h":74},
"sourceSize": {"w":96,"h":96}
},
-"sprites/buildings/virtual_processor-analyzer.png":
-{
- "frame": {"x":744,"y":909,"w":96,"h":96},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/buildings/virtual_processor-painter.png":
{
- "frame": {"x":627,"y":1016,"w":87,"h":96},
+ "frame": {"x":199,"y":1339,"w":87,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":87,"h":96},
@@ -1058,23 +1042,15 @@
},
"sprites/buildings/virtual_processor-rotater.png":
{
- "frame": {"x":190,"y":1780,"w":79,"h":96},
+ "frame": {"x":838,"y":1012,"w":79,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":79,"h":96},
"sourceSize": {"w":96,"h":96}
},
-"sprites/buildings/virtual_processor-shapecompare.png":
-{
- "frame": {"x":106,"y":986,"w":96,"h":89},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/buildings/virtual_processor-stacker.png":
{
- "frame": {"x":200,"y":1399,"w":87,"h":96},
+ "frame": {"x":292,"y":1392,"w":87,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":87,"h":96},
@@ -1082,7 +1058,7 @@
},
"sprites/buildings/virtual_processor-unstacker.png":
{
- "frame": {"x":743,"y":1011,"w":96,"h":96},
+ "frame": {"x":5,"y":786,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -1090,55 +1066,15 @@
},
"sprites/buildings/virtual_processor.png":
{
- "frame": {"x":4,"y":887,"w":96,"h":94},
+ "frame": {"x":922,"y":1150,"w":96,"h":94},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":96,"h":94},
"sourceSize": {"w":96,"h":96}
},
-"sprites/buildings/wire-cross.png":
-{
- "frame": {"x":914,"y":990,"w":96,"h":96},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/buildings/wire-split.png":
-{
- "frame": {"x":310,"y":1017,"w":96,"h":54},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/buildings/wire-turn.png":
-{
- "frame": {"x":962,"y":65,"w":54,"h":54},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":42,"y":42,"w":54,"h":54},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/buildings/wire.png":
-{
- "frame": {"x":896,"y":909,"w":12,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":42,"y":0,"w":12,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/buildings/wire_tunnel-coating.png":
-{
- "frame": {"x":546,"y":514,"w":22,"h":90},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":37,"y":3,"w":22,"h":90},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/buildings/wire_tunnel.png":
{
- "frame": {"x":202,"y":1303,"w":92,"h":90},
+ "frame": {"x":201,"y":1243,"w":92,"h":90},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":3,"w":92,"h":90},
@@ -1146,7 +1082,7 @@
},
"sprites/colors/blue.png":
{
- "frame": {"x":845,"y":1100,"w":36,"h":34},
+ "frame": {"x":664,"y":1034,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1154,7 +1090,7 @@
},
"sprites/colors/cyan.png":
{
- "frame": {"x":208,"y":785,"w":36,"h":34},
+ "frame": {"x":664,"y":1074,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1162,7 +1098,7 @@
},
"sprites/colors/green.png":
{
- "frame": {"x":208,"y":825,"w":36,"h":34},
+ "frame": {"x":209,"y":900,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1170,7 +1106,7 @@
},
"sprites/colors/purple.png":
{
- "frame": {"x":208,"y":865,"w":36,"h":34},
+ "frame": {"x":209,"y":940,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1178,7 +1114,7 @@
},
"sprites/colors/red.png":
{
- "frame": {"x":208,"y":905,"w":36,"h":34},
+ "frame": {"x":209,"y":980,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1186,7 +1122,7 @@
},
"sprites/colors/uncolored.png":
{
- "frame": {"x":279,"y":850,"w":36,"h":34},
+ "frame": {"x":659,"y":1114,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1194,7 +1130,7 @@
},
"sprites/colors/white.png":
{
- "frame": {"x":279,"y":890,"w":36,"h":34},
+ "frame": {"x":659,"y":1154,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1202,7 +1138,7 @@
},
"sprites/colors/yellow.png":
{
- "frame": {"x":279,"y":930,"w":36,"h":34},
+ "frame": {"x":659,"y":1194,"w":36,"h":34},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":2,"w":36,"h":34},
@@ -1210,7 +1146,7 @@
},
"sprites/debug/acceptor_slot.png":
{
- "frame": {"x":748,"y":106,"w":8,"h":8},
+ "frame": {"x":1011,"y":129,"w":8,"h":8},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":8,"h":8},
@@ -1218,7 +1154,7 @@
},
"sprites/debug/ejector_slot.png":
{
- "frame": {"x":748,"y":120,"w":8,"h":8},
+ "frame": {"x":1011,"y":143,"w":8,"h":8},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":8,"h":8},
@@ -1226,7 +1162,7 @@
},
"sprites/misc/hub_direction_indicator.png":
{
- "frame": {"x":952,"y":1591,"w":32,"h":32},
+ "frame": {"x":659,"y":1234,"w":32,"h":32},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":32,"h":32},
@@ -1234,7 +1170,7 @@
},
"sprites/misc/processor_disabled.png":
{
- "frame": {"x":663,"y":955,"w":53,"h":55},
+ "frame": {"x":963,"y":5,"w":53,"h":55},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":6,"w":53,"h":55},
@@ -1242,7 +1178,7 @@
},
"sprites/misc/processor_disconnected.png":
{
- "frame": {"x":846,"y":909,"w":44,"h":57},
+ "frame": {"x":963,"y":66,"w":44,"h":57},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":11,"y":5,"w":44,"h":57},
@@ -1250,7 +1186,7 @@
},
"sprites/misc/reader_overlay.png":
{
- "frame": {"x":945,"y":427,"w":70,"h":47},
+ "frame": {"x":947,"y":388,"w":70,"h":47},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":25,"w":70,"h":47},
@@ -1258,7 +1194,7 @@
},
"sprites/misc/slot_bad_arrow.png":
{
- "frame": {"x":250,"y":817,"w":24,"h":24},
+ "frame": {"x":706,"y":1066,"w":24,"h":24},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":1,"w":24,"h":24},
@@ -1266,7 +1202,7 @@
},
"sprites/misc/slot_good_arrow.png":
{
- "frame": {"x":250,"y":785,"w":24,"h":26},
+ "frame": {"x":706,"y":1034,"w":24,"h":26},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":1,"y":0,"w":24,"h":26},
@@ -1274,7 +1210,7 @@
},
"sprites/misc/storage_overlay.png":
{
- "frame": {"x":663,"y":859,"w":60,"h":30},
+ "frame": {"x":674,"y":809,"w":60,"h":30},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":60,"h":30},
@@ -1282,7 +1218,7 @@
},
"sprites/misc/waypoint.png":
{
- "frame": {"x":540,"y":682,"w":26,"h":32},
+ "frame": {"x":541,"y":689,"w":26,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":26,"h":32},
@@ -1290,7 +1226,7 @@
},
"sprites/wires/boolean_false.png":
{
- "frame": {"x":546,"y":610,"w":21,"h":28},
+ "frame": {"x":547,"y":515,"w":21,"h":28},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":3,"w":21,"h":28},
@@ -1298,7 +1234,7 @@
},
"sprites/wires/boolean_true.png":
{
- "frame": {"x":723,"y":895,"w":15,"h":28},
+ "frame": {"x":672,"y":1272,"w":15,"h":28},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":3,"w":15,"h":28},
@@ -1306,7 +1242,7 @@
},
"sprites/wires/display/blue.png":
{
- "frame": {"x":821,"y":1140,"w":33,"h":33},
+ "frame": {"x":533,"y":727,"w":33,"h":33},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":33,"h":33},
@@ -1314,7 +1250,7 @@
},
"sprites/wires/display/cyan.png":
{
- "frame": {"x":821,"y":1179,"w":33,"h":33},
+ "frame": {"x":533,"y":766,"w":33,"h":33},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":33,"h":33},
@@ -1322,7 +1258,7 @@
},
"sprites/wires/display/green.png":
{
- "frame": {"x":967,"y":1474,"w":33,"h":33},
+ "frame": {"x":533,"y":805,"w":33,"h":33},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":33,"h":33},
@@ -1330,7 +1266,7 @@
},
"sprites/wires/display/purple.png":
{
- "frame": {"x":967,"y":1513,"w":33,"h":33},
+ "frame": {"x":532,"y":844,"w":33,"h":33},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":33,"h":33},
@@ -1338,7 +1274,7 @@
},
"sprites/wires/display/red.png":
{
- "frame": {"x":967,"y":1552,"w":33,"h":33},
+ "frame": {"x":532,"y":883,"w":33,"h":33},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":33,"h":33},
@@ -1346,7 +1282,7 @@
},
"sprites/wires/display/white.png":
{
- "frame": {"x":172,"y":1984,"w":33,"h":33},
+ "frame": {"x":530,"y":922,"w":33,"h":33},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":33,"h":33},
@@ -1354,7 +1290,7 @@
},
"sprites/wires/display/yellow.png":
{
- "frame": {"x":211,"y":1984,"w":33,"h":33},
+ "frame": {"x":530,"y":961,"w":33,"h":33},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":33,"h":33},
@@ -1362,7 +1298,7 @@
},
"sprites/wires/lever_on.png":
{
- "frame": {"x":283,"y":767,"w":68,"h":77},
+ "frame": {"x":284,"y":768,"w":68,"h":77},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":6,"w":68,"h":77},
@@ -1370,7 +1306,7 @@
},
"sprites/wires/logical_acceptor.png":
{
- "frame": {"x":846,"y":972,"w":42,"h":71},
+ "frame": {"x":963,"y":129,"w":42,"h":71},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":28,"y":0,"w":42,"h":71},
@@ -1378,7 +1314,7 @@
},
"sprites/wires/logical_ejector.png":
{
- "frame": {"x":845,"y":1049,"w":41,"h":45},
+ "frame": {"x":209,"y":849,"w":41,"h":45},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":29,"y":0,"w":41,"h":45},
@@ -1386,7 +1322,7 @@
},
"sprites/wires/network_conflict.png":
{
- "frame": {"x":952,"y":1667,"w":32,"h":30},
+ "frame": {"x":207,"y":1058,"w":32,"h":30},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":0,"y":1,"w":32,"h":30},
@@ -1394,7 +1330,7 @@
},
"sprites/wires/network_empty.png":
{
- "frame": {"x":540,"y":644,"w":28,"h":32},
+ "frame": {"x":541,"y":651,"w":28,"h":32},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":3,"y":0,"w":28,"h":32},
@@ -1402,47 +1338,15 @@
},
"sprites/wires/overlay_tile.png":
{
- "frame": {"x":674,"y":789,"w":64,"h":64},
+ "frame": {"x":460,"y":904,"w":64,"h":64},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":64,"h":64},
"sourceSize": {"w":64,"h":64}
},
-"sprites/wires/sets/color_cross.png":
-{
- "frame": {"x":912,"y":1092,"w":96,"h":96},
- "rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/sets/color_forward.png":
-{
- "frame": {"x":894,"y":1011,"w":12,"h":96},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":42,"y":0,"w":12,"h":96},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/sets/color_split.png":
-{
- "frame": {"x":208,"y":1065,"w":96,"h":54},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54},
- "sourceSize": {"w":96,"h":96}
-},
-"sprites/wires/sets/color_turn.png":
-{
- "frame": {"x":962,"y":125,"w":54,"h":54},
- "rotated": false,
- "trimmed": true,
- "spriteSourceSize": {"x":42,"y":42,"w":54,"h":54},
- "sourceSize": {"w":96,"h":96}
-},
"sprites/wires/sets/conflict_cross.png":
{
- "frame": {"x":905,"y":1194,"w":96,"h":96},
+ "frame": {"x":107,"y":786,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -1450,95 +1354,127 @@
},
"sprites/wires/sets/conflict_forward.png":
{
- "frame": {"x":887,"y":1113,"w":12,"h":96},
+ "frame": {"x":547,"y":549,"w":18,"h":96},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":42,"y":0,"w":12,"h":96},
+ "spriteSourceSize": {"x":39,"y":0,"w":18,"h":96},
"sourceSize": {"w":96,"h":96}
},
"sprites/wires/sets/conflict_split.png":
{
- "frame": {"x":412,"y":1074,"w":96,"h":54},
+ "frame": {"x":557,"y":1114,"w":96,"h":57},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54},
+ "spriteSourceSize": {"x":0,"y":39,"w":96,"h":57},
"sourceSize": {"w":96,"h":96}
},
"sprites/wires/sets/conflict_turn.png":
{
- "frame": {"x":962,"y":185,"w":54,"h":54},
+ "frame": {"x":674,"y":845,"w":57,"h":57},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":42,"y":42,"w":54,"h":54},
+ "spriteSourceSize": {"x":39,"y":39,"w":57,"h":57},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/regular_cross.png":
+"sprites/wires/sets/first_cross.png":
{
- "frame": {"x":914,"y":990,"w":96,"h":96},
+ "frame": {"x":256,"y":851,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/regular_forward.png":
+"sprites/wires/sets/first_forward.png":
{
- "frame": {"x":896,"y":909,"w":12,"h":96},
+ "frame": {"x":706,"y":1096,"w":18,"h":96},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":42,"y":0,"w":12,"h":96},
+ "spriteSourceSize": {"x":39,"y":0,"w":18,"h":96},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/regular_split.png":
+"sprites/wires/sets/first_split.png":
{
- "frame": {"x":310,"y":1017,"w":96,"h":54},
+ "frame": {"x":557,"y":1177,"w":96,"h":57},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54},
+ "spriteSourceSize": {"x":0,"y":39,"w":96,"h":57},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/regular_turn.png":
+"sprites/wires/sets/first_turn.png":
{
- "frame": {"x":962,"y":65,"w":54,"h":54},
+ "frame": {"x":674,"y":908,"w":57,"h":57},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":42,"y":42,"w":54,"h":54},
+ "spriteSourceSize": {"x":39,"y":39,"w":57,"h":57},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/shape_cross.png":
+"sprites/wires/sets/second_cross.png":
{
- "frame": {"x":4,"y":785,"w":96,"h":96},
+ "frame": {"x":358,"y":923,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/shape_forward.png":
+"sprites/wires/sets/second_forward.png":
{
- "frame": {"x":1007,"y":1194,"w":12,"h":96},
+ "frame": {"x":701,"y":1198,"w":18,"h":96},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":42,"y":0,"w":12,"h":96},
+ "spriteSourceSize": {"x":39,"y":0,"w":18,"h":96},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/shape_split.png":
+"sprites/wires/sets/second_split.png":
{
- "frame": {"x":310,"y":1077,"w":96,"h":54},
+ "frame": {"x":725,"y":1214,"w":96,"h":57},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":42,"w":96,"h":54},
+ "spriteSourceSize": {"x":0,"y":39,"w":96,"h":57},
"sourceSize": {"w":96,"h":96}
},
-"sprites/wires/sets/shape_turn.png":
+"sprites/wires/sets/second_turn.png":
{
- "frame": {"x":663,"y":895,"w":54,"h":54},
+ "frame": {"x":673,"y":971,"w":57,"h":57},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":42,"y":42,"w":54,"h":54},
+ "spriteSourceSize": {"x":39,"y":39,"w":57,"h":57},
+ "sourceSize": {"w":96,"h":96}
+},
+"sprites/wires/sets/third_cross.png":
+{
+ "frame": {"x":460,"y":1000,"w":96,"h":96},
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
+"sprites/wires/sets/third_forward.png":
+{
+ "frame": {"x":648,"y":1272,"w":18,"h":96},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":39,"y":0,"w":18,"h":96},
+ "sourceSize": {"w":96,"h":96}
+},
+"sprites/wires/sets/third_split.png":
+{
+ "frame": {"x":725,"y":1277,"w":96,"h":57},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":39,"w":96,"h":57},
+ "sourceSize": {"w":96,"h":96}
+},
+"sprites/wires/sets/third_turn.png":
+{
+ "frame": {"x":209,"y":786,"w":57,"h":57},
+ "rotated": false,
+ "trimmed": true,
+ "spriteSourceSize": {"x":39,"y":39,"w":57,"h":57},
"sourceSize": {"w":96,"h":96}
},
"sprites/wires/wires_preview.png":
{
- "frame": {"x":952,"y":1629,"w":32,"h":32},
+ "frame": {"x":207,"y":1020,"w":32,"h":32},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":32,"h":32},
@@ -1551,6 +1487,6 @@
"format": "RGBA8888",
"size": {"w":1024,"h":2048},
"scale": "0.5",
- "smartupdate": "$TexturePacker:SmartUpdate:5429cdf3b92834776437a91974e89d3c:fa61fb225cd312db144ce6a38d97871b:908b89f5ca8ff73e331a35a3b14d0604$"
+ "smartupdate": "$TexturePacker:SmartUpdate:d64dc60885c70016feef302a1c9d887e:b61ebeff39ec84001fc764203098f3eb:908b89f5ca8ff73e331a35a3b14d0604$"
}
}
diff --git a/res_built/atlas/atlas0_mq.png b/res_built/atlas/atlas0_mq.png
index 50e3181d..4188fc55 100644
Binary files a/res_built/atlas/atlas0_mq.png and b/res_built/atlas/atlas0_mq.png differ
diff --git a/res_raw/atlas.tps b/res_raw/atlas.tps
index bc74ed93..0c03e2a4 100644
--- a/res_raw/atlas.tps
+++ b/res_raw/atlas.tps
@@ -104,7 +104,7 @@
shapePadding
- 0
+ 2
jpgQuality
80
pngOptimizationLevel
@@ -118,7 +118,7 @@
textureFormat
png
borderPadding
- 1
+ 3
maxTextureSize
width
@@ -197,7 +197,7 @@
scaleMode
Smooth
extrude
- 3
+ 2
trimThreshold
2
trimMargin
@@ -260,35 +260,6 @@
sprites/blueprints/balancer-merger-inverse.png
sprites/blueprints/balancer-merger.png
sprites/blueprints/balancer-splitter-inverse.png
- sprites/blueprints/balancer-splitter.png
- sprites/blueprints/constant_signal.png
- sprites/blueprints/display.png
- sprites/blueprints/lever.png
- sprites/blueprints/logic_gate-not.png
- sprites/blueprints/logic_gate-or.png
- sprites/blueprints/logic_gate-transistor.png
- sprites/blueprints/logic_gate-xor.png
- sprites/blueprints/logic_gate.png
- sprites/blueprints/miner-chainable.png
- sprites/blueprints/miner.png
- sprites/blueprints/reader.png
- sprites/blueprints/rotater-ccw.png
- sprites/blueprints/rotater-rotate180.png
- sprites/blueprints/rotater.png
- sprites/blueprints/trash.png
- sprites/blueprints/underground_belt_entry-tier2.png
- sprites/blueprints/underground_belt_entry.png
- sprites/blueprints/underground_belt_exit-tier2.png
- sprites/blueprints/underground_belt_exit.png
- sprites/blueprints/virtual_processor-analyzer.png
- sprites/blueprints/virtual_processor-painter.png
- sprites/blueprints/virtual_processor-rotater.png
- sprites/blueprints/virtual_processor-shapecompare.png
- sprites/blueprints/virtual_processor-stacker.png
- sprites/blueprints/virtual_processor-unstacker.png
- sprites/blueprints/virtual_processor.png
- sprites/blueprints/wire_tunnel-coating.png
- sprites/blueprints/wire_tunnel.png
sprites/buildings/balancer-merger-inverse.png
sprites/buildings/balancer-merger.png
sprites/buildings/balancer-splitter-inverse.png
@@ -298,13 +269,14 @@
sprites/buildings/lever.png
sprites/buildings/logic_gate-not.png
sprites/buildings/logic_gate-or.png
- sprites/buildings/logic_gate-transistor.png
sprites/buildings/logic_gate-xor.png
sprites/buildings/logic_gate.png
sprites/buildings/miner-chainable.png
sprites/buildings/reader.png
sprites/buildings/rotater-ccw.png
sprites/buildings/rotater-rotate180.png
+ sprites/buildings/transistor-mirrored.png
+ sprites/buildings/transistor.png
sprites/buildings/underground_belt_entry-tier2.png
sprites/buildings/underground_belt_entry.png
sprites/buildings/underground_belt_exit-tier2.png
@@ -316,26 +288,25 @@
sprites/buildings/virtual_processor-stacker.png
sprites/buildings/virtual_processor-unstacker.png
sprites/buildings/virtual_processor.png
- sprites/buildings/wire_tunnel-coating.png
sprites/buildings/wire_tunnel.png
sprites/misc/reader_overlay.png
sprites/wires/lever_on.png
- sprites/wires/sets/color_cross.png
- sprites/wires/sets/color_forward.png
- sprites/wires/sets/color_split.png
- sprites/wires/sets/color_turn.png
sprites/wires/sets/conflict_cross.png
sprites/wires/sets/conflict_forward.png
sprites/wires/sets/conflict_split.png
sprites/wires/sets/conflict_turn.png
- sprites/wires/sets/regular_cross.png
- sprites/wires/sets/regular_forward.png
- sprites/wires/sets/regular_split.png
- sprites/wires/sets/regular_turn.png
- sprites/wires/sets/shape_cross.png
- sprites/wires/sets/shape_forward.png
- sprites/wires/sets/shape_split.png
- sprites/wires/sets/shape_turn.png
+ sprites/wires/sets/first_cross.png
+ sprites/wires/sets/first_forward.png
+ sprites/wires/sets/first_split.png
+ sprites/wires/sets/first_turn.png
+ sprites/wires/sets/second_cross.png
+ sprites/wires/sets/second_forward.png
+ sprites/wires/sets/second_split.png
+ sprites/wires/sets/second_turn.png
+ sprites/wires/sets/third_cross.png
+ sprites/wires/sets/third_forward.png
+ sprites/wires/sets/third_split.png
+ sprites/wires/sets/third_turn.png
pivotPoint
0.5,0.5
@@ -350,13 +321,6 @@
scale9FromFile
- sprites/blueprints/balancer.png
- sprites/blueprints/cutter.png
- sprites/blueprints/filter.png
- sprites/blueprints/mixer.png
- sprites/blueprints/painter-mirrored.png
- sprites/blueprints/painter.png
- sprites/blueprints/stacker.png
sprites/buildings/balancer.png
sprites/buildings/filter.png
sprites/buildings/painter-mirrored.png
@@ -374,20 +338,9 @@
scale9FromFile
- sprites/blueprints/belt_left.png
- sprites/blueprints/belt_right.png
- sprites/blueprints/belt_top.png
- sprites/blueprints/wire-cross.png
- sprites/blueprints/wire-split.png
- sprites/blueprints/wire-turn.png
- sprites/blueprints/wire.png
sprites/buildings/belt_left.png
sprites/buildings/belt_right.png
sprites/buildings/belt_top.png
- sprites/buildings/wire-cross.png
- sprites/buildings/wire-split.png
- sprites/buildings/wire-turn.png
- sprites/buildings/wire.png
pivotPoint
0.5,0.5
@@ -402,8 +355,6 @@
scale9FromFile
- sprites/blueprints/cutter-quad.png
- sprites/blueprints/painter-quad.png
sprites/buildings/cutter-quad.png
sprites/buildings/painter-quad.png
@@ -420,24 +371,6 @@
scale9FromFile
- sprites/blueprints/painter-double.png
- sprites/blueprints/storage.png
- sprites/buildings/painter-double.png
- sprites/buildings/storage.png
-
- pivotPoint
- 0.5,0.5
- spriteScale
- 1
- scale9Enabled
-
- scale9Borders
- 96,96,192,192
- scale9Paddings
- 96,96,192,192
- scale9FromFile
-
-
sprites/buildings/cutter.png
sprites/buildings/mixer.png
sprites/buildings/painter.png
@@ -493,6 +426,22 @@
scale9FromFile
+ sprites/buildings/painter-double.png
+ sprites/buildings/storage.png
+
+ pivotPoint
+ 0.5,0.5
+ spriteScale
+ 1
+ scale9Enabled
+
+ scale9Borders
+ 96,96,192,192
+ scale9Paddings
+ 96,96,192,192
+ scale9FromFile
+
+
sprites/colors/blue.png
sprites/colors/cyan.png
sprites/colors/green.png
diff --git a/res_raw/sprites/belt/generate_wire_sprites.js b/res_raw/sprites/belt/generate_wire_sprites.js
index 24ac319b..699b01bb 100644
--- a/res_raw/sprites/belt/generate_wire_sprites.js
+++ b/res_raw/sprites/belt/generate_wire_sprites.js
@@ -1,226 +1,213 @@
-/**
- *
- * Run `yarn global add canvas` first
- */
-
-const { createCanvas } = require("canvas");
-const fs = require("fs");
-const path = require("path");
-
-const outputFolder = path.join(__dirname, "..", "wires", "sets");
-
-const dimensions = 192;
-const lineSize = 12;
-const lowerLineSize = 20;
-
-function hexToRGB(h) {
- let r = 0,
- g = 0,
- b = 0;
-
- // 3 digits
- if (h.length == 4) {
- r = "0x" + h[1] + h[1];
- g = "0x" + h[2] + h[2];
- b = "0x" + h[3] + h[3];
-
- // 6 digits
- } else if (h.length == 7) {
- r = "0x" + h[1] + h[2];
- g = "0x" + h[3] + h[4];
- b = "0x" + h[5] + h[6];
- }
-
- return [+r, +g, +b];
-}
-
-function RGBToHSL(r, g, b) {
- // Make r, g, and b fractions of 1
- r /= 255;
- g /= 255;
- b /= 255;
-
- // Find greatest and smallest channel values
- let cmin = Math.min(r, g, b),
- cmax = Math.max(r, g, b),
- delta = cmax - cmin,
- h = 0,
- s = 0,
- l = 0;
- // Calculate hue
- // No difference
- if (delta == 0) h = 0;
- // Red is max
- else if (cmax == r) h = ((g - b) / delta) % 6;
- // Green is max
- else if (cmax == g) h = (b - r) / delta + 2;
- // Blue is max
- else h = (r - g) / delta + 4;
-
- h = Math.round(h * 60);
-
- // Make negative hues positive behind 360°
- if (h < 0) h += 360;
-
- // Calculate lightness
- l = (cmax + cmin) / 2;
-
- // Calculate saturation
- s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));
-
- // Multiply l and s by 100
- s = +(s * 100).toFixed(1);
- l = +(l * 100).toFixed(1);
-
- return [h, s, l];
-}
-
-function HSLToRGB(h, s, l) {
- // Must be fractions of 1
- s /= 100;
- l /= 100;
-
- let c = (1 - Math.abs(2 * l - 1)) * s,
- x = c * (1 - Math.abs(((h / 60) % 2) - 1)),
- m = l - c / 2,
- r = 0,
- g = 0,
- b = 0;
-
- if (0 <= h && h < 60) {
- r = c;
- g = x;
- b = 0;
- } else if (60 <= h && h < 120) {
- r = x;
- g = c;
- b = 0;
- } else if (120 <= h && h < 180) {
- r = 0;
- g = c;
- b = x;
- } else if (180 <= h && h < 240) {
- r = 0;
- g = x;
- b = c;
- } else if (240 <= h && h < 300) {
- r = x;
- g = 0;
- b = c;
- } else if (300 <= h && h < 360) {
- r = c;
- g = 0;
- b = x;
- }
- r = Math.round((r + m) * 255);
- g = Math.round((g + m) * 255);
- b = Math.round((b + m) * 255);
-
- return [r, g, b];
-}
-
-async function run() {
- console.log("Running");
-
- const variants = {
- regular: "#25fff2",
- color: "#eba458",
- shape: "#8858eb",
- conflict: "#ff3e3e",
- };
-
- const promises = [];
-
- for (const variantId in variants) {
- const variantColor = variants[variantId];
- const variantHSL = RGBToHSL(...hexToRGB(variantColor));
- const darkenedColor = HSLToRGB(variantHSL[0], variantHSL[1] - 15, variantHSL[2] - 20);
- const hexDarkenedColor = "rgb(" + darkenedColor.join(",") + ")";
-
- console.log(variantColor, "->", hexToRGB(variantColor), variantHSL, "->", darkenedColor);
-
- const parts = {
- forward: [[0.5, 0, 0.5, 1]],
- turn: [
- [0.5, 0.5, 0.5, 1],
- [0.5, 0.5, 1, 0.5],
- ],
- split: [
- [0.5, 0.5, 0.5, 1],
- [0, 0.5, 1, 0.5],
- ],
- cross: [
- [0, 0.5, 1, 0.5],
- [0.5, 0, 0.5, 1],
- ],
- };
-
- for (const partId in parts) {
- const partLines = parts[partId];
-
- const canvas = createCanvas(dimensions, dimensions);
- const context = canvas.getContext("2d");
- context.quality = "best";
- context.clearRect(0, 0, dimensions, dimensions);
-
- context.strokeStyle = hexDarkenedColor;
- context.lineWidth = lowerLineSize;
- context.lineCap = "square";
- context.imageSmoothingEnabled = false;
-
- // Draw lower lines
- partLines.forEach(([x1, y1, x2, y2]) => {
- context.beginPath();
- context.moveTo(x1 * dimensions, y1 * dimensions);
- context.lineTo(x2 * dimensions, y2 * dimensions);
- context.stroke();
- });
-
- context.strokeStyle = variantColor;
- context.lineWidth = lineSize;
-
- // Draw upper lines
- partLines.forEach(([x1, y1, x2, y2]) => {
- context.beginPath();
- context.moveTo(x1 * dimensions, y1 * dimensions);
- context.lineTo(x2 * dimensions, y2 * dimensions);
- context.stroke();
- });
-
- const out = fs.createWriteStream(path.join(outputFolder, variantId + "_" + partId + ".png"));
- const stream = canvas.createPNGStream();
- stream.pipe(out);
- promises.push(new Promise(resolve => stream.on("end", resolve)));
- }
- }
-
- console.log("Waiting for completion");
- await Promise.all(promises);
-
- // Also wait a bit more
- await new Promise(resolve => setTimeout(resolve, 1000));
-
- console.log("Copying files to all locations");
-
- // // Copy other files
- fs.copyFileSync(
- path.join(outputFolder, "regular_forward.png"),
- path.join(__dirname, "..", "buildings", "wire.png")
- );
- fs.copyFileSync(
- path.join(outputFolder, "regular_turn.png"),
- path.join(__dirname, "..", "buildings", "wire-turn.png")
- );
- fs.copyFileSync(
- path.join(outputFolder, "regular_split.png"),
- path.join(__dirname, "..", "buildings", "wire-split.png")
- );
- fs.copyFileSync(
- path.join(outputFolder, "regular_cross.png"),
- path.join(__dirname, "..", "buildings", "wire-cross.png")
- );
-
- console.log("Done!");
-}
-
-run();
+/**
+ *
+ * Run `yarn global add canvas` first
+ */
+
+const { createCanvas } = require("canvas");
+const fs = require("fs");
+const path = require("path");
+
+const outputFolder = path.join(__dirname, "..", "wires", "sets");
+
+const dimensions = 192;
+const lineSize = 14;
+const lowerLineSize = 32;
+
+const variants = {
+ first: "#61ef6f",
+ second: "#f0bd65",
+ third: "#5fb2f1",
+ conflict: "#f74c4c",
+};
+
+function hexToRGB(h) {
+ let r = 0,
+ g = 0,
+ b = 0;
+
+ // 3 digits
+ if (h.length == 4) {
+ r = "0x" + h[1] + h[1];
+ g = "0x" + h[2] + h[2];
+ b = "0x" + h[3] + h[3];
+
+ // 6 digits
+ } else if (h.length == 7) {
+ r = "0x" + h[1] + h[2];
+ g = "0x" + h[3] + h[4];
+ b = "0x" + h[5] + h[6];
+ }
+
+ return [+r, +g, +b];
+}
+
+function RGBToHSL(r, g, b) {
+ // Make r, g, and b fractions of 1
+ r /= 255;
+ g /= 255;
+ b /= 255;
+
+ // Find greatest and smallest channel values
+ let cmin = Math.min(r, g, b),
+ cmax = Math.max(r, g, b),
+ delta = cmax - cmin,
+ h = 0,
+ s = 0,
+ l = 0;
+ // Calculate hue
+ // No difference
+ if (delta == 0) h = 0;
+ // Red is max
+ else if (cmax == r) h = ((g - b) / delta) % 6;
+ // Green is max
+ else if (cmax == g) h = (b - r) / delta + 2;
+ // Blue is max
+ else h = (r - g) / delta + 4;
+
+ h = Math.round(h * 60);
+
+ // Make negative hues positive behind 360°
+ if (h < 0) h += 360;
+
+ // Calculate lightness
+ l = (cmax + cmin) / 2;
+
+ // Calculate saturation
+ s = delta == 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));
+
+ // Multiply l and s by 100
+ s = +(s * 100).toFixed(1);
+ l = +(l * 100).toFixed(1);
+
+ return [h, s, l];
+}
+
+function HSLToRGB(h, s, l) {
+ // Must be fractions of 1
+ s /= 100;
+ l /= 100;
+
+ let c = (1 - Math.abs(2 * l - 1)) * s,
+ x = c * (1 - Math.abs(((h / 60) % 2) - 1)),
+ m = l - c / 2,
+ r = 0,
+ g = 0,
+ b = 0;
+
+ if (0 <= h && h < 60) {
+ r = c;
+ g = x;
+ b = 0;
+ } else if (60 <= h && h < 120) {
+ r = x;
+ g = c;
+ b = 0;
+ } else if (120 <= h && h < 180) {
+ r = 0;
+ g = c;
+ b = x;
+ } else if (180 <= h && h < 240) {
+ r = 0;
+ g = x;
+ b = c;
+ } else if (240 <= h && h < 300) {
+ r = x;
+ g = 0;
+ b = c;
+ } else if (300 <= h && h < 360) {
+ r = c;
+ g = 0;
+ b = x;
+ }
+ r = Math.round((r + m) * 255);
+ g = Math.round((g + m) * 255);
+ b = Math.round((b + m) * 255);
+
+ return [r, g, b];
+}
+
+async function run() {
+ console.log("Running");
+
+ const promises = [];
+
+ for (const variantId in variants) {
+ const variantColor = variants[variantId];
+ const variantHSL = RGBToHSL(...hexToRGB(variantColor));
+ const darkenedColor = HSLToRGB(variantHSL[0], variantHSL[1] - 15, variantHSL[2] - 20);
+ const hexDarkenedColor = "rgb(" + darkenedColor.join(",") + ")";
+
+ console.log(variantColor, "->", hexToRGB(variantColor), variantHSL, "->", darkenedColor);
+
+ const parts = {
+ forward: [[0.5, 0, 0.5, 1]],
+ turn: [
+ [0.5, 0.5, 0.5, 1],
+ [0.5, 0.5, 1, 0.5],
+ ],
+ split: [
+ [0.5, 0.5, 0.5, 1],
+ [0, 0.5, 1, 0.5],
+ ],
+ cross: [
+ [0, 0.5, 1, 0.5],
+ [0.5, 0, 0.5, 1],
+ ],
+ };
+
+ for (const partId in parts) {
+ const partLines = parts[partId];
+
+ const canvas = createCanvas(dimensions, dimensions);
+ const context = canvas.getContext("2d");
+ context.quality = "best";
+ context.clearRect(0, 0, dimensions, dimensions);
+
+ const lineCanvas = createCanvas(dimensions, dimensions);
+ const lineContext = lineCanvas.getContext("2d");
+ lineContext.quality = "best";
+ lineContext.clearRect(0, 0, dimensions, dimensions);
+ lineContext.strokeStyle = hexDarkenedColor;
+ lineContext.lineWidth = lowerLineSize;
+ lineContext.lineCap = "square";
+ lineContext.imageSmoothingEnabled = false;
+
+ // Draw lower lines
+ partLines.forEach(([x1, y1, x2, y2]) => {
+ lineContext.beginPath();
+ lineContext.moveTo(x1 * dimensions, y1 * dimensions);
+ lineContext.lineTo(x2 * dimensions, y2 * dimensions);
+ lineContext.stroke();
+ });
+
+ context.globalAlpha = 0.4;
+ context.drawImage(lineCanvas, 0, 0, dimensions, dimensions);
+
+ context.globalAlpha = 1;
+ context.imageSmoothingEnabled = false;
+ context.lineCap = "square";
+ context.strokeStyle = variantColor;
+ context.lineWidth = lineSize;
+
+ // Draw upper lines
+ partLines.forEach(([x1, y1, x2, y2]) => {
+ context.beginPath();
+ context.moveTo(x1 * dimensions, y1 * dimensions);
+ context.lineTo(x2 * dimensions, y2 * dimensions);
+ context.stroke();
+ });
+
+ const out = fs.createWriteStream(path.join(outputFolder, variantId + "_" + partId + ".png"));
+ const stream = canvas.createPNGStream();
+ stream.pipe(out);
+ promises.push(new Promise(resolve => stream.on("end", resolve)));
+ }
+ }
+
+ console.log("Waiting for completion");
+ await Promise.all(promises);
+
+ console.log("Done!");
+}
+
+run();
diff --git a/res_raw/sprites/blueprints/virtual_processor-analyzer.png b/res_raw/sprites/blueprints/analyzer.png
similarity index 100%
rename from res_raw/sprites/blueprints/virtual_processor-analyzer.png
rename to res_raw/sprites/blueprints/analyzer.png
diff --git a/res_raw/sprites/blueprints/virtual_processor-shapecompare.png b/res_raw/sprites/blueprints/comparator.png
similarity index 100%
rename from res_raw/sprites/blueprints/virtual_processor-shapecompare.png
rename to res_raw/sprites/blueprints/comparator.png
diff --git a/res_raw/sprites/blueprints/transistor-mirrored.png b/res_raw/sprites/blueprints/transistor-mirrored.png
new file mode 100644
index 00000000..88eaad0d
Binary files /dev/null and b/res_raw/sprites/blueprints/transistor-mirrored.png differ
diff --git a/res_raw/sprites/blueprints/logic_gate-transistor.png b/res_raw/sprites/blueprints/transistor.png
similarity index 100%
rename from res_raw/sprites/blueprints/logic_gate-transistor.png
rename to res_raw/sprites/blueprints/transistor.png
diff --git a/res_raw/sprites/blueprints/wire-cross.png b/res_raw/sprites/blueprints/wire-cross.png
deleted file mode 100644
index c9aeb1c5..00000000
Binary files a/res_raw/sprites/blueprints/wire-cross.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire-split.png b/res_raw/sprites/blueprints/wire-split.png
deleted file mode 100644
index f0cdfb11..00000000
Binary files a/res_raw/sprites/blueprints/wire-split.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire-turn.png b/res_raw/sprites/blueprints/wire-turn.png
deleted file mode 100644
index becf6411..00000000
Binary files a/res_raw/sprites/blueprints/wire-turn.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire.png b/res_raw/sprites/blueprints/wire.png
deleted file mode 100644
index 15bfde22..00000000
Binary files a/res_raw/sprites/blueprints/wire.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire_tunnel-coating.png b/res_raw/sprites/blueprints/wire_tunnel-coating.png
deleted file mode 100644
index af93022a..00000000
Binary files a/res_raw/sprites/blueprints/wire_tunnel-coating.png and /dev/null differ
diff --git a/res_raw/sprites/blueprints/wire_tunnel.png b/res_raw/sprites/blueprints/wire_tunnel.png
index 9a7cdd2a..7f9a1063 100644
Binary files a/res_raw/sprites/blueprints/wire_tunnel.png and b/res_raw/sprites/blueprints/wire_tunnel.png differ
diff --git a/res_raw/sprites/buildings/virtual_processor-analyzer.png b/res_raw/sprites/buildings/analyzer.png
similarity index 100%
rename from res_raw/sprites/buildings/virtual_processor-analyzer.png
rename to res_raw/sprites/buildings/analyzer.png
diff --git a/res_raw/sprites/buildings/virtual_processor-shapecompare.png b/res_raw/sprites/buildings/comparator.png
similarity index 100%
rename from res_raw/sprites/buildings/virtual_processor-shapecompare.png
rename to res_raw/sprites/buildings/comparator.png
diff --git a/res_raw/sprites/buildings/transistor-mirrored.png b/res_raw/sprites/buildings/transistor-mirrored.png
new file mode 100644
index 00000000..606bfce3
Binary files /dev/null and b/res_raw/sprites/buildings/transistor-mirrored.png differ
diff --git a/res_raw/sprites/buildings/logic_gate-transistor.png b/res_raw/sprites/buildings/transistor.png
similarity index 100%
rename from res_raw/sprites/buildings/logic_gate-transistor.png
rename to res_raw/sprites/buildings/transistor.png
diff --git a/res_raw/sprites/buildings/wire-cross.png b/res_raw/sprites/buildings/wire-cross.png
deleted file mode 100644
index e9c71dac..00000000
Binary files a/res_raw/sprites/buildings/wire-cross.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire-split.png b/res_raw/sprites/buildings/wire-split.png
deleted file mode 100644
index e26b552c..00000000
Binary files a/res_raw/sprites/buildings/wire-split.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire-turn.png b/res_raw/sprites/buildings/wire-turn.png
deleted file mode 100644
index 5b50bb09..00000000
Binary files a/res_raw/sprites/buildings/wire-turn.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire.png b/res_raw/sprites/buildings/wire.png
deleted file mode 100644
index 8310be84..00000000
Binary files a/res_raw/sprites/buildings/wire.png and /dev/null differ
diff --git a/res_raw/sprites/buildings/wire_tunnel-coating.png b/res_raw/sprites/buildings/wire_tunnel-coating.png
deleted file mode 100644
index f5dd3ffe..00000000
Binary files a/res_raw/sprites/buildings/wire_tunnel-coating.png and /dev/null differ
diff --git a/res_raw/sprites/create_blueprint_previews.py b/res_raw/sprites/create_blueprint_previews.py
index cceefae0..96688fe4 100644
--- a/res_raw/sprites/create_blueprint_previews.py
+++ b/res_raw/sprites/create_blueprint_previews.py
@@ -1,110 +1,92 @@
-# Requirements: numpy, scipy, Pillow,
-from __future__ import print_function
-import sys
-import numpy as np
-from scipy import ndimage
-from PIL import Image, ImageFilter, ImageChops
-import math
-from os import listdir
-from os.path import isdir, isfile
-
-roberts_cross_v = np.array([[0, 0, 0],
- [0, 1, 0],
- [0, 0, -1]])
-
-roberts_cross_h = np.array([[0, 0, 0],
- [0, 0, 1],
- [0, -1, 0]])
-
-
-def rgb2gray(rgb):
- return np.dot(rgb[..., :3], [0.2989, 0.5870, 0.1140])
-
-
-
-
-def save_image(data, outfilename, src_image):
- img = Image.fromarray(np.asarray(
- np.clip(data, 0, 255), dtype="uint8"), "L")
- dest = Image.new("RGBA", (img.width, img.height))
- src = img.load()
- dst = dest.load()
-
- realSrc = src_image.load()
- mask = src_image.filter(ImageFilter.GaussianBlur(10)).load()
- orig = src_image.load()
-
-
- isWire = "wire" in outfilename
-
- targetR = 104
- targetG = 200
- targetB = 255
-
- if isWire:
- targetR = 255
- targetG = 104
- targetB = 232
-
- for x in range(img.width):
- for y in range(img.height):
- realpixl = realSrc[x, y]
- greyval = float(src[x, y])
- greyval = min(255.0, greyval)
- greyval = math.pow(
- min(1, float(greyval / 255.0 * 1)), 1.5) * 255.0 * 1
- greyval = max(0, greyval)
- alpha = mask[x, y][3] / 255.0 * 1
-
- edgeFactor = src[x, y] / 255.0
- noEdge = 1 - edgeFactor
-
- shadow = min(1, 1 - realpixl[3] / 255.0 - edgeFactor)
- noShadow = 1 - shadow
-
- dst[x, y] = (
- min(255, int((realpixl[0] / 255.0 * 0.4 + 0.6) * targetR * 1.1)),
- min(255, int((realpixl[1] / 255.0 * 0.4 + 0.6) * targetG * 1.1)),
- min(255, int((realpixl[2] / 255.0 * 0.4 + 0.6) * targetB * 1.1)),
- min(255, int(float(realpixl[3]) * (0.6 + 5 * edgeFactor))))
-
-
- dest.save(outfilename)
-
-
-def roberts_cross(infilename, outfilename):
- print("Processing", infilename)
- img = Image.open(infilename)
- img.load()
- img = img.filter(ImageFilter.GaussianBlur(0.5))
-
- image = rgb2gray(np.asarray(img, dtype="int32"))
- vertical = ndimage.convolve(image, roberts_cross_v)
- horizontal = ndimage.convolve(image, roberts_cross_h)
- output_image = np.sqrt(np.square(horizontal) + np.square(vertical))
- save_image(output_image, outfilename, img)
-
-
-def generateUiPreview(srcPath, buildingId):
- print(srcPath, buildingId)
- img = Image.open(srcPath)
- img.load()
- img.thumbnail((110, 110), Image.ANTIALIAS)
- img.save("../res/ui/hud/building_previews/" + buildingId + ".png")
-
- img = img.convert("LA")
-
- data = img.load()
- for x in range(img.width):
- for y in range(img.height):
- data[x, y] = (data[x, y][0], int(data[x, y][1] * 0.5))
-
- img.save("../res/ui/hud/building_previews/" + buildingId + "_disabled.png")
-
-
-buildings = listdir("buildings")
-
-for buildingId in buildings:
- if "hub" in buildingId:
- continue
- roberts_cross("buildings/" + buildingId + "", "blueprints/" + buildingId + "")
+# Requirements: numpy, scipy, Pillow,
+from __future__ import print_function
+import sys
+import numpy as np
+from scipy import ndimage
+from PIL import Image, ImageFilter, ImageChops
+import math
+from os import listdir
+from os.path import isdir, isfile
+
+generate_blueprint_sprite_v = np.array([[0, 0, 0],
+ [0, 1, 0],
+ [0, 0, -1]])
+
+generate_blueprint_sprite_h = np.array([[0, 0, 0],
+ [0, 0, 1],
+ [0, -1, 0]])
+
+
+def rgb2gray(rgb):
+ return np.dot(rgb[..., :3], [0.2989, 0.5870, 0.1140])
+
+def process_image(data, outfilename, src_image):
+ img = Image.fromarray(np.asarray(
+ np.clip(data, 0, 255), dtype="uint8"), "L")
+ dest = Image.new("RGBA", (img.width, img.height))
+ src = img.load()
+ dst = dest.load()
+
+ realSrc = src_image.load()
+ mask = src_image.filter(ImageFilter.GaussianBlur(10)).load()
+ orig = src_image.load()
+
+ # isWire = "wire" in outfilename
+ isWire = False
+
+ targetR = 104
+ targetG = 200
+ targetB = 255
+
+ if isWire:
+ targetR = 255
+ targetG = 104
+ targetB = 232
+
+ for x in range(img.width):
+ for y in range(img.height):
+ realpixl = realSrc[x, y]
+ greyval = float(src[x, y])
+ greyval = min(255.0, greyval)
+ greyval = math.pow(
+ min(1, float(greyval / 255.0 * 1)), 1.5) * 255.0 * 1
+ greyval = max(0, greyval)
+ alpha = mask[x, y][3] / 255.0 * 1
+
+ edgeFactor = src[x, y] / 255.0
+ noEdge = 1 - edgeFactor
+
+ shadow = min(1, 1 - realpixl[3] / 255.0 - edgeFactor)
+ noShadow = 1 - shadow
+
+ dst[x, y] = (
+ min(255, int((realpixl[0] / 255.0 * 0.4 + 0.6) * targetR * 1.1)),
+ min(255, int((realpixl[1] / 255.0 * 0.4 + 0.6) * targetG * 1.1)),
+ min(255, int((realpixl[2] / 255.0 * 0.4 + 0.6) * targetB * 1.1)),
+ min(255, int(float(realpixl[3]) * (0.6 + 5 * edgeFactor))))
+
+
+ dest.save(outfilename)
+
+
+def generate_blueprint_sprite(infilename, outfilename):
+ print("Processing", infilename)
+ img = Image.open(infilename)
+ img.load()
+ img = img.filter(ImageFilter.GaussianBlur(0.5))
+
+ image = rgb2gray(np.asarray(img, dtype="int32"))
+ vertical = ndimage.convolve(image, generate_blueprint_sprite_v)
+ horizontal = ndimage.convolve(image, generate_blueprint_sprite_h)
+ output_image = np.sqrt(np.square(horizontal) + np.square(vertical))
+ process_image(output_image, outfilename, img)
+
+
+buildings = listdir("buildings")
+
+for buildingId in buildings:
+ if "hub" in buildingId:
+ continue
+ if "wire-" in buildingId:
+ continue
+ generate_blueprint_sprite("buildings/" + buildingId + "", "blueprints/" + buildingId + "")
diff --git a/res_raw/sprites/wires/sets/color_cross.png b/res_raw/sprites/wires/sets/color_cross.png
deleted file mode 100644
index c3b2a3c2..00000000
Binary files a/res_raw/sprites/wires/sets/color_cross.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/color_forward.png b/res_raw/sprites/wires/sets/color_forward.png
deleted file mode 100644
index f6584aaa..00000000
Binary files a/res_raw/sprites/wires/sets/color_forward.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/color_split.png b/res_raw/sprites/wires/sets/color_split.png
deleted file mode 100644
index af9ddfb6..00000000
Binary files a/res_raw/sprites/wires/sets/color_split.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/color_turn.png b/res_raw/sprites/wires/sets/color_turn.png
deleted file mode 100644
index 1cf4dcb0..00000000
Binary files a/res_raw/sprites/wires/sets/color_turn.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/conflict_cross.png b/res_raw/sprites/wires/sets/conflict_cross.png
index fee403a6..3be1e9b9 100644
Binary files a/res_raw/sprites/wires/sets/conflict_cross.png and b/res_raw/sprites/wires/sets/conflict_cross.png differ
diff --git a/res_raw/sprites/wires/sets/conflict_forward.png b/res_raw/sprites/wires/sets/conflict_forward.png
index 8b9ab43a..abb02d18 100644
Binary files a/res_raw/sprites/wires/sets/conflict_forward.png and b/res_raw/sprites/wires/sets/conflict_forward.png differ
diff --git a/res_raw/sprites/wires/sets/conflict_split.png b/res_raw/sprites/wires/sets/conflict_split.png
index 6e22aaf0..c74a0e41 100644
Binary files a/res_raw/sprites/wires/sets/conflict_split.png and b/res_raw/sprites/wires/sets/conflict_split.png differ
diff --git a/res_raw/sprites/wires/sets/conflict_turn.png b/res_raw/sprites/wires/sets/conflict_turn.png
index 93bd3250..d359969b 100644
Binary files a/res_raw/sprites/wires/sets/conflict_turn.png and b/res_raw/sprites/wires/sets/conflict_turn.png differ
diff --git a/res_raw/sprites/wires/sets/first_cross.png b/res_raw/sprites/wires/sets/first_cross.png
new file mode 100644
index 00000000..5ec6e11b
Binary files /dev/null and b/res_raw/sprites/wires/sets/first_cross.png differ
diff --git a/res_raw/sprites/wires/sets/first_forward.png b/res_raw/sprites/wires/sets/first_forward.png
new file mode 100644
index 00000000..a6e0df71
Binary files /dev/null and b/res_raw/sprites/wires/sets/first_forward.png differ
diff --git a/res_raw/sprites/wires/sets/first_split.png b/res_raw/sprites/wires/sets/first_split.png
new file mode 100644
index 00000000..f77ff0b8
Binary files /dev/null and b/res_raw/sprites/wires/sets/first_split.png differ
diff --git a/res_raw/sprites/wires/sets/first_turn.png b/res_raw/sprites/wires/sets/first_turn.png
new file mode 100644
index 00000000..6d005aae
Binary files /dev/null and b/res_raw/sprites/wires/sets/first_turn.png differ
diff --git a/res_raw/sprites/wires/sets/regular_cross.png b/res_raw/sprites/wires/sets/regular_cross.png
deleted file mode 100644
index e9c71dac..00000000
Binary files a/res_raw/sprites/wires/sets/regular_cross.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/regular_forward.png b/res_raw/sprites/wires/sets/regular_forward.png
deleted file mode 100644
index 8310be84..00000000
Binary files a/res_raw/sprites/wires/sets/regular_forward.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/regular_split.png b/res_raw/sprites/wires/sets/regular_split.png
deleted file mode 100644
index e26b552c..00000000
Binary files a/res_raw/sprites/wires/sets/regular_split.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/regular_turn.png b/res_raw/sprites/wires/sets/regular_turn.png
deleted file mode 100644
index 5b50bb09..00000000
Binary files a/res_raw/sprites/wires/sets/regular_turn.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/second_cross.png b/res_raw/sprites/wires/sets/second_cross.png
new file mode 100644
index 00000000..0aad63f3
Binary files /dev/null and b/res_raw/sprites/wires/sets/second_cross.png differ
diff --git a/res_raw/sprites/wires/sets/shape_forward.png b/res_raw/sprites/wires/sets/second_forward.png
similarity index 50%
rename from res_raw/sprites/wires/sets/shape_forward.png
rename to res_raw/sprites/wires/sets/second_forward.png
index 15ec3b9c..cfb4dbed 100644
Binary files a/res_raw/sprites/wires/sets/shape_forward.png and b/res_raw/sprites/wires/sets/second_forward.png differ
diff --git a/res_raw/sprites/wires/sets/second_split.png b/res_raw/sprites/wires/sets/second_split.png
new file mode 100644
index 00000000..bb7b5911
Binary files /dev/null and b/res_raw/sprites/wires/sets/second_split.png differ
diff --git a/res_raw/sprites/wires/sets/second_turn.png b/res_raw/sprites/wires/sets/second_turn.png
new file mode 100644
index 00000000..4505c3b6
Binary files /dev/null and b/res_raw/sprites/wires/sets/second_turn.png differ
diff --git a/res_raw/sprites/wires/sets/shape_cross.png b/res_raw/sprites/wires/sets/shape_cross.png
deleted file mode 100644
index d04812aa..00000000
Binary files a/res_raw/sprites/wires/sets/shape_cross.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/shape_split.png b/res_raw/sprites/wires/sets/shape_split.png
deleted file mode 100644
index d19c9b71..00000000
Binary files a/res_raw/sprites/wires/sets/shape_split.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/shape_turn.png b/res_raw/sprites/wires/sets/shape_turn.png
deleted file mode 100644
index 4f40caa7..00000000
Binary files a/res_raw/sprites/wires/sets/shape_turn.png and /dev/null differ
diff --git a/res_raw/sprites/wires/sets/third_cross.png b/res_raw/sprites/wires/sets/third_cross.png
new file mode 100644
index 00000000..7c5008b6
Binary files /dev/null and b/res_raw/sprites/wires/sets/third_cross.png differ
diff --git a/res_raw/sprites/wires/sets/third_forward.png b/res_raw/sprites/wires/sets/third_forward.png
new file mode 100644
index 00000000..3656acd7
Binary files /dev/null and b/res_raw/sprites/wires/sets/third_forward.png differ
diff --git a/res_raw/sprites/wires/sets/third_split.png b/res_raw/sprites/wires/sets/third_split.png
new file mode 100644
index 00000000..dd1a51a8
Binary files /dev/null and b/res_raw/sprites/wires/sets/third_split.png differ
diff --git a/res_raw/sprites/wires/sets/third_turn.png b/res_raw/sprites/wires/sets/third_turn.png
new file mode 100644
index 00000000..b2be4bb6
Binary files /dev/null and b/res_raw/sprites/wires/sets/third_turn.png differ
diff --git a/src/css/resources.scss b/src/css/resources.scss
index d34c49c6..bd3fe902 100644
--- a/src/css/resources.scss
+++ b/src/css/resources.scss
@@ -1,5 +1,6 @@
$buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, trash, underground_belt, wire,
- constant_signal, logic_gate, lever, filter, wire_tunnel, display, virtual_processor, reader, storage;
+ constant_signal, logic_gate, lever, filter, wire_tunnel, display, virtual_processor, reader, storage,
+ transistor, analyzer, comparator;
@each $building in $buildings {
[data-icon="building_icons/#{$building}.png"] {
@@ -8,10 +9,11 @@ $buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, tra
}
}
-$buildingsAndVariants: belt, balancer, balancer-merger, balancer-splitter, underground_belt,
- underground_belt-tier2, miner, miner-chainable, cutter, cutter-quad, rotater, rotater-ccw, stacker, mixer,
- painter, painter-double, painter-quad, trash, storage, reader, rotater-rotate180, lever, display,
- constant_signal;
+$buildingsAndVariants: belt, balancer, underground_belt, underground_belt-tier2, miner, miner-chainable,
+ cutter, cutter-quad, rotater, rotater-ccw, stacker, mixer, painter-double, painter-quad, trash, storage,
+ reader, rotater-rotate180, display, constant_signal, wire, wire_tunnel, logic_gate-or, logic_gate-not,
+ logic_gate-xor, analyzer, virtual_processor-rotater, virtual_processor-unstacker,
+ virtual_processor-stacker, virtual_processor-painter;
@each $building in $buildingsAndVariants {
[data-icon="building_tutorials/#{$building}.png"] {
/* @load-async */
@@ -19,26 +21,57 @@ $buildingsAndVariants: belt, balancer, balancer-merger, balancer-splitter, under
}
}
-// @TODO: New buildings (balancer, wires, etc)
-
// Special cases for mirrored vairants
+[data-icon="building_tutorials/painter.png"],
[data-icon="building_tutorials/painter-mirrored.png"] {
/* @load-async */
background-image: uiResource("res/ui/building_tutorials/painter.png") !important;
}
+
+[data-icon="building_tutorials/balancer-merger.png"],
[data-icon="building_tutorials/balancer-merger-inverse.png"] {
/* @load-async */
background-image: uiResource("res/ui/building_tutorials/balancer-merger.png") !important;
}
+
+[data-icon="building_tutorials/balancer-splitter.png"],
[data-icon="building_tutorials/balancer-splitter-inverse.png"] {
/* @load-async */
background-image: uiResource("res/ui/building_tutorials/balancer-splitter.png") !important;
}
-[data-icon="building_tutorials/filter.png"] {
+
+[data-icon="building_tutorials/transistor.png"],
+[data-icon="building_tutorials/transistor-mirrored.png"] {
+ /* @load-async */
+ background-image: uiResource("res/ui/building_tutorials/transistor.png") !important;
+}
+
+// Filter and lever share tutorials
+[data-icon="building_tutorials/filter.png"],
+[data-icon="building_tutorials/lever.png"] {
/* @load-async */
background-image: uiResource("res/ui/building_tutorials/lever.png") !important;
}
+// Wire types share tutorials
+[data-icon="building_tutorials/wire-second.png"],
+[data-icon="building_tutorials/wire-third.png"] {
+ /* @load-async */
+ background-image: uiResource("res/ui/building_tutorials/wire-second.png") !important;
+}
+
+// Logic gate
+[data-icon="building_tutorials/logic_gate.png"] {
+ /* @load-async */
+ background-image: uiResource("res/ui/building_tutorials/logic_gate-and.png") !important;
+}
+
+// Virtual processor
+[data-icon="building_tutorials/virtual_processor.png"] {
+ /* @load-async */
+ background-image: uiResource("res/ui/building_tutorials/virtual_processor-cutter.png") !important;
+}
+
$icons: notification_saved, notification_success, notification_upgrade;
@each $icon in $icons {
[data-icon="icons/#{$icon}.png"] {
diff --git a/src/js/game/buildings/analyzer.js b/src/js/game/buildings/analyzer.js
new file mode 100644
index 00000000..a18a3b56
--- /dev/null
+++ b/src/js/game/buildings/analyzer.js
@@ -0,0 +1,79 @@
+import { generateMatrixRotations } from "../../core/utils";
+import { enumDirection, Vector } from "../../core/vector";
+import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate";
+import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
+import { Entity } from "../entity";
+import { MetaBuilding } from "../meta_building";
+import { GameRoot } from "../root";
+
+const overlayMatrix = generateMatrixRotations([1, 1, 0, 1, 1, 1, 0, 1, 0]);
+
+export class MetaAnalyzerBuilding extends MetaBuilding {
+ constructor() {
+ super("analyzer");
+ }
+
+ getSilhouetteColor() {
+ return "#3a52bc";
+ }
+
+ /**
+ * @param {GameRoot} root
+ */
+ getIsUnlocked(root) {
+ // @todo
+ return true;
+ }
+
+ /** @returns {"wires"} **/
+ getLayer() {
+ return "wires";
+ }
+
+ getDimensions() {
+ return new Vector(1, 1);
+ }
+
+ getRenderPins() {
+ // We already have it included
+ return false;
+ }
+
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant) {
+ return overlayMatrix[rotation];
+ }
+
+ /**
+ * Creates the entity at the given location
+ * @param {Entity} entity
+ */
+ setupEntityComponents(entity) {
+ entity.addComponent(
+ new WiredPinsComponent({
+ slots: [
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.left,
+ type: enumPinSlotType.logicalEjector,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.right,
+ type: enumPinSlotType.logicalEjector,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.bottom,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ ],
+ })
+ );
+
+ entity.addComponent(
+ new LogicGateComponent({
+ type: enumLogicGateType.analyzer,
+ })
+ );
+ }
+}
diff --git a/src/js/game/buildings/comparator.js b/src/js/game/buildings/comparator.js
new file mode 100644
index 00000000..0a284930
--- /dev/null
+++ b/src/js/game/buildings/comparator.js
@@ -0,0 +1,72 @@
+import { enumDirection, Vector } from "../../core/vector";
+import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate";
+import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
+import { Entity } from "../entity";
+import { MetaBuilding } from "../meta_building";
+import { GameRoot } from "../root";
+
+export class MetaComparatorBuilding extends MetaBuilding {
+ constructor() {
+ super("comparator");
+ }
+
+ getSilhouetteColor() {
+ return "#823cab";
+ }
+
+ /**
+ * @param {GameRoot} root
+ */
+ getIsUnlocked(root) {
+ // @todo
+ return true;
+ }
+
+ /** @returns {"wires"} **/
+ getLayer() {
+ return "wires";
+ }
+
+ getDimensions() {
+ return new Vector(1, 1);
+ }
+
+ getRenderPins() {
+ // We already have it included
+ return false;
+ }
+
+ /**
+ * Creates the entity at the given location
+ * @param {Entity} entity
+ */
+ setupEntityComponents(entity) {
+ entity.addComponent(
+ new WiredPinsComponent({
+ slots: [
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.top,
+ type: enumPinSlotType.logicalEjector,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.left,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.right,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ ],
+ })
+ );
+
+ entity.addComponent(
+ new LogicGateComponent({
+ type: enumLogicGateType.compare,
+ })
+ );
+ }
+}
diff --git a/src/js/game/buildings/constant_signal.js b/src/js/game/buildings/constant_signal.js
index d2c47c26..21583052 100644
--- a/src/js/game/buildings/constant_signal.js
+++ b/src/js/game/buildings/constant_signal.js
@@ -4,6 +4,9 @@ import { Entity } from "../entity";
import { MetaBuilding } from "../meta_building";
import { GameRoot } from "../root";
import { ConstantSignalComponent } from "../components/constant_signal";
+import { generateMatrixRotations } from "../../core/utils";
+
+const overlayMatrix = generateMatrixRotations([0, 1, 0, 1, 1, 1, 1, 1, 1]);
export class MetaConstantSignalBuilding extends MetaBuilding {
constructor() {
@@ -11,7 +14,7 @@ export class MetaConstantSignalBuilding extends MetaBuilding {
}
getSilhouetteColor() {
- return "#2bafda";
+ return "#2b84fd";
}
/**
@@ -35,6 +38,10 @@ export class MetaConstantSignalBuilding extends MetaBuilding {
return false;
}
+ getSpecialOverlayRenderMatrix(rotation) {
+ return overlayMatrix[rotation];
+ }
+
/**
* Creates the entity at the given location
* @param {Entity} entity
diff --git a/src/js/game/buildings/logic_gate.js b/src/js/game/buildings/logic_gate.js
index e07db3ea..1511f5ab 100644
--- a/src/js/game/buildings/logic_gate.js
+++ b/src/js/game/buildings/logic_gate.js
@@ -1,155 +1,151 @@
-import { enumDirection, Vector } from "../../core/vector";
-import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
-import { Entity } from "../entity";
-import { MetaBuilding, defaultBuildingVariant } from "../meta_building";
-import { GameRoot } from "../root";
-import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate";
-
-/** @enum {string} */
-export const enumLogicGateVariants = {
- not: "not",
- xor: "xor",
- or: "or",
- transistor: "transistor",
-};
-
-/** @enum {string} */
-export const enumVariantToGate = {
- [defaultBuildingVariant]: enumLogicGateType.and,
- [enumLogicGateVariants.not]: enumLogicGateType.not,
- [enumLogicGateVariants.xor]: enumLogicGateType.xor,
- [enumLogicGateVariants.or]: enumLogicGateType.or,
- [enumLogicGateVariants.transistor]: enumLogicGateType.transistor,
-};
-
-export class MetaLogicGateBuilding extends MetaBuilding {
- constructor() {
- super("logic_gate");
- }
-
- getSilhouetteColor() {
- return "#89dc60";
- }
-
- /**
- * @param {GameRoot} root
- */
- getIsUnlocked(root) {
- // @todo
- return true;
- }
-
- /** @returns {"wires"} **/
- getLayer() {
- return "wires";
- }
-
- getDimensions() {
- return new Vector(1, 1);
- }
-
- getAvailableVariants() {
- return [
- defaultBuildingVariant,
- enumLogicGateVariants.not,
- enumLogicGateVariants.xor,
- enumLogicGateVariants.or,
- enumLogicGateVariants.transistor,
- ];
- }
-
- getRenderPins() {
- // We already have it included
- return false;
- }
-
- /**
- *
- * @param {Entity} entity
- * @param {number} rotationVariant
- */
- updateVariants(entity, rotationVariant, variant) {
- const gateType = enumVariantToGate[variant];
- entity.components.LogicGate.type = gateType;
-
- const pinComp = entity.components.WiredPins;
-
- switch (gateType) {
- case enumLogicGateType.and:
- case enumLogicGateType.xor:
- case enumLogicGateType.or: {
- pinComp.setSlots([
- {
- pos: new Vector(0, 0),
- direction: enumDirection.top,
- type: enumPinSlotType.logicalEjector,
- },
- {
- pos: new Vector(0, 0),
- direction: enumDirection.left,
- type: enumPinSlotType.logicalAcceptor,
- },
- {
- pos: new Vector(0, 0),
- direction: enumDirection.right,
- type: enumPinSlotType.logicalAcceptor,
- },
- ]);
- break;
- }
- case enumLogicGateType.transistor: {
- pinComp.setSlots([
- {
- pos: new Vector(0, 0),
- direction: enumDirection.top,
- type: enumPinSlotType.logicalEjector,
- },
- {
- pos: new Vector(0, 0),
- direction: enumDirection.left,
- type: enumPinSlotType.logicalAcceptor,
- },
- {
- pos: new Vector(0, 0),
- direction: enumDirection.bottom,
- type: enumPinSlotType.logicalAcceptor,
- },
- ]);
- break;
- }
-
- case enumLogicGateType.not: {
- pinComp.setSlots([
- {
- pos: new Vector(0, 0),
- direction: enumDirection.top,
- type: enumPinSlotType.logicalEjector,
- },
- {
- pos: new Vector(0, 0),
- direction: enumDirection.bottom,
- type: enumPinSlotType.logicalAcceptor,
- },
- ]);
- break;
- }
-
- default:
- assertAlways("unknown logic gate type: " + gateType);
- }
- }
-
- /**
- * Creates the entity at the given location
- * @param {Entity} entity
- */
- setupEntityComponents(entity) {
- entity.addComponent(
- new WiredPinsComponent({
- slots: [],
- })
- );
-
- entity.addComponent(new LogicGateComponent({}));
- }
-}
+import { enumDirection, Vector } from "../../core/vector";
+import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
+import { Entity } from "../entity";
+import { MetaBuilding, defaultBuildingVariant } from "../meta_building";
+import { GameRoot } from "../root";
+import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate";
+import { generateMatrixRotations } from "../../core/utils";
+
+/** @enum {string} */
+export const enumLogicGateVariants = {
+ not: "not",
+ xor: "xor",
+ or: "or",
+};
+
+/** @enum {string} */
+export const enumVariantToGate = {
+ [defaultBuildingVariant]: enumLogicGateType.and,
+ [enumLogicGateVariants.not]: enumLogicGateType.not,
+ [enumLogicGateVariants.xor]: enumLogicGateType.xor,
+ [enumLogicGateVariants.or]: enumLogicGateType.or,
+};
+
+const overlayMatrices = {
+ [defaultBuildingVariant]: generateMatrixRotations([0, 1, 0, 1, 1, 1, 0, 1, 1]),
+ [enumLogicGateVariants.xor]: generateMatrixRotations([0, 1, 0, 1, 1, 1, 0, 1, 1]),
+ [enumLogicGateVariants.or]: generateMatrixRotations([0, 1, 0, 1, 1, 1, 0, 1, 1]),
+ [enumLogicGateVariants.not]: generateMatrixRotations([0, 1, 0, 0, 1, 0, 0, 1, 0]),
+};
+
+const colors = {
+ [defaultBuildingVariant]: "#f48d41",
+ [enumLogicGateVariants.xor]: "#f4a241",
+ [enumLogicGateVariants.or]: "#f4d041",
+ [enumLogicGateVariants.not]: "#f44184",
+};
+
+export class MetaLogicGateBuilding extends MetaBuilding {
+ constructor() {
+ super("logic_gate");
+ }
+
+ getSilhouetteColor(variant) {
+ return colors[variant];
+ }
+
+ /**
+ * @param {GameRoot} root
+ */
+ getIsUnlocked(root) {
+ // @todo
+ return true;
+ }
+
+ /** @returns {"wires"} **/
+ getLayer() {
+ return "wires";
+ }
+
+ getDimensions() {
+ return new Vector(1, 1);
+ }
+
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant) {
+ return overlayMatrices[variant][rotation];
+ }
+
+ getAvailableVariants() {
+ return [
+ defaultBuildingVariant,
+ enumLogicGateVariants.or,
+ enumLogicGateVariants.not,
+ enumLogicGateVariants.xor,
+ ];
+ }
+
+ getRenderPins() {
+ // We already have it included
+ return false;
+ }
+
+ /**
+ *
+ * @param {Entity} entity
+ * @param {number} rotationVariant
+ */
+ updateVariants(entity, rotationVariant, variant) {
+ const gateType = enumVariantToGate[variant];
+ entity.components.LogicGate.type = gateType;
+
+ const pinComp = entity.components.WiredPins;
+
+ switch (gateType) {
+ case enumLogicGateType.and:
+ case enumLogicGateType.xor:
+ case enumLogicGateType.or: {
+ pinComp.setSlots([
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.top,
+ type: enumPinSlotType.logicalEjector,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.left,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.right,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ ]);
+ break;
+ }
+
+ case enumLogicGateType.not: {
+ pinComp.setSlots([
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.top,
+ type: enumPinSlotType.logicalEjector,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.bottom,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ ]);
+ break;
+ }
+
+ default:
+ assertAlways("unknown logic gate type: " + gateType);
+ }
+ }
+
+ /**
+ * Creates the entity at the given location
+ * @param {Entity} entity
+ */
+ setupEntityComponents(entity) {
+ entity.addComponent(
+ new WiredPinsComponent({
+ slots: [],
+ })
+ );
+
+ entity.addComponent(new LogicGateComponent({}));
+ }
+}
diff --git a/src/js/game/buildings/transistor.js b/src/js/game/buildings/transistor.js
new file mode 100644
index 00000000..5a4be935
--- /dev/null
+++ b/src/js/game/buildings/transistor.js
@@ -0,0 +1,101 @@
+import { generateMatrixRotations } from "../../core/utils";
+import { enumDirection, Vector } from "../../core/vector";
+import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate";
+import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
+import { Entity } from "../entity";
+import { defaultBuildingVariant, MetaBuilding } from "../meta_building";
+import { GameRoot } from "../root";
+
+/** @enum {string} */
+export const enumTransistorVariants = {
+ mirrored: "mirrored",
+};
+
+const overlayMatrices = {
+ [defaultBuildingVariant]: generateMatrixRotations([0, 1, 0, 1, 1, 0, 0, 1, 0]),
+ [enumTransistorVariants.mirrored]: generateMatrixRotations([0, 1, 0, 0, 1, 1, 0, 1, 0]),
+};
+
+export class MetaTransistorBuilding extends MetaBuilding {
+ constructor() {
+ super("transistor");
+ }
+
+ getSilhouetteColor() {
+ return "#bc3a61";
+ }
+
+ /**
+ * @param {GameRoot} root
+ */
+ getIsUnlocked(root) {
+ // @todo
+ return true;
+ }
+
+ /** @returns {"wires"} **/
+ getLayer() {
+ return "wires";
+ }
+
+ getDimensions() {
+ return new Vector(1, 1);
+ }
+
+ getAvailableVariants() {
+ return [defaultBuildingVariant, enumTransistorVariants.mirrored];
+ }
+
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant) {
+ return overlayMatrices[variant][rotation];
+ }
+
+ getRenderPins() {
+ // We already have it included
+ return false;
+ }
+
+ /**
+ *
+ * @param {Entity} entity
+ * @param {number} rotationVariant
+ */
+ updateVariants(entity, rotationVariant, variant) {
+ entity.components.WiredPins.slots[1].direction =
+ variant === enumTransistorVariants.mirrored ? enumDirection.right : enumDirection.left;
+ }
+
+ /**
+ * Creates the entity at the given location
+ * @param {Entity} entity
+ */
+ setupEntityComponents(entity) {
+ entity.addComponent(
+ new WiredPinsComponent({
+ slots: [
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.top,
+ type: enumPinSlotType.logicalEjector,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.left,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ {
+ pos: new Vector(0, 0),
+ direction: enumDirection.bottom,
+ type: enumPinSlotType.logicalAcceptor,
+ },
+ ],
+ })
+ );
+
+ entity.addComponent(
+ new LogicGateComponent({
+ type: enumLogicGateType.transistor,
+ })
+ );
+ }
+}
diff --git a/src/js/game/buildings/virtual_processor.js b/src/js/game/buildings/virtual_processor.js
index acdb0dbe..fb0ef0e3 100644
--- a/src/js/game/buildings/virtual_processor.js
+++ b/src/js/game/buildings/virtual_processor.js
@@ -4,13 +4,15 @@ import { WiredPinsComponent, enumPinSlotType } from "../components/wired_pins";
import { Entity } from "../entity";
import { defaultBuildingVariant, MetaBuilding } from "../meta_building";
import { GameRoot } from "../root";
+import { MetaCutterBuilding } from "./cutter";
+import { MetaPainterBuilding } from "./painter";
+import { MetaRotaterBuilding } from "./rotater";
+import { MetaStackerBuilding } from "./stacker";
/** @enum {string} */
export const enumVirtualProcessorVariants = {
- analyzer: "analyzer",
rotater: "rotater",
unstacker: "unstacker",
- shapecompare: "shapecompare",
stacker: "stacker",
painter: "painter",
};
@@ -18,21 +20,27 @@ export const enumVirtualProcessorVariants = {
/** @enum {string} */
export const enumVariantToGate = {
[defaultBuildingVariant]: enumLogicGateType.cutter,
- [enumVirtualProcessorVariants.analyzer]: enumLogicGateType.analyzer,
[enumVirtualProcessorVariants.rotater]: enumLogicGateType.rotater,
[enumVirtualProcessorVariants.unstacker]: enumLogicGateType.unstacker,
- [enumVirtualProcessorVariants.shapecompare]: enumLogicGateType.shapecompare,
[enumVirtualProcessorVariants.stacker]: enumLogicGateType.stacker,
[enumVirtualProcessorVariants.painter]: enumLogicGateType.painter,
};
+const colors = {
+ [defaultBuildingVariant]: new MetaCutterBuilding().getSilhouetteColor(),
+ [enumVirtualProcessorVariants.rotater]: new MetaRotaterBuilding().getSilhouetteColor(),
+ [enumVirtualProcessorVariants.unstacker]: new MetaStackerBuilding().getSilhouetteColor(),
+ [enumVirtualProcessorVariants.stacker]: new MetaStackerBuilding().getSilhouetteColor(),
+ [enumVirtualProcessorVariants.painter]: new MetaPainterBuilding().getSilhouetteColor(),
+};
+
export class MetaVirtualProcessorBuilding extends MetaBuilding {
constructor() {
super("virtual_processor");
}
- getSilhouetteColor() {
- return "#823cab";
+ getSilhouetteColor(variant) {
+ return colors[variant];
}
/**
@@ -56,11 +64,9 @@ export class MetaVirtualProcessorBuilding extends MetaBuilding {
return [
defaultBuildingVariant,
enumVirtualProcessorVariants.rotater,
- enumVirtualProcessorVariants.unstacker,
- enumVirtualProcessorVariants.analyzer,
enumVirtualProcessorVariants.stacker,
enumVirtualProcessorVariants.painter,
- enumVirtualProcessorVariants.shapecompare,
+ enumVirtualProcessorVariants.unstacker,
];
}
@@ -80,7 +86,6 @@ export class MetaVirtualProcessorBuilding extends MetaBuilding {
const pinComp = entity.components.WiredPins;
switch (gateType) {
case enumLogicGateType.cutter:
- case enumLogicGateType.analyzer:
case enumLogicGateType.unstacker: {
pinComp.setSlots([
{
@@ -116,26 +121,6 @@ export class MetaVirtualProcessorBuilding extends MetaBuilding {
]);
break;
}
- case enumLogicGateType.shapecompare: {
- pinComp.setSlots([
- {
- pos: new Vector(0, 0),
- direction: enumDirection.top,
- type: enumPinSlotType.logicalEjector,
- },
- {
- pos: new Vector(0, 0),
- direction: enumDirection.left,
- type: enumPinSlotType.logicalAcceptor,
- },
- {
- pos: new Vector(0, 0),
- direction: enumDirection.right,
- type: enumPinSlotType.logicalAcceptor,
- },
- ]);
- break;
- }
case enumLogicGateType.stacker:
case enumLogicGateType.painter: {
pinComp.setSlots([
diff --git a/src/js/game/buildings/wire.js b/src/js/game/buildings/wire.js
index 59c9cb7d..6b2305a0 100644
--- a/src/js/game/buildings/wire.js
+++ b/src/js/game/buildings/wire.js
@@ -1,263 +1,272 @@
-import { Loader } from "../../core/loader";
-import { generateMatrixRotations } from "../../core/utils";
-import { enumDirection, enumDirectionToAngle, enumDirectionToVector, Vector } from "../../core/vector";
-import { SOUNDS } from "../../platform/sound";
-import { enumWireType, WireComponent } from "../components/wire";
-import { Entity } from "../entity";
-import { MetaBuilding } from "../meta_building";
-import { GameRoot } from "../root";
-
-export const arrayWireRotationVariantToType = [
- enumWireType.regular,
- enumWireType.turn,
- enumWireType.split,
- enumWireType.cross,
-];
-
-export const wireOverlayMatrices = {
- [enumWireType.regular]: generateMatrixRotations([0, 1, 0, 0, 1, 0, 0, 1, 0]),
- [enumWireType.split]: generateMatrixRotations([0, 0, 0, 1, 1, 1, 0, 1, 0]),
- [enumWireType.turn]: generateMatrixRotations([0, 0, 0, 0, 1, 1, 0, 1, 0]),
- [enumWireType.cross]: generateMatrixRotations([0, 1, 0, 1, 1, 1, 0, 1, 0]),
-};
-
-export class MetaWireBuilding extends MetaBuilding {
- constructor() {
- super("wire");
- }
-
- getHasDirectionLockAvailable() {
- return true;
- }
-
- getSilhouetteColor() {
- return "#25fff2";
- }
-
- getDimensions() {
- return new Vector(1, 1);
- }
-
- getStayInPlacementMode() {
- return true;
- }
-
- getPlacementSound() {
- return SOUNDS.placeBelt;
- }
-
- getRotateAutomaticallyWhilePlacing() {
- return true;
- }
-
- /** @returns {"wires"} **/
- getLayer() {
- return "wires";
- }
-
- getSprite() {
- return null;
- }
-
- getIsReplaceable() {
- return true;
- }
-
- /**
- * @param {GameRoot} root
- */
- getIsUnlocked(root) {
- // @todo
- return true;
- }
-
- /**
- * Creates the entity at the given location
- * @param {Entity} entity
- */
- setupEntityComponents(entity) {
- // @todo
- entity.addComponent(new WireComponent({}));
- }
-
- /**
- *
- * @param {Entity} entity
- * @param {number} rotationVariant
- */
- updateVariants(entity, rotationVariant) {
- entity.components.Wire.type = arrayWireRotationVariantToType[rotationVariant];
- }
-
- /**
- *
- * @param {number} rotation
- * @param {number} rotationVariant
- * @param {string} variant
- * @param {Entity} entity
- */
- getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
- return wireOverlayMatrices[entity.components.Wire.type][rotation];
- }
-
- getPreviewSprite(rotationVariant) {
- switch (arrayWireRotationVariantToType[rotationVariant]) {
- case enumWireType.regular: {
- return Loader.getSprite("sprites/buildings/wire.png");
- }
- case enumWireType.turn: {
- return Loader.getSprite("sprites/buildings/wire-turn.png");
- }
- case enumWireType.split: {
- return Loader.getSprite("sprites/buildings/wire-split.png");
- }
- case enumWireType.cross: {
- return Loader.getSprite("sprites/buildings/wire-cross.png");
- }
- default: {
- assertAlways(false, "Invalid wire rotation variant");
- }
- }
- }
-
- getBlueprintSprite(rotationVariant) {
- switch (arrayWireRotationVariantToType[rotationVariant]) {
- case enumWireType.regular: {
- return Loader.getSprite("sprites/blueprints/wire.png");
- }
- case enumWireType.turn: {
- return Loader.getSprite("sprites/blueprints/wire-turn.png");
- }
- case enumWireType.split: {
- return Loader.getSprite("sprites/blueprints/wire-split.png");
- }
- case enumWireType.cross: {
- return Loader.getSprite("sprites/blueprints/wire-cross.png");
- }
- default: {
- assertAlways(false, "Invalid wire rotation variant");
- }
- }
- }
-
- /**
- * Should compute the optimal rotation variant on the given tile
- * @param {object} param0
- * @param {GameRoot} param0.root
- * @param {Vector} param0.tile
- * @param {number} param0.rotation
- * @param {string} param0.variant
- * @param {string} param0.layer
- * @return {{ rotation: number, rotationVariant: number, connectedEntities?: Array }}
- */
- computeOptimalDirectionAndRotationVariantAtTile({ root, tile, rotation, variant, layer }) {
- const connections = {
- top: root.logic.computeWireEdgeStatus({ tile, rotation, edge: enumDirection.top }),
- right: root.logic.computeWireEdgeStatus({ tile, rotation, edge: enumDirection.right }),
- bottom: root.logic.computeWireEdgeStatus({ tile, rotation, edge: enumDirection.bottom }),
- left: root.logic.computeWireEdgeStatus({ tile, rotation, edge: enumDirection.left }),
- };
-
- let flag = 0;
- flag |= connections.top ? 0x1000 : 0;
- flag |= connections.right ? 0x100 : 0;
- flag |= connections.bottom ? 0x10 : 0;
- flag |= connections.left ? 0x1 : 0;
-
- let targetType = enumWireType.regular;
-
- // First, reset rotation
- rotation = 0;
-
- switch (flag) {
- case 0x0000:
- // Nothing
- break;
-
- case 0x0001:
- // Left
- rotation += 90;
- break;
-
- case 0x0010:
- // Bottom
- // END
- break;
-
- case 0x0011:
- // Bottom | Left
- targetType = enumWireType.turn;
- rotation += 90;
- break;
-
- case 0x0100:
- // Right
- rotation += 90;
- break;
-
- case 0x0101:
- // Right | Left
- rotation += 90;
- break;
-
- case 0x0110:
- // Right | Bottom
- targetType = enumWireType.turn;
- break;
-
- case 0x0111:
- // Right | Bottom | Left
- targetType = enumWireType.split;
- break;
-
- case 0x1000:
- // Top
- break;
-
- case 0x1001:
- // Top | Left
- targetType = enumWireType.turn;
- rotation += 180;
- break;
-
- case 0x1010:
- // Top | Bottom
- break;
-
- case 0x1011:
- // Top | Bottom | Left
- targetType = enumWireType.split;
- rotation += 90;
- break;
-
- case 0x1100:
- // Top | Right
- targetType = enumWireType.turn;
- rotation -= 90;
- break;
-
- case 0x1101:
- // Top | Right | Left
- targetType = enumWireType.split;
- rotation += 180;
- break;
-
- case 0x1110:
- // Top | Right | Bottom
- targetType = enumWireType.split;
- rotation -= 90;
- break;
-
- case 0x1111:
- // Top | Right | Bottom | Left
- targetType = enumWireType.cross;
- break;
- }
-
- return {
- // Clamp rotation
- rotation: (rotation + 360 * 10) % 360,
- rotationVariant: arrayWireRotationVariantToType.indexOf(targetType),
- };
- }
-}
+import { Loader } from "../../core/loader";
+import { generateMatrixRotations } from "../../core/utils";
+import { enumDirection, Vector } from "../../core/vector";
+import { SOUNDS } from "../../platform/sound";
+import { enumWireType, enumWireVariant, WireComponent } from "../components/wire";
+import { Entity } from "../entity";
+import { defaultBuildingVariant, MetaBuilding } from "../meta_building";
+import { GameRoot } from "../root";
+
+export const arrayWireRotationVariantToType = [
+ enumWireType.forward,
+ enumWireType.turn,
+ enumWireType.split,
+ enumWireType.cross,
+];
+
+export const wireOverlayMatrices = {
+ [enumWireType.forward]: generateMatrixRotations([0, 1, 0, 0, 1, 0, 0, 1, 0]),
+ [enumWireType.split]: generateMatrixRotations([0, 0, 0, 1, 1, 1, 0, 1, 0]),
+ [enumWireType.turn]: generateMatrixRotations([0, 0, 0, 0, 1, 1, 0, 1, 0]),
+ [enumWireType.cross]: generateMatrixRotations([0, 1, 0, 1, 1, 1, 0, 1, 0]),
+};
+
+/** @enum {string} */
+export const wireVariants = {
+ second: "second",
+ third: "third",
+};
+
+const enumWireVariantToVariant = {
+ [defaultBuildingVariant]: enumWireVariant.first,
+ [wireVariants.second]: enumWireVariant.second,
+ [wireVariants.third]: enumWireVariant.third,
+};
+
+export class MetaWireBuilding extends MetaBuilding {
+ constructor() {
+ super("wire");
+ }
+
+ getHasDirectionLockAvailable() {
+ return true;
+ }
+
+ getSilhouetteColor() {
+ return "#61ef6f";
+ }
+
+ getAvailableVariants() {
+ return [defaultBuildingVariant, wireVariants.second, wireVariants.third];
+ }
+
+ getDimensions() {
+ return new Vector(1, 1);
+ }
+
+ getStayInPlacementMode() {
+ return true;
+ }
+
+ getPlacementSound() {
+ return SOUNDS.placeBelt;
+ }
+
+ getRotateAutomaticallyWhilePlacing() {
+ return true;
+ }
+
+ /** @returns {"wires"} **/
+ getLayer() {
+ return "wires";
+ }
+
+ getSprite() {
+ return null;
+ }
+
+ getIsReplaceable() {
+ return true;
+ }
+
+ /**
+ * @param {GameRoot} root
+ */
+ getIsUnlocked(root) {
+ // @todo
+ return true;
+ }
+
+ /**
+ * Creates the entity at the given location
+ * @param {Entity} entity
+ */
+ setupEntityComponents(entity) {
+ entity.addComponent(new WireComponent({}));
+ }
+
+ /**
+ *
+ * @param {Entity} entity
+ * @param {number} rotationVariant
+ * @param {string} variant
+ */
+ updateVariants(entity, rotationVariant, variant) {
+ entity.components.Wire.type = arrayWireRotationVariantToType[rotationVariant];
+ entity.components.Wire.variant = enumWireVariantToVariant[variant];
+ }
+
+ /**
+ *
+ * @param {number} rotation
+ * @param {number} rotationVariant
+ * @param {string} variant
+ * @param {Entity} entity
+ */
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
+ return wireOverlayMatrices[entity.components.Wire.type][rotation];
+ }
+
+ /**
+ *
+ * @param {number} rotationVariant
+ * @param {string} variant
+ * @returns {import("../../core/draw_utils").AtlasSprite}
+ */
+ getPreviewSprite(rotationVariant, variant) {
+ const wireVariant = enumWireVariantToVariant[variant];
+ switch (arrayWireRotationVariantToType[rotationVariant]) {
+ case enumWireType.forward: {
+ return Loader.getSprite("sprites/wires/sets/" + wireVariant + "_forward.png");
+ }
+ case enumWireType.turn: {
+ return Loader.getSprite("sprites/wires/sets/" + wireVariant + "_turn.png");
+ }
+ case enumWireType.split: {
+ return Loader.getSprite("sprites/wires/sets/" + wireVariant + "_split.png");
+ }
+ case enumWireType.cross: {
+ return Loader.getSprite("sprites/wires/sets/" + wireVariant + "_cross.png");
+ }
+ default: {
+ assertAlways(false, "Invalid wire rotation variant");
+ }
+ }
+ }
+
+ getBlueprintSprite(rotationVariant, variant) {
+ return this.getPreviewSprite(rotationVariant, variant);
+ }
+
+ /**
+ * Should compute the optimal rotation variant on the given tile
+ * @param {object} param0
+ * @param {GameRoot} param0.root
+ * @param {Vector} param0.tile
+ * @param {number} param0.rotation
+ * @param {string} param0.variant
+ * @param {string} param0.layer
+ * @return {{ rotation: number, rotationVariant: number, connectedEntities?: Array }}
+ */
+ computeOptimalDirectionAndRotationVariantAtTile({ root, tile, rotation, variant, layer }) {
+ const wireVariant = enumWireVariantToVariant[variant];
+ const connections = {
+ top: root.logic.computeWireEdgeStatus({ tile, wireVariant, edge: enumDirection.top }),
+ right: root.logic.computeWireEdgeStatus({ tile, wireVariant, edge: enumDirection.right }),
+ bottom: root.logic.computeWireEdgeStatus({ tile, wireVariant, edge: enumDirection.bottom }),
+ left: root.logic.computeWireEdgeStatus({ tile, wireVariant, edge: enumDirection.left }),
+ };
+
+ let flag = 0;
+ flag |= connections.top ? 0x1000 : 0;
+ flag |= connections.right ? 0x100 : 0;
+ flag |= connections.bottom ? 0x10 : 0;
+ flag |= connections.left ? 0x1 : 0;
+
+ let targetType = enumWireType.forward;
+
+ // First, reset rotation
+ rotation = 0;
+
+ switch (flag) {
+ case 0x0000:
+ // Nothing
+ break;
+
+ case 0x0001:
+ // Left
+ rotation += 90;
+ break;
+
+ case 0x0010:
+ // Bottom
+ // END
+ break;
+
+ case 0x0011:
+ // Bottom | Left
+ targetType = enumWireType.turn;
+ rotation += 90;
+ break;
+
+ case 0x0100:
+ // Right
+ rotation += 90;
+ break;
+
+ case 0x0101:
+ // Right | Left
+ rotation += 90;
+ break;
+
+ case 0x0110:
+ // Right | Bottom
+ targetType = enumWireType.turn;
+ break;
+
+ case 0x0111:
+ // Right | Bottom | Left
+ targetType = enumWireType.split;
+ break;
+
+ case 0x1000:
+ // Top
+ break;
+
+ case 0x1001:
+ // Top | Left
+ targetType = enumWireType.turn;
+ rotation += 180;
+ break;
+
+ case 0x1010:
+ // Top | Bottom
+ break;
+
+ case 0x1011:
+ // Top | Bottom | Left
+ targetType = enumWireType.split;
+ rotation += 90;
+ break;
+
+ case 0x1100:
+ // Top | Right
+ targetType = enumWireType.turn;
+ rotation -= 90;
+ break;
+
+ case 0x1101:
+ // Top | Right | Left
+ targetType = enumWireType.split;
+ rotation += 180;
+ break;
+
+ case 0x1110:
+ // Top | Right | Bottom
+ targetType = enumWireType.split;
+ rotation -= 90;
+ break;
+
+ case 0x1111:
+ // Top | Right | Bottom | Left
+ targetType = enumWireType.cross;
+ break;
+ }
+
+ return {
+ // Clamp rotation
+ rotation: (rotation + 360 * 10) % 360,
+ rotationVariant: arrayWireRotationVariantToType.indexOf(targetType),
+ };
+ }
+}
diff --git a/src/js/game/buildings/wire_tunnel.js b/src/js/game/buildings/wire_tunnel.js
index f885abc6..05d595df 100644
--- a/src/js/game/buildings/wire_tunnel.js
+++ b/src/js/game/buildings/wire_tunnel.js
@@ -1,87 +1,58 @@
-import { Vector } from "../../core/vector";
-import { Entity } from "../entity";
-import { MetaBuilding, defaultBuildingVariant } from "../meta_building";
-import { GameRoot } from "../root";
-import { WireTunnelComponent } from "../components/wire_tunnel";
-import { generateMatrixRotations } from "../../core/utils";
-
-/** @enum {string} */
-export const enumWireTunnelVariants = {
- coating: "coating",
-};
-
-const wireTunnelOverlayMatrices = {
- [defaultBuildingVariant]: generateMatrixRotations([0, 1, 0, 1, 1, 1, 0, 1, 0]),
- [enumWireTunnelVariants.coating]: generateMatrixRotations([0, 1, 0, 0, 1, 0, 0, 1, 0]),
-};
-
-export class MetaWireTunnelBuilding extends MetaBuilding {
- constructor() {
- super("wire_tunnel");
- }
-
- getSilhouetteColor() {
- return "#777a86";
- }
-
- /**
- * @param {GameRoot} root
- */
- getIsUnlocked(root) {
- // @todo
- return true;
- }
-
- /**
- *
- * @param {number} rotation
- * @param {number} rotationVariant
- * @param {string} variant
- * @param {Entity} entity
- */
- getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
- return wireTunnelOverlayMatrices[variant][rotation];
- }
-
- getIsRotateable(variant) {
- return variant !== defaultBuildingVariant;
- }
-
- getDimensions() {
- return new Vector(1, 1);
- }
-
- getAvailableVariants() {
- return [defaultBuildingVariant, enumWireTunnelVariants.coating];
- }
-
- /** @returns {"wires"} **/
- getLayer() {
- return "wires";
- }
-
- getRotateAutomaticallyWhilePlacing() {
- return true;
- }
-
- getStayInPlacementMode() {
- return true;
- }
-
- /**
- * Creates the entity at the given location
- * @param {Entity} entity
- */
- setupEntityComponents(entity) {
- entity.addComponent(new WireTunnelComponent({}));
- }
-
- /**
- * @param {Entity} entity
- * @param {number} rotationVariant
- * @param {string} variant
- */
- updateVariants(entity, rotationVariant, variant) {
- entity.components.WireTunnel.multipleDirections = variant === defaultBuildingVariant;
- }
-}
+import { generateMatrixRotations } from "../../core/utils";
+import { Vector } from "../../core/vector";
+import { WireTunnelComponent } from "../components/wire_tunnel";
+import { Entity } from "../entity";
+import { MetaBuilding } from "../meta_building";
+import { GameRoot } from "../root";
+import { enumHubGoalRewards } from "../tutorial_goals";
+
+const wireTunnelOverlayMatrix = generateMatrixRotations([0, 1, 0, 1, 1, 1, 0, 1, 0]);
+
+export class MetaWireTunnelBuilding extends MetaBuilding {
+ constructor() {
+ super("wire_tunnel");
+ }
+
+ getSilhouetteColor() {
+ return "#777a86";
+ }
+
+ /**
+ * @param {GameRoot} root
+ */
+ getIsUnlocked(root) {
+ return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers);
+ }
+
+ /**
+ *
+ * @param {number} rotation
+ * @param {number} rotationVariant
+ * @param {string} variant
+ * @param {Entity} entity
+ */
+ getSpecialOverlayRenderMatrix(rotation, rotationVariant, variant, entity) {
+ return wireTunnelOverlayMatrix[rotation];
+ }
+
+ getIsRotateable() {
+ return false;
+ }
+
+ getDimensions() {
+ return new Vector(1, 1);
+ }
+
+ /** @returns {"wires"} **/
+ getLayer() {
+ return "wires";
+ }
+
+ /**
+ * Creates the entity at the given location
+ * @param {Entity} entity
+ */
+ setupEntityComponents(entity) {
+ entity.addComponent(new WireTunnelComponent({}));
+ }
+}
diff --git a/src/js/game/components/logic_gate.js b/src/js/game/components/logic_gate.js
index a19f70b6..62cd3365 100644
--- a/src/js/game/components/logic_gate.js
+++ b/src/js/game/components/logic_gate.js
@@ -12,7 +12,7 @@ export const enumLogicGateType = {
rotater: "rotater",
unstacker: "unstacker",
cutter: "cutter",
- shapecompare: "shapecompare",
+ compare: "compare",
stacker: "stacker",
painter: "painter",
};
diff --git a/src/js/game/components/static_map_entity.js b/src/js/game/components/static_map_entity.js
index d5daa998..7e2f5314 100644
--- a/src/js/game/components/static_map_entity.js
+++ b/src/js/game/components/static_map_entity.js
@@ -63,6 +63,14 @@ export class StaticMapEntityComponent extends Component {
return getBuildingDataFromCode(this.code).metaInstance;
}
+ /**
+ * Returns the buildings variant
+ * @returns {string}
+ */
+ getVariant() {
+ return getBuildingDataFromCode(this.code).variant;
+ }
+
/**
* Copy the current state to another component
* @param {Component} otherComponent
diff --git a/src/js/game/components/wire.js b/src/js/game/components/wire.js
index 4bb1edca..057ea5d0 100644
--- a/src/js/game/components/wire.js
+++ b/src/js/game/components/wire.js
@@ -2,12 +2,19 @@ import { Component } from "../component";
/** @enum {string} */
export const enumWireType = {
- regular: "regular",
+ forward: "forward",
turn: "turn",
split: "split",
cross: "cross",
};
+/** @enum {string} */
+export const enumWireVariant = {
+ first: "first",
+ second: "second",
+ third: "third",
+};
+
export class WireComponent extends Component {
static getId() {
return "Wire";
@@ -16,54 +23,21 @@ export class WireComponent extends Component {
/**
* @param {object} param0
* @param {enumWireType=} param0.type
+ * @param {enumWireVariant=} param0.variant
*/
- constructor({ type = enumWireType.regular }) {
+ constructor({ type = enumWireType.forward, variant = enumWireVariant.first }) {
super();
this.type = type;
+ /**
+ * The variant of the wire, different variants do not connect
+ * @type {enumWireVariant}
+ */
+ this.variant = variant;
+
/**
* @type {import("../systems/wire").WireNetwork}
*/
this.linkedNetwork = null;
}
-
- /**
- * Returns the local connections
- * @returns {import("../../core/utils").DirectionalObject}
- */
- getLocalConnections() {
- return {
- top: true,
- right: false,
- bottom: true,
- left: false,
- };
-
- // switch (this.type) {
- // case enumWireType.regular:
- // return {
- // top: true,
- // right: false,
- // bottom: true,
- // left: false,
- // };
- // case enumWireType.turn:
- // return {
- // top: false,
- // right: true,
- // bottom: true,
- // left: false,
- // };
- // case enumWireType.split:
- // return {
- // top: false,
- // right: true,
- // bottom: true,
- // left: true,
- // };
-
- // default:
- // assertAlways(false, "Invalid wire type: " + this.type);
- // }
- }
}
diff --git a/src/js/game/components/wire_tunnel.js b/src/js/game/components/wire_tunnel.js
index e1be448b..1c170484 100644
--- a/src/js/game/components/wire_tunnel.js
+++ b/src/js/game/components/wire_tunnel.js
@@ -5,13 +5,8 @@ export class WireTunnelComponent extends Component {
return "WireTunnel";
}
- /**
- * @param {object} param0
- * @param {boolean=} param0.multipleDirections
- */
- constructor({ multipleDirections = true }) {
+ constructor() {
super();
- this.multipleDirections = multipleDirections;
/**
* Linked network, only if its not multiple directions
diff --git a/src/js/game/hud/parts/wires_toolbar.js b/src/js/game/hud/parts/wires_toolbar.js
index 74075329..6d19df1f 100644
--- a/src/js/game/hud/parts/wires_toolbar.js
+++ b/src/js/game/hud/parts/wires_toolbar.js
@@ -5,6 +5,9 @@ import { MetaLogicGateBuilding } from "../../buildings/logic_gate";
import { MetaLeverBuilding } from "../../buildings/lever";
import { MetaWireTunnelBuilding } from "../../buildings/wire_tunnel";
import { MetaVirtualProcessorBuilding } from "../../buildings/virtual_processor";
+import { MetaTransistorBuilding } from "../../buildings/transistor";
+import { MetaAnalyzerBuilding } from "../../buildings/analyzer";
+import { MetaComparatorBuilding } from "../../buildings/comparator";
export class HUDWiresToolbar extends HUDBaseToolbar {
constructor(root) {
@@ -13,9 +16,12 @@ export class HUDWiresToolbar extends HUDBaseToolbar {
MetaWireBuilding,
MetaWireTunnelBuilding,
MetaConstantSignalBuilding,
+ MetaTransistorBuilding,
MetaLogicGateBuilding,
+ MetaAnalyzerBuilding,
MetaLeverBuilding,
MetaVirtualProcessorBuilding,
+ MetaComparatorBuilding,
],
visibilityCondition: () =>
!this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === "wires",
diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js
index 4e2f4505..ad8cf124 100644
--- a/src/js/game/key_action_mapper.js
+++ b/src/js/game/key_action_mapper.js
@@ -64,8 +64,11 @@ export const KEYMAPPINGS = {
wire: { keyCode: key("1") },
wire_tunnel: { keyCode: key("2") },
constant_signal: { keyCode: key("3") },
+ transistor: { keyCode: key("6") },
logic_gate: { keyCode: key("4") },
virtual_processor: { keyCode: key("5") },
+ analyzer: { keyCode: key("7") },
+ comparator: { keyCode: key("8") },
},
placement: {
diff --git a/src/js/game/logic.js b/src/js/game/logic.js
index ce4d18a5..7ec7b8ab 100644
--- a/src/js/game/logic.js
+++ b/src/js/game/logic.js
@@ -1,23 +1,18 @@
+import { globalConfig } from "../core/config";
import { createLogger } from "../core/logging";
import { STOP_PROPAGATION } from "../core/signal";
import { round2Digits } from "../core/utils";
import { enumDirection, enumDirectionToVector, enumInvertedDirections, Vector } from "../core/vector";
import { getBuildingDataFromCode } from "./building_codes";
+import { enumWireVariant } from "./components/wire";
import { Entity } from "./entity";
+import { CHUNK_OVERLAY_RES } from "./map_chunk_view";
import { MetaBuilding } from "./meta_building";
import { GameRoot } from "./root";
import { WireNetwork } from "./systems/wire";
-import { globalConfig } from "../core/config";
-import { CHUNK_OVERLAY_RES } from "./map_chunk_view";
const logger = createLogger("ingame/logic");
-/** @enum {number} */
-export const enumWireEdgeFlag = {
- empty: 0,
- connected: 2,
-};
-
/**
* Typing helper
* @typedef {Array<{
@@ -193,28 +188,72 @@ export class GameLogic {
*
* Computes the flag for a given tile
* @param {object} param0
+ * @param {enumWireVariant} param0.wireVariant
* @param {Vector} param0.tile The tile to check at
* @param {enumDirection} param0.edge The edge to check for
- * @param {number} param0.rotation The local tiles base rotation
*/
- computeWireEdgeStatus({ tile, edge, rotation }) {
+ computeWireEdgeStatus({ wireVariant, tile, edge }) {
const offset = enumDirectionToVector[edge];
- const refTile = tile.add(offset);
- // const angle = enumDirectionToAngle[edge];
+ const targetTile = tile.add(offset);
- // // First, check if this edge can be connected from locally
- // const canConnectLocally = rotation === angle || (rotation + 180) % 360 === angle;
+ // Search for relevant pins
+ const pinEntities = this.root.map.getLayersContentsMultipleXY(targetTile.x, targetTile.y);
- const neighbourStatus = this.getWireEdgeFlag(refTile, edge);
+ // Go over all entities which could have a pin
+ for (let i = 0; i < pinEntities.length; ++i) {
+ const pinEntity = pinEntities[i];
+ const pinComp = pinEntity.components.WiredPins;
+ const staticComp = pinEntity.components.StaticMapEntity;
- if (neighbourStatus === enumWireEdgeFlag.empty) {
- // It's empty, no point in connecting
+ // Skip those who don't have pins
+ if (!pinComp) {
+ continue;
+ }
+
+ // Go over all pins
+ const pins = pinComp.slots;
+ for (let k = 0; k < pinComp.slots.length; ++k) {
+ const pinSlot = pins[k];
+ const pinLocation = staticComp.localTileToWorld(pinSlot.pos);
+ const pinDirection = staticComp.localDirectionToWorld(pinSlot.direction);
+
+ // Check if the pin has the right location
+ if (!pinLocation.equals(targetTile)) {
+ continue;
+ }
+
+ // Check if the pin has the right direction
+ if (pinDirection !== enumInvertedDirections[edge]) {
+ continue;
+ }
+
+ // Found a pin!
+ return true;
+ }
+ }
+
+ // Now check if there's a connectable entity on the wires layer
+ const targetEntity = this.root.map.getTileContent(targetTile, "wires");
+ if (!targetEntity) {
return false;
}
- if (neighbourStatus === enumWireEdgeFlag.connected) {
+ const targetStaticComp = targetEntity.components.StaticMapEntity;
+
+ // Check if its a crossing
+ const wireTunnelComp = targetEntity.components.WireTunnel;
+ if (wireTunnelComp) {
return true;
}
+
+ // Check if its a wire
+ const wiresComp = targetEntity.components.Wire;
+ if (!wiresComp) {
+ return false;
+ }
+
+ // It's connected if its the same variant
+ return wiresComp.variant === wireVariant;
}
/**
@@ -303,85 +342,7 @@ export class GameLogic {
return !!overlayMatrix[localPosition.x + localPosition.y * 3];
}
- /**
- * Gets the flag at the given tile
- * @param {Vector} tile
- * @param {enumDirection} edge
- * @returns {enumWireEdgeFlag}
- */
- getWireEdgeFlag(tile, edge) {
- // Search for relevant pins
- const pinEntities = this.root.map.getLayersContentsMultipleXY(tile.x, tile.y);
-
- // Go over all entities which could have a pin
- for (let i = 0; i < pinEntities.length; ++i) {
- const pinEntity = pinEntities[i];
- const pinComp = pinEntity.components.WiredPins;
- const staticComp = pinEntity.components.StaticMapEntity;
-
- // Skip those who don't have pins
- if (!pinComp) {
- continue;
- }
-
- // Go over all pins
- const pins = pinComp.slots;
- for (let k = 0; k < pinComp.slots.length; ++k) {
- const pinSlot = pins[k];
- const pinLocation = staticComp.localTileToWorld(pinSlot.pos);
- const pinDirection = staticComp.localDirectionToWorld(pinSlot.direction);
-
- // Check if the pin has the right location
- if (!pinLocation.equals(tile)) {
- continue;
- }
-
- // Check if the pin has the right direction
- if (pinDirection !== enumInvertedDirections[edge]) {
- continue;
- }
-
- // Found a pin!
- return enumWireEdgeFlag.connected;
- }
- }
-
- // Now check if there's a connectable wire
- const targetEntity = this.root.map.getTileContent(tile, "wires");
- if (!targetEntity) {
- return enumWireEdgeFlag.empty;
- }
-
- const targetStaticComp = targetEntity.components.StaticMapEntity;
-
- // Check if its a crossing
- const wireTunnelComp = targetEntity.components.WireTunnel;
- if (wireTunnelComp) {
- // Check if the crossing is connected
- if (wireTunnelComp.multipleDirections) {
- return enumWireEdgeFlag.connected;
- } else {
- // Its a coating, check if it matches the direction
- const referenceDirection = targetStaticComp.localDirectionToWorld(enumDirection.top);
- return referenceDirection === edge || enumInvertedDirections[referenceDirection] === edge
- ? enumWireEdgeFlag.connected
- : enumWireEdgeFlag.empty;
- }
- }
-
- // Check if its a wire
- const wiresComp = targetEntity.components.Wire;
- if (!wiresComp) {
- return enumWireEdgeFlag.empty;
- }
-
- // const refAngle = enumDirectionToAngle[edge];
- // const refRotation = targetEntity.components.StaticMapEntity.originalRotation;
- // const canConnectRemotely = refRotation === refAngle || (refRotation + 180) % 360 === refAngle;
-
- // Actually connected
- return enumWireEdgeFlag.connected;
- }
+ g(tile, edge) {}
/**
* Returns the acceptors and ejectors which affect the current tile
diff --git a/src/js/game/meta_building_registry.js b/src/js/game/meta_building_registry.js
index ce3f83cf..17f549de 100644
--- a/src/js/game/meta_building_registry.js
+++ b/src/js/game/meta_building_registry.js
@@ -1,30 +1,34 @@
import { gMetaBuildingRegistry } from "../core/global_registries";
import { createLogger } from "../core/logging";
+import { T } from "../translations";
+import { MetaAnalyzerBuilding } from "./buildings/analyzer";
+import { enumBalancerVariants, MetaBalancerBuilding } from "./buildings/balancer";
import { MetaBeltBuilding } from "./buildings/belt";
+import { MetaComparatorBuilding } from "./buildings/comparator";
+import { MetaConstantSignalBuilding } from "./buildings/constant_signal";
import { enumCutterVariants, MetaCutterBuilding } from "./buildings/cutter";
+import { MetaDisplayBuilding } from "./buildings/display";
+import { MetaFilterBuilding } from "./buildings/filter";
import { MetaHubBuilding } from "./buildings/hub";
+import { MetaLeverBuilding } from "./buildings/lever";
+import { enumLogicGateVariants, MetaLogicGateBuilding } from "./buildings/logic_gate";
import { enumMinerVariants, MetaMinerBuilding } from "./buildings/miner";
import { MetaMixerBuilding } from "./buildings/mixer";
import { enumPainterVariants, MetaPainterBuilding } from "./buildings/painter";
+import { MetaReaderBuilding } from "./buildings/reader";
import { enumRotaterVariants, MetaRotaterBuilding } from "./buildings/rotater";
-import { enumBalancerVariants, MetaBalancerBuilding } from "./buildings/balancer";
import { MetaStackerBuilding } from "./buildings/stacker";
+import { MetaStorageBuilding } from "./buildings/storage";
+import { MetaTransistorBuilding, enumTransistorVariants } from "./buildings/transistor";
import { MetaTrashBuilding } from "./buildings/trash";
import { enumUndergroundBeltVariants, MetaUndergroundBeltBuilding } from "./buildings/underground_belt";
+import { enumVirtualProcessorVariants, MetaVirtualProcessorBuilding } from "./buildings/virtual_processor";
import { MetaWireBuilding } from "./buildings/wire";
+import { MetaWireTunnelBuilding } from "./buildings/wire_tunnel";
import { buildBuildingCodeCache, gBuildingVariants, registerBuildingVariant } from "./building_codes";
-import { defaultBuildingVariant } from "./meta_building";
-import { MetaConstantSignalBuilding } from "./buildings/constant_signal";
-import { MetaLogicGateBuilding, enumLogicGateVariants } from "./buildings/logic_gate";
-import { MetaLeverBuilding } from "./buildings/lever";
-import { MetaFilterBuilding } from "./buildings/filter";
-import { MetaWireTunnelBuilding, enumWireTunnelVariants } from "./buildings/wire_tunnel";
-import { MetaDisplayBuilding } from "./buildings/display";
-import { MetaVirtualProcessorBuilding, enumVirtualProcessorVariants } from "./buildings/virtual_processor";
-import { MetaReaderBuilding } from "./buildings/reader";
-import { MetaStorageBuilding } from "./buildings/storage";
+import { enumWireVariant } from "./components/wire";
import { KEYMAPPINGS } from "./key_action_mapper";
-import { T } from "../translations";
+import { defaultBuildingVariant } from "./meta_building";
const logger = createLogger("building_registry");
@@ -50,6 +54,9 @@ export function initMetaBuildingRegistry() {
gMetaBuildingRegistry.register(MetaDisplayBuilding);
gMetaBuildingRegistry.register(MetaVirtualProcessorBuilding);
gMetaBuildingRegistry.register(MetaReaderBuilding);
+ gMetaBuildingRegistry.register(MetaTransistorBuilding);
+ gMetaBuildingRegistry.register(MetaAnalyzerBuilding);
+ gMetaBuildingRegistry.register(MetaComparatorBuilding);
// Belt
registerBuildingVariant(1, MetaBeltBuilding, defaultBuildingVariant, 0);
@@ -109,6 +116,16 @@ export function initMetaBuildingRegistry() {
registerBuildingVariant(29, MetaWireBuilding, defaultBuildingVariant, 2);
registerBuildingVariant(30, MetaWireBuilding, defaultBuildingVariant, 3);
+ registerBuildingVariant(52, MetaWireBuilding, enumWireVariant.second, 0);
+ registerBuildingVariant(53, MetaWireBuilding, enumWireVariant.second, 1);
+ registerBuildingVariant(54, MetaWireBuilding, enumWireVariant.second, 2);
+ registerBuildingVariant(55, MetaWireBuilding, enumWireVariant.second, 3);
+
+ registerBuildingVariant(56, MetaWireBuilding, enumWireVariant.third, 0);
+ registerBuildingVariant(57, MetaWireBuilding, enumWireVariant.third, 1);
+ registerBuildingVariant(58, MetaWireBuilding, enumWireVariant.third, 2);
+ registerBuildingVariant(59, MetaWireBuilding, enumWireVariant.third, 3);
+
// Constant signal
registerBuildingVariant(31, MetaConstantSignalBuilding);
@@ -117,7 +134,10 @@ export function initMetaBuildingRegistry() {
registerBuildingVariant(34, MetaLogicGateBuilding, enumLogicGateVariants.not);
registerBuildingVariant(35, MetaLogicGateBuilding, enumLogicGateVariants.xor);
registerBuildingVariant(36, MetaLogicGateBuilding, enumLogicGateVariants.or);
- registerBuildingVariant(38, MetaLogicGateBuilding, enumLogicGateVariants.transistor);
+
+ // Transistor
+ registerBuildingVariant(38, MetaTransistorBuilding, defaultBuildingVariant);
+ registerBuildingVariant(60, MetaTransistorBuilding, enumTransistorVariants.mirrored);
// Lever
registerBuildingVariant(33, MetaLeverBuilding);
@@ -127,20 +147,21 @@ export function initMetaBuildingRegistry() {
// Wire tunnel
registerBuildingVariant(39, MetaWireTunnelBuilding);
- registerBuildingVariant(41, MetaWireTunnelBuilding, enumWireTunnelVariants.coating);
// Display
registerBuildingVariant(40, MetaDisplayBuilding);
// Virtual Processor
registerBuildingVariant(42, MetaVirtualProcessorBuilding);
- registerBuildingVariant(43, MetaVirtualProcessorBuilding, enumVirtualProcessorVariants.analyzer);
registerBuildingVariant(44, MetaVirtualProcessorBuilding, enumVirtualProcessorVariants.rotater);
registerBuildingVariant(45, MetaVirtualProcessorBuilding, enumVirtualProcessorVariants.unstacker);
- registerBuildingVariant(46, MetaVirtualProcessorBuilding, enumVirtualProcessorVariants.shapecompare);
registerBuildingVariant(50, MetaVirtualProcessorBuilding, enumVirtualProcessorVariants.stacker);
registerBuildingVariant(51, MetaVirtualProcessorBuilding, enumVirtualProcessorVariants.painter);
+ // Analyzer
+ registerBuildingVariant(46, MetaComparatorBuilding);
+ registerBuildingVariant(43, MetaAnalyzerBuilding);
+
// Reader
registerBuildingVariant(49, MetaReaderBuilding);
diff --git a/src/js/game/systems/logic_gate.js b/src/js/game/systems/logic_gate.js
index cd2d7dfb..2de11f59 100644
--- a/src/js/game/systems/logic_gate.js
+++ b/src/js/game/systems/logic_gate.js
@@ -3,11 +3,9 @@ import { enumColors } from "../colors";
import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate";
import { enumPinSlotType } from "../components/wired_pins";
import { GameSystemWithFilter } from "../game_system_with_filter";
-import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON, isTruthyItem, BooleanItem } from "../items/boolean_item";
-import { COLOR_ITEM_SINGLETONS, ColorItem } from "../items/color_item";
+import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON, isTruthyItem } from "../items/boolean_item";
+import { COLOR_ITEM_SINGLETONS } from "../items/color_item";
import { ShapeDefinition } from "../shape_definition";
-import { ShapeItem } from "../items/shape_item";
-import { enumInvertedDirections } from "../../core/vector";
export class LogicGateSystem extends GameSystemWithFilter {
constructor(root) {
@@ -24,7 +22,7 @@ export class LogicGateSystem extends GameSystemWithFilter {
[enumLogicGateType.analyzer]: this.compute_ANALYZE.bind(this),
[enumLogicGateType.cutter]: this.compute_CUT.bind(this),
[enumLogicGateType.unstacker]: this.compute_UNSTACK.bind(this),
- [enumLogicGateType.shapecompare]: this.compute_SHAPECOMPARE.bind(this),
+ [enumLogicGateType.compare]: this.compute_COMPARE.bind(this),
[enumLogicGateType.stacker]: this.compute_STACKER.bind(this),
[enumLogicGateType.painter]: this.compute_PAINTER.bind(this),
};
@@ -318,7 +316,7 @@ export class LogicGateSystem extends GameSystemWithFilter {
* @param {Array} parameters
* @returns {BaseItem}
*/
- compute_SHAPECOMPARE(parameters) {
+ compute_COMPARE(parameters) {
const itemA = parameters[0];
const itemB = parameters[1];
diff --git a/src/js/game/systems/wire.js b/src/js/game/systems/wire.js
index 4168edc4..4d0e6de4 100644
--- a/src/js/game/systems/wire.js
+++ b/src/js/game/systems/wire.js
@@ -3,6 +3,7 @@ import { gMetaBuildingRegistry } from "../../core/global_registries";
import { Loader } from "../../core/loader";
import { createLogger } from "../../core/logging";
import { Rectangle } from "../../core/rectangle";
+import { AtlasSprite } from "../../core/sprites";
import { StaleAreaDetector } from "../../core/stale_area_detector";
import { fastArrayDeleteValueIfContained } from "../../core/utils";
import {
@@ -13,16 +14,15 @@ import {
Vector,
} from "../../core/vector";
import { BaseItem } from "../base_item";
-import { isTrueItem } from "../items/boolean_item";
import { arrayWireRotationVariantToType, MetaWireBuilding } from "../buildings/wire";
import { getCodeFromBuildingData } from "../building_codes";
-import { enumWireType, WireComponent } from "../components/wire";
+import { enumWireType, enumWireVariant, WireComponent } from "../components/wire";
import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins";
import { WireTunnelComponent } from "../components/wire_tunnel";
import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter";
+import { isTruthyItem } from "../items/boolean_item";
import { MapChunkView } from "../map_chunk_view";
-import { defaultBuildingVariant } from "../meta_building";
const logger = createLogger("wires");
@@ -93,32 +93,22 @@ export class WireSystem extends GameSystemWithFilter {
constructor(root) {
super(root, [WireComponent]);
- this.wireSprites = {
- regular: {
- [enumWireType.regular]: Loader.getSprite("sprites/wires/sets/regular_forward.png"),
- [enumWireType.turn]: Loader.getSprite("sprites/wires/sets/regular_turn.png"),
- [enumWireType.split]: Loader.getSprite("sprites/wires/sets/regular_split.png"),
- [enumWireType.cross]: Loader.getSprite("sprites/wires/sets/regular_cross.png"),
- },
- conflict: {
- [enumWireType.regular]: Loader.getSprite("sprites/wires/sets/conflict_forward.png"),
- [enumWireType.turn]: Loader.getSprite("sprites/wires/sets/conflict_turn.png"),
- [enumWireType.split]: Loader.getSprite("sprites/wires/sets/conflict_split.png"),
- [enumWireType.cross]: Loader.getSprite("sprites/wires/sets/conflict_cross.png"),
- },
- shape: {
- [enumWireType.regular]: Loader.getSprite("sprites/wires/sets/shape_forward.png"),
- [enumWireType.turn]: Loader.getSprite("sprites/wires/sets/shape_turn.png"),
- [enumWireType.split]: Loader.getSprite("sprites/wires/sets/shape_split.png"),
- [enumWireType.cross]: Loader.getSprite("sprites/wires/sets/shape_cross.png"),
- },
- color: {
- [enumWireType.regular]: Loader.getSprite("sprites/wires/sets/color_forward.png"),
- [enumWireType.turn]: Loader.getSprite("sprites/wires/sets/color_turn.png"),
- [enumWireType.split]: Loader.getSprite("sprites/wires/sets/color_split.png"),
- [enumWireType.cross]: Loader.getSprite("sprites/wires/sets/color_cross.png"),
- },
- };
+ /**
+ * @type {Object>}
+ */
+ this.wireSprites = {};
+
+ const variants = ["conflict", ...Object.keys(enumWireVariant)];
+ for (let i = 0; i < variants.length; ++i) {
+ const wireVariant = variants[i];
+ const sprites = {};
+ for (const wireType in enumWireType) {
+ sprites[wireType] = Loader.getSprite(
+ "sprites/wires/sets/" + wireVariant + "_" + wireType + ".png"
+ );
+ }
+ this.wireSprites[wireVariant] = sprites;
+ }
this.root.signals.entityDestroyed.add(this.queuePlacementUpdate, this);
this.root.signals.entityAdded.add(this.queuePlacementUpdate, this);
@@ -230,6 +220,13 @@ export class WireSystem extends GameSystemWithFilter {
},
];
+ /**
+ * Once we occur a wire, we store its variant so we don't connect to
+ * mismatching ones
+ * @type {enumWireVariant}
+ */
+ let variantMask = null;
+
while (entitiesToVisit.length > 0) {
const nextData = entitiesToVisit.pop();
const nextEntity = nextData.entity;
@@ -257,13 +254,18 @@ export class WireSystem extends GameSystemWithFilter {
);
if (!wireComp.linkedNetwork) {
- // This one is new! :D
- VERBOSE_WIRES && logger.log(" Visited new wire:", staticComp.origin.toString());
- wireComp.linkedNetwork = currentNetwork;
- currentNetwork.wires.push(nextEntity);
+ if (variantMask && wireComp.variant !== variantMask) {
+ // Mismatching variant
+ } else {
+ // This one is new! :D
+ VERBOSE_WIRES && logger.log(" Visited new wire:", staticComp.origin.toString());
+ wireComp.linkedNetwork = currentNetwork;
+ currentNetwork.wires.push(nextEntity);
- newSearchDirections = arrayAllDirections;
- newSearchTile = nextEntity.components.StaticMapEntity.origin;
+ newSearchDirections = arrayAllDirections;
+ newSearchTile = nextEntity.components.StaticMapEntity.origin;
+ variantMask = wireComp.variant;
+ }
}
}
@@ -319,7 +321,8 @@ export class WireSystem extends GameSystemWithFilter {
const newTargets = this.findSurroundingWireTargets(
newSearchTile,
newSearchDirections,
- currentNetwork
+ currentNetwork,
+ variantMask
);
VERBOSE_WIRES && logger.log(" Found", newTargets, "new targets to visit!");
@@ -361,13 +364,21 @@ export class WireSystem extends GameSystemWithFilter {
* @param {Vector} initialTile
* @param {Array} directions
* @param {WireNetwork} network
+ * @param {enumWireVariant=} variantMask Only accept connections to this mask
* @returns {Array}
*/
- findSurroundingWireTargets(initialTile, directions, network) {
+ findSurroundingWireTargets(initialTile, directions, network, variantMask = null) {
let result = [];
VERBOSE_WIRES &&
- logger.log(" Searching for new targets at", initialTile.toString(), "and d=", directions);
+ logger.log(
+ " Searching for new targets at",
+ initialTile.toString(),
+ "and d=",
+ directions,
+ "with mask=",
+ variantMask
+ );
// Go over all directions we should search for
for (let i = 0; i < directions.length; ++i) {
@@ -399,7 +410,11 @@ export class WireSystem extends GameSystemWithFilter {
const wireComp = entity.components.Wire;
// Check for wire
- if (wireComp && !wireComp.linkedNetwork) {
+ if (
+ wireComp &&
+ !wireComp.linkedNetwork &&
+ (!variantMask || wireComp.variant === variantMask)
+ ) {
// Wires accept connections from everywhere
result.push({
entity,
@@ -449,17 +464,6 @@ export class WireSystem extends GameSystemWithFilter {
const staticComp = entity.components.StaticMapEntity;
- if (
- !tunnelComp.multipleDirections &&
- !(
- direction === staticComp.localDirectionToWorld(enumDirection.top) ||
- direction === staticComp.localDirectionToWorld(enumDirection.bottom)
- )
- ) {
- // It's a coating, and it doesn't connect here
- continue;
- }
-
// Compute where this tunnel connects to
const forwardedTile = staticComp.origin.add(offset);
VERBOSE_WIRES &&
@@ -570,8 +574,8 @@ export class WireSystem extends GameSystemWithFilter {
if (!wireComp.linkedNetwork) {
// There is no network, it's empty
return {
- spriteSet: this.wireSprites.regular,
- opacity: 0.3,
+ spriteSet: this.wireSprites[wireComp.variant],
+ opacity: 0.5,
};
}
@@ -584,38 +588,9 @@ export class WireSystem extends GameSystemWithFilter {
};
}
- const value = network.currentValue;
- if (!value) {
- // There is no value stored
- return {
- spriteSet: this.wireSprites.regular,
- opacity: 0.3,
- };
- }
-
- const valueType = value.getItemType();
- if (valueType === "shape") {
- return {
- spriteSet: this.wireSprites.shape,
- opacity: 1,
- };
- } else if (valueType === "color") {
- return {
- spriteSet: this.wireSprites.color,
- opacity: 1,
- };
- } else if (valueType === "boolean") {
- return {
- spriteSet: this.wireSprites.regular,
- opacity: isTrueItem(value) ? 1 : 0.5,
- };
- } else {
- assertAlways(false, "Unknown item type: " + valueType);
- }
-
return {
- spriteSet: this.wireSprites.regular,
- opacity: 1,
+ spriteSet: this.wireSprites[wireComp.variant],
+ opacity: isTruthyItem(network.currentValue) ? 1 : 0.5,
};
}
@@ -641,9 +616,10 @@ export class WireSystem extends GameSystemWithFilter {
const staticComp = entity.components.StaticMapEntity;
parameters.context.globalAlpha = opacity;
staticComp.drawSpriteOnBoundsClipped(parameters, sprite, 0);
- parameters.context.globalAlpha = 1;
+ // DEBUG Rendering
if (G_IS_DEV && globalConfig.debug.renderWireRotations) {
+ parameters.context.globalAlpha = 1;
parameters.context.fillStyle = "red";
parameters.context.font = "5px Tahoma";
parameters.context.fillText(
@@ -691,6 +667,8 @@ export class WireSystem extends GameSystemWithFilter {
}
}
}
+
+ parameters.context.globalAlpha = 1;
}
/**
@@ -746,6 +724,8 @@ export class WireSystem extends GameSystemWithFilter {
continue;
}
+ const variant = targetStaticComp.getVariant();
+
const {
rotation,
rotationVariant,
@@ -753,7 +733,7 @@ export class WireSystem extends GameSystemWithFilter {
root: this.root,
tile: new Vector(x, y),
rotation: targetStaticComp.originalRotation,
- variant: defaultBuildingVariant,
+ variant,
layer: targetEntity.layer,
});
@@ -763,14 +743,10 @@ export class WireSystem extends GameSystemWithFilter {
if (targetStaticComp.rotation !== rotation || newType !== targetWireComp.type) {
// Change stuff
targetStaticComp.rotation = rotation;
- metaWire.updateVariants(targetEntity, rotationVariant, defaultBuildingVariant);
+ metaWire.updateVariants(targetEntity, rotationVariant, variant);
// Update code as well
- targetStaticComp.code = getCodeFromBuildingData(
- metaWire,
- defaultBuildingVariant,
- rotationVariant
- );
+ targetStaticComp.code = getCodeFromBuildingData(metaWire, variant, rotationVariant);
// Make sure the chunks know about the update
this.root.signals.entityChanged.dispatch(targetEntity);
diff --git a/translations/base-en.yaml b/translations/base-en.yaml
index edec6d28..7e828293 100644
--- a/translations/base-en.yaml
+++ b/translations/base-en.yaml
@@ -566,16 +566,18 @@ buildings:
default:
name: &wire Wire
description: &wire_desc Allows to connect logical components and can transfer items, colors or boolean signals.
+ second:
+ name: Wire (Type 2)
+ description: &wire_desc_second Allows to connect logical components and can transfer items, colors or boolean signals. Different colored wires do not connect.
+ third:
+ name: Wire (Type 3)
+ description: *wire_desc_second
wire_tunnel:
default:
name: &wire_tunnel Wire Tunnel
description: Allows to cross two wires without connecting them.
- coating:
- name: Wire Insulation
- description: Allows to pass through signals without connecting to other wires on the sides.
-
constant_signal:
default:
name: &constant_signal Constant Signal
@@ -589,20 +591,25 @@ buildings:
logic_gate:
default:
name: &logic_gate AND Gate
- description: Emits a truthy boolean signal if both inputs are truthy.
+ description: Emits a boolean "1" if both inputs are truthy.
not:
- name: NOT
- description: Inverts the given signal.
+ name: NOT Gate
+ description: Emits a boolean "1" if the input is not truthy.
xor:
- name: XOR
- description: Emits a truthy signal if one of the inputs is truthy, but not both.
+ name: XOR Gate
+ description: Emits a boolean "1" if one of the inputs is truthy, but not both.
or:
- name: OR
- description: Emits a truthy signal if one of the inputs is truthy.
+ name: OR Gate
+ description: Emits a boolean "1" if one of the inputs is truthy.
- transistor:
- name: Gate
- description: Only forwards the bottom input if the left input is true.
+ transistor:
+ default:
+ name: &transistor Gate
+ description: &transistor_desc Forwards the bottom input if the side input is truthy (a shape, color or "1").
+
+ mirrored:
+ name: *transistor
+ description: *transistor_desc
filter:
default:
@@ -619,14 +626,20 @@ buildings:
name: &reader Belt Reader
description: Allows to measure belt throughput. Outputs the last read item on the wires layer (once unlocked).
+ analyzer:
+ default:
+ name: &analyzer Shape Analyzer
+ description: Analyzes the top right quadrant of the lowest layer of the shape and returns its shape and color.
+
+ comparator:
+ default:
+ name: &comparator Compare
+ description: Returns boolean "1" if both items are exactly equal. Can compare shapes, items and booleans.
+
virtual_processor:
default:
name: &virtual_processor Virtual Cutter
- description: Virtually cuts the shape input from top to bottom and returns both halfs.
-
- analyzer:
- name: Shape Analyzer
- description: Analyzes the top right quadrant of the lowest layer of the shape and returns its shape and color
+ description: Computes
rotater:
name: Virtual Rotater
@@ -636,10 +649,6 @@ buildings:
name: Virtual Unstacker
description: Returns the topmost layer to the right, and the remaining ones on the left.
- shapecompare:
- name: Compare
- description: Returns true if both items are exactly equal. Can compare shapes, items and booleans.
-
stacker:
name: Virtual Stacker
description: Virtually stacks the right shape onto the left.
@@ -1040,6 +1049,9 @@ keybindings:
display: *display
reader: *reader
virtual_processor: *virtual_processor
+ transistor: *transistor
+ analyzer: *analyzer
+ comparator: *comparator
# ---
pipette: Pipette