774 lines
50 KiB
HTML
774 lines
50 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||
<!-- START: two lines up starts content from: inc/top.default.html -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- -->
|
||
<!-- END: this line ends content from: inc/top.default.html -->
|
||
<!-- -->
|
||
<!-- This web page was formed via the tool: bin/gen-other-html.sh -->
|
||
<!-- -->
|
||
<!-- The content of main section of this web page came from: 2020/ferguson1/gameplay.md -->
|
||
<!-- -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2020/ferguson1/gameplay.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2020/ferguson1/gameplay.md -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2020/ferguson1/gameplay.md -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- -->
|
||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||
<!-- -->
|
||
<!-- START: this line starts content from: inc/head.default.html -->
|
||
|
||
<head>
|
||
<link rel="stylesheet" href="../../ioccc.css">
|
||
<link rel=“shortcut icon” HREF=“"../../ioccc.ico”>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
<title>The International Obfuscated C Code Contest</title>
|
||
<meta name="description" content="gameplay.md for 2020/ferguson1">
|
||
<meta name="keywords" content="IOCCC, 2020/ferguson1, gameplay.md">
|
||
</head>
|
||
|
||
<!-- END: this line ends content from: inc/head.default.html -->
|
||
<!-- START: this line starts content from: inc/body.default.html -->
|
||
|
||
<body>
|
||
|
||
<!-- END: this line ends content from: inc/body.default.html -->
|
||
<!-- START: this line starts content from: inc/header.default.html -->
|
||
|
||
<div class="header">
|
||
<img src="../../png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
|
||
<h1>The International Obfuscated C Code Contest</h1>
|
||
<h2>gameplay.md for 2020/ferguson1</h2>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/header.default.html -->
|
||
<!-- START: this line starts content from: inc/topnav.up2index.html -->
|
||
|
||
<div class="topnav">
|
||
<a class="Left" href="index.html">↑ jump to index.html ↑</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/topnav.up2index.html -->
|
||
<!-- START: this line starts content from: inc/begin-row.default.html -->
|
||
|
||
<div class="row">
|
||
|
||
<!-- END: this line ends content from: inc/begin-row.default.html -->
|
||
<!-- START: this line starts content from: inc/begin-leftcolumn.default.html -->
|
||
|
||
<div class="leftcolumn">
|
||
|
||
<!-- END: this line ends content from: inc/begin-leftcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/sidenav.default.html -->
|
||
|
||
<div class="sidenav">
|
||
<a href="#content">Jump to contents</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../index.html">IOCCC Home</a>
|
||
<a href="../../years.html">Winning Entries</a>
|
||
<a href="../../authors.html">People who have won</a>
|
||
<a href="../../location.html">Location of authors</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../news.html">IOCCC News</a>
|
||
<a href="../../status.html">Contest status</a>
|
||
<a href="../../faq.html#submit">How to enter the IOCCC</a>
|
||
<a href="../../faq.html">FAQ</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../bugs.html">Bugs & (mis)features</a>
|
||
<a href="../../faq.html#fix_an_entry">Fixing IOCCC entries</a>
|
||
<a href="../../faq.html#fix_web_site">Fixing the web site</a>
|
||
<a href="../../faq.html#fix_author">Fixing author info</a>
|
||
<a href="../../thanks-for-help.html">Thanks for the help</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="../../judges.html">The IOCCC Judges</a>
|
||
<a href="../../contact.html">Contacting the IOCCC</a>
|
||
</div>
|
||
<hr>
|
||
<div class="sidenav">
|
||
<a href="#top">Jump to top</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/sidenav.default.html -->
|
||
<!-- START: this line starts content from: inc/end-leftcolumn.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-leftcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/begin-rightcolumn.default.html -->
|
||
|
||
<div class="rightcolumn">
|
||
|
||
<!-- END: this line ends content from: inc/begin-rightcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/before-content.default.html -->
|
||
|
||
<a name="content"></a>
|
||
|
||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
|
||
<p>Playing the game is very simple but because there are many different modes I
|
||
have included much more than just the input keys and a few printouts of the
|
||
game. For normal play you probably don’t even need this file at all unless it be
|
||
for the input keys.</p>
|
||
<p><a name="toc"></a></p>
|
||
<ol type="1">
|
||
<li><p><a href="#support">Testing terminal environment/capabilities</a></p></li>
|
||
<li><p><a href="#input">Input keys</a></p></li>
|
||
<li><p><a href="#gameplay">Gameplay</a></p>
|
||
<ul>
|
||
<li><a href="#initial">The initial screen</a></li>
|
||
<li><a href="#playing">Playing the game</a></li>
|
||
<li><a href="#walls">Walls</a></li>
|
||
<li><a href="#cannibalism">Cannibalism</a></li>
|
||
<li><a href="#shedding">Stretching (shedding)</a></li>
|
||
<li><a href="#winning">Winning</a></li>
|
||
<li><a href="#quitting">Quitting</a></li>
|
||
</ul></li>
|
||
<li><p><a href="#modes">Gameplay modes</a></p>
|
||
<ul>
|
||
<li><a href="#warning"><strong>Photosensitive epilepsy/Stimulation overload trigger warnings</strong></a></li>
|
||
<li><a href="#drawing">Drawing / Practice mode</a></li>
|
||
<li><a href="#auto">Computer playing / Automatic mode (<strong>Photosensitive epilepsy/Stimulation overload trigger</strong>)</a>
|
||
<ul>
|
||
<li><a href="#auto-variations">Variations</a></li>
|
||
</ul></li>
|
||
<li><a href="#grow-shrink">Grow-Shrink (Positive/Negative Winning) mode</a></li>
|
||
<li><a href="#hypnotic">Hypnotic / Sleepy mode (<strong>Photosensitive epilepsy/Stimulation overload trigger</strong>)</a></li>
|
||
<li><a href="#stim">Stimulation / Calming mode</a></li>
|
||
<li><a href="#other-ideas">Other ideas</a></li>
|
||
</ul></li>
|
||
<li><p><a href="#scripts">Scripts</a></p>
|
||
<ul>
|
||
<li><a href="#colours">Colours selection</a></li>
|
||
<li><a href="#preset">Automate the above gameplay modes</a></li>
|
||
</ul></li>
|
||
<li><p><a href="#variables">Other game variables</a></p>
|
||
<ul>
|
||
<li><a href="#wait">WAIT - Snake speed</a></li>
|
||
<li><a href="#evade">EVADE - Bug evasion frequency</a></li>
|
||
<li><a href="#sizes">SIZE / MAXSIZE - Initial snake / max sizes</a></li>
|
||
<li><a href="#growth">GROW / SHEDS - Growth / Shedding sizes</a></li>
|
||
</ul></li>
|
||
<li><p><a href="#conclusions">Conclusion (and inspirational words for everyone)</a></p></li>
|
||
</ol>
|
||
<h1 id="testing-terminal-environmentcapabilities">1. <a name="support" href="#toc">Testing terminal environment/capabilities</a></h1>
|
||
<p>Most people probably won’t have any issue at all but for those who have any
|
||
problems with the terminal see the <a href="terminals.html">terminals.html</a> (<a href="terminals.md">terminals.md</a> on
|
||
GitHub) file for more information on the terminal capabilities testing utility I
|
||
include.</p>
|
||
<p>For troubleshooting other problems see <a href="troubleshooting.html">troubleshooting.html</a>
|
||
(<a href="troubleshooting.md">troubleshooting.md</a> on GitHub) and <a href="bugs.html">bugs.html</a> (<a href="bugs.md">bugs.md</a> on GitHub).</p>
|
||
<h1 id="input-keys">2. <a name="input" href="#toc">Input keys</a></h1>
|
||
<ul>
|
||
<li>Left, right, up and down <strong>arrow keys</strong>: move that direction.</li>
|
||
<li><code>q</code> (and <code>Q</code>): quit the game.</li>
|
||
<li>Space: pause/resume the game (direction keys will also resume).
|
||
Note that no other keys will resume the game; however if you press a key
|
||
that <code>getch()</code> picks up on and the game is not paused then it will be as if
|
||
you pressed the current direction key (assuming you already moved the snake).</li>
|
||
</ul>
|
||
<h1 id="gameplay">3. <a name="gameplay" href="#toc">Gameplay</a></h1>
|
||
<p>Here I will show the initial screen as well as what a few things look like. If
|
||
you don’t feel you need this but you want to configure colours jump to <a href="#colours">colour
|
||
selection</a>. You can also jump to <a href="#modes">gameplay modes</a> or <a href="#variables">game
|
||
variables</a>.</p>
|
||
<p>The bug colour by default is white; the snake head colour is red and the snake
|
||
body colour is green. The walls are cyan.</p>
|
||
<h2 id="gameplay-the-initial-screen"><a name="initial" href="#toc">Gameplay: The initial screen</a></h2>
|
||
<p>When you load the game you will see a screen that looks something like the
|
||
below. Note that the top line is the score/status line: the top wall is at line
|
||
1 and the left wall is column 0. Below I use the coordinates in the X/Y order
|
||
(ncurses is the opposite: Y/X). I will parenthesise the numbers below to refer
|
||
to the number in the diagram:</p>
|
||
<pre><code>X:24/49 Y:8/16 S:5/658 B:0
|
||
##################################################
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# + #
|
||
# #
|
||
# * #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
##################################################
|
||
</code></pre>
|
||
<ul>
|
||
<li><p>The snake (<code>+</code>) is at (24),(8). The bug char is <code>*</code> and the wall char is
|
||
<code>#</code>. When the snake moves the head will be an arrow facing the direction it
|
||
is moving; the body is ‘o’.</p></li>
|
||
<li><p>The top wall is always line (1), the left wall is always column (0), the
|
||
bottom wall is line (16) and the right wall is column (49). If walls are
|
||
impassable and you run into any of these the game is over (you can slither
|
||
at the edge of the wall); else you’ll come out the opposite side.</p></li>
|
||
<li><p>The snake size is (5): but until you start to move it’s technically 1 (even
|
||
if you set <strong>SIZE=0</strong> this applies). This is so that you can decide which
|
||
direction from the centre of the screen. By default the head colour is red;
|
||
the body is green. The snake will grow by one until it reaches the right
|
||
size.</p></li>
|
||
<li><p>The maximum snake size is (997): this is the default; it can be changed but
|
||
it will always have an upper limit depending on the terminal size.</p></li>
|
||
<li><p>The number of bugs eaten so far is 0.</p></li>
|
||
</ul>
|
||
<h2 id="gameplay-playing-the-game"><a name="playing" href="#toc">Gameplay: Playing the game</a></h2>
|
||
<pre><code>X:39/49 Y:8/16 S:5/658 B:0
|
||
##################################################
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# oooo> #
|
||
# #
|
||
# * #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
##################################################</code></pre>
|
||
<p>I let the snake grow to its full size (with the head at (39),(8)) and I’m two
|
||
places above the bug so let’s go down:</p>
|
||
<pre><code>X:39/49 Y:9/16 S:5/658 B:0
|
||
##################################################
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# oooo #
|
||
# v #
|
||
# * #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
##################################################</code></pre>
|
||
<p>Now you see that the snake is going down and in one move the bug will be eaten.
|
||
Let’s do that:</p>
|
||
<pre><code>X:36/49 Y:10/16 S:10/658 B:1
|
||
##################################################
|
||
# #
|
||
# #
|
||
# #
|
||
# * #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# ^ o #
|
||
# oooo #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
##################################################</code></pre>
|
||
<p>Observe that the bug was eaten and a new bug spawned elsewhere. I went left
|
||
three and then up one and could slither on to the bug.</p>
|
||
<h1 id="gameplay-walls"><a name="walls" href="#toc">Gameplay: Walls</a></h1>
|
||
<p>By default walls are passable (<strong>WALLS=1</strong>). Let’s get to full size and go
|
||
through the top wall:</p>
|
||
<pre><code>X:36/49 Y:15/16 S:10/658 B:1
|
||
##################################################
|
||
# o #
|
||
# o #
|
||
# o #
|
||
# * o #
|
||
# o #
|
||
# o #
|
||
# o #
|
||
# o #
|
||
# o #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# ^ #
|
||
##################################################</code></pre>
|
||
<p>There you can see I have grown to the full size and went through the top wall;
|
||
the head is now at the opposite wall. Continuing:</p>
|
||
<pre><code>X:36/49 Y:11/16 S:10/658 B:1
|
||
##################################################
|
||
# o #
|
||
# o #
|
||
# o #
|
||
# * o #
|
||
# o #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# ^ #
|
||
# o #
|
||
# o #
|
||
# o #
|
||
# o #
|
||
##################################################</code></pre>
|
||
<p>I might then have turned to the left and then shortly go up to get the bug. This
|
||
goes on until you lose, quit or win the game.</p>
|
||
<p>When you specify <strong>WALLS=0</strong> the walls become an obstacle that end the game. It
|
||
might look like (I set the starting size to 150 and had only just started):</p>
|
||
<pre><code>X:20/49 Y:2/16 S:150/658 B:0
|
||
##################################################
|
||
# ^ #
|
||
# o #
|
||
# o * #
|
||
# o #
|
||
# o #
|
||
# o #
|
||
# ooooo #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
##################################################</code></pre>
|
||
<p>If I continue going up I will see:</p>
|
||
<pre><code>OUCH!
|
||
X:20/49 Y:1/16 S:150/658 B:0</code></pre>
|
||
<h1 id="gameplay-cannibalism"><a name="cannibalism" href="#toc">Gameplay: Cannibalism</a></h1>
|
||
<p>By default cannibalism is disabled (<strong>CANNIBAL=0</strong>) so if you run into yourself it might look
|
||
something like:</p>
|
||
<pre><code>X:45/49 Y:10/16 S:10/658 B:1
|
||
##################################################
|
||
# #
|
||
# #
|
||
# #
|
||
# * #
|
||
# #
|
||
# #
|
||
# #
|
||
# ooooo #
|
||
# ^ o #
|
||
# ooo #
|
||
# #
|
||
# #
|
||
# #
|
||
# #
|
||
##################################################</code></pre>
|
||
<p>If I were to do any movement but turn to the left I would run into myself. I’ll
|
||
go to the right two spaces:</p>
|
||
<pre><code>OW!
|
||
X:47/49 Y:10/16 S:10/658 B:1</code></pre>
|
||
<p>But <strong>CANNIBAL=1</strong> can look very funny both in movement and still especially
|
||
when you go through yourself several times when the snake is rather long. For
|
||
example going through walls and the snake a few times:</p>
|
||
<pre><code>X:4/49 Y:12/16 S:165/658 B:3
|
||
##################################################
|
||
#oo o ooooo o o o#
|
||
# oooo o ooo o#
|
||
# ooooooooooooooooooo#
|
||
# o #
|
||
# oooooooooo o #
|
||
# o o o #
|
||
# o oooo o o #
|
||
# o o o o #
|
||
# ooooooooooooooo #
|
||
# o o* #
|
||
# oo> o o #
|
||
# o oooooooo o #
|
||
#oooooooooooooo o oooo oooooooo#
|
||
# o o o o o #
|
||
##################################################</code></pre>
|
||
<p>I’ll go back through myself now:</p>
|
||
<pre><code>X:6/49 Y:14/16 S:165/658 B:3
|
||
##################################################
|
||
#oo o ooooo o o o#
|
||
# oooo o ooo o#
|
||
# ooooooooooooooooooo#
|
||
# o #
|
||
# oooooooooo o #
|
||
# o o o #
|
||
# o oooo o o #
|
||
# o o o o #
|
||
# ooooooooooooooo #
|
||
# o o* #
|
||
# ooo o o #
|
||
# oo oooooooo o #
|
||
#ooooo>oooooooo o oooo oooooooo#
|
||
# o o o o o #
|
||
##################################################</code></pre>
|
||
<p>If you note that the head is at (6),(14) I will go one more to the right and you
|
||
will see that the arrow has moved over:</p>
|
||
<pre><code>X:7/49 Y:14/16 S:165/658 B:3
|
||
##################################################
|
||
#oo o ooooo o o o#
|
||
# oooo o ooo o#
|
||
# ooooooooooooooooooo#
|
||
# o #
|
||
# oooooooooo o #
|
||
# o o o #
|
||
# o oooo o o #
|
||
# o o o o #
|
||
# ooooooooooooooo #
|
||
# o o* #
|
||
# ooo o o #
|
||
# oo oooooooo o #
|
||
#oooooo>ooooooo o oooo oooooooo#
|
||
# o o o o o #
|
||
##################################################</code></pre>
|
||
<p>Try this: get a reasonable length and then go back on yourself (if you’re going
|
||
left go right etc.) and then after some length (but before you get beyond the
|
||
snake) turn (so that you go perpendicular) and then watch as the snake starts
|
||
unwinding at one place and then suddenly unwinds another direction.</p>
|
||
<p>An example of extreme cannibalism is in the <a href="cannibalism.log.html">cannibalism.log.html</a>
|
||
(<a href="cannibalism.log.md">cannibalism.log.md</a> on GitHub) file. It explains information about the file
|
||
including how to find the bug, head and tail of the snake, at least where it was
|
||
documented. The first run has several dumps. The final example has the snake
|
||
inside itself.</p>
|
||
<h1 id="gameplay-shedding-stretching"><a name="shedding" href="#toc">Gameplay: Shedding (stretching)</a></h1>
|
||
<p>This feature will make you grow by the value of <strong>SHEDS</strong> for every <strong>SHED</strong>
|
||
movements (the counter isn’t incremented when you eat a bug). Basically growing
|
||
without eating a bug (stretching would be better name here).</p>
|
||
<h1 id="gameplay-winning"><a name="winning" href="#toc">Gameplay: Winning</a></h1>
|
||
<p>If you ever get to the <strong>MAXSIZE</strong> the game is won. You can force a win by
|
||
setting the max size to a smaller value than the size you specify (or the
|
||
default) or setting the size to higher than the default (or < 0 which will end
|
||
up being > the max size though I suppose there might be some value that makes it
|
||
less than again - I’m not going to try and figure that out however). Anyway:</p>
|
||
<div class="sourceCode" id="cb14"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="va">SIZE</span><span class="op">=</span>-1 <span class="ex">./prog</span></span>
|
||
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a><span class="ex">YOU</span> WIN!</span>
|
||
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a><span class="ex">X:24/49</span> Y:8/16 S:658/658 B:0</span></code></pre></div>
|
||
<p>Observe that the size isn’t the default 997: because the screen size is too
|
||
small for that value (see <a href="terminals.md">terminals.md</a>).</p>
|
||
<p>The reason I chose 997 is that it leaves a bit of a challenge for some (maybe
|
||
most) people but it’s still winnable. Previously even I couldn’t have won unless
|
||
maybe a much bigger screen, if both cheat modes were disabled. I probably could
|
||
win without any cheat mode enabled on my 24” monitor but I probably would need
|
||
at least one cheat mode on my 16” laptop (I don’t need both enabled). I don’t
|
||
think I need either for 997.</p>
|
||
<p>The beauty though is the game can be winnable by anyone since you can define the
|
||
max size to win. Games are meant to be fun: who enjoys games that can never be
|
||
won? Very few probably do and those who do enjoy them it probably are games that
|
||
are relaxing and stimulating (which admittedly this game can be - but still I
|
||
want it to be winnable too).</p>
|
||
<p>Another reason I chose 997: it’s prime and the judges love prime numbers.
|
||
Actually, this is the main reason for the number: I had changed it down to 1000
|
||
but then it occurred to me that there are prime numbers close to 1000 so why not
|
||
choose one instead (that was less than 1000)? And so I did. Another fun fact: at
|
||
the default starting size and growth size of 5 the number of bugs needed before
|
||
the game is won is 199 - also a prime!</p>
|
||
<h1 id="gameplay-quitting"><a name="quitting" href="#toc">Gameplay: Quitting</a></h1>
|
||
<p>If you wish to quit you can hit ‘q’ (case-insensitive). For example:</p>
|
||
<pre><code>X:24/49 Y:8/16 S:5/658 B:0</code></pre>
|
||
<h1 id="gameplay-modes">4. <a name="modes" href="#toc">Gameplay modes</a></h1>
|
||
<p>Here I list a number of different modes of play. In the <a href="bugs.html">bugs.html</a>
|
||
(<a href="bugs.md">bugs.md</a> on GitHub) file I even show how there’s a built-in test unit for some
|
||
modes! There are certainly other modes that could be imagined: the modes below
|
||
happened over time and some were simply an accidental discovery or something I
|
||
thought of by a chance; others were thought out from the beginning but were
|
||
improved over time.</p>
|
||
<p>The <a href="play.sh">play.sh</a> script sets up some of these automatically; I describe it after
|
||
the modes below.</p>
|
||
<h2 id="photosensitive-epilepsystimulation-overload-trigger-warnings"><a name="warning" href="#toc">Photosensitive epilepsy/Stimulation overload trigger warnings</a></h2>
|
||
<p>If you have <strong>photosensitive epilepsy please be careful</strong> especially with low values
|
||
for both <strong>WAIT</strong> and <strong>EVADE</strong>. It appears that the <a href="https://www.epilepsysociety.org.uk/photosensitive-epilepsy#.Xjgpwi2ZOgQ">number of hertz (flashes)
|
||
per second triggering seizures</a> is wide but depending on the variables it
|
||
easily can be in the range.</p>
|
||
<p>There are different patterns and lights flashing at different speeds so please
|
||
exercise caution. This could trigger seizures and <strong>it might also be too much
|
||
stimulation for some people.</strong></p>
|
||
<p><strong>Please be careful of these if these types of things have ever affected you or if
|
||
you have any form of epilepsy. Thank you.</strong></p>
|
||
<h2 id="gameplay-mode-drawing-practice-mode"><a name="drawing" href="#toc">Gameplay mode: Drawing / Practice mode</a></h2>
|
||
<p>If you want to draw the snake wherever you like on the screen you can do this by
|
||
modifying the wait time (for input) to -1 (or any value < 0): then the snake
|
||
does not move until you press a movement key. For example:</p>
|
||
<div class="sourceCode" id="cb16"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="va">WAIT</span><span class="op">=</span>-1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>When you eat a bug the snake will grow and you can draw more. If you want to
|
||
make it so you can go through yourself:</p>
|
||
<div class="sourceCode" id="cb17"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="va">WAIT</span><span class="op">=</span>-1 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>If you don’t want to start out so small (i.e. you want to be able to draw more
|
||
quickly) you can just set the size to a bigger number (and you could do the same
|
||
with growth and moult/shed):</p>
|
||
<div class="sourceCode" id="cb18"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="va">SIZE</span><span class="op">=</span>50 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="va">WAIT</span><span class="op">=</span>-1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>Do note that although you’re a bigger size you still grow one movement at a
|
||
time.</p>
|
||
<p>Okay but then if you get too many bugs the drawing will be over. If this proves
|
||
to be a problem simply do:</p>
|
||
<div class="sourceCode" id="cb19"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a><span class="va">SIZE</span><span class="op">=</span>100 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="va">WAIT</span><span class="op">=</span>-1 <span class="va">GROW</span><span class="op">=</span>0 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>Or something like that (maybe make the size bigger but that’s up to you). You
|
||
could also set the max size to be the highest possible by saying</p>
|
||
<div class="sourceCode" id="cb20"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a><span class="va">MAXSIZE</span><span class="op">=</span>-1</span></code></pre></div>
|
||
<p>Which I’ve done in the <a href="play.sh">play.sh</a> script.</p>
|
||
<p>I discuss how this mode works in [spoilers.markdown][].</p>
|
||
<p>Here’s an example run where I spelt ‘SNAKE’. As you can see it’s far from
|
||
perfect: the snake after all does not leave gaps and the game does not support
|
||
diagonal movement and I also made a mistake and had to modify what I was aiming
|
||
for. But you can consider this mode drawing or practice mode.</p>
|
||
<pre><code> oooooooooo ooooo o oo ooooo
|
||
o o oo o oo o ooo o
|
||
oooo o oo ooooooo oooo ooooo
|
||
o o ooo oo o ooo o
|
||
oooo o oo ooo oooooooo></code></pre>
|
||
<h2 id="gameplay-mode-computer-playing-automatic-mode-photosensitive-epilepsystimulation-overload-trigger"><a name="auto" href="#toc">Gameplay mode: Computer playing / Automatic mode (Photosensitive epilepsy/Stimulation overload trigger)</a></h2>
|
||
<p><strong>Photosensitive epilepsy/stimulation overload trigger warning:</strong>
|
||
For those who have epilepsy or are susceptible to stimulation overload from
|
||
flashing lights please do be careful with this mode. Depending on your
|
||
susceptibility this could very well trigger seizures or other discomforts and I
|
||
wouldn’t want that to happen to anyone. This mode has a lot of flashing of
|
||
different colours and depending on the exact parameters you specify it could
|
||
easily be in the trigger range for epilepsy but potentially stimulation overload
|
||
too.</p>
|
||
<p>If you’re still here you can create this effect like:</p>
|
||
<div class="sourceCode" id="cb22"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="va">WAIT</span><span class="op">=</span>0 <span class="va">WALLS</span><span class="op">=</span>1 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>As long as the bug evades you’ll find that the snake is growing because it’s
|
||
actually eating bugs; the computer is actually playing the game by itself! You
|
||
can still move the snake though it won’t seem like you have much control over
|
||
it. If you pause the game you can see that it’s bigger (you probably will be
|
||
able to even without pausing it).</p>
|
||
<p>Basically the snake is moving so fast that because the bug evades the bug will
|
||
inevitably move in the snake path’s and therefore be eaten.</p>
|
||
<p>You might find it goes quicker if you set the evade count to a lower value for
|
||
example 1. Or you might not. But as long as the bug moves the computer can play
|
||
by itself.</p>
|
||
<p>Quick tests suggest that bigger dimensions it gets bigger quicker. But it also
|
||
seems to take longer for it to get a bug as it gets longer. I believe these
|
||
happen because the bug has to find a X and Y coordinate that’s not occupied and
|
||
so with fewer available it has a harder time finding a place in that one line.</p>
|
||
<h3 id="computer-player-variations"><a name="auto-variations" href="#toc">Computer player variations</a></h3>
|
||
<p>Here’s how to make the bug move every time the snake moves:</p>
|
||
<div class="sourceCode" id="cb23"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a><span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="va">WALLS</span><span class="op">=</span>1 <span class="va">WAIT</span><span class="op">=</span>0 <span class="va">EVADE</span><span class="op">=</span>1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<h4 id="help-the-computer-win-fairly-quickly">Help the computer win fairly quickly</h4>
|
||
<p>If you want to see the game ‘win’ try something like:</p>
|
||
<div class="sourceCode" id="cb24"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="va">WALLS</span><span class="op">=</span>1 <span class="va">WAIT</span><span class="op">=</span>0 <span class="va">EVADE</span><span class="op">=</span>1 <span class="va">MAXSIZE</span><span class="op">=</span>10 <span class="ex">./prog</span></span></code></pre></div>
|
||
<h4 id="negative-growth-shrink-automatic-mode">Negative growth (Shrink) Automatic mode</h4>
|
||
<p>Here’s a fun one I just thought of (a long time after these other modes were
|
||
thought of):</p>
|
||
<div class="sourceCode" id="cb25"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="va">WAIT</span><span class="op">=</span>0 <span class="va">EVADE</span><span class="op">=</span>1 <span class="va">GROW</span><span class="op">=</span>-1 <span class="va">SIZE</span><span class="op">=</span>9 <span class="va">MAXSIZE</span><span class="op">=</span>10 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>What you’ll see is that first the snake will get to the size of 9 - whether it
|
||
shows to be 10 characters depends on whether or not it gets a bug before it can
|
||
get to that length - and then it’ll start shrinking until it’s just the head
|
||
then the head again (i.e. 1 then 0 in size) and then win! This is also in the
|
||
<a href="play.sh">play.sh</a> script.</p>
|
||
<h4 id="adjusting-the-timespeed">Adjusting the time/speed</h4>
|
||
<p>Of course you can also do something like:</p>
|
||
<div class="sourceCode" id="cb26"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="va">WAIT</span><span class="op">=</span>5 <span class="va">WALLS</span><span class="op">=</span>1 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>Which although might not seem like it is significantly slower.</p>
|
||
<h4 id="moving-the-snake-about-to-create-patterns">Moving the snake about to create patterns</h4>
|
||
<p>If you press different direction keys in some pattern you will see a pattern
|
||
form too (entirely dependent on how fast you react, what keys you press and I
|
||
suppose also how much the bug moves and the chance of being eaten also).</p>
|
||
<h4 id="other-ideas">Other ideas</h4>
|
||
<p>Here’s an idea: how many moves is needed to make it possible to have some sort
|
||
of success in catching bugs? Obviously the dimensions will affect this value.</p>
|
||
<p>How long will it take for the snake to run into itself? For instance by doing:</p>
|
||
<div class="sourceCode" id="cb27"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="va">WAIT</span><span class="op">=</span>0 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>On my 13” MacBook Pro (replaced later by a 16”) at the default settings going
|
||
horizontally the snake ran into itself at:</p>
|
||
<pre><code>OW!
|
||
X:57/156 Y:20/41 S:155/997 B:30</code></pre>
|
||
<p>What if you set the size to a high value? The lowest? There are bound to be
|
||
other games to play with this feature!</p>
|
||
<h2 id="gameplay-mode-grow-shrink-mode-positive-and-negative-winning"><a name="grow-shrink" href="#toc">Gameplay mode: Grow-Shrink mode (Positive and Negative Winning)</a></h2>
|
||
<p>In this mode you’re simultaneously growing and shrinking but because the max
|
||
size is unsigned you can win both by shrinking to the point of losing your body
|
||
or growing to the full size directly. This is how it works:</p>
|
||
<p>You have a negative shedding growth and a positive growth size: negative and
|
||
positive winning. Depending on the parameters specified it might go one way over
|
||
the other. Try:</p>
|
||
<div class="sourceCode" id="cb29"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="va">SIZE</span><span class="op">=</span>150 <span class="va">SHEDS</span><span class="op">=</span>-5 <span class="va">GROW</span><span class="op">=</span>10 <span class="va">SHED</span><span class="op">=</span>50 <span class="va">MAXSIZE</span><span class="op">=</span>250 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>What this does is set the size to 150 (to make it not go down so quickly) and
|
||
then for each bug you eat it adds 5 to the size; for every 50 moves (that you
|
||
don’t get the bug) you shrink by 5. You will find that at times you might only
|
||
decrease in size but then at other times - depending on size of screen and how
|
||
lucky you are with where the bug is relative to where it last was - you might be
|
||
growing. Combining this with the drawing mode could be interesting but I never
|
||
actually tried it.</p>
|
||
<p>The parameters above were chosen after playing with the mode a bit to find a
|
||
value that wouldn’t take that much time but still would pose a challenge. One
|
||
could reverse it so that one shrinks more than growing.</p>
|
||
<p>The <a href="crazy.log.html">crazy.log.html</a> (<a href="crazy.log.md">crazy.log.md</a> on GitHub) file has several screen
|
||
dumps with this idea.</p>
|
||
<p>You could also have it so that eating a bug makes you shrink and moving so many
|
||
moves you grow. I tried this and for me it was far more fun. The <a href="play.sh">play.sh</a>
|
||
also has this mode:</p>
|
||
<div class="sourceCode" id="cb30"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="va">SIZE</span><span class="op">=</span>100 <span class="va">SHEDS</span><span class="op">=</span>5 <span class="va">GROW</span><span class="op">=</span>-10 <span class="va">SHED</span><span class="op">=</span>50 <span class="va">MAXSIZE</span><span class="op">=</span>250 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>Obviously there are many other variations. The <a href="play.sh">play.sh</a> script has some
|
||
of them (the above is option 5; others are 4, 15 and 16 but only options 4 and 5
|
||
are called Grow / Shrink).</p>
|
||
<h2 id="hypnotic-sleepy-mode-photosensitive-epilepsystimulation-overload-trigger"><a name="hypnotic" href="#toc">Hypnotic / Sleepy mode (<strong>Photosensitive epilepsy/Stimulation overload trigger</strong>)</a></h2>
|
||
<p><strong>Photosensitive epilepsy/stimulation overload trigger warning:</strong>
|
||
For those who have epilepsy or are susceptible to stimulation overload from
|
||
flashing lights and patterns please do be careful with this mode. Depending on your
|
||
susceptibility this could very well trigger seizures or other discomforts and I
|
||
wouldn’t want that to happen to anyone. The default wait time is 231ms, the
|
||
typical range of seizures is 3 to 30 flashes per seconds (but can be higher) and
|
||
that means that at <strong>EVADE=1</strong> every 231ms there will be a flash in addition to the
|
||
snake moving too.</p>
|
||
<p>Anyway this might sound absurd but it can be somewhat hypnotic by doing:</p>
|
||
<div class="sourceCode" id="cb31"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="va">EVADE</span><span class="op">=</span>1 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<p>And just moving the snake about not trying to catch any bugs - just let whatever
|
||
happens happen.</p>
|
||
<h2 id="gameplay-mode-stimulation-calming-mode"><a name="stim" href="#toc">Gameplay mode: Stimulation / Calming mode</a></h2>
|
||
<p>If you just need something to stimulate your mind to keep you calm or simply you
|
||
want to play a game without having to worry about winning or losing you can set
|
||
the growth size to 0 and then just move the snake round and round eating bugs
|
||
until you want to quit. You can enable cannibalism so that you don’t have to
|
||
worry about even running into yourself and losing:</p>
|
||
<div class="sourceCode" id="cb32"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="va">GROW</span><span class="op">=</span>0 <span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="ex">./prog</span></span></code></pre></div>
|
||
<h2 id="gameplay-mode-expansibility"><a name="expansibility" href="#toc">Gameplay mode: Expansibility</a></h2>
|
||
<p>As I was writing this document and the game modes I have thought of other game
|
||
modes (they were added) and I have come back to this document to add more modes.
|
||
That’s the beauty of the variables I have implemented: together with the
|
||
imagination and even just chance different modes of play can be devised. The
|
||
drawing mode was a happy chance of how the <code>timeout()</code> function works for
|
||
example.</p>
|
||
<p>As a person who was heavily involved in MUD development and design I know very
|
||
well how games need to be fun and have different options, not be too easy but
|
||
not be too hard either. And a game developer who does not play their games is a
|
||
game developer who is detached from their player base and the wants and needs
|
||
are therefore disregarded if even heard. I have played this game a lot for this
|
||
reason as well as I simply enjoy it and thinking up new modes.</p>
|
||
<h1 id="scripts">5. <a name="scripts" href="#toc">Scripts</a></h1>
|
||
<p>The following scripts are provided to simplify and automate some of the things
|
||
this file discusses as well as allowing to easily change the colours.</p>
|
||
<h2 id="colours-selection-snake-colours"><a name="colours" href="#toc">Colours selection: snake-colours</a></h2>
|
||
<p>To do this use the <a href="snake-colours">snake-colours</a> script like so:</p>
|
||
<div class="sourceCode" id="cb33"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./snake-colours</span></span></code></pre></div>
|
||
<p>If you want to pass in specific variables you can do that too e.g.:</p>
|
||
<div class="sourceCode" id="cb34"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="va">CANNIBAL</span><span class="op">=</span>1 <span class="ex">./snake-colours</span></span></code></pre></div>
|
||
<p>The script will prompt you for the colour of the walls, snake head, body and the
|
||
bug.</p>
|
||
<h2 id="automate-the-above-gameplay-modes"><a name="preset" href="#toc">Automate the above gameplay modes</a></h2>
|
||
<p>The <a href="play.sh">play.sh</a> script has the gameplay modes described in this file and is menu
|
||
based (there might be differences and some of the modes I include a variation).
|
||
The script tests the terminal (allowing you to continue even if problems are
|
||
detected), prompts you if you want to select colours (like those in
|
||
snake-colours above) and then gives you a list of game modes to play. You can
|
||
pass in the game variables but note that if you pass in a variable that the mode
|
||
you choose uses then the script will override what you pass in.</p>
|
||
<p>To use you can do something like:</p>
|
||
<div class="sourceCode" id="cb35"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./play.sh</span></span></code></pre></div>
|
||
<p>Or to make it so walls are an obstacle:</p>
|
||
<div class="sourceCode" id="cb36"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a><span class="va">WALLS</span><span class="op">=</span>0 <span class="ex">./play.sh</span></span></code></pre></div>
|
||
<h1 id="notes-about-some-of-the-game-variables">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
|
||
gameplay modes (as shown above) but here are some general notes about a few of them.</p>
|
||
<h2 id="wait-snake-speed"><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
|
||
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>
|
||
<h2 id="evade-bug-evasion-frequency"><a name="evade" href="#toc">EVADE: Bug evasion frequency</a></h2>
|
||
<p>For every <strong>EVADE</strong> snake movements the bug will try and find a new place to
|
||
occupy. It might be very close to it and I do not ensure it’s a new place at
|
||
all.</p>
|
||
<p>Each time the bug is placed the counter will be reset whether from eating the
|
||
bug or not reaching it in time. Default 300 moves.</p>
|
||
<p>This can help you get out of a trap but it can also sometimes make it harder.</p>
|
||
<h2 id="size-maxsize-initial-max-snake-sizes"><a name="sizes" href="#toc">SIZE / MAXSIZE: Initial / Max snake sizes</a></h2>
|
||
<p>997 might be a bit high for many people. Or maybe you don’t have enough time. Or
|
||
you’re not in the mood to lose. Or you want to get close to a size you were last
|
||
time but quickly. It might be in conjunction with drawing mode.</p>
|
||
<p>Note on snake size: there’s a stated size (in the score line) which is what
|
||
the snake will ‘populate’ in the snake arrays and the visible size: as I have
|
||
discussed here and there the snake doesn’t grow immediately so it takes time
|
||
before the snake is visibly that many characters. In other words just because it
|
||
says SIZE 29 doesn’t mean it will instantly be 29 characters on the screen.</p>
|
||
<h2 id="grow-sheds-growth-shedding-sizes"><a name="growth" href="#toc">GROW / SHEDS : Growth / Shedding sizes</a></h2>
|
||
<p>Similar to the initial size. Notice that the above point on size applies here:
|
||
it will take the number of movements before it is ‘its full size’.</p>
|
||
<h1 id="conclusion-and-inspirational-words-for-everyone">7. <a name="conclusions" href="#toc">Conclusion (and inspirational words for everyone)</a></h1>
|
||
<p>I believe that this file has given more than enough information for anyone to
|
||
get an idea of what is possible with my implementation of Snake. I realise also
|
||
that most people won’t have read this far and that’s quite all right; I’m very
|
||
thorough and pay attention to details obsessively. Creating this game was a
|
||
delight and I am quite proud of what I have done.</p>
|
||
<p>Thank you for whatever level of attention you felt you could or wanted to give
|
||
and enjoy it in whatever way you see fit!</p>
|
||
<p><strong>Much more importantly is that Snake aside I hope I have demonstrated how with
|
||
the imagination and creativity almost anything is possible.</strong> This is something
|
||
<strong>that applies in our world in every way and <em>everyone</em> can do something amazing if
|
||
they believe in themselves!</strong> I would have never thought this the case for me
|
||
years ago but I know it’s true now. <strong>Believe in yourself. Always.</strong></p>
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content from: inc/after-content.default.html -->
|
||
|
||
<!-- END: this line ends content from: inc/after-content.default.html -->
|
||
<!-- START: this line starts content from: inc/end-rightcolumn.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-rightcolumn.default.html -->
|
||
<!-- START: this line starts content from: inc/end-row.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/end-row.default.html -->
|
||
<!-- START: this line starts content from: inc/footer.default.html -->
|
||
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<div class="footer">
|
||
<h2>Copyright and CC BY-SA 4.0 License</h2>
|
||
<p>This file and web page is:</p>
|
||
<blockquote><b>Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.</b></p></blockquote>
|
||
<p>You are free to share and adapt this file under the terms of this license:</p>
|
||
<blockquote><b>Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)</b></blockquote>
|
||
<p>For more information, see:</p>
|
||
<blockquote><a
|
||
href="https://creativecommons.org/licenses/by-sa/4.0/">https://creativecommons.org/licenses/by-sa/4.0/</a></blockquote>
|
||
<h2>Coda</h2>
|
||
<p><a href="https://validator.w3.org/nu/?doc=#">Nu HTML check this web page</a></p>
|
||
<p><a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a></p>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/footer.default.html -->
|
||
<!-- START: this line starts content from: inc/bottom.default.html -->
|
||
|
||
</body>
|
||
</html>
|
||
|
||
<!-- END: this line ends content from: inc/bottom.default.html -->
|