Merge pull request #49 from xexyl/ferguson
This commit is contained in:
6 files changed
+232
-98
No files matched your search
+23
-1
@@ -173,7 +173,7 @@ DATA= COMPILING.md HACKING.md bugs.html bugs.md cake.jpg cannibalism.log \
|
|||||||
halfwidth_vs_fullwidth.png ioccc-cake.jpg play.sh prog.2.c prog.3-j.c \
|
halfwidth_vs_fullwidth.png ioccc-cake.jpg play.sh prog.2.c prog.3-j.c \
|
||||||
prog.3.c snake-colours.sh snake.1 spoilers.html spoilers.md \
|
prog.3.c snake-colours.sh snake.1 spoilers.html spoilers.md \
|
||||||
termcaps.c terminals.html terminals.md troubleshooting.html troubleshooting.md
|
termcaps.c terminals.html terminals.md troubleshooting.html troubleshooting.md
|
||||||
TARGET= ${PROG}
|
TARGET= ${PROG} termcaps play snake-colours
|
||||||
#
|
#
|
||||||
ALT_OBJ= ${PROG}.alt.o
|
ALT_OBJ= ${PROG}.alt.o
|
||||||
ALT_TARGET= ${PROG}.alt
|
ALT_TARGET= ${PROG}.alt
|
||||||
@@ -193,6 +193,28 @@ all: data ${TARGET}
|
|||||||
${PROG}: ${PROG}.c
|
${PROG}: ${PROG}.c
|
||||||
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
|
# termcaps - test utility for terminal capabilities, size etc.
|
||||||
|
termcaps: termcaps.c
|
||||||
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
|
|
||||||
|
# play - allows configuring colours and playing pre-configured gameplay modes
|
||||||
|
#
|
||||||
|
play: play.sh
|
||||||
|
${CAT} $< > $@
|
||||||
|
${CHMOD} a+x $@
|
||||||
|
|
||||||
|
# snake-colours - allows for configuring colours prior to compiling and playing
|
||||||
|
#
|
||||||
|
snake-colours: snake-colours.sh
|
||||||
|
${CAT} $< > $@
|
||||||
|
${CHMOD} a+x $@
|
||||||
|
|
||||||
|
# make test: run termcaps
|
||||||
|
#
|
||||||
|
test: termcaps
|
||||||
|
@./termcaps
|
||||||
|
|
||||||
# alternative executable
|
# alternative executable
|
||||||
#
|
#
|
||||||
alt: data ${ALT_TARGET}
|
alt: data ${ALT_TARGET}
|
||||||
|
|||||||
+133
-70
@@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
Cody Boone Ferguson <ioccc@xexyl.net>
|
Cody Boone Ferguson <ioccc@xexyl.net>
|
||||||
<https://ioccc.xexyl.net>
|
<https://ioccc.xexyl.net>
|
||||||
Twitter: @xexyl
|
<https://xexyl.net>
|
||||||
|
Mastodon: [@xexyl@fosstodon.org](https://fosstodon.org/@xexyl)
|
||||||
|
|
||||||
## To build:
|
## To build:
|
||||||
|
|
||||||
@@ -13,10 +14,69 @@ make
|
|||||||
### To run:
|
### To run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
WAIT=100 WALLS=0 CANNIBAL=0 ./prog
|
WAIT=N WALLS=[01] EVADE=N SIZE=N MAXSIZE=N GROW=N SHEDS=N SHED=N CANNIBAL=[01] ./prog
|
||||||
|
# Start pressing some arrow keys
|
||||||
```
|
```
|
||||||
|
|
||||||
### Try:
|
Variables:
|
||||||
|
|
||||||
|
* WAIT
|
||||||
|
positive or negative integer that changes how long to wait for
|
||||||
|
a key press prior to moving again. < 0 blocks which allows
|
||||||
|
for complete control over movement at your own pace. Default
|
||||||
|
231; you can move faster by holding down an arrow key.
|
||||||
|
|
||||||
|
* WALLS
|
||||||
|
whether the walls are passable or impassable (default
|
||||||
|
passable). 0 means impassable; 1 passable.
|
||||||
|
|
||||||
|
* EVADE
|
||||||
|
how many movements the Snake moves before the bug (well
|
||||||
|
insect; see notes below about why bugs) is will move to
|
||||||
|
another location on the field.
|
||||||
|
|
||||||
|
* SIZE
|
||||||
|
initial size of the Snake. Note that it grows by one per
|
||||||
|
move so at the default 5 it will not initially be 5
|
||||||
|
characters long! < 0 is an immediate win.
|
||||||
|
|
||||||
|
* MAXSIZE
|
||||||
|
the maximum size the Snake can become before the game is
|
||||||
|
won. < 0 is the maximum size based on terminal dimensions;
|
||||||
|
any other size will be capped based on the terminal
|
||||||
|
dimensions to prevent problems.
|
||||||
|
|
||||||
|
* GROW
|
||||||
|
size to grow every time you eat a bug. Negative values are
|
||||||
|
allowed! This creates for fun gameplay modes with enough
|
||||||
|
creativity. See [gameplay.html](gameplay.html) for some
|
||||||
|
examples.
|
||||||
|
|
||||||
|
* SHED
|
||||||
|
every SHED movements you will grow (> 0), shrink (< 0) or
|
||||||
|
not at all (0) by the SHEDS value. Again with creativity you
|
||||||
|
can create some fun gameplay modes.
|
||||||
|
|
||||||
|
NOTE: SHED and SHEDS is actually a misnomer; see notes
|
||||||
|
below.
|
||||||
|
|
||||||
|
* SHEDS
|
||||||
|
every SHED movements will impact what this value means: grow
|
||||||
|
(> 0), shrink (< 0) or not at all (0). Again with creativity
|
||||||
|
you can create some fun gameplay modes here. For instance
|
||||||
|
you can grow upon eating a bug but shrink every SHED
|
||||||
|
movements and it's a battle of whether you win by SIZE < 0
|
||||||
|
or SIZE >= MAXSIZE. See play.sh for examples.
|
||||||
|
NOTE: SHED and SHEDS is actually a misnomer; see notes
|
||||||
|
below.
|
||||||
|
|
||||||
|
* CANNIBAL
|
||||||
|
whether you can go through the Snake or not. Default is 0
|
||||||
|
(cannot).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
make test
|
make test
|
||||||
@@ -32,6 +92,12 @@ CANNIBAL=1 WALLS=1 WAIT=50 EVADE=200 ./prog
|
|||||||
WAIT=75 GROW=-1 SIZE=5 CANNIBAL=1 ./prog
|
WAIT=75 GROW=-1 SIZE=5 CANNIBAL=1 ./prog
|
||||||
|
|
||||||
CANNIBAL=1 WALLS=1 WAIT=0 EVADE=1 MAXSIZE=10 ./prog
|
CANNIBAL=1 WALLS=1 WAIT=0 EVADE=1 MAXSIZE=10 ./prog
|
||||||
|
|
||||||
|
./play
|
||||||
|
# allows you to configure colours and has various pre-configured gameplay modes
|
||||||
|
|
||||||
|
./snake-colours
|
||||||
|
# allows for configuring colours
|
||||||
```
|
```
|
||||||
|
|
||||||
## Judges' comments:
|
## Judges' comments:
|
||||||
@@ -41,19 +107,19 @@ This game has a number of configurable pitfalls including walls and snakes.
|
|||||||
|
|
||||||
There is a good deal of useful documentation that is provided with this entry:
|
There is a good deal of useful documentation that is provided with this entry:
|
||||||
|
|
||||||
* gameplay.md ([gameplay.html][])
|
* [gameplay.html][]
|
||||||
|
|
||||||
Documented game *features*!
|
Documented game *features*!
|
||||||
|
|
||||||
* terminals.md ([terminals.html][])
|
* [terminals.html][]
|
||||||
|
|
||||||
Information about terminal capabilities, dimensions (setting and how to restore sanity if it causes any problems) as well as colours (limitations etc.).
|
Information about terminal capabilities, dimensions (setting and how to restore sanity if it causes any problems) as well as colours (limitations etc.).
|
||||||
|
|
||||||
* troubleshooting.md ([troubleshooting.html][])
|
* [troubleshooting.html][]
|
||||||
|
|
||||||
Workaround for various game *features*
|
Workarounds for various game *features*
|
||||||
|
|
||||||
* bugs.md ([bugs.html][])
|
* [bugs.html][]
|
||||||
|
|
||||||
Bugs and things that might seem like bugs but are not.
|
Bugs and things that might seem like bugs but are not.
|
||||||
|
|
||||||
@@ -61,17 +127,10 @@ Bugs and things that might seem like bugs but are not.
|
|||||||
|
|
||||||
Because most of us could use some *Double-layered Chocolate Fudge Cake*!
|
Because most of us could use some *Double-layered Chocolate Fudge Cake*!
|
||||||
|
|
||||||
* spoilers.markdown ([spoilers.html][])
|
* [spoilers.html][]
|
||||||
|
|
||||||
Read ***ONLY*** if you really must give up trying to de-obfuscate!
|
Read ***ONLY*** if you really must give up trying to de-obfuscate!
|
||||||
|
|
||||||
[gameplay.html]: gameplay.html
|
|
||||||
[terminals.html]: terminals.html
|
|
||||||
[troubleshooting.html]: troubleshooting.html
|
|
||||||
[bugs.html]: bugs.html
|
|
||||||
[chocolate-cake.html]: chocolate-cake.html
|
|
||||||
[spoilers.html]: spoilers.html
|
|
||||||
|
|
||||||
## Author's comments:
|
## Author's comments:
|
||||||
|
|
||||||
### Feature-rich curses implementation of the Snake game (with many gameplay modes and options)
|
### Feature-rich curses implementation of the Snake game (with many gameplay modes and options)
|
||||||
@@ -80,15 +139,15 @@ Snake has two cheat modes (passable walls and self [cannibalism]), a drawing (or
|
|||||||
practising) mode, *can play by itself (**and win!**)*, is coloured (included
|
practising) mode, *can play by itself (**and win!**)*, is coloured (included
|
||||||
[snake-colours.sh][] and [play.sh][] scripts compile in player-selected
|
[snake-colours.sh][] and [play.sh][] scripts compile in player-selected
|
||||||
colours) and there are many other play modes (many more can be devised with the
|
colours) and there are many other play modes (many more can be devised with the
|
||||||
imagination and the environmental variables; see [gameplay.md][] /
|
imagination and the environmental variables; see [gameplay.html][] for many
|
||||||
[gameplay.html][] for many examples) and options. You can pause and there's
|
examples) and options. You can pause and there's even a built-in test unit for
|
||||||
even a built-in test unit for some features! The following variables change the
|
some features! The following variables change the game in the following ways
|
||||||
game in the following ways (all can be combined):
|
(all can be combined):
|
||||||
|
|
||||||
|
|
||||||
* The speed of the snake (how many milliseconds to **WAIT** for input before
|
* The speed of the snake: how many milliseconds to **WAIT** for input before
|
||||||
moving; *default 231 milliseconds* and you can move faster by pressing a
|
moving; *default 231 milliseconds*. You can move faster by pressing a
|
||||||
direction key quicker or even holding it down).
|
direction key quicker or even holding it down.
|
||||||
|
|
||||||
* If the bug (to eat) will move (**EVADE**) after user-specified number of snake
|
* If the bug (to eat) will move (**EVADE**) after user-specified number of snake
|
||||||
moves (*default 300, 0 disables*).
|
moves (*default 300, 0 disables*).
|
||||||
@@ -98,7 +157,9 @@ game in the following ways (all can be combined):
|
|||||||
|
|
||||||
* If the snake can go through itself (**CANNIBAL**) (*default 0, no*).
|
* If the snake can go through itself (**CANNIBAL**) (*default 0, no*).
|
||||||
|
|
||||||
* The initial **SIZE** of the snake (*default 5*).
|
* The initial **SIZE** of the snake (*default 5*). Note that it grows one by
|
||||||
|
each movement so even if you start at 5 it will take some movements before
|
||||||
|
you are the full length.
|
||||||
|
|
||||||
* The size the snake must become in order to win the game (**MAXSIZE**, *default 997*).
|
* The size the snake must become in order to win the game (**MAXSIZE**, *default 997*).
|
||||||
|
|
||||||
@@ -113,20 +174,21 @@ game in the following ways (all can be combined):
|
|||||||
|
|
||||||
* A drawing/practising mode (**WAIT** < 0 makes `timeout()` set blocking read).
|
* A drawing/practising mode (**WAIT** < 0 makes `timeout()` set blocking read).
|
||||||
|
|
||||||
* Computer plays the game (**WAIT=0**) **EPILEPSY/STIMULATION OVERLOAD WARNING**
|
* Computer plays the game (**WAIT=0**).
|
||||||
included in the relevant section (this goes for a low **EVADE** value too).
|
- **EPILEPSY/STIMULATION OVERLOAD WARNING** included in the relevant
|
||||||
|
section (this goes for a low **EVADE** value too).
|
||||||
|
|
||||||
* Grow-Shrink mode (Positive and Negative Winning) mode (see
|
* Grow-Shrink mode (Positive and Negative Winning) mode (see
|
||||||
[gameplay.md][] for more details).
|
[gameplay.html][] for more details).
|
||||||
|
|
||||||
* The dimensions of the game (this is actually a terminal thing but I document
|
* The dimensions of the game (this is actually a terminal thing but I document
|
||||||
how to do this and its potential pitfalls) (**LINES** , **COLUMNS**).
|
how to do this and its potential pitfalls) (**LINES** , **COLUMNS**).
|
||||||
|
|
||||||
There are no complicated command line invocations; it's just a matter of passing
|
There are no complicated command line invocations; it's just a matter of passing
|
||||||
into the game descriptively named variables and I include a script that sets up
|
into the game descriptively named variables and I include a script that sets up
|
||||||
many different gameplay modes ([gameplay.md][] and [play.sh][]).
|
many different gameplay modes (see [gameplay.html][] and [play.sh][]).
|
||||||
|
|
||||||
The [gameplay.md][] ([gameplay.html][]) file has all the information on
|
The [gameplay.html][] file has all the information on
|
||||||
what the game looks like, how to play, the different types of modes (that I have
|
what the game looks like, how to play, the different types of modes (that I have
|
||||||
thought of so far) including all those in the above list. Along with the
|
thought of so far) including all those in the above list. Along with the
|
||||||
[play.sh][] and [snake-colours.sh][] scripts it's probably the most important
|
[play.sh][] and [snake-colours.sh][] scripts it's probably the most important
|
||||||
@@ -144,18 +206,18 @@ Probably just as important is [chocolate-cake.html][] with an old but wonderful
|
|||||||
recipe (because the judges love chocolate and who can blame them? - also it goes
|
recipe (because the judges love chocolate and who can blame them? - also it goes
|
||||||
with one of the IAQs I include later).
|
with one of the IAQs I include later).
|
||||||
|
|
||||||
The [troubleshooting.md][] ([troubleshooting.html][]) file has some advice
|
The [troubleshooting.html][] file has some advice on potential problems (and
|
||||||
on potential problems (and things that might appear to be problems at first
|
things that might appear to be problems at first glance but are not) that I have
|
||||||
glance but are not) that I have thought of or encountered.
|
thought of or encountered.
|
||||||
|
|
||||||
The [terminals.md][] ([terminals.html][]) has a variety of information
|
The [terminals.html][] has a variety of information specific to terminals from
|
||||||
specific to terminals from input/directions, dimensions, sanity and colours: a
|
input/directions, dimensions, sanity and colours: a sort of troubleshooting
|
||||||
sort of troubleshooting guide for terminals with some additional information.
|
guide for terminals with some additional information.
|
||||||
|
|
||||||
The [spoilers.markdown][] has a variety of information including some of the
|
The [spoilers.html][] has a variety of information including some of the
|
||||||
obfuscation techniques and a bit of how it works.
|
obfuscation techniques and a bit of how it works.
|
||||||
|
|
||||||
The [bugs.md][] ([bugs.html][]) has a list of known bugs and things that
|
The [bugs.html][] has a list of known bugs and things that
|
||||||
look like bugs but aren't as well as documenting a built-in test unit for some
|
look like bugs but aren't as well as documenting a built-in test unit for some
|
||||||
features.
|
features.
|
||||||
|
|
||||||
@@ -172,9 +234,8 @@ implemented (and how to/how not to go about some of the things) as well as some
|
|||||||
other information on the entry (some of which is deliberately not true - a
|
other information on the entry (some of which is deliberately not true - a
|
||||||
variation of misleading comments). These files are probably insignificant.
|
variation of misleading comments). These files are probably insignificant.
|
||||||
|
|
||||||
I will have more information about this entry at
|
I have more information about this entry at
|
||||||
[https://ioccc.xexyl.net/2020/snake][] after the winning entries have been
|
[https://ioccc.xexyl.net/2020/snake][].
|
||||||
published.
|
|
||||||
|
|
||||||
For the files I recommend looking at the html files with a browser; this
|
For the files I recommend looking at the html files with a browser; this
|
||||||
particularly goes for the [gameplay.html][], [bugs.html][], [terminals.html][]
|
particularly goes for the [gameplay.html][], [bugs.html][], [terminals.html][]
|
||||||
@@ -203,7 +264,7 @@ and [troubleshooting.html][] - along with the most important one
|
|||||||
|
|
||||||
- [Do you have any **DELICIOUS CHOCOLATE CAKE** recipes?](#chocolatecake)
|
- [Do you have any **DELICIOUS CHOCOLATE CAKE** recipes?](#chocolatecake)
|
||||||
|
|
||||||
- [What are the files prog.orig.c, prog.2.c, prog-j.c and prog.alt.c ?](#alt)
|
- [What are the files prog.alt.c, prog.2.c, prog-j.c and prog.alt.c ?](#alt)
|
||||||
|
|
||||||
|
|
||||||
* [Winning thoughts, dedications and thanks](#winning)
|
* [Winning thoughts, dedications and thanks](#winning)
|
||||||
@@ -227,7 +288,7 @@ and [troubleshooting.html][] - along with the most important one
|
|||||||
took fewer bytes and the negative shedding is a positive consequence of
|
took fewer bytes and the negative shedding is a positive consequence of
|
||||||
unsigned arithmetic.
|
unsigned arithmetic.
|
||||||
|
|
||||||
On a more serious note look at [bugs.md][] ([bugs.html][]).
|
On a more serious note look at [bugs.html][].
|
||||||
|
|
||||||
|
|
||||||
### <a name="naqs" href="#toc">NAQs/IAQs (Never/Infrequently Asked Questions)</a>
|
### <a name="naqs" href="#toc">NAQs/IAQs (Never/Infrequently Asked Questions)</a>
|
||||||
@@ -307,7 +368,8 @@ I can think of at the least the following:
|
|||||||
would if the grow size was 3. This applies to shedding size too.
|
would if the grow size was 3. This applies to shedding size too.
|
||||||
- If you want to show off keep walls passable and enable cannibalism. It
|
- If you want to show off keep walls passable and enable cannibalism. It
|
||||||
won't be a challenge then but at least you could show your final score?
|
won't be a challenge then but at least you could show your final score?
|
||||||
- Decrease the max size.
|
- Decrease the max size needed and if you want it even easier increase the
|
||||||
|
terminal size.
|
||||||
- And the one that applies to learning new things and getting more things done
|
- And the one that applies to learning new things and getting more things done
|
||||||
also applies here: remove all sources of distraction; turn the phone off,
|
also applies here: remove all sources of distraction; turn the phone off,
|
||||||
lock yourself in a soundproof room (refusing to get up for anyone or
|
lock yourself in a soundproof room (refusing to get up for anyone or
|
||||||
@@ -358,7 +420,8 @@ And if you're a show-off you can try:
|
|||||||
something I'm capable of...
|
something I'm capable of...
|
||||||
- Watch a film at the same time.
|
- Watch a film at the same time.
|
||||||
- Sneeze and/or cough.
|
- Sneeze and/or cough.
|
||||||
- Have breakfast, lunch, afternoon tea, dinner or some other meal.
|
- Have breakfast, second breakfast, elevenses, lunch, afternoon tea, dinner or
|
||||||
|
some other meal that you think of.
|
||||||
- Get pissed out of your mind to make it difficult to think (please do not
|
- Get pissed out of your mind to make it difficult to think (please do not
|
||||||
drive!).
|
drive!).
|
||||||
- Do more than one or all of the above at the same time (the longer the snake
|
- Do more than one or all of the above at the same time (the longer the snake
|
||||||
@@ -447,7 +510,7 @@ out bad!
|
|||||||
#### <a name="alt" href="#toc">What are the files prog.2.c, prog.3.c, prog.3-j.c and prog.alt.c ?</a>
|
#### <a name="alt" href="#toc">What are the files prog.2.c, prog.3.c, prog.3-j.c and prog.alt.c ?</a>
|
||||||
|
|
||||||
I submitted three Snake versions; these are the other layouts for those few
|
I submitted three Snake versions; these are the other layouts for those few
|
||||||
(or more likely none) who are interested to see them.
|
(more likely none) who are interested to see them.
|
||||||
|
|
||||||
The prog.2.c has more digraphs but I think no other significant differences.
|
The prog.2.c has more digraphs but I think no other significant differences.
|
||||||
|
|
||||||
@@ -462,26 +525,6 @@ it's used in both [snake-colours.sh][] and [play.sh][]. It also calls `erase()`
|
|||||||
first, clearing the screen, which the play.sh and snake-colours.sh scripts also
|
first, clearing the screen, which the play.sh and snake-colours.sh scripts also
|
||||||
both do.
|
both do.
|
||||||
|
|
||||||
[COMPILING]: COMPILING
|
|
||||||
[HACKING]: HACKING
|
|
||||||
[bugs.md]: bugs.md
|
|
||||||
[bugs.html]: bugs.html
|
|
||||||
[troubleshooting.md]: troubleshooting.md
|
|
||||||
[troubleshooting.html]: troubleshooting.html
|
|
||||||
[human snakes]: http://www.macroevolution.net/snake-human-hybrids.html
|
|
||||||
[chocolate-cake.html]: chocolate-cake.html
|
|
||||||
[spoilers.markdown]: spoilers.markdown
|
|
||||||
[terminals.md]: terminals.md
|
|
||||||
[Surround]: https://en.wikipedia.org/wiki/Surround_(video_game)
|
|
||||||
[Snake walk: The physics of slithering]: https://www.bbc.co.uk/news/science-environment-35563941
|
|
||||||
[snake-colours.sh]: snake-colours.sh
|
|
||||||
[gameplay.md]: gameplay.md
|
|
||||||
[gameplay.html]: gameplay.html
|
|
||||||
[flying snakes]: https://www.bbc.co.uk/news/science-environment-25943693
|
|
||||||
[play.sh]: play.sh
|
|
||||||
[great chocolate cake]: cake.jpg
|
|
||||||
[https://ioccc.xexyl.net/2020/snake]: https://ioccc.xexyl.net/2020/snake
|
|
||||||
|
|
||||||
## Author's dedication:
|
## Author's dedication:
|
||||||
|
|
||||||
### <a name="winning" href="#toc">Winning thoughts, dedications and thanks</a>
|
### <a name="winning" href="#toc">Winning thoughts, dedications and thanks</a>
|
||||||
@@ -502,8 +545,8 @@ Well done and congratulations to all of you again! Thank you for submitting the
|
|||||||
wonderful entries and I'm honoured to have my two entries beside yours!
|
wonderful entries and I'm honoured to have my two entries beside yours!
|
||||||
|
|
||||||
To Dave Burton I thank you for your wonderful comments as well as pointing out
|
To Dave Burton I thank you for your wonderful comments as well as pointing out
|
||||||
that even with prog.orig.c it probably would be better to make use of the alt
|
that even with prog.alt.c it probably would be better to make use of the alt
|
||||||
target instead of naming prog.c prog.orig.c. You're quite right, I had thought
|
target instead of naming prog.c prog.alt.c. You're quite right, I had thought
|
||||||
of it but you brought it up so I could correct it. Much appreciated mate.
|
of it but you brought it up so I could correct it. Much appreciated mate.
|
||||||
|
|
||||||
I would like to dedicate this entry to my wonderful mum Dianne Ferguson whom I
|
I would like to dedicate this entry to my wonderful mum Dianne Ferguson whom I
|
||||||
@@ -515,9 +558,7 @@ mother.
|
|||||||
|
|
||||||
I also want to dedicate this to Vicky Wilmore who has given me a lot of
|
I also want to dedicate this to Vicky Wilmore who has given me a lot of
|
||||||
love the past few years and who was there for me in some very dark times. Thank
|
love the past few years and who was there for me in some very dark times. Thank
|
||||||
you Vicky sweetheart from the bottom of my heart and soul. Although we have
|
you Vicky sweetheart from the bottom of my heart and soul.
|
||||||
parted ways, whether for now or for ever, you will always always always have a
|
|
||||||
place in my heart and soul xxx
|
|
||||||
|
|
||||||
I would like to thank my dear friend Martijn Schoemaker for encouraging me in my
|
I would like to thank my dear friend Martijn Schoemaker for encouraging me in my
|
||||||
programming over the years and who I owe a great deal to. Thank you for
|
programming over the years and who I owe a great deal to. Thank you for
|
||||||
@@ -536,7 +577,29 @@ my entries. It's a huge honour; thank you! I also happen to **love** your
|
|||||||
comments as well as the award titles. And yes indeed 'most of us could use
|
comments as well as the award titles. And yes indeed 'most of us could use
|
||||||
*[Double-layered Chocolate Fudge Cake][]*!'
|
*[Double-layered Chocolate Fudge Cake][]*!'
|
||||||
|
|
||||||
|
[COMPILING]: COMPILING
|
||||||
|
[HACKING]: HACKING
|
||||||
|
[bugs.html]: bugs.html
|
||||||
|
[troubleshooting.html]: troubleshooting.html
|
||||||
|
[human snakes]: http://www.macroevolution.net/snake-human-hybrids.html
|
||||||
|
[chocolate-cake.html]: chocolate-cake.html
|
||||||
|
[spoilers.markdown]: spoilers.markdown
|
||||||
|
[Surround]: https://en.wikipedia.org/wiki/Surround_(video_game)
|
||||||
|
[Snake walk: The physics of slithering]: https://www.bbc.co.uk/news/science-environment-35563941
|
||||||
|
[snake-colours.sh]: snake-colours.sh
|
||||||
|
[gameplay.html]: gameplay.html
|
||||||
|
[flying snakes]: https://www.bbc.co.uk/news/science-environment-25943693
|
||||||
|
[play.sh]: play.sh
|
||||||
|
[great chocolate cake]: cake.jpg
|
||||||
|
[https://ioccc.xexyl.net/2020/snake]: https://ioccc.xexyl.net/2020/snake
|
||||||
[Double-layered Chocolate Fudge Cake]: chocolate-cake.html
|
[Double-layered Chocolate Fudge Cake]: chocolate-cake.html
|
||||||
|
[gameplay.html]: gameplay.html
|
||||||
|
[terminals.html]: terminals.html
|
||||||
|
[troubleshooting.html]: troubleshooting.html
|
||||||
|
[bugs.html]: bugs.html
|
||||||
|
[chocolate-cake.html]: chocolate-cake.html
|
||||||
|
[spoilers.html]: spoilers.html
|
||||||
|
|
||||||
|
|
||||||
## Copyright:
|
## Copyright:
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ for the input keys.</p>
|
|||||||
<li><p><a href="#preset">Automate the above gameplay modes</a></p></li>
|
<li><p><a href="#preset">Automate the above gameplay modes</a></p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><p><a href="#variables">Game variables</a></p>
|
<li><p><a href="#variables">Notes about some of the game variables</a></p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><p><a href="#wait">WAIT - Snake speed</a></p></li>
|
<li><p><a href="#wait">WAIT - Snake speed</a></p></li>
|
||||||
@@ -769,14 +769,14 @@ you choose uses then the script will override what you pass in.</p>
|
|||||||
<pre><code> WALLS=0 ./play.sh
|
<pre><code> WALLS=0 ./play.sh
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
<h1>6. <a name="variables" href="#toc">Game variables</a></h1>
|
<h1>6. <a name="variables" href="#toc">Notes about some of the game variables</a></h1>
|
||||||
|
|
||||||
<p>The game variables can be used for a variety of things including different
|
<p>The game variables can be used for a variety of things including different
|
||||||
gameplay modes as above but here are some notes about a few of them.</p>
|
gameplay modes (as shown above) but here are some notes about a few of them.</p>
|
||||||
|
|
||||||
<h2><a name="wait" href="#toc">WAIT: Snake speed</a></h2>
|
<h2><a name="wait" href="#toc">WAIT: Snake speed</a></h2>
|
||||||
|
|
||||||
<p>Besides the different game modes if you find it too fast/slow you can change it
|
<p>Besides the different game modes, if you find it too fast/slow you can change it
|
||||||
to a value that’s better for you. Remember it’s a wait time so if you want the
|
to a value that’s better for you. Remember it’s a wait time so if you want the
|
||||||
snake to move slower you have to increase the wait time!</p>
|
snake to move slower you have to increase the wait time!</p>
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ for the input keys.
|
|||||||
* [Automate the above gameplay modes](#preset)
|
* [Automate the above gameplay modes](#preset)
|
||||||
|
|
||||||
|
|
||||||
6. [Game variables](#variables)
|
6. [Other game variables](#variables)
|
||||||
|
|
||||||
* [WAIT - Snake speed](#wait)
|
* [WAIT - Snake speed](#wait)
|
||||||
|
|
||||||
@@ -743,14 +743,14 @@ Or to make it so walls are an obstacle:
|
|||||||
WALLS=0 ./play.sh
|
WALLS=0 ./play.sh
|
||||||
|
|
||||||
|
|
||||||
# 6. <a name="variables" href="#toc">Game variables</a>
|
# 6. <a name="variables" href="#toc">Notes about some of the game variables</a>
|
||||||
|
|
||||||
The game variables can be used for a variety of things including different
|
The game variables can be used for a variety of things including different
|
||||||
gameplay modes as above but here are some notes about a few of them.
|
gameplay modes (as shown above) but here are some general notes about a few of them.
|
||||||
|
|
||||||
## <a name="wait" href="#toc">WAIT: Snake speed</a>
|
## <a name="wait" href="#toc">WAIT: Snake speed</a>
|
||||||
|
|
||||||
Besides the different game modes if you find it too fast/slow you can change it
|
Besides the different game modes, if you find it too fast/slow you can change it
|
||||||
to a value that's better for you. Remember it's a wait time so if you want the
|
to a value that's better for you. Remember it's a wait time so if you want the
|
||||||
snake to move slower you have to increase the wait time!
|
snake to move slower you have to increase the wait time!
|
||||||
|
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ OBJ= ${PROG}.o
|
|||||||
DATA= chocolate-cake.md enigma.1 input.txt obfuscation.key \
|
DATA= chocolate-cake.md enigma.1 input.txt obfuscation.key \
|
||||||
obfuscation.md obfuscation.txt recode.1 recode.md \
|
obfuscation.md obfuscation.txt recode.1 recode.md \
|
||||||
try.this.txt
|
try.this.txt
|
||||||
TARGET= ${PROG}
|
TARGET= ${PROG} recode
|
||||||
#
|
#
|
||||||
ALT_OBJ=
|
ALT_OBJ=
|
||||||
ALT_TARGET=
|
ALT_TARGET=
|
||||||
@@ -188,6 +188,9 @@ all: data ${TARGET}
|
|||||||
${PROG}: ${PROG}.c
|
${PROG}: ${PROG}.c
|
||||||
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
|
recode: recode.c
|
||||||
|
${CC} ${CFLAGS} $< -o $@ ${LIBS}
|
||||||
|
|
||||||
# alternative executable
|
# alternative executable
|
||||||
#
|
#
|
||||||
alt: data ${ALT_TARGET}
|
alt: data ${ALT_TARGET}
|
||||||
|
|||||||
+64
-18
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
Cody Boone Ferguson <ioccc@xexyl.net>
|
Cody Boone Ferguson <ioccc@xexyl.net>
|
||||||
<https://ioccc.xexyl.net>
|
<https://ioccc.xexyl.net>
|
||||||
Twitter: @xexyl
|
<https://xexyl.net>
|
||||||
|
Mastodon: [@xexyl@fosstodon.org](https://fosstodon.org/@xexyl)
|
||||||
|
|
||||||
|
|
||||||
## To build:
|
## To build:
|
||||||
|
|
||||||
@@ -14,25 +16,70 @@ make
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
./prog
|
./prog
|
||||||
|
|
||||||
|
# get recode help:
|
||||||
|
./recode -h
|
||||||
|
|
||||||
|
# general syntax for recode passing to Enigma machine:
|
||||||
|
./recode [options] | ./prog - 2>/dev/null
|
||||||
|
# general syntax for recode without passing to Enigma machine:
|
||||||
|
./recode [options]
|
||||||
|
|
||||||
|
# recode prompts for settings; pass to Enigma machine:
|
||||||
|
./recode | ./prog - 2>/dev/null
|
||||||
|
|
||||||
|
# recode reads from input file, prompts for settings; pass to Enigma machine:
|
||||||
|
./recode -finput | ./prog - 2>/dev/null
|
||||||
|
|
||||||
|
# recode reads config from string or file; pass to Enigma machine after
|
||||||
|
# prompting for input:
|
||||||
|
./recode -R<string|file> | ./prog - 2>/dev/null
|
||||||
|
|
||||||
|
# write config to output file; pass to Enigma machine after prompting for input:
|
||||||
|
./recode -o<config> | ./prog - 2>/dev/null
|
||||||
|
|
||||||
|
# pseudo-randomly select settings
|
||||||
|
./recode -r
|
||||||
|
|
||||||
|
# show Enigma machine settings after selection / generation:
|
||||||
|
./recode -v
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**NOTE**: in recode no spaces between options and option arguments are allowed.
|
||||||
|
|
||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# IOCCC obfuscated!
|
# IOCCC obfuscated!
|
||||||
echo IOCCC | ./prog
|
echo IOCCC | ./prog
|
||||||
|
|
||||||
# IOCCC obfuscated and de-obfuscated!
|
# IOCCC obfuscated and de-obfuscated!:
|
||||||
echo IOCCC | ./prog | ./prog
|
echo IOCCC | ./prog | ./prog
|
||||||
|
|
||||||
# more input fun
|
# more input fun:
|
||||||
./prog - < try.this.txt 2>/dev/null
|
./prog - < try.this.txt 2>/dev/null
|
||||||
|
|
||||||
# more obfuscated fun
|
# more obfuscated fun:
|
||||||
echo testing test tests | ./recode
|
echo testing test tests | ./recode
|
||||||
echo testing test tests | ./recode | ./prog - 2>/dev/null
|
echo testing test tests | ./recode | ./prog - 2>/dev/null
|
||||||
echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode
|
echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode
|
||||||
echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog - 2>/dev/null
|
echo testing test tests | ./recode | ./prog - 2>/dev/null | ./recode | ./prog - 2>/dev/null
|
||||||
|
|
||||||
|
# even more obfuscated fun saving and reading from files:
|
||||||
|
#
|
||||||
|
# initial clean up:
|
||||||
|
rm -f conf input output output2
|
||||||
|
# encrypt "testing test tests" with randomised settings saved in conf, saving
|
||||||
|
# original string to input and original output to output:
|
||||||
|
echo testing test tests | tee input | ./recode -r -oconf | ./prog - 2>/dev/null >output
|
||||||
|
# configure Enigma machine from conf file and read from output file, thus decrypting:
|
||||||
|
./recode -Rconf -foutput | ./prog - 2>/dev/null > output2
|
||||||
|
# make sure input and output2 are the same:
|
||||||
|
diff -s input output2
|
||||||
|
# final clean up
|
||||||
|
rm -f conf input output output2
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Judges' comments:
|
## Judges' comments:
|
||||||
@@ -41,21 +88,20 @@ This code is an enigma. Try to decode it!
|
|||||||
|
|
||||||
There is a good deal of useful documentation that is provided with this entry:
|
There is a good deal of useful documentation that is provided with this entry:
|
||||||
|
|
||||||
* enigma.1
|
* [enigma.1](enigma.1) - A useful man page for this entry. To render, try:
|
||||||
|
|
||||||
A useful man page for this entry. To render, try:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
man ./enigma.1
|
man ./enigma.1
|
||||||
```
|
```
|
||||||
|
|
||||||
* recode.md ([recode.html][])
|
* [recode.html][]
|
||||||
|
- Some useful information about recode.c
|
||||||
|
|
||||||
Some useful information about recode.c
|
|
||||||
|
|
||||||
* [chocolate-cake.html][]
|
* [chocolate-cake.html][]
|
||||||
|
- Because most of us could use some *Double-layered Chocolate Fudge Cake*!
|
||||||
|
- NOTE: see [recode.html][] for details about how to decrypt this!
|
||||||
|
|
||||||
Because most of us could use some *Double-layered Chocolate Fudge Cake*!
|
|
||||||
|
|
||||||
[recode.html]: recode.html
|
[recode.html]: recode.html
|
||||||
[chocolate-cake.html]: chocolate-cake.html
|
[chocolate-cake.html]: chocolate-cake.html
|
||||||
@@ -204,7 +250,7 @@ After that you can input the string and it'll go from there.
|
|||||||
#### <a name="example" href="#toc">Example run</a>
|
#### <a name="example" href="#toc">Example run</a>
|
||||||
|
|
||||||
BTW: There's a much more entertaining (and delicious) challenge or exercise in
|
BTW: There's a much more entertaining (and delicious) challenge or exercise in
|
||||||
[recode.md][] (involves [chocolate-cake.html][]) though one might need a different
|
[recode.html][] (involves [chocolate-cake.html][]) though one might need a different
|
||||||
kind of exercise after taking up the challenge! :-) These however show the
|
kind of exercise after taking up the challenge! :-) These however show the
|
||||||
general program as well as how to use the two winning entries of the Morse code
|
general program as well as how to use the two winning entries of the Morse code
|
||||||
that I referred to earlier:
|
that I referred to earlier:
|
||||||
@@ -351,7 +397,7 @@ I didn't think of everything. My entry was meant to be a simulator only as far
|
|||||||
as the ciphering goes but I thought this would make it much more interesting:
|
as the ciphering goes but I thought this would make it much more interesting:
|
||||||
make it more flexible by a wrapper program.
|
make it more flexible by a wrapper program.
|
||||||
|
|
||||||
For examples using it (and a delicious challenge) see [recode.md][]. See
|
For examples using it (and a delicious challenge) see [recode.html][]. See
|
||||||
also [recode.1][] and [enigma.1][] man pages.
|
also [recode.1][] and [enigma.1][] man pages.
|
||||||
|
|
||||||
|
|
||||||
@@ -400,7 +446,7 @@ After this it wants Ring 2 and I did similar; for ring 3 I did it each variable
|
|||||||
by itself. However for the reflector I did 1A and it only expects 1 char! So will
|
by itself. However for the reflector I did 1A and it only expects 1 char! So will
|
||||||
that mean that the plugboard pairs are off? Yes it does seem to be so. This is
|
that mean that the plugboard pairs are off? Yes it does seem to be so. This is
|
||||||
buffering at play I believe but it's useful for allowing the recode program to
|
buffering at play I believe but it's useful for allowing the recode program to
|
||||||
easily configure the Enigma machine. In the other markdown file I give a hint
|
easily configure the Enigma machine. In the other markdown/html file I give a hint
|
||||||
as to how this could be fixed but the caveat is it would necessitate a need for
|
as to how this could be fixed but the caveat is it would necessitate a need for
|
||||||
rewriting recode.c.
|
rewriting recode.c.
|
||||||
|
|
||||||
@@ -412,7 +458,7 @@ There are two reflectors and the same applies: in C 0-1 but in human it's
|
|||||||
1-2 (technically these were reflectors B and C in the Enigma machine which I
|
1-2 (technically these were reflectors B and C in the Enigma machine which I
|
||||||
display by name in recode.c just like with the rotors).
|
display by name in recode.c just like with the rotors).
|
||||||
|
|
||||||
For more information see [recode.md][] or [recode.html][].
|
For more information see [recode.html][].
|
||||||
|
|
||||||
BTW: If you need a reminder to go to the gym just do your Enigma ABCs and it
|
BTW: If you need a reminder to go to the gym just do your Enigma ABCs and it
|
||||||
should help you remember (though not at this time in our world it might help you
|
should help you remember (though not at this time in our world it might help you
|
||||||
@@ -478,7 +524,7 @@ The file [obfuscation.key][] is the key to decipher/encipher
|
|||||||
For the lazy [obfuscation.md][] has the deciphered version. I am afraid
|
For the lazy [obfuscation.md][] has the deciphered version. I am afraid
|
||||||
I'm not so inclined to do that for the cake recipe: the idea there is to make it
|
I'm not so inclined to do that for the cake recipe: the idea there is to make it
|
||||||
a fun exercise that when solved unlocks a wonderful double-layered chocolate
|
a fun exercise that when solved unlocks a wonderful double-layered chocolate
|
||||||
fudge cake recipe. But given that my 'Don't tread on me award' entry also
|
fudge cake recipe. But given that my ['Don't tread on me award'](../ferguson1) entry also
|
||||||
has the recipe, not enciphered, one might just go there instead. Still it's a
|
has the recipe, not enciphered, one might just go there instead. Still it's a
|
||||||
fun way to explore this entry.
|
fun way to explore this entry.
|
||||||
|
|
||||||
@@ -501,7 +547,7 @@ machines this would not work because they had to choose from a set of rotors and
|
|||||||
there were no duplicates. This shouldn't be a problem here however except that
|
there were no duplicates. This shouldn't be a problem here however except that
|
||||||
it won't be a possible configuration of the real Enigma machine. The `recode`
|
it won't be a possible configuration of the real Enigma machine. The `recode`
|
||||||
program *however does validate this* (except when reading in settings via the
|
program *however does validate this* (except when reading in settings via the
|
||||||
`-R` option which I explain in the [recode.md][] / [recode.html][] file).
|
`-R` option which I explain in the [recode.html][] file).
|
||||||
|
|
||||||
* The way the plugboard - for the machines that had them - is if you connect A
|
* The way the plugboard - for the machines that had them - is if you connect A
|
||||||
to B then no other letters can connect to A or B. Earlier there wasn't proper
|
to B then no other letters can connect to A or B. Earlier there wasn't proper
|
||||||
@@ -708,7 +754,7 @@ that.
|
|||||||
[Interactive Enigma Machine]: http://enigmaco.de/enigma/enigma.html
|
[Interactive Enigma Machine]: http://enigmaco.de/enigma/enigma.html
|
||||||
[enigma.1]: enigma.1
|
[enigma.1]: enigma.1
|
||||||
[recode.1]: recode.1
|
[recode.1]: recode.1
|
||||||
[recode.md]: recode.md
|
[recode.html]: recode.html
|
||||||
[chocolate-cake.html]: chocolate-cake.html
|
[chocolate-cake.html]: chocolate-cake.html
|
||||||
[recode.c]: recode.c
|
[recode.c]: recode.c
|
||||||
[obfuscation.md]: obfuscation.md
|
[obfuscation.md]: obfuscation.md
|
||||||
|
|||||||
Reference in new issue
Block a user