Description
Expected Behavior
Blocks with unknown opcodes are skipped when imported into 3.0. These blocks should be translated into 3.0 as no-op undefined
blocks so that there is some visual indication that the blocks have been imported but no longer work. More details below.
There should be one undefined
catch-all opcode per type of block (e.g. hat blocks, c blocks, e blocks, commands, and reporters).
Actual Behavior
In Scratch 2.0, unknown opcodes and some legacy opcodes get translated to red 'undefined' blocks.
In Scratch 3.0, many of the legacy opcodes have been implemented so that projects containing those blocks from 2.0 or 1.4 still run (see #355).
However, other unknown opcodes (which can occur for a number of reasons -- see below) are skipped (see #1254). Because these blocks are removed from the project without any other user-facing indication that the blocks have been skipped blocks, it may be confusing to the user that the blocks did not import.
Some of the reasons for unknown opcodes are:
- hacked blocks
- custom procedure calls dragged into the backpack and dragged into a separate project without the associated declaration
- legacy opcodes
- blocks from extensions that are no longer supported (e.g. LEGO WeDo 1.0)