Discuss Scratch

KimiruHamiru
New to Scratch
500+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

Scratch_daisuki wrote:

どうやったらScratch3.0をハックできるんですか?
Scratch3.0は、大雑把に言えば、ほとんどの部分がJavaScript言語で書かれています。
ソースコードが公開されているので、JavaScript周辺の「充分な知識」があれば、
改造版Scratchを作ってWindowsなどの環境で動かすことができます。
改造しないまでも実際の構造を知ることでプロジェクトの作り方を工夫したりもできます。

このトピックで言う「Scratch3.0をハックする」の基本はそれです。

具体的にどうするか
具体的にどうするかというあたりは「質問者回答者の前提知識次第で答えの幅がむちゃくちゃ広くなる」のですが、
ひとつのこたえは、

「JavaScript周辺の充分な知識」があれば、
https://github.com/llk/scratch-gui
というURLを1つ知るだけで「Scratch3.0をハックする」ことができます。
できないなら「JavaScript周辺の充分な知識」が足りません。

となるかと思います。
とはいえ、これはかなり荷が重いです。
「周辺、充分」が曲者(くせもの)です。罠です。量がとんでもないです。
「一介の職業プログラマ」のレベルでは、
「手持ちのスキルセットが余程マッチする」且つ「整合性に関して、時の運がある」
という特殊状況でなければ、githubをスタート地点にすることはお勧めできません。
できなくはないですが、数週間単位の時間や最低数千円単位の書籍代が必要なはずです。

そこで

Open Source Projectsフォーラム
日本語フォーラムの外、
https://scratch.mit.edu/discuss/ のページ
「About Scratchカテゴリ」の中に
・Open Source Projectsフォーラム
・Developing Scratch Extentionsフォーラム
・Bugs and Glitchesフォーラム
といった、
「Scratch3.0をハックする」話題
に関連したフォーラム群があります。

特に、「Open Source Projects」フォーラムには
「Scratch3.0をハックする」の具体的なガイドがまとまっているようです。
「Scratch3.0を改造することに関しては、そこの情報が世界一前提知識の要求が低い」と思っています。
(とかいいつつ、私はちゃんと読んでません!)
また、「事実上の一次情報」となっているという理解です。
(異論はあるでしょうが、「Open Source Projectsフォーラム」の存在なしに日本語のこのトピックや、さらに言えばgithubのLLKリポジトリが機能しているとは想像できません)

などといいつつ、

Hackって何?
「Hackする」という言葉は、広義には「ライフハック」とかいう言葉があるように、
ソースコードのビルド云々を前提としたやり方に限定する言葉ではないので、
別ないろんなやり方でHackしてみるのもいいかもとは思います。

このトピックの指向はどうあれ、
「sb3ファイルを解凍ツールに掛けたらJSONファイルが出てきた!+ちょちょっと書き換えてアーカイブしたらScratchで読めた!=微妙に動作が変わった!」といった、いわゆる「JSONハック」
や、
もっと言えば
「こう使えばフレームレートが上げられる!」、「こうすれば鳴らすブロックで同時発声可能!」
などという、プロジェクトレベルからのアプローチ

「Scratch3.0をハックする」という表現をして差し支えないかな、と思うので、結局のところ
好きなようにHackすればよい
自分がHackだと思えばそれはHack
かな?とかも思います。

「ぼくが考えるHackはこれだ!」という具体的な話が出てくると、別な答えが出てくるかもしれません。
inoking
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

何をしたいかという程度にもよりますが

このトピックを最初から見ていくだけで一次情報になると思います。
その中にある Scratch 3.0の拡張機能を作ってみよう などは特に有用です。

JavaScript はまともに扱ったこともない私でさえ
「数週間単位の時間や最低数千円単位の書籍代」もかけることなく、
ポイントを絞ればソースの解析はできています。

これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
 つまり「子ども SNS」ではない

・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもないナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
apple502j
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

私としては、一次情報は
・ソースコード
・Issue/Pull Request/コミットメッセージ
・STメンバーのプロフィールコメント
・ときどきフォーラム投稿
ですね。

署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名
inoking
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

質問コーナー3 #7644 より:
スケジューラについて調べました。
33ミリ秒毎にメインループが起動され各スプライトの処理が順番に実行されます。
() 秒待つ
等では時間が満了していない場合は yield され次回の処理に回されるので
これが33ミリ秒単位の待ち時間になるという理由と思われます。
※この辺の作りは Scratch 2.0 と同様のようです。

