]> git.gir.st - VIper.git/blob - README.md
readme: formatting
[VIper.git] / README.md
1 # VIIper - a Snake Clone for Unicode-compatible Terminals
2
3 terminal + emoji = snek
4 🖳 + 💩 = 🐍
5
6 ## Requirements
7
8 You'll need either a terminal emulator with good Unicode (Emoji) support and a
9 compatible fonts, or an actual DEC VT220 to fully enjoy the graphics of this
10 game. This is what I'd recommend:
11
12 - A VTE based terminal (like GNOME Terminal and a whole bunch of others)
13 - Google Noto's Color Emoji Font (Fedora: `google-noto-emoji-color-fonts.noarch`)
14 - DejaVu Sans Mono with Braille characters patched in (fetch from Ubuntu)
15
16 ## Keybindings
17
18 `h`, `j`, `k`, `l` or cursor keys move the snake.
19 `r` to restart, `p` to pause, `q` to quit.
20
21 ## TODO
22
23 - DONE ~~base game: fixed field size, fixed speed~~
24 - DONE ~~food (unicode)~~
25 - DONE ~~put 'sprites' into `schemes.h`~~
26 - DONE ~~snake elongates~~
27 - DONE ~~unicode chars~~
28 - DONE ~~input buffer (so fast 180° turns get executed)~~
29 - DONE ~~only redraw changing parts of the screen~~
30 - DONE ~~input out of whack when stopping (^Z) and resuming~~
31 - DONE ~~keybindings for restart, pause, redraw~~
32 - DONE ~~on dying: show end screen, allow restarting~~
33 - DONE ~~score, increasing speed~~
34 - DONE ~~bonus/special items: slower snake, shorter snake, etc.~~
35 - DONE ~~wall-wrap-around mode?~~
36 - TODO decaying points? (more points the faster you get the food)
37 - TODO predatory animals trying to eat the snake? (🐉, 🐊, 🐆, 🐅, 🦁, 🐗, 🦊, 🦅)
38 - TODO fix all `grep -n 'TODO\|XXX\|\([^:]\|^\)//' *.[ch]`
39 - TODO VT220 charset based on soft downloadable character set (->minesviiper)
40 - TODO: find a better name
41
42 ## Notes
43
44 ### Why this program is using SIGALRM instead of multithreading
45
46 One of the main reasons for making this game was to try some unconventional
47 programming ideas I had. Seeing how far I can get with only a single thread was
48 one of them. Some others were pure lazyness, though.
49
50 ### terminal compat
51
52 to display emojis, we need a terminal that can handle a color emoji font (no
53 shit, sherlock). mlterm, xterm and urxvt didn't work in my tests (mlterm might
54 work if compiled correctly, the other two use bitmap fonts and i don't think
55 there are any w/ emoji support).
56 i intend to put bonus items in the game that will only be visible for a short
57 time. when they get near the end of their life, SGI-5 (blink) will make them
58 blink. this is supported in gnome-term 3.28 (vte 0.52) which is supplied with
59 fedora 28. [bug report](https://bugzilla.gnome.org/show_bug.cgi?id=579964)
60 for KDE's konsole you'll need [this
61 fontconfig](https://gist.github.com/IgnoredAmbience/7c99b6cf9a8b73c9312a71d1209d9bbb)
62 and follow the steps inside.
63
64 ### strange behaviour of SIGALRM
65
66 I'm using SIGALRM to advance the snake's position. during some refactoring I
67 noticed that when the signal handler returns, a STX (ASCII 0x02) byte gets
68 pushed onto stdin.
69
70 ### DejaVu Sans Mono: Braille Characters
71
72 This font (while otherwise beautiful) does not by default include glyphs for the
73 braille characters in Unicode. And gnome-terminal falls back to some very ugly
74 rendition.
75
76 Ubuntu patches this font to include those glyphs, so you can just fetch it from
77 there, or patch the font yourself. For this, open
78 `/usr/share/fonts/dejavu/DejaVuSansMono.ttf` and `DejaVuSans.ttf` and copy the
79 braille section to the Mono variant. You can save the font under a different
80 name in the same directory and the fallback will then work correctly.
Imprint / Impressum