BrownCode rust

Links

About

BrownCode is a simplistic programming language inspired by Axe Parser, a programming language for the TI-83/84 series of graphing calculators. It includes easy graphical primitive and shape drawing, and a pseudo data/code section like a compiled binary. A detailed explanation of how the language is set up and how to use it is available here.

Gallery

Random lines program

"Don't hit the sides of the tunnel" game

Drawing with chromatic tail

Example Program

Source code for the "Don't hit the sides of the tunnel" game.

.DATA
tunnel_offsets:
zeros 64
tunnel_widths:
zeros 64

you_died:
0b10101110
0b10100110
0b01011101
0b10000000

0b01001010
0b10100101
0b01011001
0b01000000

0b01001110
0b11100110
0b01011101
0b10000000

.CODE
10 -> current_offset
80 -> current_width
0 -> counter
50 -> player_x

loop:
drawcolor(0)
clear()

if keypressed(4); player_x - 1 -> player_x; end
if keypressed(7); player_x + 1 -> player_x; end

draw_tunnel()
if (player_x < [&tunnel_offsets + 63] | player_x >= [&tunnel_offsets + 63] + [&tunnel_widths + 63]) & (counter > 63)
    goto death_screen
end

drawcolor(0x0000D0FF)
pixel(player_x, 63)


advance_tunnel()

present()
delay(20)
pollexit()

goto loop


death_screen:
createmonosprite(&you_died, 32, 3, 0xFF0000FF) -> you_died_idx
drawcolor(0)
clear()
sprite(you_died_idx, 10, 10)
present()

death_loop:
delay(10)
pollexit()
goto death_loop


func draw_tunnel()
    for i, 0, 64
        [&tunnel_offsets + i] -> offset
        [&tunnel_widths + i] -> width
        drawcolor(0xFFFFFFFF)
        line(offset, i, offset + width, i)
    end
end

func advance_tunnel()
    randomrange(0, 3) -> rand
    if rand = 0 & current_offset > 0;
        current_offset-1 -> current_offset
    end
    if rand = 1 & current_offset + current_width < 95
        current_offset+1 -> current_offset
    end
    current_offset -> [&tunnel_offsets]

    for i, 1, 64
        64 - i -> j
        // j = [63, 1]
        [&tunnel_offsets + j - 1] -> [&tunnel_offsets + j]
        [&tunnel_widths + j - 1] -> [&tunnel_widths + j]
    end

    counter + 1 -> counter
    if counter % 10 = 0
        current_width - 1 -> current_width
    end
    current_width -> [&tunnel_widths]

end