mirror of
https://github.com/tobspr/shapez.io.git
synced 2024-10-27 20:34:29 +00:00
* initial modloader draft * modloader features * Refactor mods to use signals * Add support for modifying and registering new transltions * Minor adjustments * Support for string building ids for mods * Initial support for adding new buildings * Refactor how mods are loaded to resolve circular dependencies and prepare for future mod loading * Lazy Load mods to make sure all dependencies are loaded * Expose all exported members automatically to mods * Fix duplicate exports * Allow loading mods from standalone * update changelog * Fix mods folder incorrect path * Fix modloading in standalone * Fix sprites not getting replaced, update demo mod * Load dev mod via raw loader * Improve mod developing so mods are directly ready to be deployed, load mods from local file server * Proper mods ui * Allow mods to register game systems and draw stuff * Change mods path * Fix sprites not loading * Minor adjustments, closes #1333 * Add support for loading atlases via mods * Add support for loading mods from external sources in DEV * Add confirmation when loading mods * Fix circular dependency * Minor Keybindings refactor, add support for keybindings to mods, add support for dialogs to mods * Add some mod signals * refactor game loading states * Make shapez exports global * Start to make mods safer * Refactor file system electron event handling * Properly isolate electron renderer process * Update to latest electron * Show errors when loading mods * Update confirm dialgo * Minor restructure, start to add mod examples * Allow adding custom themesw * Add more examples and allow defining custom item processor operations * Add interface to register new buildings * Fixed typescript type errors (#1335) * Refactor building registry, make it easier for mods to add new buildings * Allow overriding existing methods * Add more examples and more features * More mod examples * Make mod loading simpler * Add example how to add custom drawings * Remove unused code * Minor modloader adjustments * Support for rotation variants in mods (was broken previously) * Allow mods to replace builtin sub shapes * Add helper methods to extend classes * Fix menu bar on mac os * Remember window state * Add support for paste signals * Add example how to add custom components and systems * Support for mod settings * Add example for adding a new item type * Update class extensions * Minor adjustments * Fix typo * Add notification blocks mod example * Add small tutorial * Update readme * Add better instructions * Update JSDoc for Replacing Methods (#1336) * upgraded types for overriding methods * updated comments Co-authored-by: Edward Badel <you@example.com> * Direction lock now indicates when there is a building inbetween * Fix mod examples * Fix linter error * Game state register (#1341) * Added a gamestate register helper Added a gamestate register helper * Update mod_interface.js * export build options * Fix runBeforeMethod and runAfterMethod * Minor game system code cleanup * Belt path drawing optimization * Fix belt path optimization * Belt drawing improvements, again * Do not render belts in statics disabled view * Allow external URL to load more than one mod (#1337) * Allow external URL to load more than one mod Instead of loading the text returned from the remote server, load a JSON object with a `mods` field, containing strings of all the mods. This lets us work on more than one mod at a time or without separate repos. This will break tooling such as `create-shapezio-mod` though. * Update modloader.js * Prettier fixes * Added link to create-shapezio-mod npm page (#1339) Added link to create-shapezio-mod npm page: https://www.npmjs.com/package/create-shapezio-mod * allow command line switch to load more than one mod (#1342) * Fixed class handle type (#1345) * Fixed class handle type * Fixed import game state * Minor adjustments * Refactor item acceptor to allow only single direction slots * Allow specifying minimumGameVersion * Add sandbox example * Replaced concatenated strings with template literals (#1347) * Mod improvements * Make wired pins component optional on the storage * Fix mod examples * Bind `this` for method overriding JSDoc (#1352) * fix entity debugger reaching HTML elements (#1353) * Store mods in savegame and show warning when it differs * Closes #1357 * Fix All Shapez Exports Being Const (#1358) * Allowed setting of variables inside webpack modules * remove console log * Fix stringification of things inside of eval Co-authored-by: Edward Badel <you@example.com> * Fix building placer intersection warning * Add example for storing data in the savegame * Fix double painter bug (#1349) * Add example on how to extend builtin buildings * update readme * Disable steam achievements when playing with mods * Update translations Co-authored-by: Thomas (DJ1TJOO) <44841260+DJ1TJOO@users.noreply.github.com> Co-authored-by: Bagel03 <70449196+Bagel03@users.noreply.github.com> Co-authored-by: Edward Badel <you@example.com> Co-authored-by: Emerald Block <69981203+EmeraldBlock@users.noreply.github.com> Co-authored-by: saile515 <63782477+saile515@users.noreply.github.com> Co-authored-by: Sense101 <67970865+Sense101@users.noreply.github.com>
166 lines
4.7 KiB
JavaScript
166 lines
4.7 KiB
JavaScript
export const IS_DEBUG =
|
|
G_IS_DEV &&
|
|
typeof window !== "undefined" &&
|
|
window.location.port === "3005" &&
|
|
(window.location.host.indexOf("localhost:") >= 0 || window.location.host.indexOf("192.168.0.") >= 0) &&
|
|
window.location.search.indexOf("nodebug") < 0;
|
|
|
|
export const SUPPORT_TOUCH = false;
|
|
|
|
export const IS_MAC = navigator.platform.toLowerCase().indexOf("mac") >= 0 && !G_IS_DEV;
|
|
|
|
const smoothCanvas = true;
|
|
|
|
export const THIRDPARTY_URLS = {
|
|
discord: "https://discord.gg/HN7EVzV",
|
|
github: "https://github.com/tobspr/shapez.io",
|
|
reddit: "https://www.reddit.com/r/shapezio",
|
|
shapeViewer: "https://viewer.shapez.io",
|
|
|
|
privacyPolicy: "https://tobspr.io/privacy.html",
|
|
|
|
standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/",
|
|
stanaloneCampaignLink: "https://get.shapez.io",
|
|
puzzleDlcStorePage: "https://store.steampowered.com/app/1625400/shapezio__Puzzle_DLC",
|
|
|
|
levelTutorialVideos: {
|
|
21: "https://www.youtube.com/watch?v=0nUfRLMCcgo&",
|
|
25: "https://www.youtube.com/watch?v=7OCV1g40Iew&",
|
|
26: "https://www.youtube.com/watch?v=gfm6dS1dCoY",
|
|
},
|
|
|
|
modBrowser: "https://shapez.mod.io/?preview=f55f6304ca4873d9a25f3b575571b948",
|
|
};
|
|
|
|
// export const A_B_TESTING_LINK_TYPE = Math.random() > 0.95 ? "steam_1_pr" : "steam_2_npr";
|
|
export const A_B_TESTING_LINK_TYPE = "steam_2_npr";
|
|
|
|
export const globalConfig = {
|
|
// Size of a single tile in Pixels.
|
|
// NOTICE: Update webpack.production.config too!
|
|
tileSize: 32,
|
|
halfTileSize: 16,
|
|
|
|
// Which dpi the assets have
|
|
assetsDpi: 192 / 32,
|
|
assetsSharpness: 1.5,
|
|
shapesSharpness: 1.3,
|
|
|
|
// Achievements
|
|
achievementSliceDuration: 10, // Seconds
|
|
|
|
// Production analytics
|
|
statisticsGraphDpi: 2.5,
|
|
statisticsGraphSlices: 100,
|
|
analyticsSliceDurationSeconds: G_IS_DEV ? 1 : 10,
|
|
|
|
minimumTickRate: 25,
|
|
maximumTickRate: 500,
|
|
|
|
// Map
|
|
mapChunkSize: 16,
|
|
chunkAggregateSize: 4,
|
|
mapChunkOverviewMinZoom: 0.9,
|
|
mapChunkWorldSize: null, // COMPUTED
|
|
|
|
maxBeltShapeBundleSize: 20,
|
|
|
|
// Belt speeds
|
|
// NOTICE: Update webpack.production.config too!
|
|
beltSpeedItemsPerSecond: 2,
|
|
minerSpeedItemsPerSecond: 0, // COMPUTED
|
|
|
|
defaultItemDiameter: 20,
|
|
|
|
itemSpacingOnBelts: 0.63,
|
|
|
|
wiresSpeedItemsPerSecond: 6,
|
|
|
|
undergroundBeltMaxTilesByTier: [5, 9],
|
|
|
|
readerAnalyzeIntervalSeconds: 10,
|
|
|
|
goalAcceptorItemsRequired: 12,
|
|
goalAcceptorsPerProducer: 5,
|
|
puzzleModeSpeed: 3,
|
|
puzzleMinBoundsSize: 2,
|
|
puzzleMaxBoundsSize: 20,
|
|
puzzleValidationDurationSeconds: 30,
|
|
|
|
buildingSpeeds: {
|
|
cutter: 1 / 4,
|
|
cutterQuad: 1 / 4,
|
|
rotater: 1 / 1,
|
|
rotaterCCW: 1 / 1,
|
|
rotater180: 1 / 1,
|
|
painter: 1 / 6,
|
|
painterDouble: 1 / 8,
|
|
painterQuad: 1 / 2,
|
|
mixer: 1 / 5,
|
|
stacker: 1 / 8,
|
|
},
|
|
|
|
// Zooming
|
|
initialZoom: 1.9,
|
|
minZoomLevel: 0.1,
|
|
maxZoomLevel: 3,
|
|
|
|
// Global game speed
|
|
gameSpeed: 1,
|
|
|
|
warmupTimeSecondsFast: 0.5,
|
|
warmupTimeSecondsRegular: 1.5,
|
|
|
|
smoothing: {
|
|
smoothMainCanvas: smoothCanvas && true,
|
|
quality: "low", // Low is CRUCIAL for mobile performance!
|
|
},
|
|
|
|
rendering: {},
|
|
debug: require("./config.local").default,
|
|
|
|
// Secret vars
|
|
info: {
|
|
// Binary file salt
|
|
file: "Ec'])@^+*9zMevK3uMV4432x9%iK'=",
|
|
|
|
// Savegame salt
|
|
sgSalt: "}95Q3%8/.837Lqym_BJx%q7)pAHJbF",
|
|
|
|
// Analytics key
|
|
analyticsApiKey: "baf6a50f0cc7dfdec5a0e21c88a1c69a4b34bc4a",
|
|
},
|
|
};
|
|
|
|
export const IS_MOBILE = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
|
|
|
|
// Automatic calculations
|
|
globalConfig.minerSpeedItemsPerSecond = globalConfig.beltSpeedItemsPerSecond / 5;
|
|
|
|
globalConfig.mapChunkWorldSize = globalConfig.mapChunkSize * globalConfig.tileSize;
|
|
|
|
// Dynamic calculations
|
|
if (globalConfig.debug.disableMapOverview) {
|
|
globalConfig.mapChunkOverviewMinZoom = 0;
|
|
}
|
|
|
|
// Stuff for making the trailer
|
|
if (G_IS_DEV && globalConfig.debug.renderForTrailer) {
|
|
globalConfig.debug.framePausesBetweenTicks = 32;
|
|
// globalConfig.mapChunkOverviewMinZoom = 0.0;
|
|
// globalConfig.debug.instantBelts = true;
|
|
// globalConfig.debug.instantProcessors = true;
|
|
// globalConfig.debug.instantMiners = true;
|
|
globalConfig.debug.disableSavegameWrite = true;
|
|
// globalConfig.beltSpeedItemsPerSecond *= 2;
|
|
}
|
|
|
|
if (globalConfig.debug.fastGameEnter) {
|
|
globalConfig.debug.noArtificialDelays = true;
|
|
}
|
|
|
|
if (G_IS_DEV && globalConfig.debug.noArtificialDelays) {
|
|
globalConfig.warmupTimeSecondsFast = 0;
|
|
globalConfig.warmupTimeSecondsRegular = 0;
|
|
}
|