メインループ起動の流れ:
1. 緑旗のクリック時 VirtualMachine::start() が呼ばれます(と思われる)。
https://github.com/LLK/scratch-gui/blob/develop/src/containers/controls.jsx#L17
handleGreenFlagClick (e) {
e.preventDefault();
if (e.shiftKey) {
this.props.vm.setTurboMode(!this.props.turbo);
} else {
if (!this.props.isStarted) {
this.props.vm.start();
}
this.props.vm.greenFlag();
}
}
2. VirtualMachine::start() では Runtime::start() が呼ばれます。
https://github.com/LLK/scratch-vm/blob/develop/src/virtual-machine.js#L171
start () {
this.runtime.start();
}
3. Runtime::start() では 33(1000 / 30)ミリ秒毎に Runtime::_step() を呼び出すよう設定します。
https://github.com/LLK/scratch-vm/blob/develop/src/engine/runtime.js#L700
static get THREAD_STEP_INTERVAL_COMPATIBILITY () {
return 1000 / 30;
}
https://github.com/LLK/scratch-vm/blob/develop/src/engine/runtime.js#L2557
start () {
// Do not start if we are already running
if (this._steppingInterval) return;

let interval = Runtime.THREAD_STEP_INTERVAL;
if (this.compatibilityMode) {
interval = Runtime.THREAD_STEP_INTERVAL_COMPATIBILITY;
}
this.currentStepTime = interval;
this._steppingInterval = setInterval(() => {
this._step();
}, interval);
this.emit(Runtime.RUNTIME_STARTED);
}
4. Runtime::_step() では Sequencer::stepThreads() が呼ばれます。
https://github.com/LLK/scratch-vm/blob/develop/src/engine/runtime.js#L2019
_step () {
...
const doneThreads = this.sequencer.stepThreads();
5. Sequencer::stepThreads() では インターバル(33ミリ秒)の 75% を消費するまでループが実行され、これがメインループです。
https://github.com/LLK/scratch-vm/blob/develop/src/engine/sequencer.js#L70
stepThreads () {
// Work time is 75% of the thread stepping interval.
const WORK_TIME = 0.75 * this.runtime.currentStepTime;
...
while (this.runtime.threads.length > 0 &&

numActiveThreads > 0 &&

this.timer.timeElapsed() < WORK_TIME &&

(this.runtime.turboMode || !this.runtime.redrawRequested)) {

() 秒待つ
https://github.com/LLK/scratch-vm/blob/develop/src/blocks/scratch3_control.js#L110
wait (args, util) {
if (util.stackTimerNeedsInit()) {
const duration = Math.max(0, 1000 * Cast.toNumber(args.DURATION));

util.startStackTimer(duration);
this.runtime.requestRedraw();
util.yield();
} else if (!util.stackTimerFinished()) {
util.yield();
}
}

これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
 つまり「子ども SNS」ではない

・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもないナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
inoking
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

心の叫び wrote:

Scratch 2.0 のオフラインエディターで編集していた開発版プロジェクトが
(上限の50MBよりは少し小さいのだけれど)いつの間にか保存できなくなってる。。

Scratch 3.0 のオフラインエディタでは読み込んで保存できるものの
.sb2 では 1.2MB だった project.json が
.sb3 では 5.2MB に膨れ上がり
そのせいでオンラインにアップできない。。

Scratch 3.0 は圧縮効率が向上しているはずではなかったのか?

・Scratch 2.0 のサイズ制限を緩和した Mod では保存もできるのでそちらで続けるか、
・Scratch 3.0 のオフラインエディターで編集を続けるか、
思案中。。。
というわけで
Scratch 3.0 の project.json のサイズがなぜ膨れ上がるかなのですが
targets.blocks にある各ブロック(↓ のような単位)
() 歩動かす
にそれぞれ20文字の一意識別子のようなものが付加されていて相互参照しているようです。
使われているブロックの数だけこの識別子は付加されていますから
それだけでも膨れ上がらせるには十分でしょう。

これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
 つまり「子ども SNS」ではない

・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもないナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
inoking
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

JSON のビューアとしては「J_and_E」がいい感じです。

Scratch 3.0 の改行なし project.json も放り込んでやれば整形してくれます。

Last edited by inoking (June 27, 2020 15:56:08)


これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
 つまり「子ども SNS」ではない

・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもないナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
akku--n11
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

(こんなの)
こんなの
の違いが書いてあるところはありますか?(json内)

この線から下は 署名(しょめい) です

カワイソス ಥ_ಥこれで傾向乗りたい

適当ポストカウント:
Found 1032 posts.
jiroz_2nd
Scratcher
100+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

ハックしたプロジェクトは共有してもいいのでしょうか?

こんな宣伝やちょっとした紹介を書く所を署名といいます。手動じゃないです。

ピクシブ小説だけどUNDERTALEの二次創作があります。(少しやべえシーンあるからそこは自己責任で。)
題名は「War after TALE」。よかったら読んでほしいです!

↓↓↓ついでにこれも見てください。(人員不足で困ってる)
UNDERTALE ANOTHER STORY 制作スタジオ
apple502j
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

akku--n11 wrote:

(こんなの)
こんなの
の違いが書いてあるところはありますか?(json内)
基本はopcode-type対応表を用意します。
ただし、変数ブロックは別です。(変数ブロックは「入力欄」として扱われています)

署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名
musicmansub
Scratcher
1 post

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

部外者ですいません。scratch3.0ではハッキングすることってできますか?
jun50
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

可能です。

ちなみに私はUbuntuユーザーです☆
$ sudo discuss send “message”
We trust you have received the usual lecture from the Scratch Team. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
#4) “S” of Scratch is uppercase letter.










アリスはかわいい!!!!!!!!!アリスちゃあああああああああああああああああああああああああああああああああん!!!!!!!!!!!!!ロリスちゃんかわいい!!!
akku--n11
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

jiroz_2nd wrote:

ハックしたプロジェクトは共有してもいいのでしょうか?
多分大丈夫です。
危険なもの(危ないユーザースクリプトなど)を使ったプロジェクトは投稿しないように。

この線から下は 署名(しょめい) です

カワイソス ಥ_ಥこれで傾向乗りたい

適当ポストカウント:
Found 1032 posts.
apple502j
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

その場合は、利用規約の4.4(modされたScratchを使ったプロジェクトの共有禁止)にも気を付けてください。
Scratch外での共有は問題ありません。

署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名
tsumuri3
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

Windows1000000 wrote:

dream1030 wrote:

inoking wrote:

ベータ版はアップロード機能をもうサポートしているのでしょうか?
ダウンロードしただけのファイルでもアップロードできませんか?
すみません、私は試していません。
※この話題なら Scratch3.0について話し合う所 のほうがいいかも
アップロード機能はもう使えるみたいです。

ところで、ふと思ったことがあったので、実験してみました。
zipだったファイルの拡張子をもう一度sb3に戻してアップロードを試してみましたが、うまくいきませんでした。
僕もうまくいきませんでした。しかも、sb3に拡張子を変えても、アイコンはzipのままでした。
展開したやつは、.sb3ではなく、(windowsの場合だが)フォルダごと、右クリックして、送るでzipにしてください。

Last edited by tsumuri3 (Aug. 3, 2020 08:42:05)

inoking
Scratcher
1000+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

tsumuri3 wrote:

Windows1000000 wrote:

僕もうまくいきませんでした。しかも、sb3に拡張子を変えても、アイコンはzipのままでした。
展開したやつは、.sb3ではなく、(windowsの場合だが)フォルダごと、右クリックして、送るでzipにしてください。
それは2年前の投稿でベータ版の話ですよ。
投稿前に日付を確認しましょう。

これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
 つまり「子ども SNS」ではない

・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもないナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
bakabaka99
Scratcher
100+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

趣旨にずれている気がしたので削除

Last edited by bakabaka99 (Aug. 11, 2020 21:33:45)

MINITOMATO10
Scratcher
100+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

変数を後ろに下げる方法ってありますか?質問コーナー4で質問したのですが、このトピックの目的が、っぽかったので投稿させていただきました

Last edited by MINITOMATO10 (Aug. 12, 2020 08:44:10)


おすすめの曲
・https://youtu.be/g7s6-9AwfCc(すとぷり - StrawberryPrinceForever)
・https://youtu.be/Cudfi9AHkeU(莉犬 - ルマ)

おすすめ動画
・https://youtu.be/yTHlAOVVDEA(すとぷり - 椅子取りゲーム)
momonngamon
Scratcher
10 posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

MINITOMATO10 wrote:

変数を後ろに下げる方法ってありますか?
無いと思うなぁ
momonngamon
Scratcher
10 posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

ハッキングはだめですよね
aorubomerkun-s_test
Scratcher
100+ posts

Scratch 3.0 をハック(動作や構造を解析すること)しよう!

momonngamon wrote:

ハッキングはだめですよね
このトピックのハッキングとあなたが思っているハッキングでは意味が違います。
単にハッキングと言っても悪いことだけではありません。

Powered by DjangoBB