Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ScratchPlayer

A half-broken C++ software to play simple Scratch games offline using SDL2.

Usage

Download the latest release of the software or compile it yourself.

Then, acquire the .sb3 file of whatever Scratch project you want to play, and drag-and-drop it onto the software's executable.

(Alternatively, you can do this on your favourite terminal, by passing the path of the .sb3 file as the first argument of the command.)

Limitations

  • Blocks from the "data", "procedures" and "argument" category aren't supported
  • Custom blocks aren't supported
  • Backgrounds and sprites that have text won't render it, due to SDL2_image limitations
  • A lot of heavy projects won't run properly or will lag

Compiling

Prerequisites

To compile this software, you'll need:

Step 1 - Compiling libraries

SDL2, SDL2_image and SDL2_ttf are included as compiled binaries in this repo. However, for obvious safety reasons, it is always recommended to compile these by yourself. For this, check the instructions from the corresponding repos.

zlib and libzip need to be compiled by hand, though. For this:

  • Open zlib's solution file (Libs/zlib-win-build/build-VS2022/zlib.sln) with Visual Studio 2022
  • Build the solution with the targets you're interested in (Debug/Release for Win32/x64)
  • Repeat the process with libzip's solution file (Libs/libzip-win-build/build-VS2022/libzip.sln), with the same targets as zlib
  • It is required for you to build zlib first, as libzip relies on zlib to build itself.

Step 2 - Compiling the main program

Once that libraries are compiled, open the solution file located at the root of the repo with Visual Studio 2022 and try to build the solution with the same targets as zlib and libzip.

You should be able to find the output executable at the root of the repo, in folders having names matching your targets.

Add the DLLs from your builds in the same folder and it should run. If you're struggling with that, I've uncluded a DLLs folder containing all of them, sorted by target. Do note that again, it is always recommended to use your own DLLs, as using ones from strangers could compromise your computer.

Notes

This project is widely unfinished!

I've started it a few months ago but eventually lost the motivation to finish it, but I'm publishing it in the hopes of it being useful to someone.

Licensing

Please refer to the LICENSE file.

Credits

libsdl for SDL2, SDL2_image and SDL2_ttf.

nlohmann and his contributors for json library

Mark Adler, Jean-loup Gailly and their contributors for zlib

Dieter Baron, Thomas Klausner and their contributors for libzip

Kelvin Lee for his zlib-win-build and libzip-win-build repositories

About

A half-broken C++ software to play simple Scratch games offline using SDL2.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages