(Redirected from Functions)

Custom blocks allow for one to make their own programming blocks. Using custom blocks, similar scripts can be compressed into one reusable block. In some other programming languages, custom blocks are called "procedures," "functions," or "methods." This block is useful for reusing a sequence of blocks in different parts of code, without duplicating the blocks each usage.

Recursive factorial procedure — Scratch 2.0 alpha.

Custom Blocks in Scratch

Custom blocks are found in the "More Blocks" palette.[1] This is an example of a "jump" block:

define jump (how far)
change y by (how far)
wait (.5) secs
change y by ((0) - (how far))

when gf clicked
jump (10)
move (20) steps
jump (20)

The custom block palette starts off empty and only shows a "Make a Block" button (similar to the "Make a Variable/List" buttons in the data palette). For each Define block (whether from the make a block button, or by dragging in from the backpack or another sprite), a custom block is shown in the palette. The custom block is only available to the sprite that has the Define block.[2]

Custom blocks can only be stack blocks, and can not be reporters or booleans (though they may be added in the future).[3] They support recursion, so blocks can call themselves (This does not stop the current block executing, unlike broadcasts). This allows for things like creating fractals and finding the factorial of a number.

Creating a Custom Block

To create a custom block, open the "More Blocks" category and press the "Make a Block" button. A new block menu will open, where you can name your custom block.

The edit menu for custom blocks

By pressing "Options", you can add string, number, and boolean inputs. You can also add more label texts to the block, or make it run without screen refresh.

After naming and adding arguments, a Define () block is created. A custom block's settings can later be changed by right-clicking on its Define block or the custom block itself and selecting "edit". You can define what your custom block does by snapping a script onto its Define block, as shown below.

spin right (360) degrees

define spin right (amount) degrees
repeat (amount)
turn right (1) degrees
Note Note: When a custom block is created, it exists only for the sprite where it was created. To use a custom block in another sprite, you must create it again in that sprite.

Scratch 1.x Workaround

when gf clicked
set [how far v] to [50]
broadcast [jump v] and wait

when I receive [jump v]
change y by (how far)
wait (.5) secs
change y by ((0) - (how far))

Procedures in BYOB/Snap!

Snap!, previously called BYOB (Build Your Own Blocks), is a Scratch modification that allows procedures. Snap!'s procedures allow all 3 types of blocks, with arguments, and also recursion.

See Also


  1. http://blog.scratch.mit.edu/2012/02/scratch-20-project-page-and-project.html
  2. https://scratcharchive.asun.co/forums/viewtopic.php?pid=719181#p719181
  3. http://scratched.media.mit.edu/discussions/scratch-20/custom-block-types