Skip to content

Commit 512c465

Browse files
committed
Initial commit
0 parents  commit 512c465

16 files changed

+3271
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
node_modules
2+
dist/*
3+
output/*

Readme.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
### Satisfactory Signs Image Builder
2+
3+
This typescript script converts an JPG image into Satisfactory blueprint files that can be later build in the game and create a "poster" of your image. It is using the awesome [etothepii4/satisfactory-file-parser](https://github.com/etothepii4/satisfactory-file-parser) that made it possible.
4+
5+
**Take this project as it is. It was my fun proof of concept side project and I am not intending to maintain it. It is quite simple so it can be easily modified.**
6+
7+
Example of 64x64 image built with 1m Signs:
8+
9+
![Preview](preview.png "Example of 64x64 image")
10+
11+
## How to build it
12+
13+
1. Prepare your image.
14+
This script supports only JPG, square images that have sizes are divisible by 32 so for example 32x32, 64x64, 128x128 etx. Easiest way is to place the image in the `assets` directory.
15+
1. Configure project.
16+
Go to `src/config.ts` and edit variables inside the `Configuration` section.
17+
- `imagePath`- Path to your image file.
18+
- `blueprintName` - Name of the output Blueprint files.
19+
2. Build the project `npm run build` and run it `npm start`
20+
21+
## How to add it to the game
22+
23+
1. Go to the `output` directory and copy your desired blueprint files to the [game directory](https://satisfactory.wiki.gg/wiki/Blueprint#Save_Location). The amount of the files depends on the size of your image.
24+
2. Restart your game or server
25+
3. The blueprints should be visible in the Undefined category in your Blueprint build menu.
26+
27+
## How to build it in the game
28+
29+
This script is splitting images in to sections that have sizes of 32x32 pixels (Which are 32x32 1m Signs in the game).
30+
31+
Below is the layout of the way sections are created. Each section is named as `ROW x COLUMN` started from bottom left and going to top right. So for example with 6x64 image I will place Section 1x1 first, then 1x2 on the right side of it, then 2x1 on top of the 1x1 and so on.
32+
33+
| | Column 1| Column 2 | Column B ...|
34+
| --------- | ------- | ------- | ----- |
35+
| Row A ... | Ax1 | Ax2 | AxB |
36+
| Row 2 | 2x1 | 2x2 | 2xB |
37+
| Row 1 | 1x1 | 1x2 | 1xB |
38+
39+
## Few tips and notes about performance:
40+
41+
- The Signs do not snap that well so it might be easier to build a huge wall behind and then try to align the blueprint sections with it.
42+
- Each section costs 1024 x Reinforced Iron Plate and 5120 x Quartz Crystal. This requires a lot of inventory space and is only possible to be built in later stages of the game hen you unlock more inventory slots.
43+
- I did not notice performance drops after the "Poster" was built but there were noticable drops while building it.
44+
- While you place the blueprint the hologram will cause big FPS drop but it will go back to normal as soon as you exit build mode.
45+
- There is some limit of how many Signs are loaded at same time so after you build it or load the "Poster" for the first time you will see that the signs will be slowly loaded and their contents replaced 1 by 1. In my 64x64 image it took about 30 second before it was fully loaded for first time.

assets/Signs 1m 32x32.sbp

64.7 KB
Binary file not shown.

assets/Signs 1m 32x32.sbpcfg

121 Bytes
Binary file not shown.

assets/doge64.jpg

2.52 KB
Loading

eslint.config.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import globals from "globals";
2+
import pluginJs from "@eslint/js";
3+
import tseslint from "typescript-eslint";
4+
5+
6+
/** @type {import('eslint').Linter.Config[]} */
7+
export default [
8+
{files: ["**/*.{js,mjs,cjs,ts}"]},
9+
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
10+
{languageOptions: { globals: globals.browser }},
11+
pluginJs.configs.recommended,
12+
...tseslint.configs.recommended,
13+
];

0 commit comments

Comments
 (0)