From 545e47a9f32abb2b64d3c5809edfcec5286e65fc Mon Sep 17 00:00:00 2001 From: Bram Verhulst Date: Thu, 29 Aug 2024 10:45:07 +0200 Subject: [PATCH] Before Format Wars --- behavior_packs/dialogue/scene.json | 291 ++++++- gulpfile.js | 98 ++- package-lock.json | 750 +++++++++++++----- package.json | 3 +- resource_packs/texts/en_US.lang | 38 +- .../level/abstractTrackFollowMission.ts | 3 +- scripts/Commandeer/trail/trailEngine.ts | 30 +- scripts/Commandeer/utils/agentUtils.ts | 5 +- scripts/Commandeer/utils/particleUtils.ts | 6 + scripts/animationFrames.ts | 89 +++ scripts/levels/levelIntro.ts | 6 +- scripts/levels/mission1/mission1part1.ts | 3 + scripts/levels/mission1/mission1part2.ts | 2 + scripts/levels/mission1/mission1part3.ts | 2 + scripts/levels/mission2/mission2part1.ts | 3 +- scripts/levels/mission2/mission2part2.ts | 3 +- scripts/levels/mission3/mission3part1.ts | 2 + scripts/levels/mission3/mission3part2.ts | 2 + scripts/levels/mission3/mission3part3.ts | 2 + scripts/main.ts | 304 +++---- 20 files changed, 1243 insertions(+), 399 deletions(-) create mode 100644 scripts/animationFrames.ts diff --git a/behavior_packs/dialogue/scene.json b/behavior_packs/dialogue/scene.json index 6aeb4de..59c9438 100644 --- a/behavior_packs/dialogue/scene.json +++ b/behavior_packs/dialogue/scene.json @@ -208,9 +208,298 @@ } ] }, - "commands": ["/scriptevent cc:StartLevel1"] + "commands": ["/scriptevent cc:startLevel1"] } ] + }, + { + "scene_tag": "suki_afterlevel_1_1", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.1.1.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.1.1.button" + } + ] + }, + "commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_1_2"] + } + ] + }, + { + "scene_tag": "suki_afterlevel_1_2", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.1.2.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.1.2.button" + } + ] + }, + "commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_1_3"] + } + ] + }, + { + "scene_tag": "suki_afterlevel_1_3", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.1.3.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.1.3.button" + } + ] + }, + "commands": ["/scriptevent cc:afterLevel1"] + } + ] + }, + { + "scene_tag": "suki_afterlevel_2_1_intermezzo", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.1.intermezzo.1.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.1.intermezzo.1.text" + } + ] + }, + "commands": ["/scriptevent cc:level2Intermezzo"] + } + ] + }, + { + "scene_tag": "suki_afterlevel_2_1", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.1.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.1.button" + } + ] + }, + "commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_2_2"] + } + ] + }, + { + "scene_tag": "suki_afterlevel_2_2", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.2.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.2.button" + } + ] + }, + "commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_2_3"] + } + ] + }, + { + "scene_tag": "suki_afterlevel_2_3", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.3.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.2.3.button" + } + ] + }, + "commands": ["/scriptevent cc:afterLevel2"] + } + ] + }, + { + "scene_tag": "suki_afterlevel_3_1", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.suki" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "suki.afterlevel.3.1.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "suki.afterlevel.3.1.button" + } + ] + }, + "commands": ["/scriptevent cc:afterLevel3"] + } + ] + }, + { + "scene_tag": "bilal_end_1", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.bilal" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "bilal.end.1.text", + "with": ["\n"] + } + ] + }, + "buttons": [ + { + "name": { + "rawtext": [ + { + "translate": "bilal.end.1.button" + } + ] + }, + "commands": ["/dialogue change @e[tag=bilal1] @initiator bilal_end_2"] + } + ] + }, + { + "scene_tag": "bilal_end_2", + "npc_name": { + "rawtext": [ + { + "translate": "npc.name.bilal" + } + ] + }, + "text": { + "rawtext": [ + { + "translate": "bilal.end.2.text", + "with": ["\n"] + } + ] + }, + "buttons": [] } ] } diff --git a/gulpfile.js b/gulpfile.js index b057519..75b814d 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -13,7 +13,8 @@ const behavior_pack_authors = ["Me and my cat"]; // === Optional variables -const exportWorldFolderPath = ""; +const exportWorldFolderPath = + "/Users/Bram/AppData/Local/Packages/Microsoft.MinecraftEducationEdition_8wekyb3d8bbwe/LocalState/games/com.mojang/minecraftWorlds/cH+wZocbAQA="; // === END CONFIGURABLE VARIABLES @@ -27,6 +28,7 @@ const zip = require("gulp-zip"); const fs = require("fs"); const rename = require("gulp-rename"); const crypto = require("crypto"); +var argv = require("yargs").argv; var readLineSync = import("readline-sync"); var NBT = import("nbtify"); @@ -40,6 +42,13 @@ const storeVersionMojangRoot = const mcdir = isStoreVersion ? storeVersionMojangRoot : regularVersionMojangRoot; +const addEducationJson = argv.addEducation || false; +const educationFileTemplate = "./education.json"; + +const parameterWorldName = argv.worldname || argv.worldName || bpfoldername; + +const releaseVersion = argv.production || false; + function clean_build(callbackFunction) { del(["build/behavior_packs/", "build/resource_packs/"]).then( (value) => { @@ -327,7 +336,7 @@ hasZipped = false; function rename_zip_to_mcworld(cb) { gulp .src(["export/export.zip"]) - .pipe(rename(bpfoldername + ".mcworld")) + .pipe(rename(parameterWorldName + ".mcworld")) .pipe(gulp.dest("export/")); cb(); } @@ -357,7 +366,7 @@ function add_version_to_world_name(cb) { } function copy_build_resource_pack_to_export_folder(cb) { - gulp + return gulp .src(["build/resource_packs/**/**"]) .pipe(gulp.dest("export/" + bpfoldername + "/resource_packs/" + bpfoldername)); console.log( @@ -368,14 +377,12 @@ function copy_build_resource_pack_to_export_folder(cb) { "/resource_packs/" + bpfoldername ); - cb(); } function copy_build_behavior_pack_to_export_folder(cb) { - gulp + return gulp .src(["build/behavior_packs/**/**"]) .pipe(gulp.dest("export/" + bpfoldername + "/behavior_packs/" + bpfoldername)); - cb(); } function copy_world_to_export_folder(cb) { @@ -423,30 +430,60 @@ function get_worlds_paths_and_names(cb) { } async function nbt_rename_world(cb) { - const NBT = await import("nbtify"); - const { readFile, writeFile } = await import("fs/promises"); - const buffer = await readFile("export/" + bpfoldername + "/level.dat"); - const data = await NBT.read(buffer); - let oldLevelName = data.data.LevelName; - let newName = bpfoldername + " " + get_version(); - data.data.LevelName = newName; - const result = await NBT.write(data); - await writeFile("export/" + bpfoldername + "/level.dat", result); - console.log("Renamed " + oldLevelName + " to " + newName); + if (releaseVersion) { + console.log("Release Version, skipping renaming of level.dat"); + cb(); + } else { + const NBT = await import("nbtify"); + const { readFile, writeFile } = await import("fs/promises"); + const buffer = await readFile("export/" + bpfoldername + "/level.dat"); + const data = await NBT.read(buffer); + + let oldLevelName = data.data.LevelName; + let newName = bpfoldername + " " + get_version(); + data.data.LevelName = newName; + + const result = await NBT.write(data); + await writeFile("export/" + bpfoldername + "/level.dat", result); + console.log("Renamed " + oldLevelName + " to " + newName); + cb(); + } +} + +function export_header(cb) { + console.log("Exporting World"); + console.log("Is Production: " + releaseVersion); + console.log("World Name: " + parameterWorldName); + console.log("Add Education Json: " + addEducationJson); cb(); } function levelnametxt_rename(cb) { - const { readFile, writeFile } = import("fs/promises"); - const levelNameFilePath = "export/" + bpfoldername + "/levelname.txt"; - let levelName = fs.readFileSync(levelNameFilePath, "utf8"); - let newName = bpfoldername + " " + get_version(); - fs.writeFileSync(levelNameFilePath, newName); - console.log("Renamed " + levelName + " to " + newName); - cb(); + if (!releaseVersion) { + const { readFile, writeFile } = import("fs/promises"); + const levelNameFilePath = "export/" + bpfoldername + "/levelname.txt"; + let levelName = fs.readFileSync(levelNameFilePath, "utf8"); + let newName = bpfoldername + " " + get_version(); + fs.writeFileSync(levelNameFilePath, newName); + console.log("Renamed " + levelName + " to " + newName); + cb(); + } else { + console.log("Release Version, skipping renaming of levelname.txt"); + cb(); + } } -// Setup functions +function add_education_json_file(cb) { + if (addEducationJson) { + if (fs.existsSync(educationFileTemplate)) { + return gulp.src([educationFileTemplate]).pipe(gulp.dest("export/" + bpfoldername)); + } else { + throw new Error("The file " + educationFileTemplate + " does not exist. But was specified to be added."); + } + } else { + cb(); + } +} function setup_behaviour_pack(cb) { const manifestPath = "behavior_packs/manifest.json"; @@ -521,6 +558,17 @@ function get_uuid_for_type(cb, type) { let get_behaviour_pack_uuid = (cb) => get_uuid_for_type(cb, "behaviour_pack"); let get_resource_pack_uuid = (cb) => get_uuid_for_type(cb, "resource_pack"); +function help(cb) { + //Print help like what paramenters it takes + console.log("Help"); + console.log("Parameters:"); + console.log("addEducationJson: boolean"); + console.log("worldName: string"); + console.log("production: boolean"); + + cb(); +} + exports.clean_build = clean_build; exports.copy_behavior_packs = copy_behavior_packs; exports.copy_resource_packs = copy_resource_packs; @@ -550,12 +598,14 @@ exports.compile_world = gulp.series( ); exports.zip = gulp.series(zip_world, rename_zip_to_mcworld); exports.export = gulp.series( + export_header, clean_export, copy_world_to_export_folder, build, gulp.parallel(copy_build_behavior_pack_to_export_folder, copy_build_resource_pack_to_export_folder), levelnametxt_rename, nbt_rename_world, + add_education_json_file, zip_world, rename_zip_to_mcworld ); diff --git a/package-lock.json b/package-lock.json index 66a1a0c..4cc359d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,8 @@ "nbtify": "^1.85.0", "readline-sync": "^1.4.10", "source-map": "^0.7.4", - "typescript": "^4.4.3" + "typescript": "^4.4.3", + "yargs": "^17.7.2" } }, "node_modules/@gulp-sourcemaps/identity-map": { @@ -204,12 +205,29 @@ } }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/ansi-wrap": { @@ -793,8 +811,9 @@ "node_modules/camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -869,14 +888,18 @@ } }, "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/clone": { @@ -917,8 +940,9 @@ "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -950,6 +974,26 @@ "node": ">=0.10.0" } }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -1073,8 +1117,9 @@ "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1222,6 +1267,13 @@ "node": ">=0.10.0" } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -1236,6 +1288,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -1288,6 +1341,16 @@ "es6-symbol": "^3.1.1" } }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -1525,8 +1588,9 @@ "node_modules/find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, + "license": "MIT", "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -1796,10 +1860,14 @@ "dev": true }, "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, "node_modules/get-intrinsic": { "version": "1.1.1", @@ -2060,6 +2128,130 @@ "node": ">= 0.10" } }, + "node_modules/gulp-cli/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/gulp-cli/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true, + "license": "ISC" + }, + "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/gulp-cli/node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/gulp-cli/node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, "node_modules/gulp-rename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", @@ -2276,7 +2468,8 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ignore": { "version": "5.2.0", @@ -2330,8 +2523,9 @@ "node_modules/invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2376,8 +2570,9 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" }, "node_modules/is-binary-path": { "version": "1.0.1", @@ -2466,15 +2661,13 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-glob": { @@ -2673,8 +2866,9 @@ "node_modules/lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, + "license": "MIT", "dependencies": { "invert-kv": "^1.0.0" }, @@ -2728,8 +2922,9 @@ "node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -3248,6 +3443,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -3279,8 +3475,9 @@ "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3433,8 +3630,9 @@ "node_modules/os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dev": true, + "license": "MIT", "dependencies": { "lcid": "^1.0.0" }, @@ -3474,8 +3672,9 @@ "node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.2.0" }, @@ -3519,8 +3718,9 @@ "node_modules/path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, + "license": "MIT", "dependencies": { "pinkie-promise": "^2.0.0" }, @@ -3594,8 +3794,9 @@ "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3603,8 +3804,9 @@ "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3612,8 +3814,9 @@ "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -3767,8 +3970,9 @@ "node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -3781,8 +3985,9 @@ "node_modules/read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -3794,8 +3999,9 @@ "node_modules/read-pkg/node_modules/path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -4112,8 +4318,9 @@ "node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", + "dev": true, + "license": "ISC" }, "node_modules/resolve": { "version": "1.22.0", @@ -4237,10 +4444,11 @@ } }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -4260,8 +4468,9 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" }, "node_modules/set-value": { "version": "2.0.1", @@ -4490,36 +4699,40 @@ } }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/split-string": { "version": "3.1.0", @@ -4614,36 +4827,39 @@ } }, "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, + "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -5081,6 +5297,7 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -5185,20 +5402,26 @@ "node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", + "dev": true, + "license": "ISC" }, "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -5217,40 +5440,42 @@ } }, "node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, "node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + "license": "ISC", + "engines": { + "node": ">=12" } }, "node_modules/yazl": { @@ -5410,11 +5635,20 @@ } }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", @@ -5872,7 +6106,7 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", "dev": true }, "chokidar": { @@ -5937,14 +6171,14 @@ "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" } }, "clone": { @@ -5979,7 +6213,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true }, "collection-map": { @@ -6003,6 +6237,21 @@ "object-visit": "^1.0.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -6116,7 +6365,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "decode-uri-component": { @@ -6228,6 +6477,12 @@ } } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -6290,6 +6545,12 @@ "es6-symbol": "^3.1.1" } }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -6497,7 +6758,7 @@ "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "requires": { "path-exists": "^2.0.0", @@ -6710,9 +6971,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-intrinsic": { @@ -6919,6 +7180,107 @@ "semver-greatest-satisfied-range": "^1.1.0", "v8flags": "^3.2.0", "yargs": "^7.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } } }, "gulp-rename": { @@ -7134,7 +7496,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true }, "is-absolute": { @@ -7170,7 +7532,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-binary-path": { @@ -7241,13 +7603,10 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.3", @@ -7402,7 +7761,7 @@ "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, "requires": { "invert-kv": "^1.0.0" @@ -7447,7 +7806,7 @@ "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -7888,7 +8247,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true }, "object-assign": { @@ -8008,7 +8367,7 @@ "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dev": true, "requires": { "lcid": "^1.0.0" @@ -8037,7 +8396,7 @@ "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, "requires": { "error-ex": "^1.2.0" @@ -8070,7 +8429,7 @@ "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, "requires": { "pinkie-promise": "^2.0.0" @@ -8124,19 +8483,19 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { "pinkie": "^2.0.0" @@ -8250,7 +8609,7 @@ "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, "requires": { "load-json-file": "^1.0.0", @@ -8261,7 +8620,7 @@ "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -8274,7 +8633,7 @@ "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, "requires": { "find-up": "^1.0.0", @@ -8523,7 +8882,7 @@ "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true }, "resolve": { @@ -8608,9 +8967,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "semver-greatest-satisfied-range": { @@ -8625,7 +8984,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "set-value": { @@ -8815,9 +9174,9 @@ "dev": true }, "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -8825,9 +9184,9 @@ } }, "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "spdx-expression-parse": { @@ -8841,9 +9200,9 @@ } }, "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true }, "split-string": { @@ -8923,29 +9282,29 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, "requires": { "is-utf8": "^0.2.0" @@ -9381,17 +9740,18 @@ "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -9407,41 +9767,31 @@ "dev": true }, "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true }, "yazl": { "version": "2.5.1", diff --git a/package.json b/package.json index d43f9e6..4189493 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "nbtify": "^1.85.0", "readline-sync": "^1.4.10", "source-map": "^0.7.4", - "typescript": "^4.4.3" + "typescript": "^4.4.3", + "yargs": "^17.7.2" }, "scripts": { "enablemcloopback": "CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-1958404141-86561845-1752920682-3514627264-368642714-62675701-733520436", diff --git a/resource_packs/texts/en_US.lang b/resource_packs/texts/en_US.lang index dabeab7..350c32b 100644 --- a/resource_packs/texts/en_US.lang +++ b/resource_packs/texts/en_US.lang @@ -9,6 +9,10 @@ message.enter.airlock=Enter the Airlock message.follow.path.temple=Follow the path and talk to §6Bakker Bilal message.goto.temple=Go to the Temple and talk to §2Veteraan Suki +message.goto.door=Go the Temple Door + +message.goto.bilal=Go to Bakker §6Bakker Bilal + message.goto.level1=Go to Level 1 message.goto.level2=Go to Level 2 message.goto.level3=Go to Level 3 @@ -49,6 +53,7 @@ message.incorrect=§cIncorrect!§b message.talkto.ramses=Talk to §dRamses message.talkto.chanel=Talk to §9Chanel +message.talkto.suki=Talk to §2Veteraan Suki ## Intro messages message.intro.started=Crack the Vault! @@ -129,4 +134,35 @@ suki.greeting.1.text=Oeps, je hebt de val geactiveerd. We zitten nu vast in deze suki.greeting.1.button=Zal ik doen! suki.greeting.2.text=Je moet de agent door het parcours laten wandelen. Pas op, je mag niet boven lava gaan anders zal de agent doodgaan! Veel succes! -suki.greeting.2.button=Oké! \ No newline at end of file +suki.greeting.2.button=Oké! + +suki.afterlevel.1.1.text=Goed gedaan! De agent is nu terug bij ons. Ga terug naar het leerplatform. Maar eerst: een weetje! Wist je dat de koralen hun kleur te danken hebben aan de algen die erin zitten? Die algen kunnen niet tegen een snelle stijging van watertemperatuur. Als de temperatuur stijgt, worden de algen afgestoten en verbleekt en sterft het koraal. +suki.afterlevel.1.1.button=Oké! + +suki.afterlevel.1.2.text=Goed gedaan, de agent is vrij en terug bij ons! Nu moeten we het dode koraal vervangen door gezond koraal om de oceaan te redden. Dan zijn we weer een stap dichterbij hier ontsnappen. +suki.afterlevel.1.2.button=Hoe dan? + +suki.afterlevel.1.3.text=Gebruik enkelvoudige en meervoudige selecties om de dode koralen te vervangen door levende koralen! Voor het eerste level moet je het volgende programmeren: Als de Agent op een blok rood dood koraal stap, dan plaatst hij een blok levend rood koraal. +suki.afterlevel.1.3.button=OK! + + +suki.afterlevel.2.1.intermezzo.1.text=Goed zo! Voor het tweede level wordt het terug een stuk moeilijker. Als de Agent op dood geel koraal stapt, dan plaats hij geel koraal. Anders als de Agent op dood rood koraal stapt, dan plaats bij rood koraal. Anders draait hij een toertje rond zijn as. (TODO) +suki.afterlevel.2.1.intermezzo.1.button=Ik Probeer! + + +suki.afterlevel.2.1.text=Goed gedaan! Je hebt het tweede level voltooid. Ga terug naar het leerplatform en vul de vraag in. Dan kan je starten met de deur te openen. Maar eerst nog een weetje! Wist je dat klimaatverandering de grootste bedreiging is voor koraalriffen? Daardoor stijgt de temperatuur en wordt het water zuurder. Daarnaast vormt ook overbevissing, vervuiling end e afvoer van landbouwgiffen een bedreiging. +suki.afterlevel.2.1.button=Wat Jammer! + +suki.afterlevel.2.2.text=Ik heb even kunnen rondkijken en heb de uit knop van de deur gevonden! Hij is aan het einde van het parcours rechts in de tempel. Je zal de agent moeten sturen om dit te activeren! +suki.afterlevel.2.2.button=Hoe dan? + +suki.afterlevel.2.3.text=Ik heb alvast wat code gemaakt om het door het parcours te geraken. Ik vrees dat ik niet zo een goede programmeur ben als jij. Er zitten nog wat bugs in. Kan jij deze oplossen en de agent bij de lever krijgen? +suki.afterlevel.2.3.button=Tuurlijk! + +suki.afterlevel.3.1.text=Je hebt de deur open gekregen! We en de agent zijn vrij. Ga naar Bakker bilal om deze missie af te sluiten. +suki.afterlevel.3.1.button=Geweldig! + +bilal.end.1.text=Je kan terug naar het leerplatform gaan. Dit was de laatste opdracht. Maar eerst; nog een weetje. Wist je dat men denkt dat op het einde van deze eeuw, meer dan 90 procent van alle koraalriffen verloren zullen gaan? Probeer dus jouw uitstoot te verminderen en zo de koralen te helpen. +bilal.end.1.button=Ja hé! + +bilal.end.2.text=Bedankt om deze wereld een beetje beter te maken! You Rock! \ No newline at end of file diff --git a/scripts/Commandeer/level/abstractTrackFollowMission.ts b/scripts/Commandeer/level/abstractTrackFollowMission.ts index 25faa4e..83969a9 100644 --- a/scripts/Commandeer/level/abstractTrackFollowMission.ts +++ b/scripts/Commandeer/level/abstractTrackFollowMission.ts @@ -12,6 +12,7 @@ class AbstractAgentTrackMission extends Level { constructor( levelid: string, agentStartPositon: Vector3, + agentStartFacing: Vector3, agentEndPosition: Vector3, startLevelCommandBlockPos: Vector3 ) { @@ -20,7 +21,7 @@ class AbstractAgentTrackMission extends Level { pupeteer.sendWorldMessage(`%message.${levelid}.started`); pupeteer.setTitleTimed(`%message.${levelid}.name`, 2.5); startLevel(startLevelCommandBlockPos); - teleportAgent(agentStartPositon); + teleportAgent(agentStartPositon, agentStartFacing); }, () => { pupeteer.setActionBar(`%message.${levelid}.make`); diff --git a/scripts/Commandeer/trail/trailEngine.ts b/scripts/Commandeer/trail/trailEngine.ts index bad4751..3df6b80 100644 --- a/scripts/Commandeer/trail/trailEngine.ts +++ b/scripts/Commandeer/trail/trailEngine.ts @@ -1,6 +1,7 @@ import { MolangVariableMap, Vector3, world } from "@minecraft/server"; import { Vector3Add } from "../utils/vectorUtils"; import { TrailType } from "./trailTypes"; +import { PARTICLES, spawnParticle } from "../utils/particleUtils"; class TrailPoint { postion: Vector3; @@ -15,9 +16,7 @@ class TrailPoint { // let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 }); let spawnPosition: Vector3 = this.postion; try { - world - .getDimension("overworld") - .spawnParticle("minecraft:balloon_gas_particle", spawnPosition, new MolangVariableMap()); + spawnParticle(spawnPosition, PARTICLES.balloon_gas_particle, new MolangVariableMap()); } catch (e) {} } } @@ -40,19 +39,14 @@ class Trail { addPoint(point: TrailPoint) { this.points.push(point); - //this could be a one liner, - let maxlength: number = 0; - this.points.forEach((point) => { - if (point.index > maxlength) { - maxlength = point.index; - } - }); - this.calculatedLength = maxlength; + this.calculatedLength = this.points.length; } fromTrail(trail: TrailType) { + let currentIndex = 0; trail.points.forEach((point) => { - this.addPoint(new TrailPoint(point.position, point.index)); + this.addPoint(new TrailPoint(point.position, currentIndex)); + currentIndex++; }); } @@ -63,17 +57,19 @@ class Trail { let pointsPerInterval = this.wrapIndex > 0 ? this.calculatedLength / this.wrapIndex : 0; this.points .filter((point) => { - return ( - point.index === this.currentPoint || - (this.wrapIndex > 0 && point.index % pointsPerInterval === this.currentPoint) - ); + if (this.wrapIndex > 0) { + return point.index % this.wrapIndex == this.currentPoint; + } else { + return point.index == this.currentPoint; + } }) .forEach((point) => { point.spawn(); }); this.currentPoint++; - if (this.currentPoint >= this.calculatedLength) { + let actualLength = this.wrapIndex > 0 ? this.wrapIndex : this.calculatedLength; + if (this.currentPoint >= actualLength) { this.currentPoint = 0; } } else { diff --git a/scripts/Commandeer/utils/agentUtils.ts b/scripts/Commandeer/utils/agentUtils.ts index f4f2d43..db4c967 100644 --- a/scripts/Commandeer/utils/agentUtils.ts +++ b/scripts/Commandeer/utils/agentUtils.ts @@ -1,5 +1,5 @@ import { Entity, Vector3, world } from "@minecraft/server"; -import { Vector3ToString, vector3 } from "./vectorUtils"; +import { Vector3Add, Vector3ToString, vector3 } from "./vectorUtils"; import { mindKeeper } from "../../main"; //Make a facing with vector3 @@ -11,10 +11,11 @@ function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): v .getDimension("overworld") .runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`); } else { + let facing2 = Vector3Add(position, facing); world .getDimension("overworld") .runCommand( - `/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z} facing ${facing.x} ${facing.y} ${facing.z}` + `/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z} facing ${facing2.x} ${facing2.y} ${facing2.z}` ); } } diff --git a/scripts/Commandeer/utils/particleUtils.ts b/scripts/Commandeer/utils/particleUtils.ts index 7ed7975..91ca4f9 100644 --- a/scripts/Commandeer/utils/particleUtils.ts +++ b/scripts/Commandeer/utils/particleUtils.ts @@ -222,6 +222,12 @@ function spawnParticle( return; } map.setVector3("variable.direction", vector3(0, 0, 0)); + // map.setFloat("Variable.r", 2); + map.setColorRGB("variable.color", { + red: 1, + green: 1, + blue: 1, + }); const dimension = world.getDimension("overworld"); if (dimension) { diff --git a/scripts/animationFrames.ts b/scripts/animationFrames.ts new file mode 100644 index 0000000..d9791d3 --- /dev/null +++ b/scripts/animationFrames.ts @@ -0,0 +1,89 @@ +import { ClonePos } from "./Commandeer/animations/animation"; +import { vector3 } from "./Commandeer/utils/vectorUtils"; + +const glassBreakingFrames: ClonePos[] = [ + ///fill 2465 7 94 2470 4 94 + { + point1: vector3(2465, 7, 94), + point2: vector3(2470, 4, 94), + }, + //fill 2465 0 94 2470 -3 94 + { + point1: vector3(2465, 0, 94), + point2: vector3(2470, -3, 94), + }, + { + //fill 2465 -7 94 2470 -10 94 + point1: vector3(2465, -7, 94), + point2: vector3(2470, -10, 94), + }, + //fill 2465 -14 94 2470 -17 94 + { + point1: vector3(2465, -14, 94), + point2: vector3(2470, -17, 94), + }, + //fill 2465 -21 94 2470 -24 94 + { + point1: vector3(2465, -21, 94), + point2: vector3(2470, -24, 94), + }, +]; + +const FrontAirLockOpenFrames: ClonePos[] = [ + { + point1: vector3(2476, 9, 94), + point2: vector3(2474, 7, 94), + }, + { + point1: vector3(2476, 5, 94), + point2: vector3(2474, 3, 94), + }, + { + point1: vector3(2476, 1, 94), + point2: vector3(2474, -1, 94), + }, + { + point1: vector3(2476, -3, 94), + point2: vector3(2474, -5, 94), + }, +]; + +const BackAirLockOpenFrames: ClonePos[] = [ + { + point1: vector3(2472, 9, 100), + point2: vector3(2472, 7, 102), + }, + { + point1: vector3(2472, 5, 100), + point2: vector3(2472, 3, 102), + }, + { + point1: vector3(2472, 1, 100), + point2: vector3(2472, -1, 102), + }, + { + point1: vector3(2472, -3, 100), + point2: vector3(2472, -5, 102), + }, +]; + +const AirLockWaterFrames: ClonePos[] = [ + { + point1: vector3(2473, 11, 95), + point2: vector3(2477, 11, 103), + }, + { + point1: vector3(2473, 12, 95), + point2: vector3(2477, 12, 103), + }, + { + point1: vector3(2473, 13, 95), + point2: vector3(2477, 13, 103), + }, + { + point1: vector3(2473, 14, 95), + point2: vector3(2477, 14, 103), + }, +]; + +export { glassBreakingFrames, FrontAirLockOpenFrames, BackAirLockOpenFrames, AirLockWaterFrames }; diff --git a/scripts/levels/levelIntro.ts b/scripts/levels/levelIntro.ts index cb3b5ab..98ec525 100644 --- a/scripts/levels/levelIntro.ts +++ b/scripts/levels/levelIntro.ts @@ -30,9 +30,9 @@ let currentBlockSequence: string[] = []; let currentBlockSeuqenceIndex: number[] = []; const blockCycle: string[] = [ - MinecraftBlockTypes.RedstoneBlock, - MinecraftBlockTypes.GoldBlock, - MinecraftBlockTypes.DiamondBlock, + // MinecraftBlockTypes.RedstoneBlock, + // MinecraftBlockTypes.GoldBlock, + // MinecraftBlockTypes.DiamondBlock, MinecraftBlockTypes.EmeraldBlock, MinecraftBlockTypes.LapisBlock, ]; diff --git a/scripts/levels/mission1/mission1part1.ts b/scripts/levels/mission1/mission1part1.ts index 968cd1c..6a63b03 100644 --- a/scripts/levels/mission1/mission1part1.ts +++ b/scripts/levels/mission1/mission1part1.ts @@ -5,11 +5,14 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils"; const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36); const level1StartPosition: Vector3 = vector3(2451, -2, 57); +//Agent faces negative z +const level1AgentFacing: Vector3 = vector3(0, 0, -1); const Level1EndPosition: Vector3 = vector3(2451, -2, 41); let mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission( "mission1part1", level1StartPosition, + level1AgentFacing, Level1EndPosition, Level1CommandBlockPos ); diff --git a/scripts/levels/mission1/mission1part2.ts b/scripts/levels/mission1/mission1part2.ts index d445fdd..020af7c 100644 --- a/scripts/levels/mission1/mission1part2.ts +++ b/scripts/levels/mission1/mission1part2.ts @@ -5,6 +5,7 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils"; const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35); const level2StartPosition: Vector3 = vector3(2446, -2, 40); +const level2AgentFacing: Vector3 = vector3(1, 0, 0); const Level2EndPosition: Vector3 = vector3(2446, -2, 30); const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211); @@ -12,6 +13,7 @@ const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211); let mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission( "mission1part2", level2StartPosition, + level2AgentFacing, Level2EndPosition, Level2CommandBlockPos ); diff --git a/scripts/levels/mission1/mission1part3.ts b/scripts/levels/mission1/mission1part3.ts index 58fb092..f8fc624 100644 --- a/scripts/levels/mission1/mission1part3.ts +++ b/scripts/levels/mission1/mission1part3.ts @@ -3,6 +3,7 @@ import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollo import { vector3 } from "../../Commandeer/utils/vectorUtils"; const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34); +const level3AgentFacing: Vector3 = vector3(0, 0, -1); const level3StartPosition: Vector3 = vector3(2447, -2, 30); const level3EndPosition: Vector3 = vector3(2451, -2, 18); @@ -11,6 +12,7 @@ const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211); let mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission( "mission1part3", level3StartPosition, + level3AgentFacing, level3EndPosition, Level3CommandBlockPos ); diff --git a/scripts/levels/mission2/mission2part1.ts b/scripts/levels/mission2/mission2part1.ts index c9ba04c..7f06ce5 100644 --- a/scripts/levels/mission2/mission2part1.ts +++ b/scripts/levels/mission2/mission2part1.ts @@ -12,6 +12,7 @@ import { startLevel } from "../../Commandeer/utils/levelUtils"; const mission2part1CommandBlockPos: Vector3 = vector3(2460, -1, 4); const mission2part1StartPosition: Vector3 = vector3(2455, -1, 11); +const mission2Part1AgentFacing: Vector3 = vector3(1, 0, 0); const mission2part1EndPosition: Vector3 = vector3(2465, -1, 11); const mission2part1ResetCommandBlockPos: Vector3 = vector3(2456, -1, 4); @@ -20,7 +21,7 @@ const mission2part1: Level = new Level( pupeteer.sendWorldMessage("%message.mission2part1.started"); pupeteer.setTitleTimed("%message.mission2part1.name", 2.5); startLevel(mission2part1CommandBlockPos); - teleportAgent(mission2part1StartPosition); + teleportAgent(mission2part1StartPosition, mission2Part1AgentFacing); startLevel(mission2part1ResetCommandBlockPos); }, () => { diff --git a/scripts/levels/mission2/mission2part2.ts b/scripts/levels/mission2/mission2part2.ts index bf2e85b..bb979f5 100644 --- a/scripts/levels/mission2/mission2part2.ts +++ b/scripts/levels/mission2/mission2part2.ts @@ -12,6 +12,7 @@ import { startLevel } from "../../Commandeer/utils/levelUtils"; const mission2part2CommandBlockPos: Vector3 = vector3(2461, -1, 4); const mission2part2StartPosition: Vector3 = vector3(2467, -1, 11); +const mission2Part1AgentFacing: Vector3 = vector3(1, 0, 0); const mission2part2EndPosition: Vector3 = vector3(2481, -1, 11); const mission2part2ResetCommandBlockPos: Vector3 = vector3(2457, -1, 4); @@ -20,7 +21,7 @@ const mission2part2: Level = new Level( pupeteer.sendWorldMessage("%message.mission2part2.started"); pupeteer.setTitleTimed("%message.mission2part2.name", 2.5); startLevel(mission2part2CommandBlockPos); - teleportAgent(mission2part2StartPosition); + teleportAgent(mission2part2StartPosition, mission2Part1AgentFacing); startLevel(mission2part2ResetCommandBlockPos); }, () => { diff --git a/scripts/levels/mission3/mission3part1.ts b/scripts/levels/mission3/mission3part1.ts index 80e806e..f3801fb 100644 --- a/scripts/levels/mission3/mission3part1.ts +++ b/scripts/levels/mission3/mission3part1.ts @@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils"; const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 26); const level1StartPosition: Vector3 = vector3(2488, -2, 7); +const level1AgentFacing: Vector3 = vector3(0, 0, 1); const Level1EndPosition: Vector3 = vector3(2488, -2, 22); let mission3part1: AbstractAgentTrackMission = new AbstractAgentTrackMission( "mission3part1", level1StartPosition, + level1AgentFacing, Level1EndPosition, Level1CommandBlockPos ); diff --git a/scripts/levels/mission3/mission3part2.ts b/scripts/levels/mission3/mission3part2.ts index 4e79311..e3d8749 100644 --- a/scripts/levels/mission3/mission3part2.ts +++ b/scripts/levels/mission3/mission3part2.ts @@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils"; const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 27); const level1StartPosition: Vector3 = vector3(2492, -2, 26); +const level1AgentFacing: Vector3 = vector3(0, 0, 1); const Level1EndPosition: Vector3 = vector3(2484, -2, 32); let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission( "mission3part2", level1StartPosition, + level1AgentFacing, Level1EndPosition, Level1CommandBlockPos ); diff --git a/scripts/levels/mission3/mission3part3.ts b/scripts/levels/mission3/mission3part3.ts index fe0b6f1..ed2e0fe 100644 --- a/scripts/levels/mission3/mission3part3.ts +++ b/scripts/levels/mission3/mission3part3.ts @@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils"; const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 28); const level1StartPosition: Vector3 = vector3(2487, -2, 36); +const level1AgentFacing: Vector3 = vector3(1, 0, 0); const Level1EndPosition: Vector3 = vector3(2488, -2, 57); let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission( "mission3part2", level1StartPosition, + level1AgentFacing, Level1EndPosition, Level1CommandBlockPos ); diff --git a/scripts/main.ts b/scripts/main.ts index 70996e7..e9cbe84 100644 --- a/scripts/main.ts +++ b/scripts/main.ts @@ -7,12 +7,19 @@ import { Dimension, TicksPerSecond, BlockVolume, + ScriptEventCommandMessageAfterEvent, } from "@minecraft/server"; import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper"; import Pupeteer from "./Commandeer/pupeteer"; -import { Vector3Add, Vector3ToCommandString, Vector3ToFancyString, vector3 } from "./Commandeer/utils/vectorUtils"; +import { + Vector3Add, + Vector3Subtract, + Vector3ToCommandString, + Vector3ToFancyString, + vector3, +} from "./Commandeer/utils/vectorUtils"; import { delay } from "./Commandeer/utils/waitUtil"; -import { PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils"; +import { ParticleColumn, PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils"; import { TrailMaker } from "./Commandeer/trail/trailMaker"; import * as CCTrigger from "./Commandeer/Trigger/CCTrigger"; import { Commands } from "./Commandeer/command/command"; @@ -41,7 +48,14 @@ import { SetFrame, } from "./Commandeer/animations/animation"; import { doNothingStupidTSIWantFilesNotAGiantAssMainFile } from "./triggers"; -import { clearWall, fillWall, Wall } from "./Commandeer/utils/levelUtils"; +import { clearWall, fillWall, startLevel, Wall } from "./Commandeer/utils/levelUtils"; +import { drawArrow } from "./Commandeer/utils/arrow"; +import { + glassBreakingFrames, + AirLockWaterFrames, + FrontAirLockOpenFrames, + BackAirLockOpenFrames, +} from "./animationFrames"; // import { loadTriggers } from "./triggers"; const mindKeeper = new Mindkeeper(world); @@ -50,7 +64,9 @@ const triggerManager = new CCTrigger.Manager(mindKeeper); const CURRENT_LEVEL = "currentLevel"; const AGENT_ID = "agentid"; const PREFIX = "!"; -export { mindKeeper, CURRENT_LEVEL, triggerManager }; +let DEVELOPER_MODE = true; + +export { mindKeeper, CURRENT_LEVEL, triggerManager, PREFIX, DEVELOPER_MODE }; // loadTriggers(); // loadCommands(); @@ -64,14 +80,14 @@ async function resetLightPath() { } let introToGlassBreakTimer: number = 0; -const glassBreakTime = 5 * TicksPerSecond; +const glassBreakTime = 1 * TicksPerSecond; let isIntroToLevel1Sqeuence = false; -let introTrail: Trail = new Trail("introTrail", 2, 4); +let introTrail: Trail = new Trail("introTrail", 2, 25 / 5); introTrail.fromTrail(startTrail); -let introToLevelTrail = new Trail("introToLevelTrail", 2, 2); +let introToLevelTrail = new Trail("introToLevelTrail", 2, 74 / 2); introToLevelTrail.fromTrail(IntroToLevel1Trail); //fill 2466 0 48 2469 -1 48 @@ -81,10 +97,16 @@ let bilalBlock: Wall = { }; // spawn a sphere of particle +let prevCurrentLevel: number = 0; -const DEVELOPER_MODE = true; +let isBreaking: boolean = false; + +let airlockParticles = new ParticleColumn(vector3(2475.5, 10, 92), 2, 2, 3, 0.5, PARTICLES.point); + +let level1Particles = new ParticleColumn(vector3(2455, -1, 49), 1.1, 2, 4, 0.7, PARTICLES.balloon_gas_particle); +airlockParticles.generatePoints(); let tickCounter = 0; -system.runInterval(async () => { +system.runInterval(() => { tickCounter++; if (mindKeeper.initialised) { trailMaker.Update(); @@ -93,11 +115,18 @@ system.runInterval(async () => { } const currentLevel = mindKeeper.get(CURRENT_LEVEL); + if (prevCurrentLevel != currentLevel) { + world.sendMessage("Current level: " + currentLevel); + prevCurrentLevel = mindKeeper.get(CURRENT_LEVEL) as number; + } switch (currentLevel) { case 0: // Show goto airlock text Pupeteer.setActionBar("%message.goto.airlock"); introTrail.spawnNext(); + drawArrow(vector3(2478, 37, 89)); + airlockParticles.update(); + airlockParticles.draw(); break; case 1: Pupeteer.setActionBar("%message.enter.airlock"); @@ -110,36 +139,36 @@ system.runInterval(async () => { levelIntro.update(); break; case 4: - if (!isIntroToLevel1Sqeuence) { - isIntroToLevel1Sqeuence = true; - // world.sendMessage("Intro to level1 sequence start"); - await lightUpPath(); - await randomExplosions(); - blowUpDoor(); - mindKeeper.increment(CURRENT_LEVEL); - triggerAlarm(); - } + (async () => { + if (!isIntroToLevel1Sqeuence) { + isIntroToLevel1Sqeuence = true; + // world.sendMessage("Intro to level1 sequence start"); + await lightUpPath(); + await randomExplosions(); + blowUpDoor(); + triggerAlarm(); + mindKeeper.increment(CURRENT_LEVEL); + } + })(); break; case 5: - introToGlassBreakTimer++; - // world.sendMessage("Glass break timer: " + introToGlassBreakTimer); - if (introToGlassBreakTimer > glassBreakTime) { - introToGlassBreakTimer = 0; - mindKeeper.increment(CURRENT_LEVEL); - } + mindKeeper.increment(CURRENT_LEVEL); + break; case 6: // Show Goto Level 1 - if (glassWindowState == GlassWindowState.Fixed) { - glassWindowState = GlassWindowState.Broken; - system.run(async () => { - if (DEVELOPER_MODE) { - world.sendMessage("Breaking glass"); - } - await delay(10); - await breakGlassWindow(); - mindKeeper.increment(CURRENT_LEVEL); - setNPCDialog("chanel1", "chanel_goto_temple"); - }); + if (isBreaking == false) { + isBreaking = true; + if (glassWindowState == GlassWindowState.Fixed) { + glassWindowState = GlassWindowState.Broken; + system.run(async () => { + if (DEVELOPER_MODE) { + world.sendMessage("Breaking glass"); + } + await delay(10); + await breakGlassWindow(); + mindKeeper.increment(CURRENT_LEVEL); + }); + } } break; case 7: @@ -152,33 +181,62 @@ system.runInterval(async () => { //Talk to Suki break; case 9: - mission1part1.update(); + level1Particles.update(); + level1Particles.draw(); + Pupeteer.setActionBar("%message.goto.level1"); break; case 10: - mission1part2.update(); + mission1part1.update(); break; case 11: - mission1part3.update(); + mission1part2.update(); break; case 12: - Pupeteer.setActionBar("%message.goto.level2"); + mission1part3.update(); + //Agent is back with player + break; case 13: - mission2part1.update(); + setNPCDialog("suki1", "suki_afterlevel_1_1"); + Pupeteer.setActionBar("%message.talkto.suki"); break; case 14: - mission2part2.update(); + mission2part1.update(); break; case 15: - mission3part1.update(); - break; - case 15: - mission3part2.update(); + //Talk to suki + setNPCDialog("suki1", "suki_afterlevel_2_1_intermezzo"); + Pupeteer.setActionBar("%message.talkto.suki"); break; case 16: - mission3part3.update(); + mission2part2.update(); break; case 17: - Pupeteer.setActionBar("Goto the door"); + // Mission 2 is complete + setNPCDialog("suki1", "suki_afterlevel_2_1"); + Pupeteer.setActionBar("%message.talkto.suki"); + break; + case 18: + mission3part1.update(); + break; + case 19: + mission3part2.update(); + break; + case 20: + mission3part3.update(); + break; + case 21: + //talk to suki + setNPCDialog("suki1", "suki_afterlevel_3_1"); + setNPCDialog("bilal1", "bilal_end_1"); + Pupeteer.setActionBar("%message.talkto.suki"); + break; + case 22: + Pupeteer.setActionBar("%message.goto.door"); + //wait for player to enter trigger + break; + case 23: + Pupeteer.setActionBar("%message.goto.bilal"); + setNPCDialog("bilal1", "bilal_end_1"); break; } } @@ -287,6 +345,9 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => { mission2part1.reset(); mission2part2.reset(); + //Set redstone block + startLevel(vector3(2456, -1, 4)); + startLevel(vector3(2457, -1, 4)); //Reset the combination to a random squence @@ -299,7 +360,10 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => { fillWall(bilalBlock, MinecraftBlockTypes.Barrier); + openDoor(); + isIntroToLevel1Sqeuence = false; + isBreaking = false; } }); @@ -329,14 +393,33 @@ system.afterEvents.scriptEventReceive.subscribe((event) => { } } - if (event.id == "cc:startLevel1") { - if (mindKeeper.get(CURRENT_LEVEL) == 8) { + checkNpcResponse(event, "cc:startLevel1", 8); + checkNpcResponse(event, "cc:afterLevel1", 13); + checkNpcResponse(event, "cc:level2Intermezzo", 15); + checkNpcResponse(event, "cc:afterLevel2", 17); + checkNpcResponse(event, "cc:afterLevel3", 21); +}); + +function checkNpcResponse(event: ScriptEventCommandMessageAfterEvent, id: string, level: number) { + if (event.id == id) { + if (mindKeeper.get(CURRENT_LEVEL) == level) { mindKeeper.increment(CURRENT_LEVEL); } } +} - if (event.id == "cc:afterLevel1") { - } +triggerManager.RegisterFunctionTrigger("tp", (event) => { + // end center pos /setblock 2490 -12 118 + // start center pos /setblock 2489 10 118 + + let pos = vector3(2489, 10, 118); + let endPos = vector3(2490, -12, 118); + world.sendMessage(Vector3ToFancyString(Vector3Subtract(endPos, pos))); + //Find offset and tp player to end pos + offset so its seamless + let playerPos = event.player.location; + let offset = Vector3Subtract(endPos, playerPos); + let finalPos = Vector3Add(pos, offset); + event.player.teleport(finalPos); }); Commands.register(PREFIX, "fien", (arg) => { @@ -361,13 +444,15 @@ Commands.register(PREFIX, "info", (arg) => { }); Commands.register(PREFIX, "kboom", (arg) => { - (async () => { - for (let i = 0; i < 10; i++) { - randomExplosions(); - await delay(1); - } - blowUpDoor(); - })(); + if (DEVELOPER_MODE) { + (async () => { + for (let i = 0; i < 10; i++) { + randomExplosions(); + await delay(1); + } + blowUpDoor(); + })(); + } }); let openDoor = () => { @@ -392,6 +477,7 @@ Commands.register(PREFIX, "restore", (arg) => { enum GlassWindowState { Broken, Fixed, + Fucked, } enum AirLockState { @@ -419,91 +505,6 @@ const glassWindowClonePos: ClonePos = { point2: vector3(2470, 11, 94), }; -const glassBreakingFrames: ClonePos[] = [ - ///fill 2465 7 94 2470 4 94 - { - point1: vector3(2465, 7, 94), - point2: vector3(2470, 4, 94), - }, - //fill 2465 0 94 2470 -3 94 - { - point1: vector3(2465, 0, 94), - point2: vector3(2470, -3, 94), - }, - { - //fill 2465 -7 94 2470 -10 94 - point1: vector3(2465, -7, 94), - point2: vector3(2470, -10, 94), - }, - //fill 2465 -14 94 2470 -17 94 - { - point1: vector3(2465, -14, 94), - point2: vector3(2470, -17, 94), - }, - //fill 2465 -21 94 2470 -24 94 - { - point1: vector3(2465, -21, 94), - point2: vector3(2470, -24, 94), - }, -]; - -const FrontAirLockOpenFrames: ClonePos[] = [ - { - point1: vector3(2476, 9, 94), - point2: vector3(2474, 7, 94), - }, - { - point1: vector3(2476, 5, 94), - point2: vector3(2474, 3, 94), - }, - { - point1: vector3(2476, 1, 94), - point2: vector3(2474, -1, 94), - }, - { - point1: vector3(2476, -3, 94), - point2: vector3(2474, -5, 94), - }, -]; - -const BackAirLockOpenFrames: ClonePos[] = [ - { - point1: vector3(2472, 9, 100), - point2: vector3(2472, 7, 102), - }, - { - point1: vector3(2472, 5, 100), - point2: vector3(2472, 3, 102), - }, - { - point1: vector3(2472, 1, 100), - point2: vector3(2472, -1, 102), - }, - { - point1: vector3(2472, -3, 100), - point2: vector3(2472, -5, 102), - }, -]; - -const AirLockWaterFrames: ClonePos[] = [ - { - point1: vector3(2473, 11, 95), - point2: vector3(2477, 11, 103), - }, - { - point1: vector3(2473, 12, 95), - point2: vector3(2477, 12, 103), - }, - { - point1: vector3(2473, 13, 95), - point2: vector3(2477, 13, 103), - }, - { - point1: vector3(2473, 14, 95), - point2: vector3(2477, 14, 103), - }, -]; - Commands.register(PREFIX, "breakGlass", (arg) => { breakGlassWindow(); glassWindowState = GlassWindowState.Broken; @@ -514,11 +515,12 @@ Commands.register(PREFIX, "restoreGlass", (arg) => { }); async function breakGlassWindow() { - playAnimation(glassBreakingFrames, 5, false, doorRoot); + await playAnimation(glassBreakingFrames, 5, false, doorRoot); glassWindowState = GlassWindowState.Broken; } async function restoreGlassWindow(force: boolean = false) { playAnimation(glassBreakingFrames, 5, true, doorRoot, force); + glassWindowState = GlassWindowState.Fixed; } async function CycleAirLockWater(fill: boolean, delayTime: number) { @@ -567,12 +569,19 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => { triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => { if (mindKeeper.get(CURRENT_LEVEL) == 8) { - mindKeeper.increment(CURRENT_LEVEL); closeDoor(); } - if (mindKeeper.get(CURRENT_LEVEL) == 15) { + if (mindKeeper.get(CURRENT_LEVEL) == 22) { openDoor(); + mindKeeper.increment(CURRENT_LEVEL); + } +}); + +triggerManager.RegisterFunctionTrigger("level1start", async (event) => { + // This is after the player talks to suki + if (mindKeeper.get(CURRENT_LEVEL) == 9) { + mindKeeper.increment(CURRENT_LEVEL); } }); @@ -647,7 +656,8 @@ let PlayFrontDoorCloseAnimation = async () => playAnimation(FrontAirLockOpenFram let SetBackDoorClosed = () => SetFrame(BackAirLockOpenFrames[0], backDoorRoot); let SetBackDoorOpen = () => SetFrame(BackAirLockOpenFrames[BackAirLockOpenFrames.length - 1], backDoorRoot); let PlayBackDoorOpenAnimation = async () => playAnimation(BackAirLockOpenFrames, frameDuration, false, backDoorRoot); -let PlayBackDoorCloseAnimation = async () => playAnimation(BackAirLockOpenFrames, frameDuration, true, backDoorRoot); +let PlayBackDoorCloseAnimation = async () => + playAnimation(BackAirLockOpenFrames, frameDuration, true, backDoorRoot, true); let FillAirlockWater = async () => CycleAirLockWater(true, frameDuration / 1.5); let EmptyAirlockWater = async () => {