Discuss Scratch

_nix
Scratcher
1000+ posts

Hidden, Removed, and Redeveloped Blocks

On the deep and fine dusk of YESTERDAY... jloffen wrote:

On August 3rd 2022, jloffen wrote:

create clone:: control
This block was added in the Scratch Day 2011 pre-alpha. This block created a clone of the sprite it was located in.
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.
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 correctly ) So of course they'd be working on 2.0 by mid-2011. Cool!
jloffen
Scratcher
100+ posts

Hidden, Removed, and Redeveloped Blocks

Around 6 hours and 33 minutes ago, _nix wrote:

On the deep and fine dusk of YESTERDAY... jloffen wrote:

create clone:: control
This block was added in the Scratch Day 2011 pre-alpha. This block created a clone of the sprite it was located in.
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!
That would mean Scratch 2.0 is… 13 years old?? Wow that's old!

Last edited by jloffen (July 29, 2026 01:49:29)

jloffen
Scratcher
100+ posts

Hidden, Removed, and Redeveloped Blocks

At some point in time between 2024 and 2026, jloffen wrote:

* when [go v] shouted:: #9c00c3 hat

shout [go v]:: #63b5ce
These 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.
The earliest known version of the broadcast block is the “ask sprite to” c block, seen in 30Jun03.
ask [sprite] to{
}:: #ff9431
Unfortunately, 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 hat

wave (@greenFlag:: #deffff):: #63b5ce
The flags could be clicked to change the colors for different broadcasts.
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 hat

send [✉️] to all:: #63b5ce

send [✉️] with [10]:: #63b5ce

wait 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

Last edited by jloffen (Aug. 3, 2026 02:49:45)

_nix
Scratcher
1000+ posts

Hidden, Removed, and Redeveloped Blocks

jloffen informatively wrote:

[…]
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 hat
send [✉️] to all:: #63b5ce
send [✉️] with [10]:: #63b5ce
wait 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
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?

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

at least one second ago, _nix wrote:

jloffen informatively wrote:

* when [✉️] received:: #9c00ce hat
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.
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?

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)”
hold on maybe you're right but idk

Last edited by jloffen (Aug. 7, 2026 12:41:10)

CoolEeveeKoffing
Scratcher
100+ posts

Hidden, Removed, and Redeveloped Blocks

Wait so you can find

jloffen wrote:

On August 3, jloffen wrote:

all at once {

} ::control

On the same day, ZZC12345 wrote:

Since 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.)

Finally, on August 24, jloffen wrote:

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 clicked
forever
if <[] = [true]> then
...
end
end
Hope you leaned something new
so the all at once block is available in projects from 2.0
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:
⚪ script1 :: #9c00c3 hat
Sprite1, forward [10] :: #63b5ce
and it would make Sprite1 move forward.

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 :: #63b5ce
start script1 :: #63b5ce
stop script1 :: #63b5ce
They supported both inputs and return values, something which Scratch 3 has yet to add.
jloffen
Scratcher
100+ posts

Hidden, Removed, and Redeveloped Blocks

rdococ wrote:

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:
⚪ script1 :: #9c00c3 hat
Sprite1, forward [10] :: #63b5ce
and it would make Sprite1 move forward.

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 :: #63b5ce
start script1 :: #63b5ce
stop script1 :: #63b5ce
They supported both inputs and return values, something which Scratch 3 has yet to add.
omg I was just about to mention this, but looks like you beat me to it!
jloffen
Scratcher
100+ posts

Hidden, Removed, and Redeveloped Blocks

Here's something quick
This block:
stop [this script v]
was originally named “done”
done:: #63b5ce
and 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)

Powered by DjangoBB