diff --git a/README.md b/README.md
index 6a0bc39d..e430ce9a 100644
--- a/README.md
+++ b/README.md
@@ -92,6 +92,28 @@ This project is based on ES5. Some ES2015 features are used but most of them are
4. Add the system in `src/js/game/game_system_manager.js` (To `this.systems` and also call `add` in the `internalInitSystems()` method)
5. If your system should draw stuff, this is a bit more complicated. Have a look at existing systems on how they do it.
+#### Checklist for a new building / testing it
+
+This is a quick checklist, if a new building is added this points should be fulfilled:
+
+2. The translation for all variants is done and finalized
+3. The artwork (regular sprite) is finalized
+4. The blueprint sprite has been generated and is up to date
+5. The building has been added to the appropriate toolbar
+6. The building has a keybinding which makes sense
+7. The building has a reward assigned and is unlocked at a meaningful point
+8. The reward for the building has a proper translation
+9. The reward for the building has a proper image
+10. The building has a proper tutorial image assigned
+11. The buliding has a proper toolbar icon
+12. The reward requires a proper shape
+13. The building has a proper silhouette color
+14. The building has a proper matrix for being rendered on the minimap
+15. The building has proper statistics in the dialog
+16. The building properly contributes to the shapes produced analytics
+17. The building is properly persisted in the savegame
+18. The building is explained properly, ideally via an interactive tutorial
+
### Assets
For most assets I use Adobe Photoshop, you can find them in `assets/`.
diff --git a/gulp/convert_atlas.js b/gulp/convert_atlas.js
deleted file mode 100644
index 8e0ba990..00000000
--- a/gulp/convert_atlas.js
+++ /dev/null
@@ -1,96 +0,0 @@
-// Converts the atlas description to a JSON file
-
-String.prototype.replaceAll = function (search, replacement) {
- var target = this;
- return target.split(search).join(replacement);
-};
-
-const fs = require("fs");
-const path = require("path");
-
-const folder = path.join(__dirname, "res_built", "atlas");
-const files = fs.readdirSync(folder);
-
-const metadata = [];
-
-files.forEach(filename => {
- if (filename.endsWith(".atlas")) {
- // Read content
-
- const content = fs.readFileSync(path.join(folder, filename), "ascii");
-
- const lines = content.replaceAll("\r", "").replaceAll("\t", "").split("\n");
-
- const readLine = () => lines.splice(0, 1)[0];
- const readValue = () => readLine().replaceAll(" ", "").split(":")[1];
- const readVector = () =>
- readValue()
- .split(",")
- .map(d => parseInt(d, 10));
-
- let maxAtlas = 100;
-
- atlasLoop: while (maxAtlas-- > 0 && lines.length >= 7) {
- const result = {
- entries: [],
- };
-
- // Extract header
- const header_fileStart = readLine();
- const header_fileName = readLine();
- const header_size = readVector();
- const header_format = readLine();
- const header_filter = readLine();
- const header_repeat = readLine();
- const baseAtlasName = header_fileName.replace(".png", "");
-
- // Store size
- result.size = header_size;
-
- lineLoop: while (lines.length >= 7) {
- const entryResult = {};
-
- const nextLine = lines[0];
- if (nextLine.length === 0) {
- break;
- }
-
- const entry_fileName = readLine() + ".png";
-
- const entry_rotate = readValue();
- const entry_xy = readVector();
- const entry_size = readVector();
- const entry_orig = readVector();
- const entry_offset = readVector();
- const entry_index = readValue();
-
- entryResult.filename = entry_fileName;
- entryResult.xy = entry_xy;
- entryResult.size = entry_size;
- // entryResult.offset = entry_offset;
-
- entryResult.origSize = entry_orig;
-
- let offset = [0, 0];
-
- // GDX Atlas packer uses 1 - y coordinates. This sucks, and we have to convert it
- offset[0] = entry_offset[0];
- offset[1] = entry_orig[1] - entry_offset[1] - entry_size[1];
-
- entryResult.offset = offset;
-
- result.entries.push(entryResult);
- }
-
- console.log("[Atlas]", "'" + baseAtlasName + "'", "has", result.entries.length, "entries");
- // fs.writeFileSync(path.join(folder, baseAtlasName + ".gen.json"), JSON.stringify(result));
-
- metadata.push({
- filename: baseAtlasName + ".png",
- entries: result,
- });
- }
- }
-});
-
-fs.writeFileSync(path.join(folder, "meta.gen.json"), JSON.stringify(metadata, null, 4));
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..311df8a8 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/mixer.png b/res/ui/building_icons/mixer.png
index 1dd85b9b..6ce15dbb 100644
Binary files a/res/ui/building_icons/mixer.png and b/res/ui/building_icons/mixer.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/constant_signal.png b/res/ui/building_tutorials/constant_signal.png
index 6db1ebf4..70de0a21 100644
Binary files a/res/ui/building_tutorials/constant_signal.png and b/res/ui/building_tutorials/constant_signal.png differ
diff --git a/res/ui/building_tutorials/cutter-quad.png b/res/ui/building_tutorials/cutter-quad.png
index 22137353..696a05be 100644
Binary files a/res/ui/building_tutorials/cutter-quad.png and b/res/ui/building_tutorials/cutter-quad.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/painter-mirrored.png b/res/ui/building_tutorials/painter-mirrored.png
new file mode 100644
index 00000000..63cc6683
Binary files /dev/null and b/res/ui/building_tutorials/painter-mirrored.png differ
diff --git a/res/ui/building_tutorials/painter-quad.png b/res/ui/building_tutorials/painter-quad.png
index 57536440..2d52a01b 100644
Binary files a/res/ui/building_tutorials/painter-quad.png and b/res/ui/building_tutorials/painter-quad.png differ
diff --git a/res/ui/building_tutorials/painter.png b/res/ui/building_tutorials/painter.png
index 8791082f..bb1147d5 100644
Binary files a/res/ui/building_tutorials/painter.png and b/res/ui/building_tutorials/painter.png differ
diff --git a/res/ui/building_tutorials/stacker.png b/res/ui/building_tutorials/stacker.png
index 55232a2c..ef11af8d 100644
Binary files a/res/ui/building_tutorials/stacker.png and b/res/ui/building_tutorials/stacker.png differ
diff --git a/res/ui/building_tutorials/storage.png b/res/ui/building_tutorials/storage.png
index 4bdfda9b..b5d21433 100644
Binary files a/res/ui/building_tutorials/storage.png and b/res/ui/building_tutorials/storage.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..9f2b462c
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..a5f01acf 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":381,"y":1767,"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":503,"y":1762,"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":871,"y":1811,"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":858,"y":1257,"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":945,"y":1407,"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":980,"y":1257,"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":991,"y":1557,"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":1067,"y":1407,"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":1102,"y":1167,"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":1224,"y":1181,"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":625,"y":1758,"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":747,"y":1728,"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":823,"y":1511,"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":869,"y":1661,"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":592,"y":1912,"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":1488,"y":1189,"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":1896,"y":1255,"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":1760,"y":1335,"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":1896,"y":1391,"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":1331,"y":1337,"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":1467,"y":1461,"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":1331,"y":1473,"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":1189,"y":1479,"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":1603,"y":1462,"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":1624,"y":1190,"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":1488,"y":1325,"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":1760,"y":1199,"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":1624,"y":1326,"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":1467,"y":1597,"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":1325,"y":1609,"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":1739,"y":1607,"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":1597,"y":1734,"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":1875,"y":1663,"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":1733,"y":1743,"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":1115,"y":1879,"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":1251,"y":1879,"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":1387,"y":1879,"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":1523,"y":1879,"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":1739,"y":1471,"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":1603,"y":1598,"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":1461,"y":1733,"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":1875,"y":1527,"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":300,"y":605,"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":710,"y":1247,"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":416,"y":1092,"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":561,"y":1250,"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":416,"y":1236,"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":6,"y":898,"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":1659,"y":1879,"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":1795,"y":1879,"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":993,"y":1869,"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":861,"y":860,"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":450,"y":810,"w":105,"h":127},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":105,"h":127},
@@ -410,15 +426,15 @@
},
"sprites/blueprints/cutter-quad.png":
{
- "frame": {"x":4,"y":559,"w":548,"h":144},
+ "frame": {"x":6,"y":306,"w":532,"h":144},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":17,"y":0,"w":548,"h":144},
+ "spriteSourceSize": {"x":24,"y":0,"w":532,"h":144},
"sourceSize": {"w":576,"h":144}
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":4,"y":1589,"w":256,"h":144},
+ "frame": {"x":1393,"y":456,"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":993,"y":1707,"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":1714,"y":156,"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":411,"y":1522,"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":1917,"y":515,"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":861,"y":999,"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":561,"y":860,"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":1071,"y":890,"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":419,"y":943,"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":1898,"y":1106,"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":1126,"y":441,"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":6,"y":605,"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":1420,"y":6,"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":6,"y":6,"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":1714,"y":6,"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":262,"y":1444,"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":711,"y":1097,"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":561,"y":1100,"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":6,"y":1345,"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":1693,"y":306,"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":1655,"y":605,"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":155,"y":1527,"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":156,"y":1257,"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":300,"y":755,"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":448,"y":1917,"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":517,"y":1522,"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":439,"y":1644,"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":584,"y":1640,"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":1911,"y":665,"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":134,"y":1784,"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":1911,"y":815,"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":566,"y":710,"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":6,"y":1198,"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":1904,"y":965,"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":269,"y":905,"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":1356,"y":1047,"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":1503,"y":1047,"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":413,"y":1380,"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":1648,"y":1048,"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":1100,"y":591,"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":592,"y":1912,"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":1467,"y":1597,"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":381,"y":1767,"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":6,"y":1495,"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":156,"y":1048,"w":104,"h":127},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":20,"y":0,"w":104,"h":127},
@@ -810,15 +794,15 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":1124,"y":4,"w":548,"h":143},
+ "frame": {"x":6,"y":456,"w":524,"h":143},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":17,"y":0,"w":548,"h":143},
+ "spriteSourceSize": {"x":25,"y":0,"w":524,"h":143},
"sourceSize": {"w":576,"h":144}
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":258,"y":1307,"w":256,"h":143},
+ "frame": {"x":1655,"y":456,"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":1224,"y":1040,"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":1420,"y":306,"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":572,"y":6,"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":335,"y":1647,"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":6,"y":1784,"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":860,"y":1128,"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":264,"y":1295,"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":1071,"y":1029,"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":1346,"y":1189,"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":1189,"y":1331,"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":568,"y":561,"w":260,"h":143},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":14,"y":0,"w":260,"h":143},
@@ -922,15 +898,15 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":4,"y":709,"w":288,"h":286},
+ "frame": {"x":1126,"y":6,"w":288,"h":279},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":288,"h":286},
+ "spriteSourceSize": {"x":0,"y":0,"w":288,"h":279},
"sourceSize": {"w":288,"h":288}
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":1126,"y":303,"w":288,"h":144},
+ "frame": {"x":1420,"y":156,"w":288,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":288,"h":144},
@@ -938,15 +914,15 @@
},
"sprites/buildings/painter-quad.png":
{
- "frame": {"x":558,"y":154,"w":560,"h":144},
+ "frame": {"x":6,"y":156,"w":537,"h":144},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":5,"y":0,"w":560,"h":144},
+ "spriteSourceSize": {"x":13,"y":0,"w":537,"h":144},
"sourceSize": {"w":576,"h":144}
},
"sprites/buildings/painter.png":
{
- "frame": {"x":852,"y":454,"w":288,"h":144},
+ "frame": {"x":1126,"y":291,"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":6,"y":1634,"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":1357,"y":898,"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":1504,"y":898,"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":1651,"y":899,"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":834,"y":561,"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":1362,"y":606,"w":245,"h":286},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":22,"y":0,"w":248,"h":288},
+ "spriteSourceSize": {"x":22,"y":2,"w":245,"h":286},
"sourceSize": {"w":288,"h":288}
},
+"sprites/buildings/transistor-mirrored.png":
+{
+ "frame": {"x":1793,"y":1049,"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":1798,"y":899,"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":6,"y":1048,"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":305,"y":1918,"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":561,"y":1394,"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":661,"y":1511,"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":704,"y":1394,"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":1226,"y":740,"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":258,"y":1768,"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":1221,"y":890,"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":266,"y":1055,"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":711,"y":860,"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":728,"y":1908,"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":1988,"y":203,"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":1988,"y":258,"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":1016,"y":710,"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":1016,"y":765,"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":1016,"y":820,"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":1011,"y":875,"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":1011,"y":930,"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":1011,"y":985,"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":549,"y":156,"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":549,"y":174,"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":1011,"y":1040,"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":450,"y":605,"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":1960,"y":313,"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":156,"y":1181,"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":1613,"y":606,"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":1917,"y":456,"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":728,"y":1628,"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":261,"y":1594,"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":6,"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":544,"y":306,"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":1009,"y":1148,"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":305,"y":1594,"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":199,"y":1934,"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":199,"y":1987,"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":252,"y":1934,"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":252,"y":1987,"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":358,"y":1594,"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":155,"y":1407,"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":1960,"y":403,"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":450,"y":692,"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":728,"y":1678,"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":516,"y":756,"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":6,"y":1934,"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":716,"y":710,"w":144,"h":144},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":144,"h":144},
@@ -1450,95 +1354,95 @@
},
"sprites/wires/sets/conflict_forward.png":
{
- "frame": {"x":2026,"y":416,"w":18,"h":144},
+ "frame": {"x":536,"y":456,"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":711,"y":1006,"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":108,"y":1934,"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":866,"y":710,"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":2008,"y":53,"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":561,"y":1009,"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":153,"y":1677,"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":1076,"y":740,"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":534,"y":606,"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":266,"y":1204,"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":244,"y":1677,"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/wires_preview.png":
{
- "frame": {"x":1360,"y":1996,"w":48,"h":48},
+ "frame": {"x":1011,"y":1094,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1551,6 +1455,6 @@
"format": "RGBA8888",
"size": {"w":2048,"h":2048},
"scale": "0.75",
- "smartupdate": "$TexturePacker:SmartUpdate:5429cdf3b92834776437a91974e89d3c:fa61fb225cd312db144ce6a38d97871b:908b89f5ca8ff73e331a35a3b14d0604$"
+ "smartupdate": "$TexturePacker:SmartUpdate:c61d9c7c8f387e344954d344de26c19e:20296b3e09d5b363b1e55eee3b673411:908b89f5ca8ff73e331a35a3b14d0604$"
}
}
diff --git a/res_built/atlas/atlas0_hq.png b/res_built/atlas/atlas0_hq.png
index 63dbe6ea..4fd522ec 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..b3ebc4c1 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":978,"y":383,"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":531,"y":422,"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":411,"y":518,"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":289,"y":565,"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":234,"y":596,"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":155,"y":611,"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":102,"y":647,"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":52,"y":675,"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":6,"y":679,"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":678,"y":375,"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":109,"y":593,"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":56,"y":621,"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":6,"y":625,"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":365,"y":518,"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":628,"y":275,"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":678,"y":275,"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":578,"y":327,"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":482,"y":372,"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":381,"y":418,"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":431,"y":418,"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":265,"y":496,"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":189,"y":511,"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":134,"y":543,"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":59,"y":571,"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":728,"y":275,"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":778,"y":275,"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":828,"y":318,"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":628,"y":325,"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":6,"y":575,"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":678,"y":325,"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":928,"y":383,"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":628,"y":375,"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":577,"y":377,"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":481,"y":422,"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":381,"y":468,"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":431,"y":468,"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":481,"y":472,"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":315,"y":515,"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":728,"y":325,"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":778,"y":325,"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":828,"y":368,"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":878,"y":368,"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":96,"y":222,"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":188,"y":251,"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":632,"y":222,"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":96,"y":276,"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":685,"y":222,"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":588,"y":114,"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":239,"y":546,"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":184,"y":561,"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":627,"y":425,"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":389,"y":270,"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":239,"y":305,"w":36,"h":43},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":36,"h":43},
@@ -410,15 +426,15 @@
},
"sprites/blueprints/cutter-quad.png":
{
- "frame": {"x":4,"y":58,"w":184,"h":48},
+ "frame": {"x":6,"y":114,"w":179,"h":48},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":5,"y":0,"w":184,"h":48},
+ "spriteSourceSize": {"x":7,"y":0,"w":179,"h":48},
"sourceSize": {"w":192,"h":48}
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":863,"y":58,"w":87,"h":48},
+ "frame": {"x":485,"y":160,"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":947,"y":331,"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":594,"y":60,"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":441,"y":340,"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":232,"y":403,"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":280,"y":404,"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":6,"y":324,"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":281,"y":353,"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":212,"y":457,"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":136,"y":489,"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":390,"y":108,"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":390,"y":6,"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":594,"y":6,"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":6,"y":6,"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":696,"y":6,"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":681,"y":114,"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":735,"y":114,"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":789,"y":114,"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":843,"y":114,"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":691,"y":60,"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":282,"y":197,"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":242,"y":251,"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":537,"y":214,"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":897,"y":114,"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":387,"y":321,"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":280,"y":452,"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":143,"y":410,"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":84,"y":438,"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":974,"y":72,"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":334,"y":407,"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":973,"y":126,"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":578,"y":168,"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":483,"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/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":951,"y":180,"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":389,"y":216,"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":578,"y":222,"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":738,"y":222,"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":483,"y":268,"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":791,"y":222,"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":390,"y":162,"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":628,"y":275,"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":6,"y":575,"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":978,"y":383,"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":178,"y":359,"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":239,"y":354,"w":36,"h":43},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":6,"y":0,"w":36,"h":43},
@@ -810,15 +794,15 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":194,"y":58,"w":184,"h":48},
+ "frame": {"x":6,"y":168,"w":177,"h":48},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":5,"y":0,"w":184,"h":48},
+ "spriteSourceSize": {"x":7,"y":0,"w":177,"h":48},
"sourceSize": {"w":192,"h":48}
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":675,"y":112,"w":87,"h":48},
+ "frame": {"x":189,"y":197,"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":578,"y":275,"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":492,"y":106,"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":200,"y":6,"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":443,"y":270,"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":902,"y":168,"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":383,"y":370,"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":282,"y":299,"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":482,"y":321,"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":81,"y":517,"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":6,"y":521,"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":786,"y":60,"w":88,"h":48},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":4,"y":0,"w":88,"h":48},
@@ -922,15 +898,15 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":106,"y":112,"w":96,"h":96},
+ "frame": {"x":492,"y":6,"w":96,"h":94},
"rotated": false,
- "trimmed": false,
- "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
+ "trimmed": true,
+ "spriteSourceSize": {"x":0,"y":0,"w":96,"h":94},
"sourceSize": {"w":96,"h":96}
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":4,"y":214,"w":96,"h":48},
+ "frame": {"x":798,"y":6,"w":96,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":48},
@@ -938,15 +914,15 @@
},
"sprites/buildings/painter-quad.png":
{
- "frame": {"x":198,"y":4,"w":188,"h":48},
+ "frame": {"x":6,"y":60,"w":181,"h":48},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":1,"y":0,"w":188,"h":48},
+ "spriteSourceSize": {"x":3,"y":0,"w":181,"h":48},
"sourceSize": {"w":192,"h":48}
},
"sprites/buildings/painter.png":
{
- "frame": {"x":106,"y":214,"w":96,"h":48},
+ "frame": {"x":900,"y":6,"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":185,"y":305,"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":95,"y":330,"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":6,"y":378,"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":89,"y":384,"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":880,"y":60,"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":6,"y":222,"w":84,"h":96},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":6,"y":0,"w":85,"h":96},
+ "spriteSourceSize": {"x":6,"y":0,"w":84,"h":96},
"sourceSize": {"w":96,"h":96}
},
+"sprites/buildings/transistor-mirrored.png":
+{
+ "frame": {"x":443,"y":216,"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":537,"y":268,"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":6,"y":432,"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":897,"y":222,"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":950,"y":233,"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":897,"y":270,"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":844,"y":274,"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":950,"y":277,"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":334,"y":461,"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":897,"y":314,"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":632,"y":168,"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":686,"y":168,"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":844,"y":222,"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":60,"y":430,"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":336,"y":334,"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":143,"y":386,"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":335,"y":358,"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":443,"y":316,"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":359,"y":359,"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":335,"y":382,"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":359,"y":383,"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":189,"y":168,"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":189,"y":178,"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":1002,"y":6,"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":150,"y":316,"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":149,"y":351,"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":536,"y":322,"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":180,"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":199,"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":150,"y":260,"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":192,"y":454,"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":218,"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":467,"y":316,"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":1002,"y":28,"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":1002,"y":50,"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":951,"y":114,"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":951,"y":136,"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":951,"y":158,"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":60,"y":454,"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":60,"y":476,"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":536,"y":353,"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":60,"y":359,"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":60,"y":401,"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":197,"y":410,"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":60,"y":498,"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":150,"y":222,"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":740,"y":168,"w":48,"h":48},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":48,"h":48},
@@ -1450,95 +1354,95 @@
},
"sprites/wires/sets/conflict_forward.png":
{
- "frame": {"x":363,"y":305,"w":8,"h":48},
+ "frame": {"x":373,"y":197,"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":6,"y":486,"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":150,"y":281,"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":794,"y":168,"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":373,"y":251,"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":138,"y":454,"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":60,"y":324,"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":848,"y":168,"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":371,"y":305,"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":82,"y":482,"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":336,"y":299,"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/wires_preview.png":
{
- "frame": {"x":550,"y":272,"w":16,"h":16},
+ "frame": {"x":197,"y":432,"w":16,"h":16},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":16,"h":16},
@@ -1551,6 +1455,6 @@
"format": "RGBA8888",
"size": {"w":1024,"h":1024},
"scale": "0.25",
- "smartupdate": "$TexturePacker:SmartUpdate:5429cdf3b92834776437a91974e89d3c:fa61fb225cd312db144ce6a38d97871b:908b89f5ca8ff73e331a35a3b14d0604$"
+ "smartupdate": "$TexturePacker:SmartUpdate:c61d9c7c8f387e344954d344de26c19e:20296b3e09d5b363b1e55eee3b673411:908b89f5ca8ff73e331a35a3b14d0604$"
}
}
diff --git a/res_built/atlas/atlas0_lq.png b/res_built/atlas/atlas0_lq.png
index 15cdd7bc..1d33b061 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..47e1845c 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":659,"y":883,"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":94,"y":1900,"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":262,"y":1918,"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":346,"y":1918,"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":430,"y":1853,"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":835,"y":1509,"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":734,"y":1597,"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":919,"y":1509,"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":560,"y":1674,"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":644,"y":1674,"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":178,"y":1871,"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":476,"y":1672,"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":378,"y":1751,"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":285,"y":1816,"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":799,"y":1318,"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":699,"y":1395,"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":176,"y":1406,"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":370,"y":1444,"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":269,"y":1493,"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":463,"y":1472,"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":362,"y":1537,"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":556,"y":1486,"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":455,"y":1565,"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":649,"y":1488,"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":892,"y":1323,"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":792,"y":1411,"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":885,"y":1416,"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":277,"y":1400,"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":548,"y":1579,"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":742,"y":1504,"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":99,"y":1592,"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":6,"y":1618,"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":290,"y":1630,"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":192,"y":1679,"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":99,"y":1685,"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":6,"y":1711,"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":383,"y":1658,"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":285,"y":1723,"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":641,"y":1581,"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":104,"y":1499,"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":6,"y":1525,"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":197,"y":1586,"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":6,"y":720,"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":530,"y":1080,"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":733,"y":1008,"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":425,"y":1083,"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":631,"y":1087,"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":366,"y":583,"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":192,"y":1772,"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":99,"y":1778,"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":818,"y":1611,"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":6,"y":924,"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":846,"y":804,"w":71,"h":85},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":71,"h":85},
@@ -410,15 +426,15 @@
},
"sprites/blueprints/cutter-quad.png":
{
- "frame": {"x":376,"y":106,"w":366,"h":96},
+ "frame": {"x":6,"y":210,"w":355,"h":96},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":11,"y":0,"w":366,"h":96},
+ "spriteSourceSize": {"x":16,"y":0,"w":355,"h":96},
"sourceSize": {"w":384,"h":96}
},
"sprites/blueprints/cutter.png":
{
- "frame": {"x":362,"y":616,"w":172,"h":96},
+ "frame": {"x":568,"y":679,"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":829,"y":1141,"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":385,"y":481,"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":108,"y":924,"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":1039,"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":182,"y":1017,"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":353,"y":685,"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":6,"y":1019,"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":179,"y":1304,"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":6,"y":1423,"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":204,"y":414,"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":758,"y":6,"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":386,"y":379,"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":6,"y":6,"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":757,"y":396,"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":923,"y":721,"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":455,"y":685,"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":557,"y":781,"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":744,"y":804,"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":756,"y":600,"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":584,"y":379,"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":108,"y":1091,"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":108,"y":720,"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":922,"y":925,"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":526,"y":1179,"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":422,"y":1182,"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":6,"y":1342,"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":319,"y":1239,"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":613,"y":1282,"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":937,"y":619,"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":513,"y":1370,"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":353,"y":787,"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":182,"y":917,"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":730,"y":1107,"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":455,"y":787,"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":180,"y":1207,"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":921,"y":1129,"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":321,"y":1142,"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":921,"y":1226,"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":746,"y":702,"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":799,"y":1318,"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":548,"y":1579,"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":659,"y":883,"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":530,"y":985,"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":846,"y":895,"w":70,"h":85},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":13,"y":0,"w":70,"h":85},
@@ -810,15 +794,15 @@
},
"sprites/buildings/cutter-quad.png":
{
- "frame": {"x":376,"y":208,"w":366,"h":96},
+ "frame": {"x":6,"y":312,"w":350,"h":96},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":11,"y":0,"w":366,"h":96},
+ "spriteSourceSize": {"x":16,"y":0,"w":350,"h":96},
"sourceSize": {"w":384,"h":96}
},
"sprites/buildings/cutter.png":
{
- "frame": {"x":4,"y":683,"w":171,"h":96},
+ "frame": {"x":6,"y":618,"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":6,"y":1804,"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":571,"y":577,"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":386,"y":6,"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":107,"y":1295,"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":6,"y":1900,"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":326,"y":990,"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":326,"y":889,"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":428,"y":989,"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":516,"y":1269,"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":416,"y":1343,"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":6,"y":516,"w":174,"h":96},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":9,"y":0,"w":174,"h":96},
@@ -922,15 +898,15 @@
},
"sprites/buildings/painter-double.png":
{
- "frame": {"x":748,"y":202,"w":192,"h":191},
+ "frame": {"x":758,"y":204,"w":192,"h":186},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":0,"y":0,"w":192,"h":191},
+ "spriteSourceSize": {"x":0,"y":0,"w":192,"h":186},
"sourceSize": {"w":192,"h":192}
},
"sprites/buildings/painter-mirrored.png":
{
- "frame": {"x":747,"y":399,"w":192,"h":96},
+ "frame": {"x":757,"y":498,"w":192,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":192,"h":96},
@@ -938,15 +914,15 @@
},
"sprites/buildings/painter-quad.png":
{
- "frame": {"x":384,"y":4,"w":374,"h":96},
+ "frame": {"x":6,"y":108,"w":359,"h":96},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":3,"y":0,"w":374,"h":96},
+ "spriteSourceSize": {"x":8,"y":0,"w":359,"h":96},
"sourceSize": {"w":384,"h":96}
},
"sprites/buildings/painter.png":
{
- "frame": {"x":747,"y":501,"w":192,"h":96},
+ "frame": {"x":6,"y":414,"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":923,"y":823,"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":181,"y":1105,"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":6,"y":1240,"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":632,"y":985,"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":186,"y":516,"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":183,"y":618,"w":164,"h":191},
"rotated": false,
"trimmed": true,
- "spriteSourceSize": {"x":14,"y":0,"w":166,"h":192},
+ "spriteSourceSize": {"x":14,"y":1,"w":164,"h":191},
"sourceSize": {"w":192,"h":192}
},
+"sprites/buildings/transistor-mirrored.png":
+{
+ "frame": {"x":108,"y":1193,"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":108,"y":822,"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":182,"y":815,"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":723,"y":1204,"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":821,"y":1238,"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":418,"y":1263,"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":318,"y":1320,"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":706,"y":1293,"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":659,"y":781,"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":606,"y":1384,"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":6,"y":822,"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":428,"y":889,"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":625,"y":1186,"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":955,"y":483,"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":955,"y":523,"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":955,"y":563,"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":284,"y":815,"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":284,"y":855,"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":284,"y":895,"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":284,"y":935,"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":284,"y":975,"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":371,"y":108,"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":371,"y":122,"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":280,"y":1288,"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":956,"y":231,"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":956,"y":292,"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":845,"y":986,"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":978,"y":1431,"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":985,"y":1399,"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":956,"y":6,"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":985,"y":1361,"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":997,"y":483,"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":1002,"y":432,"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":284,"y":1015,"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":284,"y":1054,"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":284,"y":1093,"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":282,"y":1132,"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":282,"y":1171,"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":280,"y":1210,"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":280,"y":1249,"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":108,"y":1008,"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":956,"y":355,"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":955,"y":432,"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":277,"y":1364,"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":985,"y":1323,"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":106,"y":1378,"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":557,"y":883,"w":96,"h":96},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":96,"h":96},
@@ -1450,95 +1354,95 @@
},
"sprites/wires/sets/conflict_forward.png":
{
- "frame": {"x":887,"y":1113,"w":12,"h":96},
+ "frame": {"x":362,"y":312,"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":6,"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":956,"y":42,"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":743,"y":906,"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":997,"y":517,"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":6,"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":956,"y":105,"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":921,"y":1027,"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":544,"y":583,"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":323,"y":1079,"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":956,"y":168,"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/wires_preview.png":
{
- "frame": {"x":952,"y":1629,"w":32,"h":32},
+ "frame": {"x":277,"y":1326,"w":32,"h":32},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":32,"h":32},
@@ -1551,6 +1455,6 @@
"format": "RGBA8888",
"size": {"w":1024,"h":2048},
"scale": "0.5",
- "smartupdate": "$TexturePacker:SmartUpdate:5429cdf3b92834776437a91974e89d3c:fa61fb225cd312db144ce6a38d97871b:908b89f5ca8ff73e331a35a3b14d0604$"
+ "smartupdate": "$TexturePacker:SmartUpdate:c61d9c7c8f387e344954d344de26c19e:20296b3e09d5b363b1e55eee3b673411:908b89f5ca8ff73e331a35a3b14d0604$"
}
}
diff --git a/res_built/atlas/atlas0_mq.png b/res_built/atlas/atlas0_mq.png
index 50e3181d..45275573 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 57c5ea0d..97f309be 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
@@ -257,16 +257,20 @@
sprites/belt/built/right_7.png
sprites/belt/built/right_8.png
sprites/belt/built/right_9.png
+ sprites/blueprints/analyzer.png
sprites/blueprints/balancer-merger-inverse.png
sprites/blueprints/balancer-merger.png
sprites/blueprints/balancer-splitter-inverse.png
sprites/blueprints/balancer-splitter.png
+ sprites/blueprints/belt_left.png
+ sprites/blueprints/belt_right.png
+ sprites/blueprints/belt_top.png
+ sprites/blueprints/comparator.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
@@ -275,67 +279,62 @@
sprites/blueprints/rotater-ccw.png
sprites/blueprints/rotater-rotate180.png
sprites/blueprints/rotater.png
+ sprites/blueprints/transistor-mirrored.png
+ sprites/blueprints/transistor.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/analyzer.png
sprites/buildings/balancer-merger-inverse.png
sprites/buildings/balancer-merger.png
sprites/buildings/balancer-splitter-inverse.png
sprites/buildings/balancer-splitter.png
+ sprites/buildings/comparator.png
sprites/buildings/constant_signal.png
sprites/buildings/display.png
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
sprites/buildings/underground_belt_exit.png
- sprites/buildings/virtual_processor-analyzer.png
sprites/buildings/virtual_processor-painter.png
sprites/buildings/virtual_processor-rotater.png
- sprites/buildings/virtual_processor-shapecompare.png
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
pivotPoint
0.5,0.5
@@ -374,34 +373,6 @@
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
- spriteScale
- 1
- scale9Enabled
-
- scale9Borders
- 32,32,63,63
- scale9Paddings
- 32,32,63,63
- scale9FromFile
-
-
sprites/blueprints/cutter-quad.png
sprites/blueprints/painter-quad.png
sprites/buildings/cutter-quad.png
@@ -421,8 +392,9 @@
sprites/blueprints/painter-double.png
- sprites/blueprints/trash-storage.png
+ sprites/blueprints/storage.png
sprites/buildings/painter-double.png
+ sprites/buildings/storage.png
pivotPoint
0.5,0.5
@@ -437,6 +409,23 @@
scale9FromFile
+ sprites/buildings/belt_left.png
+ sprites/buildings/belt_right.png
+ sprites/buildings/belt_top.png
+
+ pivotPoint
+ 0.5,0.5
+ spriteScale
+ 1
+ scale9Enabled
+
+ scale9Borders
+ 32,32,63,63
+ scale9Paddings
+ 32,32,63,63
+ scale9FromFile
+
+
sprites/buildings/cutter.png
sprites/buildings/mixer.png
sprites/buildings/painter.png
@@ -492,21 +481,6 @@
scale9FromFile
- sprites/buildings/trash-storage.png
-
- pivotPoint
- 0.5,0.5
- spriteScale
- 1
- scale9Enabled
-
- scale9Borders
- 144,144,288,288
- scale9Paddings
- 144,144,288,288
- 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..7db9782c 100644
--- a/res_raw/sprites/belt/generate_wire_sprites.js
+++ b/res_raw/sprites/belt/generate_wire_sprites.js
@@ -1,226 +1,212 @@
-/**
- *
- * 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: "#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/cutter-quad.png b/res_raw/sprites/blueprints/cutter-quad.png
index 5ae8989e..a2bcefdb 100644
Binary files a/res_raw/sprites/blueprints/cutter-quad.png and b/res_raw/sprites/blueprints/cutter-quad.png differ
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/constant_signal.png b/res_raw/sprites/buildings/constant_signal.png
index ae9329e0..cba902bf 100644
Binary files a/res_raw/sprites/buildings/constant_signal.png and b/res_raw/sprites/buildings/constant_signal.png differ
diff --git a/res_raw/sprites/buildings/cutter-quad.png b/res_raw/sprites/buildings/cutter-quad.png
index e67628f2..00d70cdc 100644
Binary files a/res_raw/sprites/buildings/cutter-quad.png and b/res_raw/sprites/buildings/cutter-quad.png differ
diff --git a/res_raw/sprites/buildings/painter-double.png b/res_raw/sprites/buildings/painter-double.png
index 0d909786..9d2c472e 100644
Binary files a/res_raw/sprites/buildings/painter-double.png and b/res_raw/sprites/buildings/painter-double.png differ
diff --git a/res_raw/sprites/buildings/painter-mirrored.png b/res_raw/sprites/buildings/painter-mirrored.png
index da0e199d..2a3310d7 100644
Binary files a/res_raw/sprites/buildings/painter-mirrored.png and b/res_raw/sprites/buildings/painter-mirrored.png differ
diff --git a/res_raw/sprites/buildings/painter-quad.png b/res_raw/sprites/buildings/painter-quad.png
index d14bd382..698b753a 100644
Binary files a/res_raw/sprites/buildings/painter-quad.png and b/res_raw/sprites/buildings/painter-quad.png differ
diff --git a/res_raw/sprites/buildings/painter.png b/res_raw/sprites/buildings/painter.png
index 1ebca21f..3382d420 100644
Binary files a/res_raw/sprites/buildings/painter.png and b/res_raw/sprites/buildings/painter.png differ
diff --git a/res_raw/sprites/buildings/storage.png b/res_raw/sprites/buildings/storage.png
index 56fbcc38..1e30b766 100644
Binary files a/res_raw/sprites/buildings/storage.png and b/res_raw/sprites/buildings/storage.png differ
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..7c5008b6
Binary files /dev/null and b/res_raw/sprites/wires/sets/second_cross.png differ
diff --git a/res_raw/sprites/wires/sets/second_forward.png b/res_raw/sprites/wires/sets/second_forward.png
new file mode 100644
index 00000000..3656acd7
Binary files /dev/null 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..dd1a51a8
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..b2be4bb6
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_forward.png b/res_raw/sprites/wires/sets/shape_forward.png
deleted file mode 100644
index 15ec3b9c..00000000
Binary files a/res_raw/sprites/wires/sets/shape_forward.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/src/css/resources.scss b/src/css/resources.scss
index d5777d40..45c3dd13 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, portable_hub;
+ constant_signal, logic_gate, lever, filter, wire_tunnel, display, virtual_processor, reader, storage,
+ transistor, analyzer, comparator, portable_hub;
@each $building in $buildings {
[data-icon="building_icons/#{$building}.png"] {
@@ -8,10 +9,12 @@ $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, portable_hub;
+$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, wire-second, painter, painter-mirrored, portable_hub;
+
@each $building in $buildingsAndVariants {
[data-icon="building_tutorials/#{$building}.png"] {
/* @load-async */
@@ -19,26 +22,43 @@ $buildingsAndVariants: belt, balancer, balancer-merger, balancer-splitter, under
}
}
-// @TODO: New buildings (balancer, wires, etc)
-
-// Special cases for mirrored vairants
-[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;
}
+// 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/core/config.js b/src/js/core/config.js
index 14c39ab1..7c1fe81f 100644
--- a/src/js/core/config.js
+++ b/src/js/core/config.js
@@ -65,7 +65,7 @@ export const globalConfig = {
buildingSpeeds: {
cutter: 1 / 4,
- cutterQuad: 1 / 3,
+ cutterQuad: 1 / 4,
rotater: 1 / 1,
rotaterCCW: 1 / 1,
rotater180: 1 / 1,
@@ -73,7 +73,7 @@ export const globalConfig = {
painterDouble: 1 / 8,
painterQuad: 1 / 2,
mixer: 1 / 5,
- stacker: 1 / 6,
+ stacker: 1 / 8,
},
// Zooming
diff --git a/src/js/core/config.local.js b/src/js/core/config.local.js
index b75c5650..87aaaa14 100644
--- a/src/js/core/config.local.js
+++ b/src/js/core/config.local.js
@@ -26,9 +26,6 @@ export default {
// Allow to zoom freely without limits
// disableZoomLimits: true,
// -----------------------------------------------------------------------------------
- // Shows a border arround every chunk
- // showChunkBorders: true,
- // -----------------------------------------------------------------------------------
// All rewards can be unlocked by passing just 1 of any shape
// rewardsInstant: true,
// -----------------------------------------------------------------------------------
@@ -110,5 +107,8 @@ export default {
// Allows manual ticking
// manualTickOnly: true,
// -----------------------------------------------------------------------------------
+ // Disables slow asserts, useful for debugging performance
+ // disableSlowAsserts: true,
+ // -----------------------------------------------------------------------------------
/* dev:end */
};
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..983594cb 100644
--- a/src/js/game/buildings/constant_signal.js
+++ b/src/js/game/buildings/constant_signal.js
@@ -4,6 +4,10 @@ import { Entity } from "../entity";
import { MetaBuilding } from "../meta_building";
import { GameRoot } from "../root";
import { ConstantSignalComponent } from "../components/constant_signal";
+import { generateMatrixRotations } from "../../core/utils";
+import { enumHubGoalRewards } from "../tutorial_goals";
+
+const overlayMatrix = generateMatrixRotations([0, 1, 0, 1, 1, 1, 1, 1, 1]);
export class MetaConstantSignalBuilding extends MetaBuilding {
constructor() {
@@ -11,15 +15,14 @@ export class MetaConstantSignalBuilding extends MetaBuilding {
}
getSilhouetteColor() {
- return "#2bafda";
+ return "#2b84fd";
}
/**
* @param {GameRoot} root
*/
getIsUnlocked(root) {
- // @todo
- return true;
+ return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_constant_signal);
}
/** @returns {"wires"} **/
@@ -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/filter.js b/src/js/game/buildings/filter.js
index 698ac4db..b537fcb5 100644
--- a/src/js/game/buildings/filter.js
+++ b/src/js/game/buildings/filter.js
@@ -1,4 +1,6 @@
+import { formatItemsPerSecond } from "../../core/utils";
import { enumDirection, Vector } from "../../core/vector";
+import { T } from "../../translations";
import { FilterComponent } from "../components/filter";
import { ItemAcceptorComponent } from "../components/item_acceptor";
import { ItemEjectorComponent } from "../components/item_ejector";
@@ -32,6 +34,16 @@ export class MetaFilterBuilding extends MetaBuilding {
return true;
}
+ /**
+ * @param {GameRoot} root
+ * @param {string} variant
+ * @returns {Array<[string, string]>}
+ */
+ getAdditionalStatistics(root, variant) {
+ const beltSpeed = root.hubGoals.getBeltBaseSpeed();
+ return [[T.ingame.buildingPlacement.infoTexts.speed, formatItemsPerSecond(beltSpeed)]];
+ }
+
/**
* 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/trash.js b/src/js/game/buildings/trash.js
index ca6018a7..43108b9e 100644
--- a/src/js/game/buildings/trash.js
+++ b/src/js/game/buildings/trash.js
@@ -1,3 +1,4 @@
+import { generateMatrixRotations } from "../../core/utils";
import { enumDirection, Vector } from "../../core/vector";
import { ItemAcceptorComponent } from "../components/item_acceptor";
import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor";
@@ -6,6 +7,8 @@ import { MetaBuilding } from "../meta_building";
import { GameRoot } from "../root";
import { enumHubGoalRewards } from "../tutorial_goals";
+const overlayMatrix = generateMatrixRotations([1, 1, 0, 1, 1, 1, 0, 1, 1]);
+
export class MetaTrashBuilding extends MetaBuilding {
constructor() {
super("trash");
@@ -16,13 +19,17 @@ export class MetaTrashBuilding extends MetaBuilding {
}
getSilhouetteColor() {
- return "#cd7d86";
+ return "#ed1d5d";
}
getDimensions() {
return new Vector(1, 1);
}
+ getSpecialOverlayRenderMatrix(rotation) {
+ return overlayMatrix[rotation];
+ }
+
/**
* @param {GameRoot} root
*/
diff --git a/src/js/game/buildings/underground_belt.js b/src/js/game/buildings/underground_belt.js
index 2239b703..fde018fe 100644
--- a/src/js/game/buildings/underground_belt.js
+++ b/src/js/game/buildings/underground_belt.js
@@ -25,7 +25,7 @@ export const enumUndergroundBeltVariantToTier = {
[enumUndergroundBeltVariants.tier2]: 1,
};
-const colorsByRotationVariant = ["#6d9dff", "#9cad40"];
+const colorsByRotationVariant = ["#6d9dff", "#71ff9c"];
const overlayMatrices = [
// Sender
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..ae5bab42 100644
--- a/src/js/game/buildings/wire.js
+++ b/src/js/game/buildings/wire.js
@@ -1,263 +1,270 @@
-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";
+import { enumHubGoalRewards } from "../tutorial_goals";
+
+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",
+};
+
+const enumWireVariantToVariant = {
+ [defaultBuildingVariant]: enumWireVariant.first,
+ [wireVariants.second]: enumWireVariant.second,
+};
+
+export class MetaWireBuilding extends MetaBuilding {
+ constructor() {
+ super("wire");
+ }
+
+ getHasDirectionLockAvailable() {
+ return true;
+ }
+
+ getSilhouetteColor() {
+ return "#61ef6f";
+ }
+
+ getAvailableVariants() {
+ return [defaultBuildingVariant, wireVariants.second];
+ }
+
+ 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) {
+ return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers);
+ }
+
+ /**
+ * 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..d0e354e2 100644
--- a/src/js/game/components/wire.js
+++ b/src/js/game/components/wire.js
@@ -2,12 +2,18 @@ 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",
+};
+
export class WireComponent extends Component {
static getId() {
return "Wire";
@@ -16,54 +22,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/base_toolbar.js b/src/js/game/hud/parts/base_toolbar.js
index 8697eaf6..a0e2a49f 100644
--- a/src/js/game/hud/parts/base_toolbar.js
+++ b/src/js/game/hud/parts/base_toolbar.js
@@ -15,14 +15,19 @@ export class HUDBaseToolbar extends BaseHUDPart {
* @param {Array=} param0.secondaryBuildings
* @param {function} param0.visibilityCondition
* @param {string} param0.htmlElementId
+ * @param {Layer=} param0.layer
*/
- constructor(root, { primaryBuildings, secondaryBuildings = [], visibilityCondition, htmlElementId }) {
+ constructor(
+ root,
+ { primaryBuildings, secondaryBuildings = [], visibilityCondition, htmlElementId, layer = "regular" }
+ ) {
super(root);
this.primaryBuildings = primaryBuildings;
this.secondaryBuildings = secondaryBuildings;
this.visibilityCondition = visibilityCondition;
this.htmlElementId = htmlElementId;
+ this.layer = layer;
/** @type {Object.",
"" + binding.getKeyCodeString() + "
"
diff --git a/src/js/game/hud/parts/buildings_toolbar.js b/src/js/game/hud/parts/buildings_toolbar.js
index b3b292a5..d03c8f73 100644
--- a/src/js/game/hud/parts/buildings_toolbar.js
+++ b/src/js/game/hud/parts/buildings_toolbar.js
@@ -38,10 +38,10 @@ export class HUDBuildingsToolbar extends HUDBaseToolbar {
],
secondaryBuildings: [
MetaStorageBuilding,
+ MetaReaderBuilding,
MetaLeverBuilding,
MetaFilterBuilding,
MetaDisplayBuilding,
- MetaReaderBuilding,
],
visibilityCondition: () =>
!this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === "regular",
diff --git a/src/js/game/hud/parts/wires_overlay.js b/src/js/game/hud/parts/wires_overlay.js
index 8d1d213e..7d856d5f 100644
--- a/src/js/game/hud/parts/wires_overlay.js
+++ b/src/js/game/hud/parts/wires_overlay.js
@@ -6,6 +6,7 @@ import { THEME } from "../../theme";
import { BaseHUDPart } from "../base_hud_part";
import { Loader } from "../../../core/loader";
import { lerp } from "../../../core/utils";
+import { enumHubGoalRewards } from "../../tutorial_goals";
const wiresBackgroundDpi = 4;
@@ -26,7 +27,9 @@ export class HUDWiresOverlay extends BaseHUDPart {
*/
switchLayers() {
if (this.root.currentLayer === "regular") {
- this.root.currentLayer = "wires";
+ if (this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers)) {
+ this.root.currentLayer = "wires";
+ }
} else {
this.root.currentLayer = "regular";
}
diff --git a/src/js/game/hud/parts/wires_toolbar.js b/src/js/game/hud/parts/wires_toolbar.js
index 74075329..2e43386d 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,13 +16,17 @@ export class HUDWiresToolbar extends HUDBaseToolbar {
MetaWireBuilding,
MetaWireTunnelBuilding,
MetaConstantSignalBuilding,
- MetaLogicGateBuilding,
MetaLeverBuilding,
+ MetaTransistorBuilding,
+ MetaLogicGateBuilding,
+ MetaAnalyzerBuilding,
MetaVirtualProcessorBuilding,
+ MetaComparatorBuilding,
],
visibilityCondition: () =>
!this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === "wires",
htmlElementId: "ingame_HUD_wires_toolbar",
+ layer: "wires",
});
}
}
diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js
index fbfd0ffb..65283b7f 100644
--- a/src/js/game/key_action_mapper.js
+++ b/src/js/game/key_action_mapper.js
@@ -26,7 +26,7 @@ export const KEYMAPPINGS = {
exportScreenshot: { keyCode: 114 }, // F3PS
toggleFPSInfo: { keyCode: 115 }, // F4
- switchLayers: { keyCode: key("Y") },
+ switchLayers: { keyCode: key("E") },
},
navigation: {
@@ -44,6 +44,7 @@ export const KEYMAPPINGS = {
},
buildings: {
+ // Primary Toolbar
belt: { keyCode: key("1") },
balancer: { keyCode: key("2") },
underground_belt: { keyCode: key("3") },
@@ -54,20 +55,28 @@ export const KEYMAPPINGS = {
mixer: { keyCode: key("8") },
painter: { keyCode: key("9") },
trash: { keyCode: key("0") },
- storage: { keyCode: key("I") },
- lever: { keyCode: key("L") },
- filter: { keyCode: key("B") },
- display: { keyCode: key("N") },
- reader: { keyCode: key("J") },
+ // Secondary toolbar
+ storage: { keyCode: key("Y") },
+ reader: { keyCode: key("U") },
+ lever: { keyCode: key("I") },
+ filter: { keyCode: key("O") },
+ display: { keyCode: key("P") },
+ // Wires toolbar
wire: { keyCode: key("1") },
wire_tunnel: { keyCode: key("2") },
constant_signal: { keyCode: key("3") },
- logic_gate: { keyCode: key("4") },
- virtual_processor: { keyCode: key("5") },
portable_hub: { keyCode: key("P") },
+
+ lever_wires: { keyCode: key("4") },
+ logic_gate: { keyCode: key("5") },
+ virtual_processor: { keyCode: key("6") },
+ transistor: { keyCode: key("7") },
+ analyzer: { keyCode: key("8") },
+ comparator: { keyCode: key("9") },
+
},
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 0d69eaec..b6087019 100644
--- a/src/js/game/meta_building_registry.js
+++ b/src/js/game/meta_building_registry.js
@@ -1,31 +1,43 @@
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 {MetaPortableHubBuilding} from "./buildings/portable_hub";
+import { MetaPortableHubBuilding } from "./buildings/portable_hub";
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");
@@ -51,7 +63,12 @@ export function initMetaBuildingRegistry() {
gMetaBuildingRegistry.register(MetaDisplayBuilding);
gMetaBuildingRegistry.register(MetaVirtualProcessorBuilding);
gMetaBuildingRegistry.register(MetaReaderBuilding);
+
gMetaBuildingRegistry.register(MetaPortableHubBuilding);
+
+ gMetaBuildingRegistry.register(MetaTransistorBuilding);
+ gMetaBuildingRegistry.register(MetaAnalyzerBuilding);
+ gMetaBuildingRegistry.register(MetaComparatorBuilding);
// Belt
registerBuildingVariant(1, MetaBeltBuilding, defaultBuildingVariant, 0);
@@ -111,6 +128,11 @@ 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);
+
// Constant signal
registerBuildingVariant(31, MetaConstantSignalBuilding);
@@ -119,7 +141,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);
@@ -129,20 +154,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/src/js/game/themes/dark.json b/src/js/game/themes/dark.json
index 2f03b767..227d4532 100644
--- a/src/js/game/themes/dark.json
+++ b/src/js/game/themes/dark.json
@@ -17,8 +17,8 @@
"background": "rgba(74, 237, 134, 0.2)"
},
"wires": {
- "color": "rgb(209, 107, 203)",
- "background": "rgba(209, 107, 203, 0.2)"
+ "color": "rgb(74, 237, 134)",
+ "background": "rgba(74, 237, 134, 0.2)"
}
},
diff --git a/src/js/game/themes/light.json b/src/js/game/themes/light.json
index 728135ab..47616d82 100644
--- a/src/js/game/themes/light.json
+++ b/src/js/game/themes/light.json
@@ -17,8 +17,8 @@
"background": "rgba(74, 237, 134, 0.2)"
},
"wires": {
- "color": "rgb(209, 107, 203)",
- "background": "rgba(209, 107, 203, 0.2)"
+ "color": "rgb(74, 237, 134)",
+ "background": "rgba(74, 237, 134, 0.2)"
}
},
diff --git a/src/js/game/tutorial_goals.js b/src/js/game/tutorial_goals.js
index d83bd04d..3d1a36fd 100644
--- a/src/js/game/tutorial_goals.js
+++ b/src/js/game/tutorial_goals.js
@@ -30,7 +30,6 @@ export const enumHubGoalRewards = {
reward_constant_signal: "reward_constant_signal",
reward_logic_gates: "reward_logic_gates",
reward_virtual_processing: "reward_virtual_processing",
- reward_second_wire: "reward_second_wire",
reward_blueprints: "reward_blueprints",
reward_freeplay: "reward_freeplay",
@@ -244,15 +243,7 @@ export const tutorialGoals = [
reward: enumHubGoalRewards.reward_virtual_processing,
},
- // 26 Secondary type of wire
- {
- // @TODO
- shape: "CuCuCuCu",
- required: 50000,
- reward: enumHubGoalRewards.reward_second_wire,
- },
-
- // 27 Freeplay
+ // 26 Freeplay
{
// @TODO
shape: "CuCuCuCu",
diff --git a/src/js/game/tutorial_goals_mappings.js b/src/js/game/tutorial_goals_mappings.js
index 6cf5ce75..4542acf3 100644
--- a/src/js/game/tutorial_goals_mappings.js
+++ b/src/js/game/tutorial_goals_mappings.js
@@ -53,7 +53,6 @@ export const enumHubGoalRewardsToContentUnlocked = {
[enumHubGoalRewards.reward_constant_signal]: typed([
[MetaConstantSignalBuilding, defaultBuildingVariant],
]),
- [enumHubGoalRewards.reward_second_wire]: null, // @TODO!
[enumHubGoalRewards.reward_logic_gates]: null, // @TODO!
[enumHubGoalRewards.reward_virtual_processing]: null, // @TODO!
diff --git a/translations/base-en.yaml b/translations/base-en.yaml
index b5839997..84d381f3 100644
--- a/translations/base-en.yaml
+++ b/translations/base-en.yaml
@@ -331,7 +331,7 @@ ingame:
infoTexts:
speed: Speed
range: Range
- storage: Storage
+ storage: Capacity
oneItemPerSecond: 1 item / second
itemsPerSecond: items / s
itemsPerSecondDouble: (x2)
@@ -528,7 +528,7 @@ buildings:
stacker:
default:
name: &stacker Stacker
- description: Stacks both items. If they can not be merged, the right item is placed above the left item.
+ description: Combines both items side by side. If this is not possible, they are stacked on top of each other.
mixer:
default:
@@ -538,11 +538,11 @@ buildings:
painter:
default:
name: &painter Painter
- description: &painter_desc Colors the whole shape on the left input with the color from the top input.
+ description: &painter_desc Paints the whole shape on the left input with the color from the top input.
mirrored:
name: *painter
- description: *painter_desc
+ description: Paints the whole shape on the left input with the color from the bottom input.
double:
name: Painter (Double)
@@ -550,7 +550,7 @@ buildings:
quad:
name: Painter (Quad)
- description: Allows you to color each quadrant of the shape with a different color.
+ description: Allows you to color each quadrant of the shape individually. Only slots with a truthy signal on the wires layer will be painted!
trash:
default:
@@ -565,49 +565,54 @@ buildings:
wire:
default:
name: &wire Wire
- description: &wire_desc Allows to connect logical components and can transfer items, colors or boolean signals.
+ description: &wire_desc Transfers signals, which can be items, colors or booleans (1 / 0). Different colored wires do not connect.
+
+ second:
+ name: *wire
+ description: *wire_desc
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
- description: Emits a constant signal, which can be either a shape, color or boolean.
+ description: Emits a constant signal, which can be either a shape, color or boolean (1 / 0).
lever:
default:
name: &lever Switch
- description: Can be toggled to emit a boolean signal, which can then be used to control for example an item filter.
+ description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, which can then be used to control for example an item filter.
logic_gate:
default:
- name: &logic_gate AND Gate
- description: Emits a truthy boolean signal if both inputs are truthy.
+ name: AND Gate
+ 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 Transistor
+ 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:
name: &filter Filter
- description: Connect with a signal to route all matching items to the top and the remaining to the right. Can be controlled with boolean signals too.
+ description: Connect a signal to route all matching items to the top and the remaining to the right. Can be controlled with boolean signals too.
display:
default:
@@ -619,14 +624,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
@@ -635,16 +646,7 @@ buildings:
unstacker:
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.
-
- portable_hub:
- default:
- name: &portable_hub Portable hub
- description: Like the hub but mini
-
+
stacker:
name: Virtual Stacker
description: Virtually stacks the right shape onto the left.
@@ -653,11 +655,20 @@ buildings:
name: Virtual Painter
description: Virtually paints the shape from the bottom input with the shape on the right input.
+ shapecompare:
+ name: Compare
+ description: Returns true if both items are exactly equal. Can compare shapes, items and booleans.
+
+ portable_hub:
+ default:
+ name: &portable_hub Portable hub
+ description: Like the hub but mini
+
storyRewards:
# Those are the rewards gained from completing the store
reward_cutter_and_trash:
title: Cutting Shapes
- desc: You just unlocked the cutter - it cuts shapes in half from top to bottom regardless of its orientation!
Be sure to get rid of the waste, or otherwise it will stall - For this purpose I have given you the trash can, which destroys everything you put into it!
+ desc: You just unlocked the cutter - it cuts shapes in half from top to bottom regardless of its orientation!
Be sure to get rid of the waste, or otherwise it will stall - For this purpose I have given you the trash, which destroys everything you put into it!
reward_rotater:
title: Rotating
@@ -670,7 +681,7 @@ storyRewards:
reward_mixer:
title: Color Mixing
- desc: The mixer has been unlocked - Combine two colors using additive blending with this building!
+ desc: The mixer has been unlocked - It mixes two colors using additive blending!
reward_stacker:
title: Stacker
@@ -682,7 +693,7 @@ storyRewards:
reward_tunnel:
title: Tunnel
- desc: The tunnel has been unlocked - You can now tunnel items through belts and buildings with it!
+ desc: The tunnel has been unlocked - You can now tunnel items below belts and buildings with it!
reward_rotater_ccw:
title: CCW Rotating
@@ -701,12 +712,12 @@ storyRewards:
reward_merger:
title: Compact Merger
desc: >-
- You have unlocked a merger variant of the balancer - It accepts two inputs and merges them into one belt!
+ You have unlocked a merger variant of the balancer - It accepts two inputs and merges them into one belt!
reward_splitter:
title: Compact Splitter
desc: >-
- You have unlocked a splitter variant of the balancer - It accepts one input and splits them into two!
+ You have unlocked a splitter variant of the balancer - It accepts one input and splits them into two!
reward_belt_reader:
title: Belt reader
@@ -719,13 +730,13 @@ storyRewards:
reward_painter_double:
title: Double Painting
- desc: You have unlocked a variant of the painter - It works as the regular painter but processes two shapes at once consuming just one color instead of two!
+ desc: You have unlocked a variant of the painter - It works similar to the regular painter but processes two shapes at once, consuming just one color instead of two!
reward_painter_quad:
title: Quad Painting
desc: >-
You have unlocked a variant of the painter - It allows you to paint each part of the shape individually!
- To use it, connect each slot which should be painted on the wires layer!
+ Connect each slot you'd like to paint with a truthy signal (shape, item or boolean "1") on the wires layer!
reward_storage:
title: Storage Buffer
@@ -756,7 +767,8 @@ storyRewards:
reward_constant_signal:
title: Constant Signal
desc: >-
- You can now emit a constant signal on the wires layer! This is useful to connect it to item filters for example!
+ You unlocked the constant signal building on the wires layer! This is useful to connect it to item filters for example.
+ The constant signal can emit a shape, color or boolean (1 / 0).
reward_logic_gates:
title: Logic Gates
@@ -774,12 +786,6 @@ storyRewards:
- Build something cool with wires.
- Continue to play regulary.
- reward_second_wire:
- title: Second Wire Type
- desc: >-
- Annoyed by wires automatically connecting? I just gave you another type of wire!
- Different types of wires do not connect to each other, so you can now build much compacter circuits.
-
# Special reward, which is shown when there is no reward actually
no_reward:
title: Next level
@@ -1038,14 +1044,18 @@ keybindings:
storage: *storage
wire: *wire
constant_signal: *constant_signal
- logic_gate: *logic_gate
- lever: *lever
+ logic_gate: Logic Gate
+ lever: Switch (regular)
+ lever_wires: Switch (wires)
filter: *filter
wire_tunnel: *wire_tunnel
display: *display
reader: *reader
portable_hub: *portable_hub
virtual_processor: *virtual_processor
+ transistor: *transistor
+ analyzer: *analyzer
+ comparator: *comparator
# ---
pipette: Pipette
@@ -1148,3 +1158,4 @@ tips:
- This game has a lot of useful keybindings! Be sure to check out the settings page.
- This game has a lot of settings, be sure to check them out!
- The marker to your hub has a small compass to indicate its direction!
+ - To clear belts, cut the area and then paste it at the same location.
diff --git a/translations/base-es.yaml b/translations/base-es.yaml
index 765970d6..dbac38d2 100644
--- a/translations/base-es.yaml
+++ b/translations/base-es.yaml
@@ -240,7 +240,7 @@ dialogs:
massCutConfirm:
title: Confirmar corte
desc: >-
- ¡Estás cortando muchos edificios ( para ser exactos)! ¿Estas seguro de que quieres hacer esto?
+ ¡Estás cortando muchos edificios ( para ser exactos)! ¿Estas seguro de que quieres hacer esto?
massCutInsufficientConfirm:
title: Confirm cut
@@ -264,7 +264,7 @@ dialogs:
createMarker:
title: Nuevo marcador
titleEdit: Editar marcador
- desc: Dale un nombre significativo, también puedes agregarle una clave de una forma (La cual puedes generar aquí)
+ desc: Dale un nombre significativo, también puedes agregarle la clave de una forma (La cual puedes generar aquí)
markerDemoLimit:
desc: Solo puedes crear dos marcadores en la versión de prueba. ¡Obtén el juego completo para marcadores ilimitados!
@@ -294,7 +294,7 @@ ingame:
cutSelection: Cortar
copySelection: Copiar
clearSelection: Limpiar selección
- pipette: Pipette
+ pipette: Cuentagotas
switchLayers: Cambiar capas
# Names of the colors, used for the color blind mode
@@ -536,7 +536,7 @@ buildings:
trash:
default:
name: &trash Basurero
- description: Acepta entradas desde todos los lados y los destruye. Para siempre.
+ description: Acepta formas desde todos los lados y las destruye. Para siempre.
storage:
name: Almacenamiento.
@@ -648,7 +648,7 @@ settings:
categories:
general: General
userInterface: User Interface
- advanced: Advanced
+ advanced: Avanzado
versionBadges:
dev: Desarrollo
@@ -829,7 +829,7 @@ keybindings:
trash: *trash
wire: *wire
- pipette: Pipette
+ pipette: Cuentagotas
rotateWhilePlacing: Rotar
rotateInverseModifier: >-
Modificador: Rotar inversamente