Create a Simon Clone! Scenario: while programming you have a sudden nostalgic urge for the '80s and cheesy games.

Requirements: Make a GUI program (text probably won't work) for Simon, the game. Input can be clicking, or pressing a key. You should divide the screen into 4 regions: yellow, blue, red, green. When the game starts, a random color lights up and you activate it. Then, two lights come on, one after the other, and you need to activate those in order, etc. The game ends when you press the wrong color. 

Bonuses:

-100 if you include sound (a different note played when pressing each region and when the game shows you the colors)

-25 if you include a score counter.
Scratch, 1604 – 125 = 1479

I'm here for the fun, not the golf.

Edit: updated scoring method based on community consensus.

Main program:



Individual sprites:



This is the sprite with number 0. The other sprites have the same script, except the number.

Play with it online.

Code used for byte counting: (Using snippet to hide code)



when green flag clicked
set [s v] to [0]
delete (all v) of [a v]
forever 
  set [x v] to (pick random (0) to (3))
  add (x) to [a v]
  set [i v] to [1]
  repeat (length of [a v] :: list) 
    broadcast (item (i) of [a v] :: list)
    wait (0.3) secs
    change [i v] by (1)
  end
  set [i v] to [1]
  wait until &lt;(x) = [4]&gt;
end

when I receive [0 v]
play sound [0 v]
next costume
wait (0.3) secs
next costume

when this sprite clicked
broadcast [0 v]
wait (0.3) secs
if &lt;[0] = (item (i) of [a v] :: list)&gt; then 
  change [i v] by (1)
else 
  stop [all v]
end
if &lt;(i) &gt; (length of [a v] :: list)&gt; then 
  set [x v] to [4]
  change [s v] by (1)
end

when this sprite clicked
broadcast [3 v]
wait (0.3) secs
if &lt;[3] = (item (i) of [a v] :: list)&gt; then 
  change [i v] by (1)
else 
  stop [all v]
end
if &lt;(i) &gt; (length of [a v] :: list)&gt; then 
  set [x v] to [4]
  change [s v] by (1)
end

when I receive [3 v]
play sound [3 v]
next costume
wait (0.3) secs
next costume

when I receive [1 v]
play sound [1 v]
next costume
wait (0.3) secs
next costume

when this sprite clicked
broadcast [1 v]
wait (0.3) secs
if &lt;[1] = (item (i) of [a v] :: list)&gt; then 
  change [i v] by (1)
else 
  stop [all v]
end
if &lt;(i) &gt; (length of [a v] :: list)&gt; then 
  set [x v] to [4]
  change [s v] by (1)
end

when this sprite clicked
broadcast [2 v]
wait (0.3) secs
if &lt;[2] = (item (i) of [a v] :: list)&gt; then 
  change [i v] by (1)
else 
  stop [all v]
end
if &lt;(i) &gt; (length of [a v] :: list)&gt; then 
  set [x v] to [4]
  change [s v] by (1)
end

when I receive [2 v]
play sound [2 v]
next costume
wait (0.3) secs
next costume




Note: Code automatically generated using scratchblocks generator, modified as somehow the generator doesn't correctly handle decimal numbers (treating 0.3 as 0).

Screenshot:



Note: Please do not press two buttons within 0.3 seconds.