Compare commits
11 Commits
master
...
steam-demo
Author | SHA1 | Date |
---|---|---|
tobspr | cbab789df5 | |
tobspr | d23d5d85f0 | |
tobspr | 73f6c90c45 | |
tobspr | 999fc10d80 | |
tobspr | 723f020d77 | |
tobspr | ec1ca34408 | |
tobspr | 009547d259 | |
tobspr | bb93b047a2 | |
tobspr | adb4878747 | |
tobspr | a87978a8b5 | |
tobspr | 7ade7946dc |
|
@ -56,3 +56,6 @@ config.local.js
|
|||
# Editor artifacts
|
||||
*.*.swp
|
||||
*.*.swo
|
||||
|
||||
app.vdf
|
||||
steamtmp
|
||||
|
|
93
README.md
93
README.md
|
@ -1,6 +1,8 @@
|
|||
# shapez.io
|
||||
|
||||
<img src="https://i.imgur.com/Y5Z2iqQ.png" alt="shapez.io Logo">
|
||||
<a href="https://get.shapez.io/ghi" title="shapez.io on Steam">
|
||||
<img src="https://i.imgur.com/Y5Z2iqQ.png" alt="shapez.io Logo">
|
||||
</a>
|
||||
|
||||
This is the source code for shapez.io, an open source base building game inspired by Factorio.
|
||||
Your goal is to produce shapes by cutting, rotating, merging and painting parts of shapes.
|
||||
|
@ -9,11 +11,11 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts
|
|||
- [Official Discord](https://discord.com/invite/HN7EVzV) <- _Highly recommended to join!_
|
||||
- [Trello Board & Roadmap](https://trello.com/b/ISQncpJP/shapezio)
|
||||
- [itch.io Page](https://tobspr.itch.io/shapezio)
|
||||
- [Free web version](https://shapez.io)
|
||||
- [Online Demo](https://shapez.io)
|
||||
|
||||
## Reporting issues, suggestions, feedback, bugs
|
||||
|
||||
1. Ask in `#bugs` / `#feedback` / `#questions` on the [Official Discord](https://discord.com/invite/HN7EVzV) if you are not entirely sure if it's a bug etc.
|
||||
1. Ask in `#bugs` / `#feedback` / `#questions` on the [Official Discord](https://discord.com/invite/HN7EVzV) if you are not entirely sure if it's a bug
|
||||
2. Check out the trello board: https://trello.com/b/ISQncpJP/shapezio
|
||||
3. See if it's already there - If so, vote for it, done. I will see it. (You have to be signed in on trello)
|
||||
4. If not, check if it's already reported here: https://github.com/tobspr/shapez.io/issues
|
||||
|
@ -23,14 +25,18 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts
|
|||
## Building
|
||||
|
||||
- Make sure `ffmpeg` is on your path
|
||||
- Install Node.js (v16.0 or earlier) and Yarn
|
||||
- Install Java (required for textures)
|
||||
- Install Node.js (v16 or earlier) and Yarn
|
||||
- Install Java (required for texture packer)
|
||||
- Run `yarn` in the root folder
|
||||
- Cd into `gulp` folder
|
||||
- `cd` into `gulp` folder
|
||||
- Run `yarn` and then `yarn gulp` - it should now open in your browser
|
||||
|
||||
**Notice**: This will produce a debug build with several debugging flags enabled. If you want to disable them, modify [`src/js/core/config.js`](src/js/core/config.js).
|
||||
|
||||
## Creating Mods
|
||||
|
||||
Mods can be found [here](https://shapez.mod.io). The documentation for creating mods can be found [here](mod_examples/), including a bunch of sample mods.
|
||||
|
||||
## Build Online with one-click setup
|
||||
|
||||
You can use [Gitpod](https://www.gitpod.io/) (an Online Open Source VS Code-like IDE which is free for Open Source) for working on issues and making PRs to this project. With a single click it will start a workspace and automatically:
|
||||
|
@ -47,11 +53,9 @@ Please checkout the [Translations readme](translations/).
|
|||
|
||||
## Contributing
|
||||
|
||||
Since this game is in the more or less early development, I will only accept pull requests which add an immediate benefit. Please understand that low quality PR's might be closed by me with a short comment explaining why.
|
||||
I will only accept pull requests which add a benefit to a large portion of the player base. If the feature is useful but only to a fraction of players, or is controversial, I recommend making a mod instead.
|
||||
|
||||
**If you want to add a new building, please understand that I can not simply add every building to the game!** I recommend to talk to me before implementing anything, to make sure its actually useful. Otherwise there is a high chance of your PR not getting merged.
|
||||
|
||||
If you want to add a new feature or in generally contribute I recommend to get in touch with me on Discord:
|
||||
If you want to add a new feature or in generally contribute I recommend to get in touch on Discord in advance, which largely increases the chance of the PR to get merged:
|
||||
|
||||
<a href="https://discord.com/invite/HN7EVzV" target="_blank">
|
||||
<img src="https://i.imgur.com/SoawBhW.png" alt="discord logo" width="100">
|
||||
|
@ -62,66 +66,7 @@ If you want to add a new feature or in generally contribute I recommend to get i
|
|||
The game is based on a custom engine which itself is based on the YORG.io 3 game engine (Actually it shares almost the same core).
|
||||
The code within the engine is relatively clean with some code for the actual game on top being hacky.
|
||||
|
||||
This project is based on ES5. Some ES2015 features are used but most of them are too slow, especially when polyfilled. For example, `Array.prototype.forEach` is only used within non-critical loops since its slower than a plain for loop.
|
||||
|
||||
#### Adding a new component
|
||||
|
||||
1. Create the component file in `src/js/game/components/<name_lowercase>.js`
|
||||
2. Create a component class (e.g. `MyFancyComponent`) which `extends Component`
|
||||
3. Create a `static getId()` method which should return the `PascalCaseName` without component (e.g. `MyFancy`)
|
||||
4. If any data needs to be persisted, create a `static getSchema()` which should return the properties to be saved (See other components)
|
||||
5. Add a constructor. **The constructor must be called with optional parameters only!** `new MyFancyComponent({})` should always work.
|
||||
6. Add any props you need in the constructor.
|
||||
7. Add the component in `src/js/game/component_registry.js`
|
||||
8. Add the component in `src/js/game/entity_components.js`
|
||||
9. Done! You can use your component now
|
||||
|
||||
#### Adding a new building
|
||||
|
||||
(The easiest way is to copy an existing building)
|
||||
|
||||
1. Create your building in `src/js/game/buildings/<my_building.js>`
|
||||
2. Create the building meta class, e.g. `MetaMyFancyBuilding extends MetaBuilding`
|
||||
3. Override the methods from MetaBuilding you want to override.
|
||||
4. Most important is `setupEntityComponents`
|
||||
5. Add the building to `src/js/game/meta_building_registry.js`: You need to register it on the registry, and also call `registerBuildingVariant`.
|
||||
6. Add the building to the right toolbar, e.g. `src/js/game/hud/parts/buildings_toolbar.js`:`supportedBuildings`
|
||||
7. Add a keybinding for the building in `src/js/game/key_action_mapper.js` in `KEYMAPPINGS.buildings`
|
||||
8. In `translations/base-en.yaml` add it to two sections: `buildings.[my_building].XXX` (See other buildings) and also `keybindings.mappings.[my_building]`. Be sure to do it the same way as other buildings do!
|
||||
9. Create a icon (128x128, [prefab](https://github.com/tobspr/shapez.io-artwork/blob/master/ui/toolbar-icons.psd)) for your building and save it in `res/ui/buildings_icons` with the id of your building
|
||||
10. Create a tutorial image (600x600) for your building and save it in `res/ui/building_tutorials`
|
||||
11. In `src/css/resources.scss` add your building to `$buildings` as well as `$buildingAndVariants`
|
||||
12. Done! Optional: Add a new reward for unlocking your building at some point.
|
||||
|
||||
#### Adding a new game system
|
||||
|
||||
1. Create the class in `src/js/game/systems/<system_name>.js`
|
||||
2. Derive it from `GameSystemWithFilter` if you want it to work on certain entities only which have the given components. Otherwise use `GameSystem` to do more generic stuff.
|
||||
3. Implement the `update()` method.
|
||||
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
|
||||
This project is based on ES5 (If I would develop it again, I would definitely use TypeScript). Some ES2015 features are used but most of them are too slow, especially when polyfilled. For example, `Array.prototype.forEach` is only used within non-critical loops since its slower than a plain for loop.
|
||||
|
||||
### Assets
|
||||
|
||||
|
@ -130,3 +75,11 @@ For most assets I use Adobe Photoshop, you can find them <a href="//github.com/t
|
|||
All assets will be automatically rebuilt into the atlas once changed (Thanks to dengr1065!)
|
||||
|
||||
<img src="https://i.imgur.com/W25Fkl0.png" alt="shapez.io Screenshot">
|
||||
|
||||
<br>
|
||||
|
||||
## Check out our other games!
|
||||
|
||||
<a href="https://tobspr.io" title="tobspr Games">
|
||||
<img src="https://i.imgur.com/uA2wcUy.png" alt="tobspr Games">
|
||||
</a>
|
||||
|
|
|
@ -14,8 +14,6 @@ app.commandLine.appendSwitch("disable-features", "HardwareMediaKeyHandling");
|
|||
|
||||
const isDev = app.commandLine.hasSwitch("dev");
|
||||
const isLocal = app.commandLine.hasSwitch("local");
|
||||
const safeMode = app.commandLine.hasSwitch("safe-mode");
|
||||
const externalMod = app.commandLine.getSwitchValue("load-mod");
|
||||
|
||||
const roamingFolder =
|
||||
process.env.APPDATA ||
|
||||
|
@ -60,7 +58,7 @@ function createWindow() {
|
|||
useContentSize: false,
|
||||
minWidth: 800,
|
||||
minHeight: 600,
|
||||
title: "shapez.io Standalone",
|
||||
title: "shapez.io Demo",
|
||||
transparent: false,
|
||||
icon: path.join(__dirname, "favicon" + faviconExtension),
|
||||
// fullscreen: true,
|
||||
|
@ -341,49 +339,8 @@ ipcMain.handle("fs-job", async (event, job) => {
|
|||
}
|
||||
});
|
||||
|
||||
ipcMain.handle("open-mods-folder", async () => {
|
||||
shell.openPath(modsPath);
|
||||
});
|
||||
|
||||
console.log("Loading mods ...");
|
||||
|
||||
function loadMods() {
|
||||
if (safeMode) {
|
||||
console.log("Safe Mode enabled for mods, skipping mod search");
|
||||
}
|
||||
console.log("Loading mods from", modsPath);
|
||||
let modFiles = safeMode
|
||||
? []
|
||||
: fs
|
||||
.readdirSync(modsPath)
|
||||
.filter(filename => filename.endsWith(".js"))
|
||||
.map(filename => path.join(modsPath, filename));
|
||||
|
||||
if (externalMod) {
|
||||
console.log("Adding external mod source:", externalMod);
|
||||
const externalModPaths = externalMod.split(",");
|
||||
modFiles = modFiles.concat(externalModPaths);
|
||||
}
|
||||
|
||||
return modFiles.map(filename => fs.readFileSync(filename, "utf8"));
|
||||
}
|
||||
|
||||
let mods = [];
|
||||
try {
|
||||
mods = loadMods();
|
||||
console.log("Loaded", mods.length, "mods");
|
||||
} catch (ex) {
|
||||
console.error("Failed to load mods");
|
||||
dialog.showErrorBox("Failed to load mods:", ex);
|
||||
}
|
||||
|
||||
ipcMain.handle("get-mods", async () => {
|
||||
return mods;
|
||||
return [];
|
||||
});
|
||||
|
||||
steam.init(isDev);
|
||||
|
||||
// Only allow achievements and puzzle DLC if no mods are loaded
|
||||
if (mods.length === 0) {
|
||||
steam.listen();
|
||||
}
|
||||
|
|
|
@ -507,7 +507,7 @@ serialize-error@^7.0.1:
|
|||
|
||||
"shapez.io-private-artifacts@github:tobspr/shapez.io-private-artifacts#abi-v99":
|
||||
version "0.1.0"
|
||||
resolved "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#b638501e81bba324923fc1b9d9aadc925da9b2c6"
|
||||
resolved "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#3293b20be26060fd36e9f00ded9ab5d0bdf57338"
|
||||
|
||||
sprintf-js@^1.1.2:
|
||||
version "1.1.2"
|
||||
|
|
|
@ -8,5 +8,11 @@
|
|||
<true/>
|
||||
<key>com.apple.security.cs.debugger</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -332,6 +332,16 @@ for (const prefix of ["", "china.", "wegame."]) {
|
|||
);
|
||||
}
|
||||
|
||||
// OS X build and release upload
|
||||
gulp.task(
|
||||
"build.darwin64-prod",
|
||||
gulp.series(
|
||||
"build.standalone-prod",
|
||||
"standalone.prepare",
|
||||
"standalone.package.prod.darwin64.signManually"
|
||||
)
|
||||
);
|
||||
|
||||
// Deploying!
|
||||
gulp.task(
|
||||
"main.deploy.alpha",
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
"crypto": "^1.0.1",
|
||||
"cssnano-preset-advanced": "^4.0.7",
|
||||
"delete-empty": "^3.0.0",
|
||||
"electron-notarize": "^1.2.1",
|
||||
"email-validator": "^2.0.4",
|
||||
"eslint": "^5.9.0",
|
||||
"fastdom": "^1.0.9",
|
||||
|
@ -55,6 +56,7 @@
|
|||
"strip-indent": "^3.0.0",
|
||||
"terser-webpack-plugin": "^1.1.0",
|
||||
"through2": "^3.0.1",
|
||||
"tobspr-osx-sign": "^1.0.1",
|
||||
"uglify-template-string-loader": "^1.1.0",
|
||||
"unused-files-webpack-plugin": "^3.4.0",
|
||||
"webpack": "^4.43.0",
|
||||
|
@ -73,7 +75,7 @@
|
|||
"babel-plugin-danger-remove-unused-import": "^1.1.2",
|
||||
"css-mqpacker": "^7.0.0",
|
||||
"cssnano": "^4.1.10",
|
||||
"electron-packager": "^14.0.6",
|
||||
"electron-packager": "15.4.0",
|
||||
"faster.js": "^1.1.0",
|
||||
"glob": "^7.1.3",
|
||||
"gulp": "^4.0.2",
|
||||
|
|
|
@ -7,6 +7,8 @@ const fs = require("fs");
|
|||
const fse = require("fs-extra");
|
||||
const buildutils = require("./buildutils");
|
||||
const execSync = require("child_process").execSync;
|
||||
const electronNotarize = require("electron-notarize");
|
||||
const { signAsync } = require("tobspr-osx-sign");
|
||||
|
||||
function gulptasksStandalone($, gulp) {
|
||||
const targets = [
|
||||
|
@ -96,6 +98,24 @@ function gulptasksStandalone($, gulp) {
|
|||
cb();
|
||||
});
|
||||
|
||||
gulp.task(taskPrefix + "standalone.prepareVDF.darwin", cb => {
|
||||
if (!steam) {
|
||||
cb();
|
||||
return;
|
||||
}
|
||||
|
||||
const hash = buildutils.getRevision();
|
||||
const steampipeDir = path.join(__dirname, "steampipe-darwin", "scripts");
|
||||
const templateContents = fs
|
||||
.readFileSync(path.join(steampipeDir, "app.vdf.template"), { encoding: "utf-8" })
|
||||
.toString();
|
||||
|
||||
const convertedContents = templateContents.replace("$DESC$", "Commit " + hash);
|
||||
fs.writeFileSync(path.join(steampipeDir, "app.vdf"), convertedContents);
|
||||
|
||||
cb();
|
||||
});
|
||||
|
||||
gulp.task(taskPrefix + "standalone.prepare.minifyCode", () => {
|
||||
return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir));
|
||||
});
|
||||
|
@ -127,11 +147,11 @@ function gulptasksStandalone($, gulp) {
|
|||
|
||||
/**
|
||||
*
|
||||
* @param {'win32'|'linux'} platform
|
||||
* @param {'win32'|'linux'|'darwin'} platform
|
||||
* @param {'x64'|'ia32'} arch
|
||||
* @param {function():void} cb
|
||||
*/
|
||||
function packageStandalone(platform, arch, cb) {
|
||||
function packageStandalone(platform, arch, cb, isRelease = true) {
|
||||
const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml"));
|
||||
const privateArtifactsPath = "node_modules/shapez.io-private-artifacts";
|
||||
|
||||
|
@ -154,8 +174,23 @@ function gulptasksStandalone($, gulp) {
|
|||
name: "shapez.io-standalone" + suffix,
|
||||
out: tempDestDir,
|
||||
overwrite: true,
|
||||
appBundleId: "io.shapez.standalone",
|
||||
appBundleId: "tobspr.shapezio.standalone",
|
||||
appCategoryType: "public.app-category.games",
|
||||
...(isRelease &&
|
||||
platform === "darwin" && {
|
||||
osxSign: {
|
||||
"identity": process.env.SHAPEZ_CLI_APPLE_CERT_NAME,
|
||||
"hardenedRuntime": true,
|
||||
"entitlements": "entitlements.plist",
|
||||
"entitlements-inherit": "entitlements.plist",
|
||||
"signatureFlags": ["library"],
|
||||
"version": "16.0.7",
|
||||
},
|
||||
osxNotarize: {
|
||||
appleId: process.env.SHAPEZ_CLI_APPLE_ID,
|
||||
appleIdPassword: process.env.SHAPEZ_CLI_APPLE_APP_PW,
|
||||
},
|
||||
}),
|
||||
}).then(
|
||||
appPaths => {
|
||||
console.log("Packages created:", appPaths);
|
||||
|
@ -185,6 +220,22 @@ function gulptasksStandalone($, gulp) {
|
|||
);
|
||||
fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
|
||||
}
|
||||
if (platform === "darwin") {
|
||||
if (!isRelease) {
|
||||
fse.copySync(
|
||||
path.join(tempDestBuildDir, "steam_appid.txt"),
|
||||
path.join(
|
||||
path.join(
|
||||
appPath,
|
||||
"shapez.io-standalone.app",
|
||||
"Contents",
|
||||
"MacOS"
|
||||
),
|
||||
"steam_appid.txt"
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -197,10 +248,89 @@ function gulptasksStandalone($, gulp) {
|
|||
);
|
||||
}
|
||||
|
||||
// Manual signing with patched @electron/osx-sign (we need --no-strict)
|
||||
gulp.task(taskPrefix + "standalone.package.prod.darwin64.signManually", cb =>
|
||||
packageStandalone(
|
||||
"darwin",
|
||||
"x64",
|
||||
() => {
|
||||
const appFile = path.join(tempDestDir, "shapez.io-standalone-darwin-x64");
|
||||
const appFileInner = path.join(appFile, "shapez.io-standalone.app");
|
||||
const appIdDest = path.join(
|
||||
path.join(appFileInner, "Contents", "MacOS"),
|
||||
"steam_appid.txt"
|
||||
);
|
||||
console.warn("++ Preparing ++");
|
||||
fse.copySync(path.join(tempDestBuildDir, "steam_appid.txt"), appIdDest);
|
||||
|
||||
console.warn("++ Signing ++");
|
||||
console.warn("Signing steam_appid.txt");
|
||||
|
||||
execSync(
|
||||
`codesign --force --verbose --options runtime --timestamp --no-strict --sign "${
|
||||
process.env.SHAPEZ_CLI_APPLE_CERT_NAME
|
||||
}" --entitlements "${path.join(__dirname, "entitlements.plist")}" ${appIdDest}`,
|
||||
{
|
||||
cwd: appFile,
|
||||
}
|
||||
);
|
||||
|
||||
console.warn("Base dir:", appFile);
|
||||
|
||||
signAsync({
|
||||
app: appFileInner,
|
||||
hardenedRuntime: true,
|
||||
identity: process.env.SHAPEZ_CLI_APPLE_CERT_NAME,
|
||||
strictVerify: false,
|
||||
|
||||
version: "16.0.7",
|
||||
type: "distribution",
|
||||
optionsForFile: f => {
|
||||
return {
|
||||
entitlements: path.join(__dirname, "entitlements.plist"),
|
||||
hardenedRuntime: true,
|
||||
signatureFlags: ["runtime"],
|
||||
};
|
||||
},
|
||||
}).then(() => {
|
||||
execSync(
|
||||
`codesign --verify --verbose ${path.join(appFile, "shapez.io-standalone.app")}`,
|
||||
{
|
||||
cwd: appFile,
|
||||
}
|
||||
);
|
||||
|
||||
console.warn("++ Notarizing ++");
|
||||
electronNotarize
|
||||
.notarize({
|
||||
appPath: path.join(appFile, "shapez.io-standalone.app"),
|
||||
tool: "legacy",
|
||||
appBundleId: "tobspr.shapezio.standalone",
|
||||
|
||||
appleId: process.env.SHAPEZ_CLI_APPLE_ID,
|
||||
appleIdPassword: process.env.SHAPEZ_CLI_APPLE_APP_PW,
|
||||
teamId: process.env.SHAPEZ_CLI_APPLE_TEAM_ID,
|
||||
})
|
||||
.then(() => {
|
||||
console.warn("-> Notarized!");
|
||||
cb();
|
||||
});
|
||||
});
|
||||
},
|
||||
false
|
||||
)
|
||||
);
|
||||
|
||||
gulp.task(taskPrefix + "standalone.package.prod.win64", cb => packageStandalone("win32", "x64", cb));
|
||||
gulp.task(taskPrefix + "standalone.package.prod.linux64", cb =>
|
||||
packageStandalone("linux", "x64", cb)
|
||||
);
|
||||
gulp.task(taskPrefix + "standalone.package.prod.darwin64", cb =>
|
||||
packageStandalone("darwin", "x64", cb)
|
||||
);
|
||||
gulp.task(taskPrefix + "standalone.package.prod.darwin64.unsigned", cb =>
|
||||
packageStandalone("darwin", "x64", cb, false)
|
||||
);
|
||||
|
||||
gulp.task(
|
||||
taskPrefix + "standalone.package.prod",
|
||||
|
@ -208,7 +338,8 @@ function gulptasksStandalone($, gulp) {
|
|||
taskPrefix + "standalone.prepare",
|
||||
gulp.parallel(
|
||||
taskPrefix + "standalone.package.prod.win64",
|
||||
taskPrefix + "standalone.package.prod.linux64"
|
||||
taskPrefix + "standalone.package.prod.linux64",
|
||||
taskPrefix + "standalone.package.prod.darwin64"
|
||||
)
|
||||
)
|
||||
);
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
"appbuild"
|
||||
{
|
||||
"appid" "1930750"
|
||||
"desc" "$DESC$"
|
||||
"buildoutput" "/Users/tobiasspringer/work/shapez.io/gulp/steampipe-darwin/steamtmp"
|
||||
"contentroot" ""
|
||||
"setlive" ""
|
||||
"preview" "0"
|
||||
"local" ""
|
||||
"depots"
|
||||
{
|
||||
"1930756" "/Users/tobiasspringer/work/shapez.io/gulp/steampipe-darwin/scripts/darwin.vdf"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
"DepotBuildConfig"
|
||||
{
|
||||
"DepotID" "1930756"
|
||||
"contentroot" "/Users/tobiasspringer/work/shapez.io/tmp_standalone_files/shapez.io-standalone-darwin-x64"
|
||||
"FileMapping"
|
||||
{
|
||||
"LocalPath" "*"
|
||||
"DepotPath" "."
|
||||
"recursive" "1"
|
||||
}
|
||||
"FileExclusion" "*.pdb"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
yarn gulp standalone.prepareVDF.darwin
|
||||
steamcmd.sh +login $STEAM_UPLOAD_SHAPEZ_ID $STEAM_UPLOAD_SHAPEZ_USER +run_app_build $PWD/scripts/app.vdf +quit
|
|
@ -1,6 +1,6 @@
|
|||
"appbuild"
|
||||
{
|
||||
"appid" "1318690"
|
||||
"appid" "1930750"
|
||||
"desc" "$DESC$"
|
||||
"buildoutput" "C:\work\shapez\shapez.io\gulp\steampipe\steamtemp"
|
||||
"contentroot" ""
|
||||
|
@ -9,9 +9,9 @@
|
|||
"local" ""
|
||||
"depots"
|
||||
{
|
||||
"1318691" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\windows.vdf"
|
||||
"1318694" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-windows.vdf"
|
||||
"1318692" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\linux.vdf"
|
||||
"1318695" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-linux.vdf"
|
||||
"1930753" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\windows.vdf"
|
||||
"1930754" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-windows.vdf"
|
||||
"1930752" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\linux.vdf"
|
||||
"1930755" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-linux.vdf"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"DepotBuildConfig"
|
||||
{
|
||||
"DepotID" "1318695"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-linux-x64"
|
||||
"DepotID" "1930755"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-demochina-linux-x64"
|
||||
"FileMapping"
|
||||
{
|
||||
"LocalPath" "*"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"DepotBuildConfig"
|
||||
{
|
||||
"DepotID" "1318694"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-win32-x64"
|
||||
"DepotID" "1930754"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-demochina-win32-x64"
|
||||
"FileMapping"
|
||||
{
|
||||
"LocalPath" "*"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"DepotBuildConfig"
|
||||
{
|
||||
"DepotID" "1318692"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64"
|
||||
"DepotID" "1930752"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-demo-linux-x64"
|
||||
"FileMapping"
|
||||
{
|
||||
"LocalPath" "*"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"DepotBuildConfig"
|
||||
{
|
||||
"DepotID" "1318691"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64"
|
||||
"DepotID" "1930753"
|
||||
"contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-demo-win32-x64"
|
||||
"FileMapping"
|
||||
{
|
||||
"LocalPath" "*"
|
||||
|
|
453
gulp/yarn.lock
453
gulp/yarn.lock
|
@ -657,17 +657,21 @@
|
|||
resolved "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz"
|
||||
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
|
||||
|
||||
"@electron/get@^1.3.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.npmjs.org/@electron/get/-/get-1.5.0.tgz"
|
||||
integrity sha512-tafxBz6n08G6SX961F/h8XFtpB/DdwRvJJoDeOH9x78jDSCMQ2G/rRWqSwLFp9oeMFBJf0Pf5Kkw6TKt5w9TWg==
|
||||
"@electron/get@^1.6.0":
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40"
|
||||
integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
env-paths "^2.2.0"
|
||||
fs-extra "^8.1.0"
|
||||
got "^9.6.0"
|
||||
sanitize-filename "^1.6.2"
|
||||
sumchecker "^3.0.0"
|
||||
progress "^2.0.3"
|
||||
semver "^6.2.0"
|
||||
sumchecker "^3.0.1"
|
||||
optionalDependencies:
|
||||
global-agent "^3.0.0"
|
||||
global-tunnel-ng "^2.7.1"
|
||||
|
||||
"@jimp/bmp@^0.6.8":
|
||||
version "0.6.8"
|
||||
|
@ -921,6 +925,13 @@
|
|||
dependencies:
|
||||
core-js "^2.5.7"
|
||||
|
||||
"@malept/cross-spawn-promise@^1.1.0":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
|
||||
integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==
|
||||
dependencies:
|
||||
cross-spawn "^7.0.1"
|
||||
|
||||
"@nodelib/fs.scandir@2.1.3":
|
||||
version "2.1.3"
|
||||
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz"
|
||||
|
@ -1009,6 +1020,13 @@
|
|||
resolved "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz"
|
||||
integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
|
||||
|
||||
"@types/yauzl@^2.9.1":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
|
||||
integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@webassemblyjs/ast@1.9.0":
|
||||
version "1.9.0"
|
||||
resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz"
|
||||
|
@ -1575,18 +1593,17 @@ arraybuffer.slice@~0.0.7:
|
|||
resolved "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz"
|
||||
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
|
||||
|
||||
asar@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/asar/-/asar-2.0.1.tgz"
|
||||
integrity sha512-Vo9yTuUtyFahkVMFaI6uMuX6N7k5DWa6a/8+7ov0/f8Lq9TVR0tUjzSzxQSxT1Y+RJIZgnP7BVb6Uhi+9cjxqA==
|
||||
asar@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/asar/-/asar-3.1.0.tgz#70b0509449fe3daccc63beb4d3c7d2e24d3c6473"
|
||||
integrity sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==
|
||||
dependencies:
|
||||
chromium-pickle-js "^0.2.0"
|
||||
commander "^2.20.0"
|
||||
cuint "^0.2.2"
|
||||
glob "^7.1.3"
|
||||
commander "^5.0.0"
|
||||
glob "^7.1.6"
|
||||
minimatch "^3.0.4"
|
||||
mkdirp "^0.5.1"
|
||||
tmp-promise "^1.0.5"
|
||||
optionalDependencies:
|
||||
"@types/glob" "^7.1.1"
|
||||
|
||||
asn1.js@^4.0.0:
|
||||
version "4.10.1"
|
||||
|
@ -1713,6 +1730,11 @@ asynckit@^0.4.0:
|
|||
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
|
||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||
|
||||
at-least-node@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
||||
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
|
||||
|
||||
atob@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"
|
||||
|
@ -1967,6 +1989,11 @@ base64-js@^1.0.2, base64-js@^1.2.3:
|
|||
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz"
|
||||
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
||||
|
||||
base64-js@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||
|
||||
base64id@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz"
|
||||
|
@ -2145,6 +2172,11 @@ boolbase@^1.0.0, boolbase@~1.0.0:
|
|||
resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
|
||||
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
|
||||
|
||||
boolean@^3.0.1:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
|
||||
integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
|
||||
|
||||
brace-expansion@^1.0.0, brace-expansion@^1.1.7:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
|
||||
|
@ -2965,6 +2997,11 @@ commander@^2.19.0, commander@^2.2.0, commander@^2.20.0, commander@^2.8.1:
|
|||
resolved "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz"
|
||||
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
|
||||
|
||||
commander@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
|
||||
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
|
||||
|
||||
commander@~2.19.0:
|
||||
version "2.19.0"
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz"
|
||||
|
@ -3202,6 +3239,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
|
|||
safe-buffer "^5.0.1"
|
||||
sha.js "^2.4.8"
|
||||
|
||||
cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec"
|
||||
integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==
|
||||
dependencies:
|
||||
"@malept/cross-spawn-promise" "^1.1.0"
|
||||
is-wsl "^2.2.0"
|
||||
which "^2.0.2"
|
||||
|
||||
cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"
|
||||
|
@ -3222,7 +3268,7 @@ cross-spawn@^5.0.1:
|
|||
shebang-command "^1.2.0"
|
||||
which "^1.2.9"
|
||||
|
||||
cross-spawn@^7.0.0, cross-spawn@^7.0.3:
|
||||
cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
|
||||
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
|
||||
|
@ -3231,13 +3277,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3:
|
|||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
cross-zip@^2.1.5:
|
||||
version "2.1.6"
|
||||
resolved "https://registry.npmjs.org/cross-zip/-/cross-zip-2.1.6.tgz"
|
||||
integrity sha512-xLIETNkzRcU6jGRzenJyRFxahbtP4628xEKMTI/Ql0Vu8m4h8M7uRLVi7E5OYHuJ6VQPsG4icJumKAFUvfm0+A==
|
||||
dependencies:
|
||||
rimraf "^3.0.0"
|
||||
|
||||
crypto-browserify@^3.11.0:
|
||||
version "3.12.0"
|
||||
resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz"
|
||||
|
@ -3467,11 +3506,6 @@ cssstyle@^1.1.1:
|
|||
dependencies:
|
||||
cssom "0.3.x"
|
||||
|
||||
cuint@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz"
|
||||
integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=
|
||||
|
||||
currently-unhandled@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz"
|
||||
|
@ -3559,6 +3593,13 @@ debug@^3.1.0, debug@^3.2.6:
|
|||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@~0.8.1:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz"
|
||||
|
@ -3755,6 +3796,11 @@ detect-indent@^4.0.0:
|
|||
dependencies:
|
||||
repeating "^2.0.0"
|
||||
|
||||
detect-node@^2.0.4:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
|
||||
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
|
||||
|
||||
dev-ip@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz"
|
||||
|
@ -3958,18 +4004,18 @@ ee-first@1.1.1:
|
|||
resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
electron-notarize@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.npmjs.org/electron-notarize/-/electron-notarize-0.1.1.tgz"
|
||||
integrity sha512-TpKfJcz4LXl5jiGvZTs5fbEx+wUFXV5u8voeG5WCHWfY/cdgdD8lDZIZRqLVOtR3VO+drgJ9aiSHIO9TYn/fKg==
|
||||
electron-notarize@^1.1.1, electron-notarize@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.2.1.tgz#347c18eca8e29dddadadee511b870c13d4008baf"
|
||||
integrity sha512-u/ECWhIrhkSQpZM4cJzVZ5TsmkaqrRo5LDC/KMbGF0sPkm53Ng59+M0zp8QVaql0obfJy9vlVT+4iOkAi2UDlA==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
fs-extra "^8.0.1"
|
||||
fs-extra "^9.0.1"
|
||||
|
||||
electron-osx-sign@^0.4.11:
|
||||
version "0.4.13"
|
||||
resolved "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.13.tgz"
|
||||
integrity sha512-+44lasF26lSBLh9HDG6TGpPjuqqtWGD9Pcp+YglE8gyf1OGYdbW8UCIshKPh69O/AcdvDB0ohaTYQz3nbGPbtw==
|
||||
electron-osx-sign@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz#fc258c5e896859904bbe3d01da06902c04b51c3a"
|
||||
integrity sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==
|
||||
dependencies:
|
||||
bluebird "^3.5.0"
|
||||
compare-version "^0.1.2"
|
||||
|
@ -3978,28 +4024,29 @@ electron-osx-sign@^0.4.11:
|
|||
minimist "^1.2.0"
|
||||
plist "^3.0.1"
|
||||
|
||||
electron-packager@^14.0.6:
|
||||
version "14.0.6"
|
||||
resolved "https://registry.npmjs.org/electron-packager/-/electron-packager-14.0.6.tgz"
|
||||
integrity sha512-X+ikV+TnnNkIrK93vOjsjPeykCQBFxBS7LXKMTE1s62rXWirGMdjWL+edVkBOMRkH0ROJyFmWM28Dpj6sfEg+A==
|
||||
electron-packager@15.4.0:
|
||||
version "15.4.0"
|
||||
resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.4.0.tgz#07ea036b70cde2062d4c8dce4d907d793b303998"
|
||||
integrity sha512-JrrLcBP15KGrPj0cZ/ALKGmaQ4gJkn3mocf0E3bRKdR3kxKWYcDRpCvdhksYDXw/r3I6tMEcZ7XzyApWFXdVpw==
|
||||
dependencies:
|
||||
"@electron/get" "^1.3.0"
|
||||
asar "^2.0.1"
|
||||
cross-zip "^2.1.5"
|
||||
"@electron/get" "^1.6.0"
|
||||
asar "^3.1.0"
|
||||
cross-spawn-windows-exe "^1.2.0"
|
||||
debug "^4.0.1"
|
||||
electron-notarize "^0.1.1"
|
||||
electron-osx-sign "^0.4.11"
|
||||
fs-extra "^8.1.0"
|
||||
electron-notarize "^1.1.1"
|
||||
electron-osx-sign "^0.5.0"
|
||||
extract-zip "^2.0.0"
|
||||
filenamify "^4.1.0"
|
||||
fs-extra "^9.0.0"
|
||||
galactus "^0.2.1"
|
||||
get-package-info "^1.0.0"
|
||||
junk "^3.1.0"
|
||||
parse-author "^2.0.0"
|
||||
plist "^3.0.0"
|
||||
rcedit "^2.0.0"
|
||||
rcedit "^3.0.1"
|
||||
resolve "^1.1.6"
|
||||
sanitize-filename "^1.6.0"
|
||||
semver "^6.0.0"
|
||||
yargs-parser "^13.0.0"
|
||||
semver "^7.1.3"
|
||||
yargs-parser "^20.0.0"
|
||||
|
||||
electron-to-chromium@^1.3.247:
|
||||
version "1.3.264"
|
||||
|
@ -4044,7 +4091,7 @@ emojis-list@^3.0.0:
|
|||
resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz"
|
||||
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
|
||||
|
||||
encodeurl@~1.0.1, encodeurl@~1.0.2:
|
||||
encodeurl@^1.0.2, encodeurl@~1.0.1, encodeurl@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
|
||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||
|
@ -4198,6 +4245,11 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.51, es5-ext@
|
|||
es6-symbol "~3.1.1"
|
||||
next-tick "^1.0.0"
|
||||
|
||||
es6-error@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
|
||||
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
|
||||
|
||||
es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz"
|
||||
|
@ -4274,6 +4326,11 @@ escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^
|
|||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
escape-string-regexp@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
||||
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
||||
|
||||
escodegen@^1.11.0:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz"
|
||||
|
@ -4661,6 +4718,17 @@ extglob@^2.0.4:
|
|||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
extract-zip@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
||||
integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
get-stream "^5.1.0"
|
||||
yauzl "^2.10.0"
|
||||
optionalDependencies:
|
||||
"@types/yauzl" "^2.9.1"
|
||||
|
||||
extsprintf@1.3.0, extsprintf@^1.2.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
|
||||
|
@ -4847,6 +4915,15 @@ filenamify@^2.0.0:
|
|||
strip-outer "^1.0.0"
|
||||
trim-repeated "^1.0.0"
|
||||
|
||||
filenamify@^4.1.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106"
|
||||
integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==
|
||||
dependencies:
|
||||
filename-reserved-regex "^2.0.0"
|
||||
strip-outer "^1.0.1"
|
||||
trim-repeated "^1.0.0"
|
||||
|
||||
fill-range@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz"
|
||||
|
@ -5124,6 +5201,15 @@ fs-extra@3.0.1, fs-extra@^3.0.1:
|
|||
jsonfile "^3.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-extra@^10.0.0:
|
||||
version "10.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
|
||||
integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
|
||||
dependencies:
|
||||
graceful-fs "^4.2.0"
|
||||
jsonfile "^6.0.1"
|
||||
universalify "^2.0.0"
|
||||
|
||||
fs-extra@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz"
|
||||
|
@ -5142,7 +5228,7 @@ fs-extra@^7.0.0:
|
|||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-extra@^8.0.1, fs-extra@^8.1.0:
|
||||
fs-extra@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz"
|
||||
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
|
||||
|
@ -5151,6 +5237,16 @@ fs-extra@^8.0.1, fs-extra@^8.1.0:
|
|||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-extra@^9.0.0, fs-extra@^9.0.1:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
|
||||
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
|
||||
dependencies:
|
||||
at-least-node "^1.0.0"
|
||||
graceful-fs "^4.2.0"
|
||||
jsonfile "^6.0.1"
|
||||
universalify "^2.0.0"
|
||||
|
||||
fs-mkdirp-stream@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz"
|
||||
|
@ -5428,6 +5524,18 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, gl
|
|||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.1.6:
|
||||
version "7.2.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
|
||||
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.1.1"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@~3.1.21:
|
||||
version "3.1.21"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz"
|
||||
|
@ -5445,6 +5553,18 @@ glob@~3.2.6:
|
|||
inherits "2"
|
||||
minimatch "0.3"
|
||||
|
||||
global-agent@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
|
||||
integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
|
||||
dependencies:
|
||||
boolean "^3.0.1"
|
||||
es6-error "^4.1.1"
|
||||
matcher "^3.0.0"
|
||||
roarr "^2.15.3"
|
||||
semver "^7.3.2"
|
||||
serialize-error "^7.0.1"
|
||||
|
||||
global-modules@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz"
|
||||
|
@ -5481,6 +5601,16 @@ global-prefix@^3.0.0:
|
|||
kind-of "^6.0.2"
|
||||
which "^1.3.1"
|
||||
|
||||
global-tunnel-ng@^2.7.1:
|
||||
version "2.7.1"
|
||||
resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f"
|
||||
integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==
|
||||
dependencies:
|
||||
encodeurl "^1.0.2"
|
||||
lodash "^4.17.10"
|
||||
npm-conf "^1.1.3"
|
||||
tunnel "^0.0.6"
|
||||
|
||||
global@~4.3.0:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.npmjs.org/global/-/global-4.3.2.tgz"
|
||||
|
@ -5499,6 +5629,13 @@ globals@^9.18.0, globals@^9.2.0:
|
|||
resolved "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz"
|
||||
integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
|
||||
|
||||
globalthis@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
|
||||
integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
|
||||
dependencies:
|
||||
define-properties "^1.1.3"
|
||||
|
||||
globby@^10.0.0:
|
||||
version "10.0.2"
|
||||
resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz"
|
||||
|
@ -6703,6 +6840,11 @@ is-directory@^0.3.1:
|
|||
resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz"
|
||||
integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
|
||||
|
||||
is-docker@^2.0.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
|
||||
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
|
||||
|
||||
is-extendable@^0.1.0, is-extendable@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz"
|
||||
|
@ -6942,6 +7084,13 @@ is-wsl@^1.1.0:
|
|||
resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz"
|
||||
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
|
||||
|
||||
is-wsl@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
|
||||
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
|
||||
dependencies:
|
||||
is-docker "^2.0.0"
|
||||
|
||||
is@^3.2.1:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.npmjs.org/is/-/is-3.3.0.tgz"
|
||||
|
@ -6969,6 +7118,11 @@ isbinaryfile@^3.0.2:
|
|||
dependencies:
|
||||
buffer-alloc "^1.2.0"
|
||||
|
||||
isbinaryfile@^4.0.8:
|
||||
version "4.0.10"
|
||||
resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3"
|
||||
integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
|
||||
|
@ -7146,7 +7300,7 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
|
|||
dependencies:
|
||||
jsonify "~0.0.0"
|
||||
|
||||
json-stringify-safe@~5.0.1:
|
||||
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
|
||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||
|
@ -7184,6 +7338,15 @@ jsonfile@^4.0.0:
|
|||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jsonfile@^6.0.1:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
|
||||
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
|
||||
dependencies:
|
||||
universalify "^2.0.0"
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jsonify@~0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
|
||||
|
@ -7844,6 +8007,13 @@ lru-cache@^5.1.1:
|
|||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
lru-cache@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
lz-string@^1.4.4:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz"
|
||||
|
@ -7925,6 +8095,13 @@ matchdep@^2.0.0:
|
|||
resolve "^1.4.0"
|
||||
stack-trace "0.0.10"
|
||||
|
||||
matcher@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
|
||||
integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
|
||||
dependencies:
|
||||
escape-string-regexp "^4.0.0"
|
||||
|
||||
md5.js@^1.3.4:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz"
|
||||
|
@ -8135,6 +8312,13 @@ minimatch@^2.0.1:
|
|||
dependencies:
|
||||
brace-expansion "^1.0.0"
|
||||
|
||||
minimatch@^3.1.1:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@~0.2.11:
|
||||
version "0.2.14"
|
||||
resolved "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz"
|
||||
|
@ -8173,6 +8357,11 @@ minimist@^1.2.5:
|
|||
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
|
||||
minimist@^1.2.6:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
minimist@~0.0.1:
|
||||
version "0.0.10"
|
||||
resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz"
|
||||
|
@ -8247,7 +8436,7 @@ ms@2.0.0:
|
|||
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
|
||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||
|
||||
ms@^2.1.1:
|
||||
ms@2.1.2, ms@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
|
@ -8457,7 +8646,7 @@ now-and-later@^2.0.0:
|
|||
dependencies:
|
||||
once "^1.3.2"
|
||||
|
||||
npm-conf@^1.1.0:
|
||||
npm-conf@^1.1.0, npm-conf@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz"
|
||||
integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==
|
||||
|
@ -9249,6 +9438,14 @@ plist@^3.0.0, plist@^3.0.1:
|
|||
xmlbuilder "^9.0.7"
|
||||
xmldom "0.1.x"
|
||||
|
||||
plist@^3.0.5:
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987"
|
||||
integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==
|
||||
dependencies:
|
||||
base64-js "^1.5.1"
|
||||
xmlbuilder "^9.0.7"
|
||||
|
||||
plugin-error@1.0.1, plugin-error@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz"
|
||||
|
@ -10063,7 +10260,7 @@ progress@^1.1.8:
|
|||
resolved "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz"
|
||||
integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
|
||||
|
||||
progress@^2.0.0:
|
||||
progress@^2.0.0, progress@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz"
|
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||
|
@ -10264,10 +10461,12 @@ raw-loader@^4.0.2:
|
|||
loader-utils "^2.0.0"
|
||||
schema-utils "^3.0.0"
|
||||
|
||||
rcedit@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/rcedit/-/rcedit-2.0.0.tgz"
|
||||
integrity sha512-XcFGyEBjhWSsud+R8elwQtGBbVkCf7tAiad+nXo5jc6l2rMf46NfGNwjnmBNneBIZDfq+Npf8lwP371JTONfrw==
|
||||
rcedit@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-3.0.1.tgz#ae21b43e49c075f4d84df1929832a12c302f3c90"
|
||||
integrity sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw==
|
||||
dependencies:
|
||||
cross-spawn-windows-exe "^1.1.0"
|
||||
|
||||
rcfinder@^0.1.6:
|
||||
version "0.1.9"
|
||||
|
@ -10740,13 +10939,6 @@ rimraf@^2.4.0, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3:
|
|||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
rimraf@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz"
|
||||
integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
ripemd160@^2.0.0, ripemd160@^2.0.1:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz"
|
||||
|
@ -10755,6 +10947,18 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
|
|||
hash-base "^3.0.0"
|
||||
inherits "^2.0.1"
|
||||
|
||||
roarr@^2.15.3:
|
||||
version "2.15.4"
|
||||
resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
|
||||
integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
|
||||
dependencies:
|
||||
boolean "^3.0.1"
|
||||
detect-node "^2.0.4"
|
||||
globalthis "^1.0.1"
|
||||
json-stringify-safe "^5.0.1"
|
||||
semver-compare "^1.0.0"
|
||||
sprintf-js "^1.1.2"
|
||||
|
||||
run-async@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz"
|
||||
|
@ -10827,13 +11031,6 @@ safe-regex@^1.1.0:
|
|||
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
sanitize-filename@^1.6.0, sanitize-filename@^1.6.2:
|
||||
version "1.6.3"
|
||||
resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz"
|
||||
integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
|
||||
dependencies:
|
||||
truncate-utf8-bytes "^1.0.0"
|
||||
|
||||
sass-lint@^1.12.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.npmjs.org/sass-lint/-/sass-lint-1.13.1.tgz"
|
||||
|
@ -10922,6 +11119,11 @@ seek-bzip@^1.0.5:
|
|||
dependencies:
|
||||
commander "~2.8.1"
|
||||
|
||||
semver-compare@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
|
||||
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
|
||||
|
||||
semver-greatest-satisfied-range@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz"
|
||||
|
@ -10951,11 +11153,18 @@ semver@^4.1.0:
|
|||
resolved "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz"
|
||||
integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=
|
||||
|
||||
semver@^6.0.0, semver@^6.3.0:
|
||||
semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
|
||||
version "6.3.0"
|
||||
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
semver@^7.1.3, semver@^7.3.2:
|
||||
version "7.3.7"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
|
||||
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
send@0.16.2:
|
||||
version "0.16.2"
|
||||
resolved "https://registry.npmjs.org/send/-/send-0.16.2.tgz"
|
||||
|
@ -10985,6 +11194,13 @@ serialize-error@^3.0.0:
|
|||
resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz"
|
||||
integrity sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A==
|
||||
|
||||
serialize-error@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
|
||||
integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
|
||||
dependencies:
|
||||
type-fest "^0.13.1"
|
||||
|
||||
serialize-javascript@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz"
|
||||
|
@ -11350,6 +11566,11 @@ split-string@^3.0.1, split-string@^3.0.2:
|
|||
dependencies:
|
||||
extend-shallow "^3.0.0"
|
||||
|
||||
sprintf-js@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
|
||||
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
|
||||
|
||||
sprintf-js@~1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
|
||||
|
@ -11703,7 +11924,7 @@ strip-json-comments@~1.0.1:
|
|||
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz"
|
||||
integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
|
||||
|
||||
strip-outer@^1.0.0:
|
||||
strip-outer@^1.0.0, strip-outer@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz"
|
||||
integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
|
||||
|
@ -11726,10 +11947,10 @@ stylehacks@^4.0.0:
|
|||
postcss "^7.0.0"
|
||||
postcss-selector-parser "^3.0.0"
|
||||
|
||||
sumchecker@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.0.tgz"
|
||||
integrity sha512-yreseuC/z4iaodVoq07XULEOO9p4jnQazO7mbrnDSvWAU/y2cbyIKs+gWJptfcGu9R+1l27K8Rkj0bfvqnBpgQ==
|
||||
sumchecker@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
|
||||
integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
|
||||
dependencies:
|
||||
debug "^4.1.0"
|
||||
|
||||
|
@ -12043,21 +12264,6 @@ tinycolor2@^1.4.1:
|
|||
resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz"
|
||||
integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=
|
||||
|
||||
tmp-promise@^1.0.5:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.1.0.tgz"
|
||||
integrity sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==
|
||||
dependencies:
|
||||
bluebird "^3.5.0"
|
||||
tmp "0.1.0"
|
||||
|
||||
tmp@0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz"
|
||||
integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==
|
||||
dependencies:
|
||||
rimraf "^2.6.3"
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz"
|
||||
|
@ -12142,6 +12348,18 @@ to-through@^2.0.0:
|
|||
dependencies:
|
||||
through2 "^2.0.3"
|
||||
|
||||
tobspr-osx-sign@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tobspr-osx-sign/-/tobspr-osx-sign-1.0.1.tgz#5cca32185d813357b556a6a839305558656c45d5"
|
||||
integrity sha512-jXSw9n/ivAnHwwpImvHnTkhbeI06ZDvLKLP3rryZLBoAt1nfljoIEgdPz7vNlOUBGwVEYOl2VauViNOmZPNZ7A==
|
||||
dependencies:
|
||||
compare-version "^0.1.2"
|
||||
debug "^4.3.4"
|
||||
fs-extra "^10.0.0"
|
||||
isbinaryfile "^4.0.8"
|
||||
minimist "^1.2.6"
|
||||
plist "^3.0.5"
|
||||
|
||||
toidentifier@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
|
||||
|
@ -12192,13 +12410,6 @@ trim@^0.0.1:
|
|||
resolved "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz"
|
||||
integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
|
||||
|
||||
truncate-utf8-bytes@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz"
|
||||
integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys=
|
||||
dependencies:
|
||||
utf8-byte-length "^1.0.1"
|
||||
|
||||
tslib@^1.9.0:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz"
|
||||
|
@ -12216,6 +12427,11 @@ tunnel-agent@^0.6.0:
|
|||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
tunnel@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
|
||||
integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
|
||||
|
||||
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
||||
version "0.14.5"
|
||||
resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
|
||||
|
@ -12233,6 +12449,11 @@ type-fest@^0.11.0:
|
|||
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz"
|
||||
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
|
||||
|
||||
type-fest@^0.13.1:
|
||||
version "0.13.1"
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
|
||||
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
|
||||
|
||||
type-is@~1.5.1:
|
||||
version "1.5.7"
|
||||
resolved "https://registry.npmjs.org/type-is/-/type-is-1.5.7.tgz"
|
||||
|
@ -12387,6 +12608,11 @@ universalify@^0.1.0:
|
|||
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
|
||||
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
|
||||
|
||||
universalify@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
|
||||
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
|
||||
|
||||
unpipe@1.0.0, unpipe@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
|
||||
|
@ -12482,11 +12708,6 @@ user-home@^2.0.0:
|
|||
dependencies:
|
||||
os-homedir "^1.0.0"
|
||||
|
||||
utf8-byte-length@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz"
|
||||
integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=
|
||||
|
||||
utif@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz"
|
||||
|
@ -12885,7 +13106,7 @@ which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.1:
|
|||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
which@^2.0.1:
|
||||
which@^2.0.1, which@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
|
||||
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||
|
@ -13089,6 +13310,11 @@ yallist@^3.0.2:
|
|||
resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz"
|
||||
integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
|
||||
|
||||
yallist@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
|
||||
yaml-loader@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.npmjs.org/yaml-loader/-/yaml-loader-0.6.0.tgz"
|
||||
|
@ -13110,7 +13336,7 @@ yargs-parser@5.0.0-security.0:
|
|||
camelcase "^3.0.0"
|
||||
object.assign "^4.1.0"
|
||||
|
||||
yargs-parser@^13.0.0, yargs-parser@^13.1.0, yargs-parser@^13.1.1:
|
||||
yargs-parser@^13.1.0, yargs-parser@^13.1.1:
|
||||
version "13.1.1"
|
||||
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz"
|
||||
integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
|
||||
|
@ -13126,6 +13352,11 @@ yargs-parser@^18.1.2:
|
|||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^20.0.0:
|
||||
version "20.2.9"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
|
||||
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
|
||||
|
||||
yargs@13.2.4:
|
||||
version "13.2.4"
|
||||
resolved "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz"
|
||||
|
@ -13202,7 +13433,7 @@ yargs@~1.2.6:
|
|||
dependencies:
|
||||
minimist "^0.1.0"
|
||||
|
||||
yauzl@^2.4.2:
|
||||
yauzl@^2.10.0, yauzl@^2.4.2:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz"
|
||||
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
|
||||
|
|
BIN
res/logo.png
BIN
res/logo.png
Binary file not shown.
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Binary file not shown.
Before Width: | Height: | Size: 37 KiB |
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
|
@ -136,6 +136,16 @@
|
|||
}
|
||||
}
|
||||
|
||||
&.mods {
|
||||
& {
|
||||
/* @load-async */
|
||||
background-image: uiResource("res/ui/icons/advantage_mods.png");
|
||||
}
|
||||
> strong {
|
||||
color: #8a00ff;
|
||||
}
|
||||
}
|
||||
|
||||
&.savegames {
|
||||
& {
|
||||
/* @load-async */
|
||||
|
|
|
@ -97,10 +97,10 @@
|
|||
}
|
||||
|
||||
.standaloneBanner {
|
||||
background: rgb(255, 75, 84);
|
||||
background: #e61b71;
|
||||
@include S(border-radius, $globalBorderRadius + 4);
|
||||
box-sizing: border-box;
|
||||
border: solid rgba(#fff, 0.15);
|
||||
// border: solid rgba(#fff, 0.15);
|
||||
@include S(border-width, 4px);
|
||||
@include S(padding, 15px);
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
onHasLegacySavegamesChanged(has119Savegames = false) {
|
||||
if (has119Savegames && !this.currentData.savegameV1119Imported) {
|
||||
this.currentData.savegameV1119Imported = true;
|
||||
console.warn("Current user now has access to all levels due to 1119 savegame");
|
||||
return this.writeAsync();
|
||||
}
|
||||
return Promise.resolve();
|
||||
|
@ -74,25 +73,6 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
isLimitedVersion() {
|
||||
if (IS_MAC) {
|
||||
// On mac, the full version is always active
|
||||
return false;
|
||||
}
|
||||
|
||||
if (G_IS_STANDALONE) {
|
||||
// Standalone is never limited
|
||||
return false;
|
||||
}
|
||||
|
||||
if (queryParamOptions.embedProvider === "gamedistribution") {
|
||||
// also full version on gamedistribution
|
||||
return false;
|
||||
}
|
||||
|
||||
if (G_IS_DEV) {
|
||||
return typeof window !== "undefined" && window.location.search.indexOf("demo") >= 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -101,7 +81,7 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
getIsStandaloneMarketingActive() {
|
||||
return this.isLimitedVersion();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -109,7 +89,7 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
getIsExportingScreenshotsPossible() {
|
||||
return !this.isLimitedVersion();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -117,7 +97,7 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {number}
|
||||
*/
|
||||
getMaximumWaypoints() {
|
||||
return this.isLimitedVersion() ? 2 : 1e20;
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -125,7 +105,7 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
getHasUnlimitedSavegames() {
|
||||
return !this.isLimitedVersion();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -133,7 +113,7 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
getHasExtendedSettings() {
|
||||
return !this.isLimitedVersion();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -141,7 +121,7 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
getHasExtendedUpgrades() {
|
||||
return !this.isLimitedVersion() || this.currentData.savegameV1119Imported;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -149,6 +129,6 @@ export class RestrictionManager extends ReadWriteProxy {
|
|||
* @returns {boolean}
|
||||
*/
|
||||
getHasExtendedLevelsAndFreeplay() {
|
||||
return !this.isLimitedVersion() || this.currentData.savegameV1119Imported;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,7 +125,7 @@ export class HUDModalDialogs extends BaseHUDPart {
|
|||
|
||||
dialog.buttonSignals.getStandalone.add(() => {
|
||||
this.app.analytics.trackUiClick("demo_dialog_click");
|
||||
window.open(THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_demo_dialog");
|
||||
window.open(THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_demo_dialog_steam");
|
||||
});
|
||||
|
||||
return dialog.buttonSignals;
|
||||
|
|
|
@ -5,7 +5,7 @@ import { T } from "../../../translations";
|
|||
import { BaseHUDPart } from "../base_hud_part";
|
||||
import { DynamicDomAttach } from "../dynamic_dom_attach";
|
||||
|
||||
const showIntervalSeconds = 9 * 60;
|
||||
const showIntervalSeconds = 10 * 60;
|
||||
|
||||
export class HUDStandaloneAdvantages extends BaseHUDPart {
|
||||
createElements(parent) {
|
||||
|
@ -42,7 +42,7 @@ export class HUDStandaloneAdvantages extends BaseHUDPart {
|
|||
this.trackClicks(this.contentDiv.querySelector("button.steamLinkButton"), () => {
|
||||
this.root.app.analytics.trackUiClick("standalone_advantage_visit_steam");
|
||||
this.root.app.platformWrapper.openExternalLink(
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_std_advg"
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_std_advg_steam"
|
||||
);
|
||||
this.close();
|
||||
});
|
||||
|
@ -60,7 +60,7 @@ export class HUDStandaloneAdvantages extends BaseHUDPart {
|
|||
this.inputReciever = new InputReceiver("standalone-advantages");
|
||||
this.close();
|
||||
|
||||
this.lastShown = -1e10;
|
||||
this.lastShown = 0;
|
||||
}
|
||||
|
||||
show() {
|
||||
|
|
|
@ -28,7 +28,7 @@ export class HUDWatermark extends BaseHUDPart {
|
|||
this.trackClicks(this.linkElement, () => {
|
||||
this.root.app.analytics.trackUiClick("watermark_click_2_direct");
|
||||
this.root.app.platformWrapper.openExternalLink(
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_watermark"
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_watermark_steam"
|
||||
);
|
||||
});
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ export class HUDWatermark extends BaseHUDPart {
|
|||
drawOverlays(parameters) {
|
||||
const w = this.root.gameWidth;
|
||||
|
||||
parameters.context.fillStyle = "rgba(230, 230, 230, 0.9)";
|
||||
parameters.context.fillStyle = "rgba(20, 30, 40, 0.25)";
|
||||
parameters.context.font = "bold " + this.root.app.getEffectiveUiScale() * 40 + "px GameFont";
|
||||
parameters.context.textAlign = "center";
|
||||
parameters.context.fillText(
|
||||
|
|
|
@ -1,18 +1,11 @@
|
|||
/* typehints:start */
|
||||
import { Application } from "../application";
|
||||
/* typehints:end */
|
||||
import { globalConfig } from "../core/config";
|
||||
import { createLogger } from "../core/logging";
|
||||
import { StorageImplBrowserIndexedDB } from "../platform/browser/storage_indexed_db";
|
||||
import { StorageImplElectron } from "../platform/electron/storage";
|
||||
import { FILE_NOT_FOUND } from "../platform/storage";
|
||||
import { Mod } from "./mod";
|
||||
import { ModInterface } from "./mod_interface";
|
||||
import { MOD_SIGNALS } from "./mod_signals";
|
||||
|
||||
import semverValidRange from "semver/ranges/valid";
|
||||
import semverSatisifies from "semver/functions/satisfies";
|
||||
|
||||
const LOG = createLogger("mods");
|
||||
|
||||
/**
|
||||
|
@ -104,165 +97,9 @@ export class ModLoader {
|
|||
};
|
||||
}
|
||||
|
||||
exposeExports() {
|
||||
if (G_IS_DEV || G_IS_STANDALONE) {
|
||||
let exports = {};
|
||||
const modules = require.context("../", true, /\.js$/);
|
||||
Array.from(modules.keys()).forEach(key => {
|
||||
// @ts-ignore
|
||||
const module = modules(key);
|
||||
for (const member in module) {
|
||||
if (member === "default" || member === "__$S__") {
|
||||
// Setter
|
||||
continue;
|
||||
}
|
||||
if (exports[member]) {
|
||||
throw new Error("Duplicate export of " + member);
|
||||
}
|
||||
|
||||
Object.defineProperty(exports, member, {
|
||||
get() {
|
||||
return module[member];
|
||||
},
|
||||
set(v) {
|
||||
module.__$S__(member, v);
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
window.shapez = exports;
|
||||
}
|
||||
}
|
||||
exposeExports() {}
|
||||
|
||||
async initMods() {
|
||||
if (!G_IS_STANDALONE && !G_IS_DEV) {
|
||||
this.initialized = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a storage for reading mod settings
|
||||
const storage = G_IS_STANDALONE
|
||||
? new StorageImplElectron(this.app)
|
||||
: new StorageImplBrowserIndexedDB(this.app);
|
||||
await storage.initialize();
|
||||
|
||||
LOG.log("hook:init", this.app, this.app.storage);
|
||||
this.exposeExports();
|
||||
|
||||
let mods = [];
|
||||
if (G_IS_STANDALONE) {
|
||||
mods = await ipcRenderer.invoke("get-mods");
|
||||
}
|
||||
if (G_IS_DEV && globalConfig.debug.externalModUrl) {
|
||||
const modURLs = Array.isArray(globalConfig.debug.externalModUrl)
|
||||
? globalConfig.debug.externalModUrl
|
||||
: [globalConfig.debug.externalModUrl];
|
||||
|
||||
for (let i = 0; i < modURLs.length; i++) {
|
||||
const response = await fetch(modURLs[i], {
|
||||
method: "GET",
|
||||
});
|
||||
if (response.status !== 200) {
|
||||
throw new Error(
|
||||
"Failed to load " + modURLs[i] + ": " + response.status + " " + response.statusText
|
||||
);
|
||||
}
|
||||
mods.push(await response.text());
|
||||
}
|
||||
}
|
||||
|
||||
window.$shapez_registerMod = (modClass, meta) => {
|
||||
if (this.initialized) {
|
||||
throw new Error("Can't register mod after modloader is initialized");
|
||||
}
|
||||
if (this.modLoadQueue.some(entry => entry.meta.id === meta.id)) {
|
||||
console.warn("Not registering mod", meta, "since a mod with the same id is already loaded");
|
||||
return;
|
||||
}
|
||||
this.modLoadQueue.push({
|
||||
modClass,
|
||||
meta,
|
||||
});
|
||||
};
|
||||
|
||||
mods.forEach(modCode => {
|
||||
modCode += `
|
||||
if (typeof Mod !== 'undefined') {
|
||||
if (typeof METADATA !== 'object') {
|
||||
throw new Error("No METADATA variable found");
|
||||
}
|
||||
window.$shapez_registerMod(Mod, METADATA);
|
||||
}
|
||||
`;
|
||||
try {
|
||||
const func = new Function(modCode);
|
||||
func();
|
||||
} catch (ex) {
|
||||
console.error(ex);
|
||||
alert("Failed to parse mod (launch with --dev for more info): \n\n" + ex);
|
||||
}
|
||||
});
|
||||
|
||||
delete window.$shapez_registerMod;
|
||||
|
||||
for (let i = 0; i < this.modLoadQueue.length; i++) {
|
||||
const { modClass, meta } = this.modLoadQueue[i];
|
||||
const modDataFile = "modsettings_" + meta.id + "__" + meta.version + ".json";
|
||||
|
||||
if (meta.minimumGameVersion) {
|
||||
const minimumGameVersion = meta.minimumGameVersion;
|
||||
if (!semverValidRange(minimumGameVersion)) {
|
||||
alert("Mod " + meta.id + " has invalid minimumGameVersion: " + minimumGameVersion);
|
||||
continue;
|
||||
}
|
||||
if (!semverSatisifies(G_BUILD_VERSION, minimumGameVersion)) {
|
||||
alert(
|
||||
"Mod '" +
|
||||
meta.id +
|
||||
"' is incompatible with this version of the game: \n\n" +
|
||||
"Mod requires version " +
|
||||
minimumGameVersion +
|
||||
" but this game has version " +
|
||||
G_BUILD_VERSION
|
||||
);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
let settings = meta.settings;
|
||||
|
||||
if (meta.settings) {
|
||||
try {
|
||||
const storedSettings = await storage.readFileAsync(modDataFile);
|
||||
settings = JSON.parse(storedSettings);
|
||||
} catch (ex) {
|
||||
if (ex === FILE_NOT_FOUND) {
|
||||
// Write default data
|
||||
await storage.writeFileAsync(modDataFile, JSON.stringify(meta.settings));
|
||||
} else {
|
||||
alert("Failed to load settings for " + meta.id + ", will use defaults:\n\n" + ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const mod = new modClass({
|
||||
app: this.app,
|
||||
modLoader: this,
|
||||
meta,
|
||||
settings,
|
||||
saveSettings: () => storage.writeFileAsync(modDataFile, JSON.stringify(mod.settings)),
|
||||
});
|
||||
mod.init();
|
||||
this.mods.push(mod);
|
||||
} catch (ex) {
|
||||
console.error(ex);
|
||||
alert("Failed to initialize mods (launch with --dev for more info): \n\n" + ex);
|
||||
}
|
||||
}
|
||||
|
||||
this.modLoadQueue = [];
|
||||
this.initialized = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,27 +14,11 @@ const analyticsUrl = G_IS_DEV ? "http://localhost:8001" : "https://analytics.sha
|
|||
|
||||
// Be sure to increment the ID whenever it changes to make sure all
|
||||
// users are tracked
|
||||
const analyticsLocalFile = "shapez_token_123.bin";
|
||||
const analyticsLocalFile = "shapez_token_steamdemo.bin";
|
||||
|
||||
export class ShapezGameAnalytics extends GameAnalyticsInterface {
|
||||
get environment() {
|
||||
if (G_IS_DEV) {
|
||||
return "dev";
|
||||
}
|
||||
|
||||
if (G_IS_STANDALONE) {
|
||||
return "steam";
|
||||
}
|
||||
|
||||
if (G_IS_RELEASE) {
|
||||
return "prod";
|
||||
}
|
||||
|
||||
if (window.location.host.indexOf("alpha") >= 0) {
|
||||
return "alpha";
|
||||
} else {
|
||||
return "beta";
|
||||
}
|
||||
return "steam-demo";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -31,14 +31,10 @@ export const SOUNDS = {
|
|||
export const MUSIC = {
|
||||
// The theme always depends on the standalone only, even if running the full
|
||||
// version in the browser
|
||||
theme: G_IS_STANDALONE ? "theme-full" : "theme-short",
|
||||
theme: "theme-short",
|
||||
menu: "menu",
|
||||
};
|
||||
|
||||
if (G_IS_STANDALONE || G_IS_DEV) {
|
||||
MUSIC.puzzle = "puzzle-full";
|
||||
}
|
||||
|
||||
export class SoundInstanceInterface {
|
||||
constructor(key, url) {
|
||||
this.key = key;
|
||||
|
|
|
@ -186,10 +186,7 @@ function initializeSettings() {
|
|||
if (app.platformWrapper.getSupportsFullscreen()) {
|
||||
app.platformWrapper.setFullscreen(value);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* @param {Application} app
|
||||
*/ app => app.restrictionMgr.getHasExtendedSettings()
|
||||
}
|
||||
),
|
||||
|
||||
new BoolSetting(
|
||||
|
|
|
@ -38,16 +38,15 @@ export class MainMenuState extends GameState {
|
|||
getInnerHTML() {
|
||||
const showLanguageIcon = !G_CHINA_VERSION && !G_WEGAME_VERSION;
|
||||
const showExitAppButton = G_IS_STANDALONE;
|
||||
const showUpdateLabel = !G_WEGAME_VERSION;
|
||||
const showBrowserWarning = !G_IS_STANDALONE && !isSupportedBrowser();
|
||||
const showPuzzleDLC = !G_WEGAME_VERSION && (G_IS_STANDALONE || G_IS_DEV);
|
||||
const showPuzzleDLC = false;
|
||||
const showWegameFooter = G_WEGAME_VERSION;
|
||||
const hasMods = MODS.anyModsActive();
|
||||
const hasMods = false;
|
||||
|
||||
let showExternalLinks = true;
|
||||
|
||||
if (G_IS_STANDALONE) {
|
||||
if (G_WEGAME_VERSION || G_CHINA_VERSION) {
|
||||
if (G_WEGAME_VERSION) {
|
||||
showExternalLinks = false;
|
||||
}
|
||||
} else {
|
||||
|
@ -58,21 +57,13 @@ export class MainMenuState extends GameState {
|
|||
}
|
||||
|
||||
let showDiscordLink = showExternalLinks;
|
||||
if (G_CHINA_VERSION) {
|
||||
showDiscordLink = true;
|
||||
}
|
||||
|
||||
const showCrosspromo = !G_IS_STANDALONE && showExternalLinks;
|
||||
const showCrosspromo = false;
|
||||
const showDemoAdvertisement =
|
||||
showExternalLinks && this.app.restrictionMgr.getIsStandaloneMarketingActive();
|
||||
|
||||
const ownsPuzzleDLC =
|
||||
G_IS_DEV ||
|
||||
(G_IS_STANDALONE &&
|
||||
/** @type { PlatformWrapperImplElectron}*/ (this.app.platformWrapper).dlcs.puzzle);
|
||||
|
||||
const ownsPuzzleDLC = false;
|
||||
const bannerHtml = `
|
||||
<h3>${T.demoBanners.title}</h3>
|
||||
<p>${T.demoBanners.intro}</p>
|
||||
|
||||
<a href="#" class="steamLink ${A_B_TESTING_LINK_TYPE}" target="_blank">Get the shapez.io standalone!</a>
|
||||
|
@ -96,7 +87,6 @@ export class MainMenuState extends GameState {
|
|||
|
||||
<div class="logo">
|
||||
<img src="${cachebust("res/" + getLogoSprite())}" alt="shapez.io Logo">
|
||||
${showUpdateLabel ? `<span class="updateLabel">MODS UPDATE!</span>` : ""}
|
||||
</div>
|
||||
|
||||
<div class="mainWrapper" data-columns="${showDemoAdvertisement || showPuzzleDLC ? 2 : 1}">
|
||||
|
@ -454,7 +444,9 @@ export class MainMenuState extends GameState {
|
|||
|
||||
onSteamLinkClicked() {
|
||||
this.app.analytics.trackUiClick("main_menu_steam_link_" + A_B_TESTING_LINK_TYPE);
|
||||
this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_mainmenu");
|
||||
this.app.platformWrapper.openExternalLink(
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_mainmenu_steam"
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -739,7 +731,7 @@ export class MainMenuState extends GameState {
|
|||
getStandalone.add(() => {
|
||||
this.app.analytics.trackUiClick("visit_steampage_from_slot_limit");
|
||||
this.app.platformWrapper.openExternalLink(
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_slotlimit"
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_slotlimit_steam"
|
||||
);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { THIRDPARTY_URLS } from "../core/config";
|
||||
import { TextualGameState } from "../core/textual_game_state";
|
||||
import { MODS } from "../mods/modloader";
|
||||
import { T } from "../translations";
|
||||
|
||||
export class ModsState extends TextualGameState {
|
||||
|
@ -14,35 +13,29 @@ export class ModsState extends TextualGameState {
|
|||
|
||||
internalGetFullHtml() {
|
||||
let headerHtml = `
|
||||
<div class="headerBar">
|
||||
<h1><button class="backButton"></button> ${this.getStateHeaderTitle()}</h1>
|
||||
<div class="headerBar">
|
||||
<h1><button class="backButton"></button> ${this.getStateHeaderTitle()}</h1>
|
||||
|
||||
<div class="actions">
|
||||
${
|
||||
(G_IS_STANDALONE || G_IS_DEV) && MODS.mods.length > 0
|
||||
? `<button class="styledButton browseMods">${T.mods.browseMods}</button>`
|
||||
: ""
|
||||
}
|
||||
${
|
||||
G_IS_STANDALONE || G_IS_DEV
|
||||
? `<button class="styledButton openModsFolder">${T.mods.openFolder}</button>`
|
||||
: ""
|
||||
}
|
||||
</div>
|
||||
<div class="actions">
|
||||
${
|
||||
G_IS_STANDALONE
|
||||
? `<button class="styledButton browseMods">${T.mods.browseMods}</button>`
|
||||
: ""
|
||||
}
|
||||
</div>
|
||||
|
||||
</div>`;
|
||||
</div>`;
|
||||
|
||||
return `
|
||||
${headerHtml}
|
||||
<div class="container">
|
||||
${this.getInnerHTML()}
|
||||
</div>
|
||||
`;
|
||||
${headerHtml}
|
||||
<div class="container">
|
||||
${this.getInnerHTML()}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
getMainContentHTML() {
|
||||
if (!G_IS_STANDALONE && !G_IS_DEV) {
|
||||
return `
|
||||
return `
|
||||
<div class="noModSupport">
|
||||
|
||||
<p>${T.mods.noModSupport}</p>
|
||||
|
@ -52,49 +45,6 @@ export class ModsState extends TextualGameState {
|
|||
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
if (MODS.mods.length === 0) {
|
||||
return `
|
||||
|
||||
<div class="modsStats noMods">
|
||||
${T.mods.modsInfo}
|
||||
|
||||
<button class="styledButton browseMods">${T.mods.browseMods}</button>
|
||||
</div>
|
||||
|
||||
`;
|
||||
}
|
||||
|
||||
let modsHtml = ``;
|
||||
|
||||
MODS.mods.forEach(mod => {
|
||||
modsHtml += `
|
||||
<div class="mod">
|
||||
<div class="mainInfo">
|
||||
<span class="name">${mod.metadata.name}</span>
|
||||
<span class="description">${mod.metadata.description}</span>
|
||||
<a class="website" href="${mod.metadata.website}" target="_blank">${T.mods.modWebsite}</a>
|
||||
</div>
|
||||
<span class="version"><strong>${T.mods.version}</strong>${mod.metadata.version}</span>
|
||||
<span class="author"><strong>${T.mods.author}</strong>${mod.metadata.author}</span>
|
||||
<div class="value checkbox checked">
|
||||
<span class="knob"></span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
return `
|
||||
|
||||
<div class="modsStats">
|
||||
${T.mods.modsInfo}
|
||||
</div>
|
||||
|
||||
<div class="modsList">
|
||||
${modsHtml}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
onEnter() {
|
||||
|
@ -137,7 +87,7 @@ export class ModsState extends TextualGameState {
|
|||
onSteamLinkClicked() {
|
||||
this.app.analytics.trackUiClick("mods_steam_link");
|
||||
this.app.platformWrapper.openExternalLink(
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_modsettings"
|
||||
THIRDPARTY_URLS.stanaloneCampaignLink + "/shapez_modsettings_steam"
|
||||
);
|
||||
|
||||
return false;
|
||||
|
|
|
@ -94,9 +94,9 @@ global:
|
|||
|
||||
demoBanners:
|
||||
# This is the "advertisement" shown in the main menu and other various places
|
||||
title: Demo Version
|
||||
title: Demo
|
||||
intro: >-
|
||||
Get the full game to unlock all features and content!
|
||||
Get the full game on Steam to unlock all levels, buildings, modding support, wires, achievements and a lot more!
|
||||
|
||||
mainMenu:
|
||||
play: Play
|
||||
|
@ -615,9 +615,9 @@ ingame:
|
|||
|
||||
# Pops up in the demo every few minutes
|
||||
watermark:
|
||||
title: Demo version
|
||||
title: Demo
|
||||
desc: Click here to see the advantages of the standalone version!
|
||||
get_on_steam: Get on Steam
|
||||
get_on_steam: Get the full version on Steam
|
||||
|
||||
standaloneAdvantages:
|
||||
title: Get the full version!
|
||||
|
@ -625,20 +625,20 @@ ingame:
|
|||
|
||||
points:
|
||||
levels:
|
||||
title: 12 New Levels
|
||||
title: 19 New Levels
|
||||
desc: For a total of 26 levels!
|
||||
|
||||
buildings:
|
||||
title: 18 New Buildings
|
||||
title: 22 New Buildings
|
||||
desc: Fully automate your factory!
|
||||
|
||||
achievements:
|
||||
title: Achievements
|
||||
desc: Hunt them all!
|
||||
|
||||
upgrades:
|
||||
title: ∞ Upgrade Tiers
|
||||
desc: This demo version has only 5!
|
||||
mods:
|
||||
title: Modding support
|
||||
desc: Over 80 mods available!
|
||||
|
||||
markers:
|
||||
title: ∞ Markers
|
||||
|
|
|
@ -74,7 +74,7 @@ mainMenu:
|
|||
puzzleDlcWishlist: 添加愿望单!
|
||||
puzzleDlcViewNow: 查看DLC
|
||||
mods:
|
||||
title: 激活游戏模组(Mods)
|
||||
title: 激活游戏模组
|
||||
warningPuzzleDLC: 无法在任何游戏模组(Mods)下进行“谜题挑战者”DLC,请关闭所有游戏模组(Mods)。
|
||||
dialogs:
|
||||
buttons:
|
||||
|
@ -139,7 +139,8 @@ dialogs:
|
|||
desc: 您还没有解锁蓝图功能!通过第12关的挑战后可解锁蓝图。
|
||||
keybindingsIntroduction:
|
||||
title: 实用快捷键
|
||||
desc: 这个游戏有很多有用的快捷键设定。以下是其中的一些介绍,记得在<strong>按键设置</strong>中查看其他按键设定!<br><br>
|
||||
desc:
|
||||
这个游戏有很多有用的快捷键设定。以下是其中的一些介绍,记得在<strong>按键设置</strong>中查看其他按键设定!<br><br>
|
||||
<code class='keybinding'>CTRL键</code> + 拖动:选择区域以复制或删除。<br> <code
|
||||
class='keybinding'>SHIFT键</code>: 按住以放置多个同一种设施。<br> <code
|
||||
class='keybinding'>ALT键</code>:反向放置传送带。<br>
|
||||
|
@ -318,15 +319,18 @@ ingame:
|
|||
hints:
|
||||
1_1_extractor: 在<strong>圆形</strong>上放置一个<strong>开采器</strong>来获取圆形!<br><br>提示:<strong>按下鼠标左键</strong>选中<strong>开采器</strong>
|
||||
1_2_conveyor: 用<strong>传送带</strong>将您的开采器连接到中心基地上!<br><br>提示:选中<strong>传送带</strong>后<strong>按下鼠标左键可拖动</strong>布置传送带!
|
||||
1_3_expand: 您可以放置更多的<strong>开采器</strong>和<strong>传送带</strong>来更有效率地完成关卡目标。<br><br>
|
||||
1_3_expand:
|
||||
您可以放置更多的<strong>开采器</strong>和<strong>传送带</strong>来更有效率地完成关卡目标。<br><br>
|
||||
提示:按住 <strong>SHIFT</strong>
|
||||
键可放置多个<strong>开采器</strong>,注意用<strong>R</strong>
|
||||
键可旋转<strong>开采器</strong>的出口方向,确保开采的图形可以顺利传送。
|
||||
2_1_place_cutter: 现在放置一个<strong>切割器</strong>,这个设施可把<strong>圆形</strong>切成两半!<br><br>注意:无论如何放置,切割机总是<strong>从上到下</strong>切割。
|
||||
2_2_place_trash: 使用切割机后产生的废弃图形会导致<strong>堵塞</strong>。<br><br>注意使用<strong>垃圾桶</strong>清除当前
|
||||
2_2_place_trash:
|
||||
使用切割机后产生的废弃图形会导致<strong>堵塞</strong>。<br><br>注意使用<strong>垃圾桶</strong>清除当前
|
||||
(!) 不需要的废物。
|
||||
2_3_more_cutters: 干的好!现在放置<strong>2个以上的切割机</strong>来加快当前缓慢的过程!<br><br>提示:用<strong>快捷键0-9</strong>可以快速选择各项设施!
|
||||
3_1_rectangles: 现在让我们开采一些矩形!找到<strong>矩形地带</strong>并<strong>放置4个开采器</strong>并将它们用<strong>传送带</strong>连接到中心基地。<br><br>
|
||||
3_1_rectangles:
|
||||
现在让我们开采一些矩形!找到<strong>矩形地带</strong>并<strong>放置4个开采器</strong>并将它们用<strong>传送带</strong>连接到中心基地。<br><br>
|
||||
提示:选中<strong>传送带</strong>后按住<strong>SHIFT键</strong>可快速准确地规划<strong>传送带路线!</strong>
|
||||
21_1_place_quad_painter: 放置<strong>四口上色器</strong>并且获取一些<strong>圆形</strong>,<strong>白色</strong>和<strong>红色</strong>!
|
||||
21_2_switch_to_wires: 按 <strong>E</strong> 键选择<strong>电线层</strong>!<br><br>
|
||||
|
@ -620,7 +624,8 @@ storyRewards:
|
|||
desc: 恭喜!您解锁了<strong>旋转机</strong>。它会顺时针将输入的<strong>图形旋转90度</strong>。
|
||||
reward_painter:
|
||||
title: 上色
|
||||
desc: 恭喜!您解锁了<strong>上色器</strong>。开采一些颜色(就像您开采图形一样),将其在上色器中与图形结合来将图形上色!
|
||||
desc:
|
||||
恭喜!您解锁了<strong>上色器</strong>。开采一些颜色(就像您开采图形一样),将其在上色器中与图形结合来将图形上色!
|
||||
<br>注意:如果您不幸患有色盲,可以在设置中启用<strong>色盲模式</strong>
|
||||
reward_mixer:
|
||||
title: 混合颜色
|
||||
|
@ -637,11 +642,13 @@ storyRewards:
|
|||
desc: 恭喜!您解锁了<strong>隧道</strong>。它可放置在<strong>传送带</strong>或<strong>设施</strong>下方以运送物品。
|
||||
reward_rotater_ccw:
|
||||
title: 逆时针旋转
|
||||
desc: 恭喜!您解锁了<strong>旋转机</strong>的<strong>逆时针</strong>变体。它可以逆时针旋转<strong>图形</strong>。
|
||||
desc:
|
||||
恭喜!您解锁了<strong>旋转机</strong>的<strong>逆时针</strong>变体。它可以逆时针旋转<strong>图形</strong>。
|
||||
<br>选择<strong>旋转机</strong>然后按"T"键来选取这个变体。
|
||||
reward_miner_chainable:
|
||||
title: 链式开采器
|
||||
desc: 您已经解锁了<strong>链式开采器</strong>!它能<strong>转发资源</strong>给其他的开采器,这样您就能更有效率的开采各类资源了!<br><br>
|
||||
desc:
|
||||
您已经解锁了<strong>链式开采器</strong>!它能<strong>转发资源</strong>给其他的开采器,这样您就能更有效率的开采各类资源了!<br><br>
|
||||
注意:新的开采器已替换了工具栏里旧的开采器!
|
||||
reward_underground_belt_tier_2:
|
||||
title: 二级隧道
|
||||
|
@ -658,12 +665,14 @@ storyRewards:
|
|||
<br>它<strong>优先从左边</strong>输出,这样您就可以用它做一个<strong>溢流门</strong>了!
|
||||
reward_freeplay:
|
||||
title: 自由模式
|
||||
desc: 成功了!您解锁了<strong>自由模式</strong>!挑战升级!这意味着现在将<strong>随机</strong>生成图形!
|
||||
desc:
|
||||
成功了!您解锁了<strong>自由模式</strong>!挑战升级!这意味着现在将<strong>随机</strong>生成图形!
|
||||
从现在起,中心基地最为需要的是<strong>产量</strong>,我强烈建议您去制造一台能够自动交付所需图形的机器!<br><br>
|
||||
基地会在<strong>电线层</strong>输出需要的图形,您需要去分析图形并在此基础上自动配置您的工厂。
|
||||
reward_blueprints:
|
||||
title: 蓝图
|
||||
desc: 您现在可以<strong>复制粘贴</strong>您的工厂的一部分了!按住 CTRL键并拖动鼠标来选择一块区域,然后按C键复制。
|
||||
desc:
|
||||
您现在可以<strong>复制粘贴</strong>您的工厂的一部分了!按住 CTRL键并拖动鼠标来选择一块区域,然后按C键复制。
|
||||
<br><br>粘贴并<strong>不是免费的</strong>,您需要制造<strong>蓝图图形</strong>来负担。蓝图图形是您刚刚交付的图形。
|
||||
no_reward:
|
||||
title: 下一关
|
||||
|
@ -691,7 +700,8 @@ storyRewards:
|
|||
<br>注意:您注意到<strong>传送读取器</strong>和<strong>存储器</strong>输出的他们最后读取的物品了吗?试着在显示屏上展示一下!
|
||||
reward_constant_signal:
|
||||
title: 恒定信号
|
||||
desc: 恭喜!您解锁了生成于电线层之上的<strong>恒定信号</strong>,把它连接到<strong>过滤器</strong>时非常有用。
|
||||
desc:
|
||||
恭喜!您解锁了生成于电线层之上的<strong>恒定信号</strong>,把它连接到<strong>过滤器</strong>时非常有用。
|
||||
<br>比如,它能发出图形、颜色、开关值(1 / 0)的固定信号。
|
||||
reward_logic_gates:
|
||||
title: 逻辑门
|
||||
|
@ -710,7 +720,8 @@ storyRewards:
|
|||
<strong>提示</strong>:可在设置中打开电线层教程!
|
||||
reward_filter:
|
||||
title: 物品过滤器
|
||||
desc: 恭喜!您解锁了<strong>物品过滤器</strong>!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。<br><br>
|
||||
desc:
|
||||
恭喜!您解锁了<strong>物品过滤器</strong>!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。<br><br>
|
||||
您也可以输入开关值(1 / 0)信号来激活或者禁用它。
|
||||
reward_demo_end:
|
||||
title: 试玩结束
|
||||
|
@ -1093,7 +1104,7 @@ backendErrors:
|
|||
too-many-likes-already: 您的谜题已经得到了许多玩家的赞赏。如果您仍然希望删除它,请联系support@shapez.io!
|
||||
no-permission: 您没有执行此操作的权限。
|
||||
mods:
|
||||
title: 游戏模组(Mods)
|
||||
title: 游戏模组
|
||||
author: 作者
|
||||
version: 版本
|
||||
openFolder: 打开游戏模组(Mods)文件夹
|
||||
|
@ -1103,6 +1114,7 @@ mods:
|
|||
noModSupport: 您需要在Steam平台获得完整版才可以安装游戏模组(Mods)。
|
||||
togglingComingSoon:
|
||||
title: 即将开放
|
||||
description: 当前只能通过将游戏模组(Mods)文件复制到mods文件夹或从mods文件夹移除来启用或禁用游戏模组(Mods)。
|
||||
description:
|
||||
当前只能通过将游戏模组(Mods)文件复制到mods文件夹或从mods文件夹移除来启用或禁用游戏模组(Mods)。
|
||||
但是,可以切换游戏模组(Mods)已经计划在之后的更新中实现!
|
||||
modWebsite: Website
|
||||
|
|
Loading…
Reference in New Issue