Brainfuckconsole74
BrainFuckConsole74 is a fantasy console. It extends the brainfuck language in a minimalistic way to create interactive content.
BrainfuckConsole74 - Game, Painting Software ...
You find the console online at www.brainfuckconsole74.ch.
How to make brainfuck interactive?
There are new commands for rendering the first 256 cells (16x16 pixels) to the screen (!), reading inputs (;), a command for playing notes (#), two commands for simpler going forward / backward ( '( ) '256x < > ) and a optional debug command (?).
Existing software
- Game: Squashem - Kill bugs with the mouse Swiss alpine racing game DEFENDER - Protect a city
- Painting: BrainFuckPainter 1.0: 16 Colors, 16x16 Pixel
- Music: Random pianist & Epiano
- Text: Simple processor BText
- Demos: Ant-Race, ever scrolling
- Content: Cat Animations
- Dev: Patterns for problems
- Music Tracker, also see on talk page.
Cells
Cell can be 0-2048. Dec on 0 > 2047. Inc 2047 > 0
Screen
First 256 cells are also video memory. You can render the memory to the screen with command Render-Command !
Colors & Chars
- 0-16: Colors
- 16+: Default ASCII chars
Commands
- +- <> [] ,. (All default brainfuck commands)
- ! Renders the actual first 256 cells to the screen. Waits for next Sync (25/sec) or if sync is there, renders it immediately.
- ; Reads devices
- read 0: keydown index clicked
- 1: action key clicked
- 2: down key clicked
- 3: up key clicked
- 4: left key clicked
- 5: right clicked
- 6: mouseposition 0-256
- 7: mousebutton pressed
- 8: mousebutton clicked
- 9: random no: 0||1
- 10-15: second joystick
- # Plays notes (0: C-B)
- < > Goes 256 cells forward or backward
- ? Prints index and value of the cursor.
Implementation
The whole thing is implemented online in 2 Threads. The visual loops waits for rendering (25/sec) and the processing loop is processing the code and filing in the inputs.
Coding
Pixel based application are a real 'brainfuck'. The worst are games with variable positions. Therefore you have to go x-steps forward show something and back again. It is even worse than coding on an atari 2600, because you don't know where you are.
Here some examples first one with interactivity and than the real problem. (There are more online)
Interactivity
{wait for click or button} )+[> [-]+++++++;[<->[-]] // action [-]+;[<->[-]] < ]( ?
Pixel at position y
The following script 8-pixel goes forward (plain brainfuck). And than renders it with !. Of course you don't want to overwrite the existing pixels, so have to do this in the offscreen (cells > 255). Therefore you would use the ( ) -commands.
++++++++ [>[->+<]<-[->+<]>] !
For more information look at the PATTERN-Area online.
Sonification
Brainfuckconsole74 can sonify every brainfuck-code (Sonficate).
Brainfuckconsole can sonify BF code. The individual commands and values are played as tones.
- ()<>: own tones
- +/-: every value has an own tone
But this also creates a new possibility to change the audio output - for example spaces are played as pauses.
Enable functionality
Example: Example in a tweet
Metagame
The whole thing is of course a meta-game. How complex can applications and game get in this environment and of course in brainfuck.
Compilers
The game has embedded a compiler for Pseudo code and for Processing. You can create various variants in optimising size of the code (Java accepts only max 65k code size and brainfuck needs a lot of commands as you know)
Options:
- Pseudocode
- Processing
- Processing small
- Processing minimalistic (packed)