JSON
Scratch

Scratch 2.0をハッキングしてみよう その1

はじめまして!
何回かに分けてScratchのプロジェクトをハッキング(=ソースコードを特別な方法で編集する)する方法をまとめました。今回は1回目です。

ハッキングとは?

プロジェクトのソースが入っているJSONを編集して改造することを指す。
クラッキングとは異なる。

方法

  1. Scratch 2.0エディターの灰色のバーにあるファイルをクリックしてドロップダウンメニューを表示させる(上の方にある)。
  2. 手元のコンピューターにダウンロードを選択。
  3. ファイル名を[プロジェクト名].sb2から[プロジェクト名].zipに変えてダウンロード。
  4. ダウンロードしたファイルを解凍して、project.jsonを開く。

jsonの解説

test.jpg
このプログラムをHackしてみる。
json:project.json

"objName": "Stage",
"sounds": [{
        "soundName": "pop",
        "soundID": 1,
        "md5": "83a9787d4cb6f3b7632b4ddfebf74367.wav",
        "sampleCount": 258,
        "rate": 11025,
        "format": ""
    }],
"costumes": [{
        "costumeName": "backdrop1",
        "baseLayerID": 3,
        "baseLayerMD5": "739b5e2a2435f6e1ec2993791b423146.png",
        "bitmapResolution": 1,
        "rotationCenterX": 240,
        "rotationCenterY": 180
    }],
"currentCostumeIndex": 0,
"penLayerMD5": "5c81a336fab8be57adc039a8a2b33ca9.png",
"penLayerID": 0,
"tempoBPM": 60,
"videoAlpha": 0.5,
"children": [{
        "objName": "Sprite1",
        "scripts": [[13, 21, [["whenGreenFlag"], ["say:", "Hello World!"], ["say:", "縺薙s縺ォ縺。縺ッ 荳也阜���"]]]],
        "sounds": [{
                "soundName": "meow",
                "soundID": 0,
                "md5": "83c36d806dc92327b9e7049a565c6bff.wav",
                "sampleCount": 18688,
                "rate": 22050,
                "format": ""
            }],
        "costumes": [{
                "costumeName": "costume1",
                "baseLayerID": 1,
                "baseLayerMD5": "f9a1c175dbe2e5dee472858dd30d16bb.svg",
                "bitmapResolution": 1,
                "rotationCenterX": 47,
                "rotationCenterY": 55
            },
            {
                "costumeName": "costume2",
                "baseLayerID": 2,
                "baseLayerMD5": "6e8bd9ae68fdb02b7e1e3df656a75635.svg",
                "bitmapResolution": 1,
                "rotationCenterX": 47,
                "rotationCenterY": 55
            }],
        "currentCostumeIndex": 0,
        "scratchX": 0,
        "scratchY": 0,
        "scale": 1,
        "direction": 90,
        "rotationStyle": "normal",
        "isDraggable": false,
        "indexInLibrary": 1,
        "visible": true,
        "spriteInfo": {
        }
    }],
"info": {
    "scriptCount": 1,
    "hasCloudData": false,
    "userAgent": "Mozilla.......",
    "projectID": "236389663",
    "swfVersion": "v461",
    "spriteCount": 1,
    "videoOn": false,
    "flashVersion": "WIN 21,0,0,213"
}

まず、3~10行目のソースコード

"sounds": [{
        "soundName": "pop",
        "soundID": 1,
        "md5": "1234567890.wav",
        "sampleCount": 258,
        "rate": 11025,
        "format": ""
    }],

ここは背景のサウンド関連のコードとなっている。
ここの中の2行目はサウンドの名前,4行目がサウンドファイルのファイル名となっている。

次に11~19行目

"costumes": [{
        "costumeName": "backdrop1",
        "baseLayerID": 3,
        "baseLayerMD5": "1234567890.png",
        "bitmapResolution": 1,
        "rotationCenterX": 240,
        "rotationCenterY": 180
    }],

ここも背景の画像関連のコードとなっている。
サウンドのコードと同じ要領だ。

そして、20行目からはスプライトのサウンド,画像そしてプログラムのコードとなっていく。

そのコードがこのコード

文字化けしているのは気にしない。多分zipでDLしたから。:sweat:
もし気になるのであれば(というか、DLしたままjsonを編集しようとすると、書き込み禁止の場合もあるし、編集しにくい。でも、zipから外に出してあげると文字化けも解消される。)

project.json
"scripts": [[13, 21, [["whenGreenFlag"], ["say:", "Hello World!"], ["say:", "縺薙s縺ォ縺。縺ッ 荳也阜���"]]]],

まずは["say:","Hello World!"]
"say:"というのは()と言うブロックを表す。そして、"Hello World!"は、そう。
白い部分Hello World!という引数を表す。
test.jpg
そして、["say:", "縺薙s縺ォ縺。縺ッ 荳也阜���"]は、こんにちは 世界!を表す。

ハッキングの一歩手前

では、今回は["say:", "縺薙s縺ォ縺。縺ッ 荳也阜���"]の文字化けしてる部分を(すいません。zipから出すのさぼりました...今度からはちゃんとzipファイルから出して文字化けしないようにします...)["say:", "ほげ"]というように書き換えてみよう。
そして、以下の手順でアップロードしてみよう!
1. 編集したjsonをzipに戻す(このとき編集前のjsonが残っている場合は置き換えてください)。
2. Scratchエディターに戻る。
3. 灰色のバー(初めと同じところ)にあるファイルから手元のコンピューターからアップロードを選択して、そのzipを選択してアップロードする(表示されるファイルの種類をカスタムファイルからすべてのファイルにしないとzipは表示されない)。
4. アップロードしますか?的な事を聞かれるので迷わずOK。
5. 引数が変わっていることを確認。>終了!

今回はここまで。次回は有意義なハッキングをします(そもそも今回はハッキングではないが)!