diff --git a/extensions/Lily/MoreEvents.js b/extensions/Lily/MoreEvents.js
index b215802af8..e1afd62c4d 100644
--- a/extensions/Lily/MoreEvents.js
+++ b/extensions/Lily/MoreEvents.js
@@ -2,6 +2,7 @@
// ID: lmsMoreEvents
// Description: Start your scripts in new ways.
// By: LilyMakesThings
+// By: Fath11
// License: MIT AND LGPL-3.0
(function (Scratch) {
@@ -13,6 +14,12 @@
const stopIcon =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAQlBMVEUAAAC/UFC8Q0OzTU24SEi4SEi3SEi4R0e4SEi4SEi4SEi4SEi7SUm8SUnMTk7MT0/OT0/PT0/gVVXiVVXsWVn///+CoOd2AAAAC3RSTlMAEBMUu7zLz9D8/dIXnJwAAAABYktHRBXl2PmjAAAAxklEQVRIx+3WwRKDIBAD0JWqVEOtWv7/W3twOqKwELzW3N9wYhORMMYiztgZUZMUAKxqmh5Kno/MG256nzI59Z2mB+BWH+XzUt5RhWoyQjFZkTQFkTBFERlCnAwlDoYUgaHFblpaeL86AK0MvNjMIABmT2cGIAAWniw3ucm/k9ovduEjXzgXtUfJmtrTt9VZzYH9FSB/xvfKZMsiLFmuko61zBTfucjL9RpXf6nEU2MhPxXS86J+kORmjz6V6seViOnG8oT7ApMcjsYZwhXCAAAAAElFTkSuQmCC";
+ const pauseIcon =
+ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTgiIHdpZHRoPSIxOCI+PHBhdGggZD0iTTIzMS40MjkgMTg4LjkyOVYxNzEuMDdoNC4yODV2MTcuODU4em0xMi4xNDIgMFYxNzEuMDdoNC4yODZ2MTcuODU4eiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzMwOSAwIDAgLjk1NDI3IC0yMzguNTczIC0xNjIuNzY5KSIgZGF0YS1wYXBlci1kYXRhPSJ7JnF1b3Q7aXNQYWludGluZ0xheWVyJnF1b3Q7OnRydWV9IiBmaWxsPSIjZmZhZTAwIiBzdHJva2U9IiNkODk0MDAiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm5vcm1hbCIvPjwvc3ZnPg==";
+
+ const continueIcon =
+ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTgiIHdpZHRoPSIxOCI+PHBhdGggZD0ibTI0Ni4wNTUgMTgwLTEyLjExIDEyLjExdi0yNC4yMnoiIHRyYW5zZm9ybT0ibWF0cml4KDEuMTM5NDkgMCAwIC42Nzk0MyAtMjY0LjU5NSAtMTEzLjI5OCkiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgc3Ryb2tlPSIjZDg5NDAwIiBmaWxsPSIjZmZhZTAwIiBkYXRhLXBhcGVyLWRhdGE9InsmcXVvdDtpc1BhaW50aW5nTGF5ZXImcXVvdDs6dHJ1ZX0iLz48L3N2Zz4=";
+
// Source:
// https://github.com/TurboWarp/scratch-vm/blob/develop/src/io/keyboard.js
// https://github.com/TurboWarp/scratch-blocks/blob/develop/blocks_vertical/event.js
@@ -205,6 +212,34 @@
runtime.shouldExecuteStopClicked = false;
originalGreenFlag.call(this);
};
+
+ let pauseHandler = () => {
+ runtime.allScriptsByOpcodeDo(
+ "lmsMoreEvents_whenProjectPaused",
+ (script, target) => {
+ const topBlockId = script.blockId;
+ for (let j = 0; j < runtime.threads.length; j++) {
+ if (
+ runtime.threads[j].topBlock === topBlockId &&
+ runtime.threads[j].status !== 4
+ ) {
+ return;
+ }
+ }
+ runtime._pushThread(topBlockId, target);
+ }
+ );
+ };
+
+ runtime.on("RUNTIME_PAUSED", () => {
+ runtime.once("BEFORE_EXECUTE", pauseHandler);
+ });
+
+ runtime.on("RUNTIME_UNPAUSED", () => {
+ runtime.once("BEFORE_EXECUTE", () => {
+ runtime.startHats("lmsMoreEvents_whenProjectUnPaused");
+ });
+ });
}
getInfo() {
@@ -228,6 +263,32 @@
},
extensions: ["colours_event"],
},
+ {
+ opcode: "whenProjectPaused",
+ blockType: Scratch.BlockType.EVENT,
+ text: Scratch.translate("when [PAUSE] clicked"),
+ isEdgeActivated: false,
+ arguments: {
+ PAUSE: {
+ type: Scratch.ArgumentType.IMAGE,
+ dataURI: pauseIcon,
+ },
+ },
+ extensions: ["colours_event"],
+ },
+ {
+ opcode: "whenProjectUnPaused",
+ blockType: Scratch.BlockType.EVENT,
+ text: Scratch.translate("when [UNPAUSE] clicked"),
+ isEdgeActivated: false,
+ arguments: {
+ UNPAUSE: {
+ type: Scratch.ArgumentType.IMAGE,
+ dataURI: continueIcon,
+ },
+ },
+ extensions: ["colours_event"],
+ },
{
opcode: "forever",
blockType: Scratch.BlockType.EVENT,