Discuss Scratch
- Discussion Forums
- » Advanced Topics
- » Hidden, Removed, and Redeveloped Blocks
- _nix
-
Scratcher
1000+ posts
Hidden, Removed, and Redeveloped Blocks
I can't believe Scratch is so old—2011 feels way too long ago to have been during the development of Scratch 2.0, so your description was really confusing me, until I remembered that Scratch 2.0 came out back in 2013, May or so, I think. (Yep, I remember correctlyThis block was added in the Scratch Day 2011 pre-alpha. This block created a clone of the sprite it was located in.create clone:: control
Later on, in one of the early alpha builds, this block was redeveloped, adding a drop-down input.create clone of [myself v]The addition of this input allowed any sprite, including the backdrop, to create clones of any sprite.
) So of course they'd be working on 2.0 by mid-2011. Cool!- jloffen
-
Scratcher
100+ posts
Hidden, Removed, and Redeveloped Blocks
That would mean Scratch 2.0 is… 13 years old?? Wow that's old!I can't believe Scratch is so old—2011 feels way too long ago to have been during the development of Scratch 2.0, so your description was really confusing me, until I remembered that Scratch 2.0 came out back in 2013, May or so, I think. So of course they'd be working on 2.0 by mid-2011. Cool!create clone:: controlThis block was added in the Scratch Day 2011 pre-alpha. This block created a clone of the sprite it was located in.
Last edited by jloffen (July 29, 2026 01:49:29)
- jloffen
-
Scratcher
100+ posts
Hidden, Removed, and Redeveloped Blocks
The earliest known version of the broadcast block is the “ask sprite to” c block, seen in 30Jun03.* when [go v] shouted:: #9c00c3 hatThese versions of the broadcast blocks were introduced in 13Oct04, with the “when go shouted” block also being the predecessor to the “when green flag clicked” block. At this time, the dropdown box only had two options; “go” and “setup”. There are earlier variants of the broadcast blocks, however in the future I will hopefully either add them to this post, or reply to this with the earlier variants.
shout [go v]:: #63b5ce
ask [sprite] to{
}:: #ff9431Unfortunately, I could not find any signs of early broadcast block in versions 11Oct03 or 8Dec03.The next version of the broadcast block is seen in 14Feb04.
* when (@greenFlag:: #deffff) waves:: #9c00ce hatThe flags could be clicked to change the colors for different broadcasts.
wave (@greenFlag:: #deffff):: #63b5ce
Despite the green flag being used for starting the project in modern Scratch versions, the “when gf waved” idea was scrapped, being replaced in version 16Mar04.
* when [✉️] received:: #9c00ce hatJust like the flags, the envelopes could be clicked to change the colors.
send [✉️] to all:: #63b5ce
send [✉️] with [10]:: #63b5ce
wait until [✉️]:: #63b5ce
(message value:: #63b5ce)
until [✉️] received{
}:: #ff9431
To be honest, I have no clue what “message value” does.
~jloffen
Last edited by jloffen (Aug. 3, 2026 02:49:45)
- _nix
-
Scratcher
1000+ posts
Hidden, Removed, and Redeveloped Blocks
[…]Message value must have been the value entered after “with”, in “send (envelope) with (value)”, right? I wonder if that was functioning properly, but I have to imagine that was the intention… I also wonder if it worked outside of “when (envelope) received” — for example, if you used “wait until (envelope)”, then would “message value” return the latest value of that envelope? And, whether or not under “when (envelope) received”, what happened if another “send (envelope) with (value)” was sent? Whether that same color, or a different one?
Despite the green flag being used for starting the project in modern Scratch versions, the “when gf waved” idea was scrapped, being replaced in version 16Mar04.* when [✉️] received:: #9c00ce hatsend [✉️] to all:: #63b5cesend [✉️] with [10]:: #63b5cewait until [✉️]:: #63b5ce(message value:: #63b5ce)until [✉️] received{
}:: #ff9431
Just like the flags, the envelopes could be clicked to change the colors.
To be honest, I have no clue what “message value” does.
~jloffen
I wonder about all this stuff because all these blocks are pretty much the exact same as people have been suggesting for ages. It's that “message value” block that looks tricky to implement properly — you know, in ways where it isn't buggy and the code does what it looks like ti does — and I wonder if that's part of the reason they ultimately scrapped that block.
“Broadcast with data”, by the way, also in my opinion an important and should-be mega popular suggestion, is OSTENSIBLY represented by this suggestion, but the OP never came back to clarify what they meant, so I think everyone just co-opted it.

Edit: OK, I reread the original post and I think it actually is for “broadcast with data”—the title of the thread gives it away. “New feature for broadcast blocks (arguments)”
Last edited by _nix (Aug. 3, 2026 13:37:08)
- jloffen
-
Scratcher
100+ posts
Hidden, Removed, and Redeveloped Blocks
hold on maybe you're right but idkMessage value must have been the value entered after “with”, in “send (envelope) with (value)”, right? I wonder if that was functioning properly, but I have to imagine that was the intention… I also wonder if it worked outside of “when (envelope) received” — for example, if you used “wait until (envelope)”, then would “message value” return the latest value of that envelope? And, whether or not under “when (envelope) received”, what happened if another “send (envelope) with (value)” was sent? Whether that same color, or a different one?* when [✉️] received:: #9c00ce hatsend [✉️] to all:: #63b5cesend [✉️] with [10]:: #63b5cewait until [✉️]:: #63b5ce(message value:: #63b5ce)until [✉️] received{
}:: #ff9431
To be honest, I have no clue what “message value” does.
I wonder about all this stuff because all these blocks are pretty much the exact same as people have been suggesting for ages. It's that “message value” block that looks tricky to implement properly — you know, in ways where it isn't buggy and the code does what it looks like ti does — and I wonder if that's part of the reason they ultimately scrapped that block.
“Broadcast with data”, by the way, also in my opinion an important and should-be mega popular suggestion, is OSTENSIBLY represented by this suggestion, but the OP never came back to clarify what they meant, so I think everyone just co-opted it.
Edit: OK, I reread the original post and I think it actually is for “broadcast with data”—the title of the thread gives it away. “New feature for broadcast blocks (arguments)”
Last edited by jloffen (Aug. 7, 2026 12:41:10)
- CoolEeveeKoffing
-
Scratcher
100+ posts
Hidden, Removed, and Redeveloped Blocks
Wait so you can find
so the all at once block is available in projects from 2.0all at once {
} ::controlSince the “all at once” block is implemented for compatiblity with Scratch 2.0 projects, it behaves the same way it did in 2.0, which is to simply run the contained script (like “if 1 = 1”).
(In early versions of Scratch 2.0, it would work the same way as “run without screen refresh” custom blocks do now, but this was removed before the release of 2.0.)Nice explanation, now I will talk about the other script in the post you replied to, the “when <> is true” block.
The “when <> is true” block was a “hat” block in the Control category. When the condition placed in the block was set to true, the following script placed underneath it would activate.
Since there was no way to stop it at the time, it was removed, and can be recreated with the following script:when green flag clickedHope you leaned something new
forever
if <[] = [true]> then
...
end
end
- rdococ
-
Scratcher
1000+ posts
Hidden, Removed, and Redeveloped Blocks
One of the earliest ways for sprites to communicate was dragging blocks from one sprite's block palette into another sprite's scripts. They'd show the name of the sprite they came from, and when run that sprite would perform the action.
You could have a script like this in Sprite2:
There were also the scripts themselves. In the earliest versions all scripts were custom blocks. They could be called as usual, or started and stopped as a separate process.
You could have a script like this in Sprite2:
⚪ script1 :: #9c00c3 hatand it would make Sprite1 move forward.
Sprite1, forward [10] :: #63b5ce
There were also the scripts themselves. In the earliest versions all scripts were custom blocks. They could be called as usual, or started and stopped as a separate process.
script1 :: #63b5ceThey supported both inputs and return values, something which Scratch 3 has yet to add.
start script1 :: #63b5ce
stop script1 :: #63b5ce
- jloffen
-
Scratcher
100+ posts
Hidden, Removed, and Redeveloped Blocks
One of the earliest ways for sprites to communicate was dragging blocks from one sprite's block palette into another sprite's scripts. They'd show the name of the sprite they came from, and when run that sprite would perform the action.omg I was just about to mention this, but looks like you beat me to it!
You could have a script like this in Sprite2:⚪ script1 :: #9c00c3 hatand it would make Sprite1 move forward.
Sprite1, forward [10] :: #63b5ce
There were also the scripts themselves. In the earliest versions all scripts were custom blocks. They could be called as usual, or started and stopped as a separate process.script1 :: #63b5ceThey supported both inputs and return values, something which Scratch 3 has yet to add.
start script1 :: #63b5ce
stop script1 :: #63b5ce
- jloffen
-
Scratcher
100+ posts
Hidden, Removed, and Redeveloped Blocks
Here's something quick
This block:
Hopefully I'll rewrite this entire thing later to be less bad
~jloffen
This block:
stop [this script v]was originally named “done”
done:: #63b5ceand you could still attach other blocks to it, due to it not being a cap block.
Hopefully I'll rewrite this entire thing later to be less bad
~jloffen
Last edited by jloffen (Yesterday 04:25:12)
- Discussion Forums
- » Advanced Topics
-
» Hidden, Removed, and Redeveloped Blocks
