( rund.ino ) 1
seed ( var ) 1 seed ! ( init ) : rand
( -- n ) seed 128 seed @ * seed @ 11 >> ^ 16 seed @ * ^ <=> 0x7FFF & return ( ret )
; ( ret ) :: srand ( n -- ) seed ! ( forth ) ; ( ret ) 1
key ( var ) 0 key ! ( init ) :: pixel
( x y c -- ) 2 3 pick * 2 3 pick * 2 pick putpixel drop drop drop
; ( ret ) : vblank
( -- )
; ( ret ) : clearDisplay
( -- ) 0
! ( init ) begin
@ 128 <<> while ( for ) 0 1
! ( init ) begin 1
@ 64 <<> while ( for )
@ 1
@ 0 pixel 1
drop repeat ( endfor )
drop repeat ( endfor )
; ( ret ) : setCursor
( x y -- ) drop drop
; ( ret ) :: print
( s -- ) drop
; ( ret ) :: sprintf
( buf fmt n -- ) drop drop drop
; ( ret ) :: display ( -- ) redraw ( forth ) ; ( ret ) :: delay
( ms -- ) drop
; ( ret ) : tone
( f t -- ) drop drop
; ( ret ) : start
( -- )
; ( ret ) : setFrameRate
( n -- ) drop
; ( ret ) : pressed
( b -- n ) key @ nip return ( ret )
; ( ret ) : random
( a b -- n ) begin
rand 0x7F & <=> over <>> while ( while ) repeat ( endwhile )
@ nip nip return ( ret )
; ( ret ) : drawBitmap
( x y b w h c -- ) 4 pick 2 pick + 64 <<> if over 7 + 3 >> else 64 5 pick - 3 >> then
! ( init ) 5 pick 3 pick + 128 <<> if 2 pick else 128 6 pick - then 1
! ( init ) 5 pick 0 <<> if 2 pick 6 pick - else 0 then 2
! ( init ) 0 3
! ( init ) begin 3
@
@ <<> while ( for ) 2
@ 4
! ( init ) begin 4
@ 1
@ <<> while ( for ) 3 pick 3
@ 4 pick * 4
@ + + @ 5
! ( init ) 5 pick 4
@ + 6
! ( init ) 8 3
@ * 5 pick + 7
! ( init ) 5
@ 0b00000001 & if ( if ) 6
@ 7
@ 2 pick pixel then ( endif ) 5
@ 0b00000010 & if ( if ) 6
@ 7
@ 1 + 2 pick pixel then ( endif ) 5
@ 0b00000100 & if ( if ) 6
@ 7
@ 2 + 2 pick pixel then ( endif ) 5
@ 0b00001000 & if ( if ) 6
@ 7
@ 3 + 2 pick pixel then ( endif ) 5
@ 0b00010000 & if ( if ) 6
@ 7
@ 4 + 2 pick pixel then ( endif ) 5
@ 0b00100000 & if ( if ) 6
@ 7
@ 5 + 2 pick pixel then ( endif ) 5
@ 0b01000000 & if ( if ) 6
@ 7
@ 6 + 2 pick pixel then ( endif ) 5
@ 0b10000000 & if ( if ) 6
@ 7
@ 7 + 2 pick pixel then ( endif ) 4
drop repeat ( endfor ) 3
drop repeat ( endfor ) drop drop drop drop drop drop
; ( ret ) : drawLine
( x1 y1 x2 y2 color -- ) 4 pick
! ( init ) begin
@ 3 pick <<=> while ( for )
@ 4 pick 2 pick pixel
drop repeat ( endfor ) drop drop drop drop drop
; ( ret ) 1
frame ( var ) 0 frame ! ( init ) 16
text ( var ) 0
cactus_1 ( var ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0xFE , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xFE , ( init ) 0x00 , ( init ) 0xC0 , ( init ) 0xC0 , ( init ) 0x80 , ( init ) 0xFE , ( init ) 0xFF , ( init ) 0xFE , ( init ) 0x00 , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xC0 , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0x7F , ( init ) 0x01 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x83 , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0x80 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0
cloud_1 ( var ) 0x1C , ( init ) 0x22 , ( init ) 0x22 , ( init ) 0x22 , ( init ) 0x24 , ( init ) 0x10 , ( init ) 0x12 , ( init ) 0x2A , ( init ) 0x21 , ( init ) 0x41 , ( init ) 0x41 , ( init ) 0x41 , ( init ) 0x42 , ( init ) 0x4A , ( init ) 0x24 , ( init ) 0x24 , ( init ) 0x18 , ( init ) 0
dino_tumble ( var ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x7E , ( init ) 0xF8 , ( init ) 0xF0 , ( init ) 0xE0 , ( init ) 0xE0 , ( init ) 0xF0 , ( init ) 0xF0 , ( init ) 0xF8 , ( init ) 0xF8 , ( init ) 0xF8 , ( init ) 0xF8 , ( init ) 0xF0 , ( init ) 0xF0 , ( init ) 0xF0 , ( init ) 0xE0 , ( init ) 0xE0 , ( init ) 0xC0 , ( init ) 0xC0 , ( init ) 0x80 , ( init ) 0xC0 , ( init ) 0xF0 , ( init ) 0xA8 , ( init ) 0xD8 , ( init ) 0xA8 , ( init ) 0xF8 , ( init ) 0xF8 , ( init ) 0xF8 , ( init ) 0xF8 , ( init ) 0xF8 , ( init ) 0xF0 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x01 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x01 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x01 , ( init ) 0
dino_top ( var ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0xFE , ( init ) 0xFF , ( init ) 0xFB , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xBF , ( init ) 0xBF , ( init ) 0xBF , ( init ) 0x3F , ( init ) 0x3E , ( init ) 0x7E , ( init ) 0xF8 , ( init ) 0xF0 , ( init ) 0xE0 , ( init ) 0xE0 , ( init ) 0xF0 , ( init ) 0xF8 , ( init ) 0xFC , ( init ) 0xFE , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0xFF , ( init ) 0x7F , ( init ) 0x04 , ( init ) 0x0C , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x01 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x03 , ( init ) 0x01 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0
dino_leg_0 ( var ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x01 , ( init ) 0x1F , ( init ) 0x17 , ( init ) 0x03 , ( init ) 0x01 , ( init ) 0x03 , ( init ) 0x1F , ( init ) 0x10 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0
dino_leg_1 ( var ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x01 , ( init ) 0x0F , ( init ) 0x0B , ( init ) 0x01 , ( init ) 0x01 , ( init ) 0x03 , ( init ) 0x1F , ( init ) 0x10 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0
dino_leg_2 ( var ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x01 , ( init ) 0x1F , ( init ) 0x17 , ( init ) 0x03 , ( init ) 0x01 , ( init ) 0x03 , ( init ) 0x0F , ( init ) 0x08 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) 0x00 , ( init ) : intro
( -- ) 8 <-x>
! ( init ) begin
@ 28 <<> while ( for ) clearDisplay 46
@ setCursor "ARDUBOY" print display 16 delay
@ 2 + <=> drop repeat ( endfor ) 987 120 tone 120 delay 1318 400 tone 42 48 setCursor "presents" print display 2000 delay 1318 1 tone
; ( ret ) 1
d ( var ) 1
delta ( var ) 1
cloud_1_y ( var ) 1
d_jump ( var ) 1
d_jump_t ( var ) 1
d_run ( var ) 1
d_tumble_t ( var ) 1
ox ( var ) : setup
( -- ) start 60 setFrameRate intro d 0 <=> drop delta 0 <=> drop cloud_1_y 2 <=> drop d_jump 0 <=> drop d_jump_t 0 <=> drop d_tumble_t 0 <=> drop d_run 0 <=> drop ox 130 <=> drop
; ( ret ) : scene
( -- ) d_run @ if 8 pressed
else 0 then if ( if ) d_run 1 <=> drop then ( endif ) d_tumble_t @ if 8 pressed
else 0 then if ( if ) setup return ( ret ) then ( endif ) frame <++i> drop frame @ 16000 <>> if ( if ) frame 0 <=> drop then ( endif ) d_run @ if delta <++i> 4 <>>
else 0 then if ( if ) delta 0 <=> drop d <++i> drop then ( endif ) d_run @ if ( if ) ox frame @ 2 <%> d @ 100 / * 2 + <-=> drop ox @ 15 <-x> <<> if ( if ) ox 140 0 60 random + <+=> drop then ( endif ) then ( endif ) d_jump_t @ if 8 pressed
else 0 then if ( if ) d_jump_t 1 <=> drop d_jump 5 <=> drop 440 40 tone else ( else ) d_jump_t @ if ( if ) d_jump_t @ 3 <==> if ( if ) 880 80 tone then ( endif ) d_jump_t <++i> drop d_jump_t @ 6 <<> if ( if ) d_jump 6 <+=> drop else ( else ) d_jump_t @ 9 <<> if ( if ) d_jump 2 <+=> drop else ( else ) d_jump_t @ 13 <<> if ( if ) d_jump 1 <+=> drop else ( else ) d_jump_t @ 16 <==> if 1 else d_jump_t @ 18 <==>
then if ( if ) d_jump 1 <+=> drop else ( else ) d_jump_t @ 20 <==> if 1 else d_jump_t @ 22 <==>
then if ( if ) d_jump 1 <-=> drop else ( else ) d_jump_t @ 38 <>> if ( if ) d_jump 0 <=> drop d_jump_t 0 <=> drop else ( else ) d_jump_t @ 32 <>> if ( if ) d_jump 6 <-=> drop else ( else ) d_jump_t @ 29 <>> if ( if ) d_jump 2 <-=> drop else ( else ) d_jump_t @ 25 <>> if ( if ) d_jump 1 <-=> drop then ( endif ) then ( endif ) then ( endif ) then ( endif ) then ( endif ) then ( endif ) then ( endif ) then ( endif ) then ( endif ) then ( endif ) then ( endif ) d_tumble_t @ if ox @ 10 <-x> <>> if ox @ 16 <<> if d_jump_t @ 14 <<>
else 0 then else 0 then else 0 then if ( if ) d_tumble_t 1 <=> drop then ( endif ) d_tumble_t @ if ( if ) d_tumble_t @ 1 <==> if ( if ) 246 80 tone else ( else ) d_tumble_t @ 6 <==> if ( if ) 174 200 tone then ( endif ) then ( endif ) d_tumble_t <++i> drop d_jump @ 4 <-x> <>> if ( if ) d_jump 1 <-=> drop ox 1 <-=> drop else ( else ) d_run 0 <=> drop then ( endif ) then ( endif ) clearDisplay 100 0 setCursor text "%d" d @ sprintf text print 128 d @ 128 <%> - cloud_1_y @ cloud_1 17 7 16777215 drawBitmap d @ 128 <%> 0 <==> if ( if ) cloud_1_y 0 10 random <=> drop then ( endif ) d_jump @ 4 <>> if ( if ) 0 60 127 60 16777215 drawLine else ( else ) 0 60 3 60 16777215 drawLine 12 60 127 60 16777215 drawLine then ( endif ) ox @ 40 cactus_1 12 24 16777215 drawBitmap 40 d_jump @ -
! ( init ) d_tumble_t @ if ( if ) 0
@ dino_tumble 30 18 16777215 drawBitmap else ( else ) 0
@ dino_top 20 18 16777215 drawBitmap d_run @ if d_jump @
else 0 then if ( if ) frame @ 8 <%> 4 / if ( if ) 0
@ 18 + dino_leg_1 20 5 16777215 drawBitmap else ( else ) 0
@ 18 + dino_leg_2 20 5 16777215 drawBitmap then ( endif ) else ( else ) 0
@ 18 + dino_leg_0 20 5 16777215 drawBitmap then ( endif ) then ( endif ) display 16 delay
; ( ret ) : main
( -- ) setup
; ( ret ) : 16
( -- ) scene clr d @ printn
; ( ret ) : "onmousedown"
( -- ) key 1 <=> drop
; ( ret ) : "onmouseup"
( -- ) key 0 <=> drop
; ( ret )
main