[the-feebs-war-cvs] r1 - feebs
gmilare at common-lisp.net
gmilare at common-lisp.net
Wed Dec 19 20:36:54 UTC 2007
Author: gmilare
Date: Wed Dec 19 15:36:51 2007
New Revision: 1
Added:
brains.fasl (contents, props changed)
brains.lisp
extra.lisp
feebs/
feebs.asd
feebs.tex
feebs/WARNINGS
feebs/feebs.css
feebs/feebs.html
feebs/index.html
feebs/internals.pl
feebs/labels.pl
feebs/node1.html
feebs/node10.html
feebs/node11.html
feebs/node12.html
feebs/node13.html
feebs/node14.html
feebs/node15.html
feebs/node16.html
feebs/node17.html
feebs/node18.html
feebs/node19.html
feebs/node2.html
feebs/node20.html
feebs/node21.html
feebs/node22.html
feebs/node23.html
feebs/node24.html
feebs/node3.html
feebs/node4.html
feebs/node5.html
feebs/node6.html
feebs/node7.html
feebs/node8.html
feebs/node9.html
graphics.lisp
license
main.lisp
mazes.lisp
package.lisp
system.lisp
Log:
Added: brains.fasl
==============================================================================
Binary file. No diff available.
Added: brains.lisp
==============================================================================
--- (empty file)
+++ brains.lisp Wed Dec 19 15:36:51 2007
@@ -0,0 +1,47 @@
+;;; -*- Common Lisp -*-
+
+(in-package :feebs)
+
+
+;;; Modified from "cautious-brain"
+
+
+(defun auto-brain (status proximity vision vision-left vision-right)
+ (declare (ignore vision-left vision-right))
+ (let ((stuff (my-square proximity)))
+ (cond ((and (member :mushroom stuff :test #'eq)
+ (< (energy-reserve status)
+ (- *maximum-energy* 20)))
+ :eat-mushroom)
+ ((member :carcass stuff :test #'eq)
+ :eat-carcass)
+ ((and (ready-to-fire status)
+ (> (energy-reserve status) 30)
+ (dotimes (index (min (line-of-sight status) 5))
+ (let ((feeb (car (member-if #'feeb-image-p (svref vision index)))))
+ (if (and feeb
+ (not (eq (feeb-image-facing feeb)
+ (facing status))))
+ (return t)))))
+ :flame)
+ ((and (not (eq (left-square proximity) :rock))
+ (or (member :mushroom (left-square proximity))
+ (> 3 (random 10))))
+ :turn-left)
+ ((and (not (eq (right-square proximity) :rock))
+ (or (member :mushroom (right-square proximity))
+ (> 3 (random 10))))
+ :turn-right)
+ ((and (> (line-of-sight status) 0)
+ (not (dotimes (index (min (line-of-sight status) 7))
+ (if (member-if #'fireball-image-p (svref vision index))
+ (return t)))))
+ :move-forward)
+ (t
+ :turn-around))))
+
+(defun make-auto-feebs (n)
+ (dotimes (i n)
+ (define-feeb
+ (format nil "System Feeb # ~d" i)
+ #'auto-brain)))
\ No newline at end of file
Added: extra.lisp
==============================================================================
--- (empty file)
+++ extra.lisp Wed Dec 19 15:36:51 2007
@@ -0,0 +1,125 @@
+;;; -*- Common Lisp -*-
+
+#| Copyright (c) 2007 Gustavo Henrique Milaré
+
+ This file is part of The Feebs War.
+
+ The Feebs War is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ The Feebs War is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+|#
+
+
+;;; Usefull for creating a feeb
+;;; These are optimized so someone can use them without
+;;; complaining that they slow down your feeb !!!
+
+(in-package :feebs)
+
+(declaim (optimize (speed 3) (safety 0))
+
+ (inline left-of right-of behind
+ forward-dx forward-dy
+ left-dx left-dy
+ right-dx right-dy
+ behind-dx behind-dy
+
+ relative-facing
+
+ wallp chance)
+
+ ((function ((integer 0 3)) (integer 0 3))
+ left-of right-of behind
+ relative-facing)
+
+ ((function ((integer 0 3)) (integer -1 1))
+ forward-dx forward-dy
+ left-dx left-dy
+ right-dx right-dy
+ behind-dx behind-dy)
+
+ ((function (rational) boolean)
+ chance))
+
+;;; Directional arithmetic.
+
+(defun left-of (facing)
+ (mod (+ facing 3) 4))
+
+(defun right-of (facing)
+ (mod (+ facing 1) 4))
+
+(defun behind (facing)
+ (mod (+ facing 2) 4))
+
+(defun relative-facing (my-facing other-facing)
+ (mod (- my-facing other-facing) 4))
+
+(defun forward-dy (facing)
+ (if (oddp facing)
+ 0
+ (rem (1- facing) 4)))
+
+(defun forward-dx (facing)
+ (if (oddp facing)
+ (rem (- 2 facing) 4)
+ 0))
+
+(defun left-dy (facing)
+ (forward-dy (left-of facing)))
+
+(defun left-dx (facing)
+ (forward-dx (left-of facing)))
+
+(defun right-dy (facing)
+ (forward-dy (right-of facing)))
+
+(defun right-dx (facing)
+ (forward-dx (right-of facing)))
+
+(defun behind-dy (facing)
+ (forward-dy (behind facing)))
+
+(defun behind-dx (facing)
+ (forward-dx (behind facing)))
+
+;;; Tests
+
+(defun wallp (thing)
+ (the boolean
+ (eq :rock thing)))
+
+#|
+;;; Handling the vision, vision-left and vision-right objects
+ (defmacro with-visible-elements ((count line-of-sight)
+ ((vis vision) &body vis-body)
+ ((vis-l vision-left) &body vis-l-body)
+ ((vis-r vision-right) &body vis-r-body)
+ &body finalize)
+ (let ((v (gensym))
+ (vl (gensym))
+ (vr (gensym)))
+ `(do* ((,count 1 (1+ ,count))
+ (,v (svref ,vision ,count))
+ (,vl (svref ,vision ,count))
+ (,vr (svref ,vision ,count)))
+ ((= ,count line-of-sight)
+ , at finalize)
+ (declare (list ,v ,vl ,vr)
+ (fixnum ,count)) ; can be assumed fixnum unless you have a mega PC
+ (dolist (,vis ,v)
+ , at vis-body)
+ (dolist (,vis-l ,vl)
+ , at vis-l-body)
+ (dolist (,vis-r ,vr)
+ , at vis-r-body))))
+|#
\ No newline at end of file
Added: feebs.asd
==============================================================================
--- (empty file)
+++ feebs.asd Wed Dec 19 15:36:51 2007
@@ -0,0 +1,30 @@
+;;; -*- Common Lisp -*-
+
+(defpackage :feebs-system
+ (:use :cl :asdf))
+
+(in-package :feebs-system)
+
+(defsystem feebs
+ :description "The Feebs War is an extension of Planetof the Feebs"
+ :version "0.0.1"
+ :author "Gustavo Henrique Milaré <gugamilare at gmail.com>"
+ :licence "GPL"
+
+ :components
+ (;; source
+ (:cl-source-file "package")
+ (:cl-source-file "main" :depends-on ("package"))
+ (:cl-source-file "extra" :depends-on ("main"))
+ (:cl-source-file "system" :depends-on ("extra"))
+
+ (:cl-source-file "mazes" :depends-on ("extra"))
+ (:cl-source-file "brains" :depends-on ("extra"))
+
+ (:file "graphics" :depends-on ("main"))
+
+ ;; GPL
+ (:doc-file "licence")
+
+ ;; documentation
+ (:doc-file "feebs.tex")))
Added: feebs.tex
==============================================================================
--- (empty file)
+++ feebs.tex Wed Dec 19 15:36:51 2007
@@ -0,0 +1,577 @@
+%% LyX 1.5.1 created this file. For more info, see http://www.lyx.org/.
+%% Do not edit unless you really know what you are doing.
+\documentclass[english]{article}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\IfFileExists{url.sty}{\usepackage{url}}
+ {\newcommand{\url}{\texttt}}
+
+\makeatletter
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
+\newenvironment{lyxlist}[1]
+{\begin{list}{}
+{\settowidth{\labelwidth}{#1}
+ \setlength{\leftmargin}{\labelwidth}
+ \addtolength{\leftmargin}{\labelsep}
+ \renewcommand{\makelabel}[1]{##1\hfil}}}
+{\end{list}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
+% Copyright (c) 2007 Gustavo Henrique Milaré
+%
+% This file is part of The Feebs War.
+%
+% The Feebs War is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version.
+%
+% The Feebs War is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+%% LyX 1.4.2 created this file. For more info, see http://www.lyx.org/.
+
+
+
+\IfFileExists{url.sty}{\usepackage{url}
+}
+ {\newcommand{\url}{\texttt}}
+
+\makeatletter
+
+
+
+
+\makeatother
+
+\usepackage{babel}
+\makeatother
+
+\begin{document}
+
+\title{\textbf{\huge The Feebs War}}
+
+
+\author{Gustavo Henrique Milaré}
+
+\maketitle
+\begin{abstract}
+\textit{The Feebs War} is a modified version of Planet of the Feebs
+\url{http://www.cliki.net/}, a game made for people learn and improve
+their lisp and code manipulation tecniques. The graphics are now displayed
+using PAL \url{http://common-lisp.net/project/pal/}'s libraries,
+so the problems with portability from CMUCL and X Window Sistem do
+not exist anymore. Also the code is cleaner and simpler both to make
+a feeb and to read the code.
+\end{abstract}
+\tableofcontents{}
+
+
+\section{Introduction}
+
+The Feebs are intelligent and hostile creatures that live inside maze
+tunnels. They also have no mercy with each other, so they frequently
+throw a letal flame from through their mouth, and, after that, they
+can eat the carcass left. But throwing flames have an energy cost,
+so they must keep tracking for food.
+
+This game is intended to help lisp newbies (or maybe a little more
+advanced lispers) to learn lisp. A player must create a function that
+receives what his/her feeb is seeing and feeling, and returns what
+it will do next. To create the better feeb, one can create variables
+to store data from previous moves (or not), and can also use all the
+power of lisp to improve his/her creature.
+
+
+\subsection{Changes from \emph{Planet of the Feebs}}
+
+Many changes were made from the original game, but, if you have any
+feeb definition and you want to use it, it should be easy to adapt
+the brain function to the new rules.
+
+The main reason of this project is that \textit{Planet of the Feebs}
+is really interesting for (not just) newbies to learn lisp, but the
+difficulties to install, unportability and the ausence of competitors
+make it difficult to someone to be interested in making a feeb. So,
+I hope that making these adjustments and maybe creating some contests
+over the web make people be more interested in learning lisp.
+
+So, these are (some of) the changes:
+
+\begin{itemize}
+\item The graphics are not based on X Window Sistem anymore, but on PAL,
+and there are no CMUCL's event handler. This way, the code is more
+portable and graphics can be improved without those hundreds of lines
+that the original version has. Just creating some .bmp or .jpg files
+of a feeb and your feeb is much more personalized!
+\item Every element of the map (except walls) is a list, so the brain of
+a feeb doesn't need to test all the time if the element is an atom
+or a list (wich, in my opinion, is really boring, unlispy and unnecessary
+in this case). That was only a reason to duplicate code and work,
+adding no results at all...
+\item Many functions and variables are changed and others were added.
+\item Someone watching the game can control a Feeb with the keyboard, if
+he/she wants to, and say when the game must finish.
+\item This document is more objective than the one provided with \textit{Planet
+of the Feebs}, and is fully compatible with the code. This way it
+is easier to search for some information.
+\end{itemize}
+
+\section{The Game}
+
+
+\subsection{Overview}
+
+Your feeb's objective is to survive and kill other feebs. It is inside
+a maze of tunnels. Every turn, all feebs lose one unit of energy,
+and maybe starves. Your feeb is able to move forward, turn left, right
+or around, flame, peek around a corner, eat something or just wait.
+After all feebs move, the flames thrown before also move (or dissipate),
+carcasses may rot and mushrooms may grow, accordingly to some rules.
+
+To see what values are taken, one can use \textsf{\textbf{(list-parameter-settings)}}.
+Using \textsf{\textbf{setf}} gives the possibility to change them
+and \textsf{\textbf{documentation}} can be used to know them. Just
+remember that every probability must be a rational number (like 1/2).
+These parameters are just for one to know how the game is going to
+be, but in the begining there is no need to explicitly use them when
+creating the brain of a feeb.
+
+These are some global parameters:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{{*}game-length{*}}}}] Number of turns the game
+will last, or nil if there is a human player.
+\item [{\textsf{\textbf{{*}points-for-killing{*}}}}] How many points some
+feeb earn for killing someone.
+\item [{\textsf{\textbf{{*}points-for-dying{*}}}}] How many points some
+feeb earn for dying (usually negative).
+\item [{\textsf{\textbf{{*}maze-x-size{*}}}}] Horizontal size of the maze.
+\item [{\textsf{\textbf{{*}maze-y-size{*}}}}] Vertical size of the maze.
+\item [{\textsf{\textbf{(get-maze-map)}}}] This command can be used to
+get the map (see section \ref{sub:Map}).
+\end{lyxlist}
+
+\subsection{Throwing flame}
+
+If a feeb decides to throw a flame, and if it is prepared to, it will
+spend energy, and the next turn there will be a flame in the square
+in front of the feeb. For a few turns, the feeb will not be able to
+throw flames. The turn after the feeb throws the flame, it is able
+to see its own flame exactly in front of it, so it shouldn't move
+forward. Each turn, the flame moves forward destroing mushrooms and
+killing feebs it encounters, transforming them into carcass. If there
+is a wall, the flame can reflect, and will turn 180 degrees.
+
+Once a feeb is killed, in it's place in the maze there will appear
+a carcass. The feeb goes to the end of the killed feebs line. Whenever
+a carcass rots, the first feeb in line will reincarnate. So, dying
+is not so terrible.
+
+These are the parameters related to flames:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{{*}flame-energy{*}}}}] Amount of energy lost after
+throwing a flame.
+\item [{\textsf{\textbf{{*}fireball-guaranteed-lifetime{*}}}}] Number of
+turns that a fireball is guaranteed not to dissipate, unless it encounters
+a wall.
+\item [{\textsf{\textbf{{*}fireball-dissipation-probability{*}}}}] Probability
+of the flame to dissipate each turn after the apropriate time.
+\item [{\textsf{\textbf{{*}fireball-reflection-probability{*}}}}] Probability
+of the flame to reflect when encountering a wall.
+\item [{\textsf{\textbf{{*}flame-no-recovery-time{*}}}}] Number of turns
+that a feeb cannot fire.
+\item [{\textsf{\textbf{{*}flame-recovery-probability{*}}}}] Probability
+of the feeb to recover the hability to throw a flame, after the apropriate
+time.
+\end{lyxlist}
+
+\subsection{Eating food}
+
+There are two kinds of food, carcasses and mushrooms. Carcasses usually
+give less energy than mushrooms, and may rot, but, while it does not
+rot, a feeb can feed as long as it wishes. By eating food, the feeb
+will be able to recover energy, wich is important because, if a feeb
+stays with 0 or less units of energy, it starves.
+
+These are the quantities:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{{*}mushroom-energy{*}}}}] Amount of energy recovered
+when the feeb eats a mushroom.
+\item [{\textsf{\textbf{{*}carcass-energy{*}}}}] Amount of energy recovered
+each turn that the feeb eats a carcass.
+\item [{\textsf{\textbf{{*}carcass-guaranteed-lifetime{*}}}}] Number of
+turns that a carcass will surely stay there. After these turns, it
+can rot, depending on probabilities.
+\item [{\textsf{\textbf{{*}carcass-rot-probability{*}}}}] Probability of
+the carcass to rot, after the apropriate time.
+\item [{\textsf{\textbf{{*}maximum-energy{*}}}}] Maximum amount of energy
+that a feeb can have eating.
+\item [{\textsf{\textbf{{*}starting-energy{*}}}}] Amount of energy a feeb
+has when it reincarnates.
+\item [{\textsf{\textbf{{*}number-of-mushrooms{*}}}}] Quantity of mushrooms
+that exist in the maze.
+\end{lyxlist}
+
+\section{The Feeb}
+
+A feeb needs four things: a name, a brain, an initialize function
+(optional) and a set of graphics (optional).
+
+\begin{itemize}
+\item The name, a string.
+\item The brain is a function that decides what the feeb will do next, based
+on what it is seeing and feeling.
+\item The initializer is invoked when the game is about to start, so it
+can analyze the map, global parameters, and so on.
+\item The set of graphics is an image file (of format BMP, JPEG, PNG, and
+any others that supported by SDL\_image).
+\end{itemize}
+One can create a feeb calling \textsf{\textbf{(define-feeb~}}\textsf{name~brain~}\textsf{\textbf{:initializer}}\textsf{~prepare~}\textsf{\textbf{:graphics}}\textsf{~graphics}\textsf{\textbf{)}}.
+If name is already used, a warning will be signaled, and the old feeb
+will be substituted. Calling \textsf{\textbf{(list-of-feebs)}} will
+return the list of the feebs (names only) that will be defined when
+the game begins. \textsf{\textbf{(delete-feeb}}\textsf{~name}\textsf{\textbf{)}}
+will delete the feeb with this name from this list, and \textsf{\textbf{(delete-all-feebs)}}
+will clear it.
+
+
+\subsection{Possible decisions}
+
+After processing the information available, the brain will take a
+decision. If this decision is not one of the decisions listed down,
+a warning will be signaled, and the result will be like \textsf{\textbf{:wait}}.
+Then, if someone are testing a brain function, he or she will be able
+to know if something goes wrong.
+
+The possible values that the brain function can return are these:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{:move-forward}}}] Move one square forward, unless
+there is a wall in front of the feeb.
+\item [{\textsf{\textbf{:turn-left}}}] Turn 90 degrees to the left.
+\item [{\textsf{\textbf{:turn-right}}}] Turn 90 degrees to the right.
+\item [{\textsf{\textbf{:turn-around}}}] Turn 180 degrees.
+\item [{\textsf{\textbf{:flame}}}] Throw a flame. The flame will be created
+next turn in the front square of the feeb.
+\item [{\textsf{\textbf{:wait}}}] Do nothing in this turn.
+\item [{\textsf{\textbf{:peek-left}}}] Peek to the left around a corner.
+The creature does note actually move, but, in the next turn, the creature
+will have the same vision that it would have if he had moved one step
+foward and turned left. This is used so a feeb can analize a corridor
+before trespassing it.
+\item [{\textsf{\textbf{:peek-right}}}] Peek to the right around a corner,
+analogous of \textsf{\textbf{:peek-left}}.
+\item [{\textsf{\textbf{:eat-carcass}}}] Eat a carcass if there is any
+available in the feeb's square. The amount of \textsf{\textbf{{*}carcass-energy{*}}}
+is restored to the feeb's energy.
+\item [{\textsf{\textbf{:eat-mushroom}}}] Eat a mushroom if there is any
+available in the feeb's square. The amount of \textsf{\textbf{{*}mushroom-energy{*}}}
+is restored to the feeb's energy.
+\end{lyxlist}
+
+\subsection{Information available}
+
+The brain of a feeb mus take five arguments; I'll call them \textsf{\emph{status}},
+\textsf{\emph{proximity}}, \textsf{\emph{vision}}, \textsf{\emph{vision-left}}
+and \textsf{\emph{vision-right}}.
+
+
+\subsubsection{Status}
+
+Every time the brain is called, it receives some useful information
+through \textsf{\textbf{status}}.
+
+The structure \textsf{\textbf{status}} keeps information about the
+feeb itself. Also it has information of the previous movement of the
+feeb. To access them, one must call:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{(name}}\textsf{\emph{~status}}\textsf{\textbf{)}}}] \begin{flushleft}
+The
+name of the feeb.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(facing~}}\textsf{\emph{status}}\textsf{\textbf{)}}}] \begin{flushleft}
+Where
+the feeb is facing, one of the constants provided: \textsf{\textbf{north}},
+\textsf{\textbf{south}}, \textsf{\textbf{east}} or \textsf{\textbf{west}},
+wich are 0, 1, 2 and 3 respectivelly.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(x-position~}}\textsf{\emph{status}}\textsf{\textbf{)}}}] \begin{flushleft}
+The
+horizontal position of the feeb, increasing to east. If \textsf{\textbf{{*}sense-location{*}}}
+is nil, it returns nil instead.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(y-position~}}\textsf{\emph{status}}\textsf{\textbf{)}}}] \begin{flushleft}
+The
+vertical position of the feeb, increasing to north. If \textsf{\textbf{{*}sense-location{*}}}
+is nil, it returns nil instead.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(peeking~}}\textsf{\emph{status}}\textsf{\textbf{)}}}] \begin{flushleft}
+If
+it is \textsf{\textbf{:left}} or \textsf{\textbf{:right}}, it means
+that the current \textsf{\emph{vision}} provided is result of a previous
+\textsf{\textbf{:peek-left}} or \textsf{\textbf{:peek-right}} command
+of the same feeb. Otherwise, it is \textsf{\textbf{nil}}.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(line-of-sight~}}\textsf{\emph{status}}\textsf{\textbf{)}}}] \begin{flushleft}
+Indicates
+the amount of valid entries in \textsf{\emph{vision}}. It actually
+means that \textsf{\textbf{(aref~}}\textsf{\emph{vision~}}\textsf{\textbf{(line-of-sight~}}\textsf{\emph{status}}\textsf{\textbf{))}}
+will return \textsf{\textbf{:rock}}.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(ready-to-fire~}}\textsf{\emph{status}}\textsf{\textbf{)}}}] \begin{flushleft}
+\textsf{\textbf{T}}
+indicates that the feeb is ready to fire. \textsf{\textbf{Nil}} indicates
+it is not.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(aborted}}\textsf{\emph{~status}}\textsf{\textbf{)}}}] \begin{flushleft}
+Related
+with timing. Returns \textsf{\textbf{T}} if the last move of feeb
+was aborted because of speed.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(last-move~}}\textsf{\emph{status}}\textsf{\textbf{)}}}] \begin{flushleft}
+The
+feeb's previous move, or \textsf{\textbf{:dead}} if it has just reincarnated.
+\par\end{flushleft}
+\end{lyxlist}
+
+\subsubsection{Proximity and vision}
+
+The brain receives also information about what is near the feeb and
+what the feeb sees.
+
+The structure \textsf{\emph{proximity}} has the contents of the squares
+near the feeb, with these fields:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{(my-square~}}\textsf{\emph{proximity}}\textsf{\textbf{)}}}] \begin{flushleft}
+Contents
+of the feeb's current square.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(left-square~}}\textsf{\emph{proximity}}\textsf{\textbf{)}}}] \begin{flushleft}
+Contents
+of the right square of the feeb.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(right-square~}}\textsf{\emph{proximity}}\textsf{\textbf{)}}}] \begin{flushleft}
+Contents
+of the left square of the feeb.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(rear-square}}\textsf{\emph{~proximity}}\textsf{\textbf{)}}}] \begin{flushleft}
+Contents
+of the square behind the feeb.
+\par\end{flushleft}
+\item [{The}] vector \textsf{\emph{vision}} has the contents of the squares
+that are in front of the feeb. For example, \textsf{\textbf{(aref~}}\textsf{\emph{vision~}}\textsf{0}\textsf{\textbf{)}}
+will return the contents of the square in front of the feeb, \textsf{\textbf{(aref~}}\textsf{\emph{vision~}}\textsf{1}\textsf{\textbf{)}}
+will return the contents of the next square, and so on. As said before,
+\textsf{\textbf{(aref~}}\textsf{\emph{vision~}}\textsf{\textbf{(line-of-sight~}}\textsf{\emph{status}}\textsf{\textbf{))}}
+will be the first :rock encountered. All subsequents square, like
+\textsf{\textbf{(aref~}}\textsf{\emph{vision~}}\textsf{\textbf{(+~}}\textsf{1~}\textsf{\textbf{(line-of-sight~}}\textsf{\emph{status}}\textsf{\textbf{)))}},
+will be garbage and should not be used.
+\end{lyxlist}
+The contents of one square returned by any of these calls is either
+:rock or a list of elements, or maybe \textsf{\textbf{nil}} if the
+square is empty. Each element of the square is one of these:
+
+\begin{itemize}
+\item \textbf{Feeb image.} One can call \textsf{\textbf{(feeb-image-p~}}\textsf{element}\textsf{\textbf{)}}
+to see if element is a feeb image.
+\item \textbf{Fireball image.} One can call \textsf{\textbf{(fireball-image-p~}}\textsf{element}\textsf{\textbf{)}}
+to check if element is a fireball image.
+\item \textsf{\textbf{:carcass}}. If there is a \textsf{\textbf{:carcass}}
+in the square of the feeb (i.e. in \textsf{\textbf{(my-square~}}\textsf{\emph{proximity}}\textsf{\textbf{)}}),
+the call \textsf{\textbf{:eat-carcass}} will make the feeb eat it.
+\item \textsf{\textbf{:mushroom}}. Analogous to \textsf{\textbf{:carcass}}.
+A mushroom appears randomly in places (mushroom patchs) previouly
+marked in the map.
+\end{itemize}
+
+\subsubsection{Feebs and fireballs images}
+
+Both fireballs and feebs that are given to the brain function are
+not the real ones, but just images with contents that the brain function
+can access.
+
+These are the fields available:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{(feeb-image-name}}\textsf{~feeb-image}\textsf{\textbf{)}}}] \begin{flushleft}
+The
+name of the feeb. Maybe you can know it's weakpoints.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(feeb-image-facing~}}\textsf{feeb-image}\textsf{\textbf{)}}}] \begin{flushleft}
+The
+facing of the feeb. This way the brain function can see if the feeb-image
+either sees it or not.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(feeb-image-peeking~}}\textsf{feeb-image}\textsf{\textbf{)}}}] \begin{flushleft}
+Returns
+\textsf{\textbf{:peek-left}} or \textsf{\textbf{:peek-right}} if the
+feeb is peeking to (its) left or right, or \textsf{\textbf{nil}} if
+not.
+\par\end{flushleft}
+\item [{\textsf{\textbf{(fireball-image-direction~}}\textsf{fireball-image}\textsf{\textbf{)}}}] \begin{flushleft}
+The
+direction that the fireball image is going to.
+\par\end{flushleft}
+\end{lyxlist}
+
+\subsubsection{Vision-left and vision-right}
+
+\textsf{\emph{vision-left}} and \textsf{\emph{vision-right}} are vectors
+similar to vision, but they are less precise in the contents. Also
+their valid contents are limited by \textsf{\textbf{(line-of-sight~}}\textsf{\emph{status}}\textsf{\textbf{)}},
+so \textsf{\textbf{(aref~}}\textsf{\emph{vision-left~}}\textsf{\textbf{(line-of-sight~}}\textsf{\emph{status}}\textsf{\textbf{))}},
+for example, will return \textsf{\textbf{:unknown}}.
+
+Note that feebs that are not peeking, mushrooms and carcasses are
+\emph{not} be detected by these vectors. Also, if there is a feeb
+peeking to the opposite side, it won't be detected either. These are
+the possible returns of the elements in \textsf{\textbf{vision-left}}
+and \textsf{\textbf{vision-right}}:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{:peek-letf}}}] This means that in that square there
+is a feeb peeking to (its) left.
+\item [{\textsf{\textbf{:peek-right}}}] This means that in that square
+there is a feeb peeking to (its) right.
+\item [{\textsf{\textbf{nil}}}] This square is empty.
+\item [{\textsf{\textbf{:rock}}}] This square is just a wall.
+\end{lyxlist}
+
+\subsection{Extra functions provided}
+
+Before making the brain of your feeb, you might want to take a look
+at the Extra functions that are available at the end of the feebs.lisp
+file. The only thing you need so you can use them is to see their
+code and know what they do.
+
+
+\subsection{Graphics}
+
+With this version of the game, it's possible to choose the graphics
+of a feeb when creating it, so your feeb will be more personalized.
+
+The graphic of a feeb is defined by an image file, which should have
+three colunms by eight lines of pictures of the same size. The four
+first lines must be the animations of the feeb walking up, left, down
+and right, respectively. The next four lines must be the pictures
+of the feeb flaming up, left, down and right, respectively. To see
+an example, see {}``default-feeb.png''.
+
+After creating the image file, you must call \textsf{\textbf{(create-graphics}}\textsf{~path-to-image-file}\textsf{\textbf{)}}.
+If you now how to work with sdl surfaces in lispbuilder, you may use
+the function with a surface instead of a image file; or you can call
+\textsf{\textbf{(create-graphics~}}\textsf{path-to-image-file~nil}\textsf{\textbf{)}}
+if the surface should not be freed after the call. The result must
+be the third argument given to define-feeb.
+
+
+\subsection{Starting the game}
+
+The game loop is started by calling (feebs).
+
+
+\section{Contests}
+
+I sugest that you see this chapter only after you have created at
+least a basic brain feeb, wich is better than the (simple) provided
+brain, and when you want to participate of a contest or a game with
+your friends.
+
+
+\subsection{\label{sub:Map}Map}
+
+It is possible to get the maze map during the game, but with only
+the corridors. Note that the function that gets the map is purposely
+a little slow, so, invoking it too many times in a contest that uses
+timing atributes is not a good idea; anyway, it is possible to invoke
+this function before defining the feeb, and store its value somewhere.
+Also note that the map returned does not have any information about
+what is really in the maze, but only the possible ways.
+
+To get the map, one can call \textsf{\textbf{(get-maze-map)}}. This
+function will return \textsf{\textbf{nil}} if \textsf{\textbf{{*}may-get-maze-p{*}}}
+is also \textsf{\textbf{nil}}. Otherwise, the map returned is an array,
+so that calling \textsf{\textbf{(aref}}\textsf{~map~x~y}\textsf{\textbf{)}}
+will get the contents in the euclidean position (x,y) . The contents
+of a cell could be one of these:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{:mushroom-place}}}] A mushroom patch, i.e. when
+a mushroom is eaten it can come out here.
+\item [{\textsf{\textbf{:feeb-entry-place}}}] A feeb entry, i.e. if a carcass
+rots a feeb can appear here.
+\item [{\textsf{\textbf{:rock}}}] A wall. Feebs cannot come in this place.
+\item [{\textsf{\textbf{nil}}}] An {}``empty'' place, i.e. neither of
+the previous.
+\end{lyxlist}
+
+\subsection{Timing}
+
+There are also some timing atributes that can be given to the game.
+If the feeb takes too long to make a decision, there is more probability
+of its command to be aborted.
+
+To make this available, someone must set these:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{{*}slow-feeb-noop-switch{*}}}}] If is non-nil,
+there is a possibility that the move of a feeb is aborted according
+to its function time. Not applied to the human controlled feeb.
+\item [{\textsf{\textbf{{*}slow-feeb-noop-factor{*}}}}] The probability
+of the feeb to abort will be this factor times the amount of time
+the feeb takes to have a decision, divided for the total time taken
+by all the feebs in the current turn.
+\end{lyxlist}
+
+\subsection{Sense of location}
+
+Some accessors related to position and orientation of the feeb can
+be turned off.
+
+These are the parameters:
+
+\begin{lyxlist}{00.00.0000}
+\item [{\textsf{\textbf{{*}sense-location-p{*}}}}] Tells if the actual
+position of the feeb can be determinated accessing \textsf{\textbf{x-position}}
+and \textsf{\textbf{y-position}}.
+\end{lyxlist}
+
+\subsection{Changing the rules}
+
+To change the rules of the contest, they must be changed before the
+feebs are defined, because in a feeb definition it could use the values
+of the variables to make a global strategy, and change the strategies
+after this could not be fair.
+
+All the parameters that can be listed using \textsf{\textbf{(list-parameter-settings)}}
+can be changed using setf. Also, they all have documentation about
+themselves, so feel free to use \textsf{\textbf{(documentation~}}\textsf{parameter~'variable}\textsf{\textbf{)}}
+and see what each parameter does. Documentation is available to external
+functions too.
+
+It is possible to change the layout of the map by calling \textsf{\textbf{(change-layout}}\textsf{~new-layout}\textsf{\textbf{)}}.
+There are a few predefined mazes that are \textsf{\textbf{{*}maze-0{*}}}
+throw \textsf{\textbf{{*}maze-5{*}}}. If you want to create a new
+map, take the template (commented) inside the same file, or create
+maybe a bigger template (of any size, because the values of \textsf{\textbf{{*}maze-x-size{*}}}
+and \textsf{\textbf{{*}maze-y-size{*}}} will be changed accordingly).
+
+
+\section{Reference}
+
+\begin{quote}
+Fahlman, S. E. \textbf{\emph{Planet of the Feebs -}} \emph{A Somewhat
+Educational Game.} \url{ftp://ftp.csl.sri.com/pub/users/gilham/feebs/feebs.tex}.
+\end{quote}
+
+\end{document}
Added: feebs/WARNINGS
==============================================================================
--- (empty file)
+++ feebs/WARNINGS Wed Dec 19 15:36:51 2007
@@ -0,0 +1,9 @@
+No implementation found for style `fontenc'
+No implementation found for style `url'
+
+redefining command \url
+
+previous meaning of \url will be lost
+
+The feebs.aux file was not found, so sections will not be numbered
+and cross-references will be shown as icons.
Added: feebs/feebs.css
==============================================================================
--- (empty file)
+++ feebs/feebs.css Wed Dec 19 15:36:51 2007
@@ -0,0 +1,30 @@
+/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */
+.MATH { font-family: "Century Schoolbook", serif; }
+.MATH I { font-family: "Century Schoolbook", serif; font-style: italic }
+.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold }
+
+/* implement both fixed-size and relative sizes */
+SMALL.XTINY { font-size : xx-small }
+SMALL.TINY { font-size : x-small }
+SMALL.SCRIPTSIZE { font-size : smaller }
+SMALL.FOOTNOTESIZE { font-size : small }
+SMALL.SMALL { }
+BIG.LARGE { }
+BIG.XLARGE { font-size : large }
+BIG.XXLARGE { font-size : x-large }
+BIG.HUGE { font-size : larger }
+BIG.XHUGE { font-size : xx-large }
+
+/* heading styles */
+H1 { }
+H2 { }
+H3 { }
+H4 { }
+H5 { }
+
+/* mathematics styles */
+DIV.displaymath { } /* math displays */
+TD.eqno { } /* equation-number cells */
+
+
+/* document-specific styles come next */
Added: feebs/feebs.html
==============================================================================
--- (empty file)
+++ feebs/feebs.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The Feebs War</TITLE>
+<META NAME="description" CONTENT="The Feebs War">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html4"
+ HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up_g.png">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev_g.png">
+<A NAME="tex2html2"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html5"
+ HREF="node1.html">Contents</A>
+ <B> <A NAME="tex2html3"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+
+<P>
+<H1 ALIGN="CENTER"><B><FONT SIZE="+3">The Feebs War</FONT></B></H1>
+<DIV>
+
+<P ALIGN="CENTER"><STRONG>Gustavo Henrique Milaré</STRONG></P>
+</DIV>
+
+<H3>Abstract:</H3>
+<DIV>
+<I>The Feebs War</I> is a modified version of Planet of the Feebs
+http://www.cliki.net/, a game made for people learn and improve
+their lisp and code manipulation tecniques. The graphics are now displayed
+using PAL http://common-lisp.net/project/pal/'s libraries,
+so the problems with portability from CMUCL and X Window Sistem do
+not exist anymore. Also the code is cleaner and simpler both to make
+a feeb and to read the code.
+</DIV>
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL>
+<LI><A NAME="tex2html6"
+ HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html7"
+ HREF="node2.html">Introduction</A>
+<UL>
+<LI><A NAME="tex2html8"
+ HREF="node3.html">Changes from <I>Planet of the Feebs</I></A>
+</UL>
+<BR>
+<LI><A NAME="tex2html9"
+ HREF="node4.html">The Game</A>
+<UL>
+<LI><A NAME="tex2html10"
+ HREF="node5.html">Overview</A>
+<LI><A NAME="tex2html11"
+ HREF="node6.html">Throwing flame</A>
+<LI><A NAME="tex2html12"
+ HREF="node7.html">Eating food</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html13"
+ HREF="node8.html">The Feeb</A>
+<UL>
+<LI><A NAME="tex2html14"
+ HREF="node9.html">Possible decisions</A>
+<LI><A NAME="tex2html15"
+ HREF="node10.html">Information available</A>
+<UL>
+<LI><A NAME="tex2html16"
+ HREF="node11.html">Status</A>
+<LI><A NAME="tex2html17"
+ HREF="node12.html">Proximity and vision</A>
+<LI><A NAME="tex2html18"
+ HREF="node13.html">Feebs and fireballs images</A>
+<LI><A NAME="tex2html19"
+ HREF="node14.html">Vision-left and vision-right</A>
+</UL>
+<LI><A NAME="tex2html20"
+ HREF="node15.html">Extra functions provided</A>
+<LI><A NAME="tex2html21"
+ HREF="node16.html">Graphics</A>
+<LI><A NAME="tex2html22"
+ HREF="node17.html">Starting the game</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html23"
+ HREF="node18.html">Contests</A>
+<UL>
+<LI><A NAME="tex2html24"
+ HREF="node19.html">Map</A>
+<LI><A NAME="tex2html25"
+ HREF="node20.html">Timing</A>
+<LI><A NAME="tex2html26"
+ HREF="node21.html">Sense of location</A>
+<LI><A NAME="tex2html27"
+ HREF="node22.html">Changing the rules</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html28"
+ HREF="node23.html">Reference</A>
+<LI><A NAME="tex2html29"
+ HREF="node24.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/index.html
==============================================================================
--- (empty file)
+++ feebs/index.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,145 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The Feebs War</TITLE>
+<META NAME="description" CONTENT="The Feebs War">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node1.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html4"
+ HREF="node1.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up_g.png">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev_g.png">
+<A NAME="tex2html2"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html5"
+ HREF="node1.html">Contents</A>
+ <B> <A NAME="tex2html3"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<P>
+
+<P>
+
+<P>
+<H1 ALIGN="CENTER"><B><FONT SIZE="+3">The Feebs War</FONT></B></H1>
+<DIV>
+
+<P ALIGN="CENTER"><STRONG>Gustavo Henrique Milaré</STRONG></P>
+</DIV>
+
+<H3>Abstract:</H3>
+<DIV>
+<I>The Feebs War</I> is a modified version of Planet of the Feebs
+http://www.cliki.net/, a game made for people learn and improve
+their lisp and code manipulation tecniques. The graphics are now displayed
+using PAL http://common-lisp.net/project/pal/'s libraries,
+so the problems with portability from CMUCL and X Window Sistem do
+not exist anymore. Also the code is cleaner and simpler both to make
+a feeb and to read the code.
+</DIV>
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"></A>
+
+<UL>
+<LI><A NAME="tex2html6"
+ HREF="node1.html">Contents</A>
+<LI><A NAME="tex2html7"
+ HREF="node2.html">Introduction</A>
+<UL>
+<LI><A NAME="tex2html8"
+ HREF="node3.html">Changes from <I>Planet of the Feebs</I></A>
+</UL>
+<BR>
+<LI><A NAME="tex2html9"
+ HREF="node4.html">The Game</A>
+<UL>
+<LI><A NAME="tex2html10"
+ HREF="node5.html">Overview</A>
+<LI><A NAME="tex2html11"
+ HREF="node6.html">Throwing flame</A>
+<LI><A NAME="tex2html12"
+ HREF="node7.html">Eating food</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html13"
+ HREF="node8.html">The Feeb</A>
+<UL>
+<LI><A NAME="tex2html14"
+ HREF="node9.html">Possible decisions</A>
+<LI><A NAME="tex2html15"
+ HREF="node10.html">Information available</A>
+<UL>
+<LI><A NAME="tex2html16"
+ HREF="node11.html">Status</A>
+<LI><A NAME="tex2html17"
+ HREF="node12.html">Proximity and vision</A>
+<LI><A NAME="tex2html18"
+ HREF="node13.html">Feebs and fireballs images</A>
+<LI><A NAME="tex2html19"
+ HREF="node14.html">Vision-left and vision-right</A>
+</UL>
+<LI><A NAME="tex2html20"
+ HREF="node15.html">Extra functions provided</A>
+<LI><A NAME="tex2html21"
+ HREF="node16.html">Graphics</A>
+<LI><A NAME="tex2html22"
+ HREF="node17.html">Starting the game</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html23"
+ HREF="node18.html">Contests</A>
+<UL>
+<LI><A NAME="tex2html24"
+ HREF="node19.html">Map</A>
+<LI><A NAME="tex2html25"
+ HREF="node20.html">Timing</A>
+<LI><A NAME="tex2html26"
+ HREF="node21.html">Sense of location</A>
+<LI><A NAME="tex2html27"
+ HREF="node22.html">Changing the rules</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html28"
+ HREF="node23.html">Reference</A>
+<LI><A NAME="tex2html29"
+ HREF="node24.html">About this document ...</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/internals.pl
==============================================================================
--- (empty file)
+++ feebs/internals.pl Wed Dec 19 15:36:51 2007
@@ -0,0 +1,10 @@
+# LaTeX2HTML 2002-2-1 (1.71)
+# Associate internals original text with physical files.
+
+
+$key = q/sub:Map/;
+$ref_files{$key} = "$dir".q|node19.html|;
+$noresave{$key} = "$nosave";
+
+1;
+
Added: feebs/labels.pl
==============================================================================
--- (empty file)
+++ feebs/labels.pl Wed Dec 19 15:36:51 2007
@@ -0,0 +1,17 @@
+# LaTeX2HTML 2002-2-1 (1.71)
+# Associate labels original text with physical files.
+
+
+$key = q/sub:Map/;
+$external_labels{$key} = "$URL/" . q|node19.html|;
+$noresave{$key} = "$nosave";
+
+1;
+
+
+# LaTeX2HTML 2002-2-1 (1.71)
+# labels from external_latex_labels array.
+
+
+1;
+
Added: feebs/node1.html
==============================================================================
--- (empty file)
+++ feebs/node1.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Contents</TITLE>
+<META NAME="description" CONTENT="Contents">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node2.html">
+<LINK REL="previous" HREF="feebs.html">
+<LINK REL="up" HREF="feebs.html">
+<LINK REL="next" HREF="node2.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html38"
+ HREF="node2.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html36"
+ HREF="feebs.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html30"
+ HREF="feebs.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html39"
+ HREF="node2.html">Introduction</A>
+<B> Up:</B> <A NAME="tex2html37"
+ HREF="feebs.html">The Feebs War</A>
+<B> Previous:</B> <A NAME="tex2html31"
+ HREF="feebs.html">The Feebs War</A>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+<BR>
+
+<H2><A NAME="SECTION00010000000000000000">
+Contents</A>
+</H2>
+<!--Table of Contents-->
+
+<UL>
+<LI><A NAME="tex2html40"
+ HREF="node2.html">Introduction</A>
+<UL>
+<LI><A NAME="tex2html41"
+ HREF="node3.html">Changes from Planet of the Feebs</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html42"
+ HREF="node4.html">The Game</A>
+<UL>
+<LI><A NAME="tex2html43"
+ HREF="node5.html">Overview</A>
+<LI><A NAME="tex2html44"
+ HREF="node6.html">Throwing flame</A>
+<LI><A NAME="tex2html45"
+ HREF="node7.html">Eating food</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html46"
+ HREF="node8.html">The Feeb</A>
+<UL>
+<LI><A NAME="tex2html47"
+ HREF="node9.html">Possible decisions</A>
+<LI><A NAME="tex2html48"
+ HREF="node10.html">Information available</A>
+<LI><A NAME="tex2html49"
+ HREF="node15.html">Extra functions provided</A>
+<LI><A NAME="tex2html50"
+ HREF="node16.html">Graphics</A>
+<LI><A NAME="tex2html51"
+ HREF="node17.html">Starting the game</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html52"
+ HREF="node18.html">Contests</A>
+<UL>
+<LI><A NAME="tex2html53"
+ HREF="node19.html">Map</A>
+<LI><A NAME="tex2html54"
+ HREF="node20.html">Timing</A>
+<LI><A NAME="tex2html55"
+ HREF="node21.html">Sense of location</A>
+<LI><A NAME="tex2html56"
+ HREF="node22.html">Changing the rules</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html57"
+ HREF="node23.html">Reference</A>
+</UL>
+<!--End of Table of Contents-->
+
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node10.html
==============================================================================
--- (empty file)
+++ feebs/node10.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Information available</TITLE>
+<META NAME="description" CONTENT="Information available">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node15.html">
+<LINK REL="previous" HREF="node9.html">
+<LINK REL="up" HREF="node8.html">
+<LINK REL="next" HREF="node11.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html173"
+ HREF="node11.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html169"
+ HREF="node8.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html163"
+ HREF="node9.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html171"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html174"
+ HREF="node11.html">Status</A>
+<B> Up:</B> <A NAME="tex2html170"
+ HREF="node8.html">The Feeb</A>
+<B> Previous:</B> <A NAME="tex2html164"
+ HREF="node9.html">Possible decisions</A>
+ <B> <A NAME="tex2html172"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00042000000000000000">
+Information available</A>
+</H2>
+
+<P>
+The brain of a feeb mus take five arguments; I'll call them <I><I>status</I></I>,
+<I><I>proximity</I></I>, <I><I>vision</I></I>, <I><I>vision-left</I></I>
+and <I><I>vision-right</I></I>.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html175"
+ HREF="node11.html">Status</A>
+<LI><A NAME="tex2html176"
+ HREF="node12.html">Proximity and vision</A>
+<LI><A NAME="tex2html177"
+ HREF="node13.html">Feebs and fireballs images</A>
+<LI><A NAME="tex2html178"
+ HREF="node14.html">Vision-left and vision-right</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node11.html
==============================================================================
--- (empty file)
+++ feebs/node11.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Status</TITLE>
+<META NAME="description" CONTENT="Status">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node12.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node12.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html189"
+ HREF="node12.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html185"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html179"
+ HREF="node10.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html187"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html190"
+ HREF="node12.html">Proximity and vision</A>
+<B> Up:</B> <A NAME="tex2html186"
+ HREF="node10.html">Information available</A>
+<B> Previous:</B> <A NAME="tex2html180"
+ HREF="node10.html">Information available</A>
+ <B> <A NAME="tex2html188"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H3><A NAME="SECTION00042100000000000000">
+Status</A>
+</H3>
+
+<P>
+Every time the brain is called, it receives some useful information
+through <I><B>status</B></I>.
+
+<P>
+The structure <I><B>status</B></I> keeps information about the
+feeb itself. Also it has information of the previous movement of the
+feeb. To access them, one must call:
+
+<P>
+
+<UL>
+<LI>[<I><B>(name</B></I><I><I> status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+The
+name of the feeb.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(facing </B></I><I><I>status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Where
+the feeb is facing, one of the constants provided: <I><B>north</B></I>,
+<I><B>south</B></I>, <I><B>east</B></I> or <I><B>west</B></I>,
+wich are 0, 1, 2 and 3 respectivelly.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(x-position </B></I><I><I>status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+The
+horizontal position of the feeb, increasing to east. If <I><B>*sense-location*</B></I>
+is nil, it returns nil instead.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(y-position </B></I><I><I>status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+The
+vertical position of the feeb, increasing to north. If <I><B>*sense-location*</B></I>
+is nil, it returns nil instead.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(peeking </B></I><I><I>status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+If
+it is <I><B>:left</B></I> or <I><B>:right</B></I>, it means
+that the current <I><I>vision</I></I> provided is result of a previous
+<I><B>:peek-left</B></I> or <I><B>:peek-right</B></I> command
+of the same feeb. Otherwise, it is <I><B>nil</B></I>.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(line-of-sight </B></I><I><I>status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Indicates
+the amount of valid entries in <I><I>vision</I></I>. It actually
+means that <I><B>(aref </B></I><I><I>vision </I></I><I><B>(line-of-sight </B></I><I><I>status</I></I><I><B>))</B></I>
+will return <I><B>:rock</B></I>.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(ready-to-fire </B></I><I><I>status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+<I><B>T</B></I>
+indicates that the feeb is ready to fire. <I><B>Nil</B></I> indicates
+it is not.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(aborted</B></I><I><I> status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Related
+with timing. Returns <I><B>T</B></I> if the last move of feeb
+was aborted because of speed.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(last-move </B></I><I><I>status</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+The
+feeb's previous move, or <I><B>:dead</B></I> if it has just reincarnated.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+</UL>
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html189"
+ HREF="node12.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html185"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html179"
+ HREF="node10.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html187"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html190"
+ HREF="node12.html">Proximity and vision</A>
+<B> Up:</B> <A NAME="tex2html186"
+ HREF="node10.html">Information available</A>
+<B> Previous:</B> <A NAME="tex2html180"
+ HREF="node10.html">Information available</A>
+ <B> <A NAME="tex2html188"
+ HREF="node1.html">Contents</A></B>
+<!--End of Navigation Panel-->
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node12.html
==============================================================================
--- (empty file)
+++ feebs/node12.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Proximity and vision</TITLE>
+<META NAME="description" CONTENT="Proximity and vision">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node13.html">
+<LINK REL="previous" HREF="node11.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node13.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html201"
+ HREF="node13.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html197"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html191"
+ HREF="node11.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html199"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html202"
+ HREF="node13.html">Feebs and fireballs images</A>
+<B> Up:</B> <A NAME="tex2html198"
+ HREF="node10.html">Information available</A>
+<B> Previous:</B> <A NAME="tex2html192"
+ HREF="node11.html">Status</A>
+ <B> <A NAME="tex2html200"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H3><A NAME="SECTION00042200000000000000">
+Proximity and vision</A>
+</H3>
+
+<P>
+The brain receives also information about what is near the feeb and
+what the feeb sees.
+
+<P>
+The structure <I><I>proximity</I></I> has the contents of the squares
+near the feeb, with these fields:
+
+<P>
+
+<UL>
+<LI>[<I><B>(my-square </B></I><I><I>proximity</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Contents
+of the feeb's current square.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(left-square </B></I><I><I>proximity</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Contents
+of the right square of the feeb.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(right-square </B></I><I><I>proximity</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Contents
+of the left square of the feeb.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(rear-square</B></I><I><I> proximity</I></I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Contents
+of the square behind the feeb.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[The] vector <I><I>vision</I></I> has the contents of the squares
+that are in front of the feeb. For example, <I><B>(aref </B></I><I><I>vision </I></I><I>0</I><I><B>)</B></I>
+will return the contents of the square in front of the feeb, <I><B>(aref </B></I><I><I>vision </I></I><I>1</I><I><B>)</B></I>
+will return the contents of the next square, and so on. As said before,
+<I><B>(aref </B></I><I><I>vision </I></I><I><B>(line-of-sight </B></I><I><I>status</I></I><I><B>))</B></I>
+will be the first :rock encountered. All subsequents square, like
+<I><B>(aref </B></I><I><I>vision </I></I><I><B>(+ </B></I><I>1 </I><I><B>(line-of-sight </B></I><I><I>status</I></I><I><B>)))</B></I>,
+will be garbage and should not be used.
+</LI>
+</UL>The contents of one square returned by any of these calls is either
+:rock or a list of elements, or maybe <I><B>nil</B></I> if the
+square is empty. Each element of the square is one of these:
+
+<P>
+
+<UL>
+<LI><B>Feeb image.</B> One can call <I><B>(feeb-image-p </B></I><I>element</I><I><B>)</B></I>
+to see if element is a feeb image.
+</LI>
+<LI><B>Fireball image.</B> One can call <I><B>(fireball-image-p </B></I><I>element</I><I><B>)</B></I>
+to check if element is a fireball image.
+</LI>
+<LI><I><B>:carcass</B></I>. If there is a <I><B>:carcass</B></I>
+in the square of the feeb (i.e. in <I><B>(my-square </B></I><I><I>proximity</I></I><I><B>)</B></I>),
+the call <I><B>:eat-carcass</B></I> will make the feeb eat it.
+</LI>
+<LI><I><B>:mushroom</B></I>. Analogous to <I><B>:carcass</B></I>.
+A mushroom appears randomly in places (mushroom patchs) previouly
+marked in the map.
+</LI>
+</UL>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html201"
+ HREF="node13.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html197"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html191"
+ HREF="node11.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html199"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html202"
+ HREF="node13.html">Feebs and fireballs images</A>
+<B> Up:</B> <A NAME="tex2html198"
+ HREF="node10.html">Information available</A>
+<B> Previous:</B> <A NAME="tex2html192"
+ HREF="node11.html">Status</A>
+ <B> <A NAME="tex2html200"
+ HREF="node1.html">Contents</A></B>
+<!--End of Navigation Panel-->
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node13.html
==============================================================================
--- (empty file)
+++ feebs/node13.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Feebs and fireballs images</TITLE>
+<META NAME="description" CONTENT="Feebs and fireballs images">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node14.html">
+<LINK REL="previous" HREF="node12.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node14.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html213"
+ HREF="node14.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html209"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html203"
+ HREF="node12.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html211"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html214"
+ HREF="node14.html">Vision-left and vision-right</A>
+<B> Up:</B> <A NAME="tex2html210"
+ HREF="node10.html">Information available</A>
+<B> Previous:</B> <A NAME="tex2html204"
+ HREF="node12.html">Proximity and vision</A>
+ <B> <A NAME="tex2html212"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H3><A NAME="SECTION00042300000000000000">
+Feebs and fireballs images</A>
+</H3>
+
+<P>
+Both fireballs and feebs that are given to the brain function are
+not the real ones, but just images with contents that the brain function
+can access.
+
+<P>
+These are the fields available:
+
+<P>
+
+<UL>
+<LI>[<I><B>(feeb-image-name</B></I><I> feeb-image</I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+The
+name of the feeb. Maybe you can know it's weakpoints.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(feeb-image-facing </B></I><I>feeb-image</I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+The
+facing of the feeb. This way the brain function can see if the feeb-image
+either sees it or not.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(feeb-image-peeking </B></I><I>feeb-image</I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+Returns
+<I><B>:peek-left</B></I> or <I><B>:peek-right</B></I> if the
+feeb is peeking to (its) left or right, or <I><B>nil</B></I> if
+not.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+<LI>[<I><B>(fireball-image-direction </B></I><I>fireball-image</I><I><B>)</B></I>] <DIV ALIGN="LEFT">
+The
+direction that the fireball image is going to.
+</DIV>
+<P>
+<DIV ALIGN="LEFT">
+</DIV>
+</LI>
+</UL>
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node14.html
==============================================================================
--- (empty file)
+++ feebs/node14.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Vision-left and vision-right</TITLE>
+<META NAME="description" CONTENT="Vision-left and vision-right">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="previous" HREF="node13.html">
+<LINK REL="up" HREF="node10.html">
+<LINK REL="next" HREF="node15.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html223"
+ HREF="node15.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html219"
+ HREF="node10.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html215"
+ HREF="node13.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html221"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html224"
+ HREF="node15.html">Extra functions provided</A>
+<B> Up:</B> <A NAME="tex2html220"
+ HREF="node10.html">Information available</A>
+<B> Previous:</B> <A NAME="tex2html216"
+ HREF="node13.html">Feebs and fireballs images</A>
+ <B> <A NAME="tex2html222"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H3><A NAME="SECTION00042400000000000000">
+Vision-left and vision-right</A>
+</H3>
+
+<P>
+<I><I>vision-left</I></I> and <I><I>vision-right</I></I> are vectors
+similar to vision, but they are less precise in the contents. Also
+their valid contents are limited by <I><B>(line-of-sight </B></I><I><I>status</I></I><I><B>)</B></I>,
+so <I><B>(aref </B></I><I><I>vision-left </I></I><I><B>(line-of-sight </B></I><I><I>status</I></I><I><B>))</B></I>,
+for example, will return <I><B>:unknown</B></I>.
+
+<P>
+Note that feebs that are not peeking, mushrooms and carcasses are
+<I>not</I> be detected by these vectors. Also, if there is a feeb
+peeking to the opposite side, it won't be detected either. These are
+the possible returns of the elements in <I><B>vision-left</B></I>
+and <I><B>vision-right</B></I>:
+
+<P>
+
+<UL>
+<LI>[<I><B>:peek-letf</B></I>] This means that in that square there
+is a feeb peeking to (its) left.
+</LI>
+<LI>[<I><B>:peek-right</B></I>] This means that in that square
+there is a feeb peeking to (its) right.
+</LI>
+<LI>[<I><B>nil</B></I>] This square is empty.
+</LI>
+<LI>[<I><B>:rock</B></I>] This square is just a wall.
+</LI>
+</UL>
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node15.html
==============================================================================
--- (empty file)
+++ feebs/node15.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Extra functions provided</TITLE>
+<META NAME="description" CONTENT="Extra functions provided">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node16.html">
+<LINK REL="previous" HREF="node10.html">
+<LINK REL="up" HREF="node8.html">
+<LINK REL="next" HREF="node16.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html235"
+ HREF="node16.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html231"
+ HREF="node8.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html225"
+ HREF="node14.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html233"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html236"
+ HREF="node16.html">Graphics</A>
+<B> Up:</B> <A NAME="tex2html232"
+ HREF="node8.html">The Feeb</A>
+<B> Previous:</B> <A NAME="tex2html226"
+ HREF="node14.html">Vision-left and vision-right</A>
+ <B> <A NAME="tex2html234"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00043000000000000000">
+Extra functions provided</A>
+</H2>
+
+<P>
+Before making the brain of your feeb, you might want to take a look
+at the Extra functions that are available at the end of the feebs.lisp
+file. The only thing you need so you can use them is to see their
+code and know what they do.
+
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node16.html
==============================================================================
--- (empty file)
+++ feebs/node16.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Graphics</TITLE>
+<META NAME="description" CONTENT="Graphics">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node17.html">
+<LINK REL="previous" HREF="node15.html">
+<LINK REL="up" HREF="node8.html">
+<LINK REL="next" HREF="node17.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html247"
+ HREF="node17.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html243"
+ HREF="node8.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html237"
+ HREF="node15.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html245"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html248"
+ HREF="node17.html">Starting the game</A>
+<B> Up:</B> <A NAME="tex2html244"
+ HREF="node8.html">The Feeb</A>
+<B> Previous:</B> <A NAME="tex2html238"
+ HREF="node15.html">Extra functions provided</A>
+ <B> <A NAME="tex2html246"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00044000000000000000">
+Graphics</A>
+</H2>
+
+<P>
+With this version of the game, it's possible to choose the graphics
+of a feeb when creating it, so your feeb will be more personalized.
+
+<P>
+The graphic of a feeb is defined by an image file, which should have
+three colunms by eight lines of pictures of the same size. The four
+first lines must be the animations of the feeb walking up, left, down
+and right, respectively. The next four lines must be the pictures
+of the feeb flaming up, left, down and right, respectively. To see
+an example, see ``default-feeb.png''.
+
+<P>
+After creating the image file, you must call <I><B>(create-graphics</B></I><I> path-to-image-file</I><I><B>)</B></I>.
+If you now how to work with sdl surfaces in lispbuilder, you may use
+the function with a surface instead of a image file; or you can call
+<I><B>(create-graphics </B></I><I>path-to-image-file nil</I><I><B>)</B></I>
+if the surface should not be freed after the call. The result must
+be the third argument given to define-feeb.
+
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node17.html
==============================================================================
--- (empty file)
+++ feebs/node17.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Starting the game</TITLE>
+<META NAME="description" CONTENT="Starting the game">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="previous" HREF="node16.html">
+<LINK REL="up" HREF="node8.html">
+<LINK REL="next" HREF="node18.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html257"
+ HREF="node18.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html253"
+ HREF="node8.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html249"
+ HREF="node16.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html255"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html258"
+ HREF="node18.html">Contests</A>
+<B> Up:</B> <A NAME="tex2html254"
+ HREF="node8.html">The Feeb</A>
+<B> Previous:</B> <A NAME="tex2html250"
+ HREF="node16.html">Graphics</A>
+ <B> <A NAME="tex2html256"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00045000000000000000">
+Starting the game</A>
+</H2>
+
+<P>
+The game loop is started by calling (feebs).
+
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node18.html
==============================================================================
--- (empty file)
+++ feebs/node18.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Contests</TITLE>
+<META NAME="description" CONTENT="Contests">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node23.html">
+<LINK REL="previous" HREF="node8.html">
+<LINK REL="up" HREF="feebs.html">
+<LINK REL="next" HREF="node19.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html269"
+ HREF="node19.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html265"
+ HREF="feebs.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html259"
+ HREF="node17.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html267"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html270"
+ HREF="node19.html">Map</A>
+<B> Up:</B> <A NAME="tex2html266"
+ HREF="feebs.html">The Feebs War</A>
+<B> Previous:</B> <A NAME="tex2html260"
+ HREF="node17.html">Starting the game</A>
+ <B> <A NAME="tex2html268"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00050000000000000000">
+Contests</A>
+</H1>
+
+<P>
+I sugest that you see this chapter only after you have created at
+least a basic brain feeb, wich is better than the (simple) provided
+brain, and when you want to participate of a contest or a game with
+your friends.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html271"
+ HREF="node19.html">Map</A>
+<LI><A NAME="tex2html272"
+ HREF="node20.html">Timing</A>
+<LI><A NAME="tex2html273"
+ HREF="node21.html">Sense of location</A>
+<LI><A NAME="tex2html274"
+ HREF="node22.html">Changing the rules</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node19.html
==============================================================================
--- (empty file)
+++ feebs/node19.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Map</TITLE>
+<META NAME="description" CONTENT="Map">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node20.html">
+<LINK REL="previous" HREF="node18.html">
+<LINK REL="up" HREF="node18.html">
+<LINK REL="next" HREF="node20.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html285"
+ HREF="node20.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html281"
+ HREF="node18.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html275"
+ HREF="node18.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html283"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html286"
+ HREF="node20.html">Timing</A>
+<B> Up:</B> <A NAME="tex2html282"
+ HREF="node18.html">Contests</A>
+<B> Previous:</B> <A NAME="tex2html276"
+ HREF="node18.html">Contests</A>
+ <B> <A NAME="tex2html284"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00051000000000000000"></A><A NAME="sub:Map"></A>
+<BR>
+Map
+</H2>
+
+<P>
+It is possible to get the maze map during the game, but with only
+the corridors. Note that the function that gets the map is purposely
+a little slow, so, invoking it too many times in a contest that uses
+timing atributes is not a good idea; anyway, it is possible to invoke
+this function before defining the feeb, and store its value somewhere.
+Also note that the map returned does not have any information about
+what is really in the maze, but only the possible ways.
+
+<P>
+To get the map, one can call <I><B>(get-maze-map)</B></I>. This
+function will return <I><B>nil</B></I> if <I><B>*may-get-maze-p*</B></I>
+is also <I><B>nil</B></I>. Otherwise, the map returned is an array,
+so that calling <I><B>(aref</B></I><I> map x y</I><I><B>)</B></I>
+will get the contents in the euclidean position (x,y) . The contents
+of a cell could be one of these:
+
+<P>
+
+<UL>
+<LI>[<I><B>:mushroom-place</B></I>] A mushroom patch, i.e. when
+a mushroom is eaten it can come out here.
+</LI>
+<LI>[<I><B>:feeb-entry-place</B></I>] A feeb entry, i.e. if a carcass
+rots a feeb can appear here.
+</LI>
+<LI>[<I><B>:rock</B></I>] A wall. Feebs cannot come in this place.
+</LI>
+<LI>[<I><B>nil</B></I>] An ``empty'' place, i.e. neither of
+the previous.
+</LI>
+</UL>
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html285"
+ HREF="node20.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html281"
+ HREF="node18.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html275"
+ HREF="node18.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html283"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html286"
+ HREF="node20.html">Timing</A>
+<B> Up:</B> <A NAME="tex2html282"
+ HREF="node18.html">Contests</A>
+<B> Previous:</B> <A NAME="tex2html276"
+ HREF="node18.html">Contests</A>
+ <B> <A NAME="tex2html284"
+ HREF="node1.html">Contents</A></B>
+<!--End of Navigation Panel-->
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node2.html
==============================================================================
--- (empty file)
+++ feebs/node2.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Introduction</TITLE>
+<META NAME="description" CONTENT="Introduction">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node4.html">
+<LINK REL="previous" HREF="node1.html">
+<LINK REL="up" HREF="feebs.html">
+<LINK REL="next" HREF="node3.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html68"
+ HREF="node3.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html64"
+ HREF="feebs.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html58"
+ HREF="node1.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html66"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html69"
+ HREF="node3.html">Changes from Planet of</A>
+<B> Up:</B> <A NAME="tex2html65"
+ HREF="feebs.html">The Feebs War</A>
+<B> Previous:</B> <A NAME="tex2html59"
+ HREF="node1.html">Contents</A>
+ <B> <A NAME="tex2html67"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00020000000000000000">
+Introduction</A>
+</H1>
+
+<P>
+The Feebs are intelligent and hostile creatures that live inside maze
+tunnels. They also have no mercy with each other, so they frequently
+throw a letal flame from through their mouth, and, after that, they
+can eat the carcass left. But throwing flames have an energy cost,
+so they must keep tracking for food.
+
+<P>
+This game is intended to help lisp newbies (or maybe a little more
+advanced lispers) to learn lisp. A player must create a function that
+receives what his/her feeb is seeing and feeling, and returns what
+it will do next. To create the better feeb, one can create variables
+to store data from previous moves (or not), and can also use all the
+power of lisp to improve his/her creature.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html70"
+ HREF="node3.html">Changes from <I>Planet of the Feebs</I></A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node20.html
==============================================================================
--- (empty file)
+++ feebs/node20.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Timing</TITLE>
+<META NAME="description" CONTENT="Timing">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node21.html">
+<LINK REL="previous" HREF="node19.html">
+<LINK REL="up" HREF="node18.html">
+<LINK REL="next" HREF="node21.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html297"
+ HREF="node21.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html293"
+ HREF="node18.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html287"
+ HREF="node19.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html295"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html298"
+ HREF="node21.html">Sense of location</A>
+<B> Up:</B> <A NAME="tex2html294"
+ HREF="node18.html">Contests</A>
+<B> Previous:</B> <A NAME="tex2html288"
+ HREF="node19.html">Map</A>
+ <B> <A NAME="tex2html296"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00052000000000000000">
+Timing</A>
+</H2>
+
+<P>
+There are also some timing atributes that can be given to the game.
+If the feeb takes too long to make a decision, there is more probability
+of its command to be aborted.
+
+<P>
+To make this available, someone must set these:
+
+<P>
+
+<UL>
+<LI>[<I><B>*slow-feeb-noop-switch*</B></I>] If is non-nil,
+there is a possibility that the move of a feeb is aborted according
+to its function time. Not applied to the human controlled feeb.
+</LI>
+<LI>[<I><B>*slow-feeb-noop-factor*</B></I>] The probability
+of the feeb to abort will be this factor times the amount of time
+the feeb takes to have a decision, divided for the total time taken
+by all the feebs in the current turn.
+</LI>
+</UL>
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node21.html
==============================================================================
--- (empty file)
+++ feebs/node21.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Sense of location</TITLE>
+<META NAME="description" CONTENT="Sense of location">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node22.html">
+<LINK REL="previous" HREF="node20.html">
+<LINK REL="up" HREF="node18.html">
+<LINK REL="next" HREF="node22.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html309"
+ HREF="node22.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html305"
+ HREF="node18.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html299"
+ HREF="node20.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html307"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html310"
+ HREF="node22.html">Changing the rules</A>
+<B> Up:</B> <A NAME="tex2html306"
+ HREF="node18.html">Contests</A>
+<B> Previous:</B> <A NAME="tex2html300"
+ HREF="node20.html">Timing</A>
+ <B> <A NAME="tex2html308"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00053000000000000000">
+Sense of location</A>
+</H2>
+
+<P>
+Some accessors related to position and orientation of the feeb can
+be turned off.
+
+<P>
+These are the parameters:
+
+<P>
+
+<UL>
+<LI>[<I><B>*sense-location-p*</B></I>] Tells if the actual
+position of the feeb can be determinated accessing <I><B>x-position</B></I>
+and <I><B>y-position</B></I>.
+</LI>
+</UL>
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node22.html
==============================================================================
--- (empty file)
+++ feebs/node22.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Changing the rules</TITLE>
+<META NAME="description" CONTENT="Changing the rules">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="previous" HREF="node21.html">
+<LINK REL="up" HREF="node18.html">
+<LINK REL="next" HREF="node23.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html319"
+ HREF="node23.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html315"
+ HREF="node18.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html311"
+ HREF="node21.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html317"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html320"
+ HREF="node23.html">Reference</A>
+<B> Up:</B> <A NAME="tex2html316"
+ HREF="node18.html">Contests</A>
+<B> Previous:</B> <A NAME="tex2html312"
+ HREF="node21.html">Sense of location</A>
+ <B> <A NAME="tex2html318"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00054000000000000000">
+Changing the rules</A>
+</H2>
+
+<P>
+To change the rules of the contest, they must be changed before the
+feebs are defined, because in a feeb definition it could use the values
+of the variables to make a global strategy, and change the strategies
+after this could not be fair.
+
+<P>
+All the parameters that can be listed using <I><B>(list-parameter-settings)</B></I>
+can be changed using setf. Also, they all have documentation about
+themselves, so feel free to use <I><B>(documentation </B></I><I>parameter 'variable</I><I><B>)</B></I>
+and see what each parameter does. Documentation is available to external
+functions too.
+
+<P>
+It is possible to change the layout of the map by calling <I><B>(change-layout</B></I><I> new-layout</I><I><B>)</B></I>.
+There are a few predefined mazes that are <I><B>*maze-0*</B></I>
+throw <I><B>*maze-5*</B></I>. If you want to create a new
+map, take the template (commented) inside the same file, or create
+maybe a bigger template (of any size, because the values of <I><B>*maze-x-size*</B></I>
+and <I><B>*maze-y-size*</B></I> will be changed accordingly).
+
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node23.html
==============================================================================
--- (empty file)
+++ feebs/node23.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Reference</TITLE>
+<META NAME="description" CONTENT="Reference">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node24.html">
+<LINK REL="previous" HREF="node18.html">
+<LINK REL="up" HREF="feebs.html">
+<LINK REL="next" HREF="node24.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html331"
+ HREF="node24.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html327"
+ HREF="feebs.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html321"
+ HREF="node22.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html329"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html332"
+ HREF="node24.html">About this document ...</A>
+<B> Up:</B> <A NAME="tex2html328"
+ HREF="feebs.html">The Feebs War</A>
+<B> Previous:</B> <A NAME="tex2html322"
+ HREF="node22.html">Changing the rules</A>
+ <B> <A NAME="tex2html330"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00060000000000000000">
+Reference</A>
+</H1>
+
+<P>
+<BLOCKQUOTE>
+Fahlman, S. E. <B><I>Planet of the Feebs -</I></B> <I>A Somewhat
+Educational Game.</I> ftp://ftp.csl.sri.com/pub/users/gilham/feebs/feebs.tex.
+
+</BLOCKQUOTE>
+
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node24.html
==============================================================================
--- (empty file)
+++ feebs/node24.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>About this document ...</TITLE>
+<META NAME="description" CONTENT="About this document ...">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="previous" HREF="node23.html">
+<LINK REL="up" HREF="feebs.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next_g.png">
+<A NAME="tex2html337"
+ HREF="feebs.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html333"
+ HREF="node23.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html339"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Up:</B> <A NAME="tex2html338"
+ HREF="feebs.html">The Feebs War</A>
+<B> Previous:</B> <A NAME="tex2html334"
+ HREF="node23.html">Reference</A>
+ <B> <A NAME="tex2html340"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00070000000000000000">
+About this document ...</A>
+</H1>
+ <STRONG><B><FONT SIZE="+3">The Feebs War</FONT></B></STRONG><P>
+This document was generated using the
+<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-2-1 (1.71)
+<P>
+Copyright © 1993, 1994, 1995, 1996,
+<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>,
+Computer Based Learning Unit, University of Leeds.
+<BR>
+Copyright © 1997, 1998, 1999,
+<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
+Mathematics Department, Macquarie University, Sydney.
+<P>
+The command line arguments were: <BR>
+ <STRONG>latex2html</STRONG> <TT><A NAME="tex2html1"
+ HREF="../feebs.tex">feebs.tex</A></TT>
+<P>
+The translation was initiated by on 2007-12-19
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node3.html
==============================================================================
--- (empty file)
+++ feebs/node3.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Changes from Planet of the Feebs</TITLE>
+<META NAME="description" CONTENT="Changes from Planet of the Feebs">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="previous" HREF="node2.html">
+<LINK REL="up" HREF="node2.html">
+<LINK REL="next" HREF="node4.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html79"
+ HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html75"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html71"
+ HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html77"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html80"
+ HREF="node4.html">The Game</A>
+<B> Up:</B> <A NAME="tex2html76"
+ HREF="node2.html">Introduction</A>
+<B> Previous:</B> <A NAME="tex2html72"
+ HREF="node2.html">Introduction</A>
+ <B> <A NAME="tex2html78"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00021000000000000000">
+Changes from <I>Planet of the Feebs</I></A>
+</H2>
+
+<P>
+Many changes were made from the original game, but, if you have any
+feeb definition and you want to use it, it should be easy to adapt
+the brain function to the new rules.
+
+<P>
+The main reason of this project is that <I>Planet of the Feebs</I>
+is really interesting for (not just) newbies to learn lisp, but the
+difficulties to install, unportability and the ausence of competitors
+make it difficult to someone to be interested in making a feeb. So,
+I hope that making these adjustments and maybe creating some contests
+over the web make people be more interested in learning lisp.
+
+<P>
+So, these are (some of) the changes:
+
+<P>
+
+<UL>
+<LI>The graphics are not based on X Window Sistem anymore, but on PAL,
+and there are no CMUCL's event handler. This way, the code is more
+portable and graphics can be improved without those hundreds of lines
+that the original version has. Just creating some .bmp or .jpg files
+of a feeb and your feeb is much more personalized!
+</LI>
+<LI>Every element of the map (except walls) is a list, so the brain of
+a feeb doesn't need to test all the time if the element is an atom
+or a list (wich, in my opinion, is really boring, unlispy and unnecessary
+in this case). That was only a reason to duplicate code and work,
+adding no results at all...
+</LI>
+<LI>Many functions and variables are changed and others were added.
+</LI>
+<LI>Someone watching the game can control a Feeb with the keyboard, if
+he/she wants to, and say when the game must finish.
+</LI>
+<LI>This document is more objective than the one provided with <I>Planet
+of the Feebs</I>, and is fully compatible with the code. This way it
+is easier to search for some information.
+</LI>
+</UL>
+
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html79"
+ HREF="node4.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html75"
+ HREF="node2.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html71"
+ HREF="node2.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html77"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html80"
+ HREF="node4.html">The Game</A>
+<B> Up:</B> <A NAME="tex2html76"
+ HREF="node2.html">Introduction</A>
+<B> Previous:</B> <A NAME="tex2html72"
+ HREF="node2.html">Introduction</A>
+ <B> <A NAME="tex2html78"
+ HREF="node1.html">Contents</A></B>
+<!--End of Navigation Panel-->
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node4.html
==============================================================================
--- (empty file)
+++ feebs/node4.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The Game</TITLE>
+<META NAME="description" CONTENT="The Game">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node8.html">
+<LINK REL="previous" HREF="node2.html">
+<LINK REL="up" HREF="feebs.html">
+<LINK REL="next" HREF="node5.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html91"
+ HREF="node5.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html87"
+ HREF="feebs.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html81"
+ HREF="node3.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html89"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html92"
+ HREF="node5.html">Overview</A>
+<B> Up:</B> <A NAME="tex2html88"
+ HREF="feebs.html">The Feebs War</A>
+<B> Previous:</B> <A NAME="tex2html82"
+ HREF="node3.html">Changes from Planet of</A>
+ <B> <A NAME="tex2html90"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00030000000000000000">
+The Game</A>
+</H1>
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html93"
+ HREF="node5.html">Overview</A>
+<LI><A NAME="tex2html94"
+ HREF="node6.html">Throwing flame</A>
+<LI><A NAME="tex2html95"
+ HREF="node7.html">Eating food</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node5.html
==============================================================================
--- (empty file)
+++ feebs/node5.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Overview</TITLE>
+<META NAME="description" CONTENT="Overview">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node6.html">
+<LINK REL="previous" HREF="node4.html">
+<LINK REL="up" HREF="node4.html">
+<LINK REL="next" HREF="node6.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html106"
+ HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html102"
+ HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html96"
+ HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html104"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html107"
+ HREF="node6.html">Throwing flame</A>
+<B> Up:</B> <A NAME="tex2html103"
+ HREF="node4.html">The Game</A>
+<B> Previous:</B> <A NAME="tex2html97"
+ HREF="node4.html">The Game</A>
+ <B> <A NAME="tex2html105"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00031000000000000000">
+Overview</A>
+</H2>
+
+<P>
+Your feeb's objective is to survive and kill other feebs. It is inside
+a maze of tunnels. Every turn, all feebs lose one unit of energy,
+and maybe starves. Your feeb is able to move forward, turn left, right
+or around, flame, peek around a corner, eat something or just wait.
+After all feebs move, the flames thrown before also move (or dissipate),
+carcasses may rot and mushrooms may grow, accordingly to some rules.
+
+<P>
+To see what values are taken, one can use <I><B>(list-parameter-settings)</B></I>.
+Using <I><B>setf</B></I> gives the possibility to change them
+and <I><B>documentation</B></I> can be used to know them. Just
+remember that every probability must be a rational number (like 1/2).
+These parameters are just for one to know how the game is going to
+be, but in the begining there is no need to explicitly use them when
+creating the brain of a feeb.
+
+<P>
+These are some global parameters:
+
+<P>
+
+<UL>
+<LI>[<I><B>*game-length*</B></I>] Number of turns the game
+will last, or nil if there is a human player.
+</LI>
+<LI>[<I><B>*points-for-killing*</B></I>] How many points some
+feeb earn for killing someone.
+</LI>
+<LI>[<I><B>*points-for-dying*</B></I>] How many points some
+feeb earn for dying (usually negative).
+</LI>
+<LI>[<I><B>*maze-x-size*</B></I>] Horizontal size of the maze.
+</LI>
+<LI>[<I><B>*maze-y-size*</B></I>] Vertical size of the maze.
+</LI>
+<LI>[<I><B>(get-maze-map)</B></I>] This command can be used to
+get the map (see section <A HREF="node19.html#sub:Map"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]"
+ SRC="file:/usr/lib/latex2html/icons/crossref.png"></A>).
+</LI>
+</UL>
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html106"
+ HREF="node6.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html102"
+ HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html96"
+ HREF="node4.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html104"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html107"
+ HREF="node6.html">Throwing flame</A>
+<B> Up:</B> <A NAME="tex2html103"
+ HREF="node4.html">The Game</A>
+<B> Previous:</B> <A NAME="tex2html97"
+ HREF="node4.html">The Game</A>
+ <B> <A NAME="tex2html105"
+ HREF="node1.html">Contents</A></B>
+<!--End of Navigation Panel-->
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node6.html
==============================================================================
--- (empty file)
+++ feebs/node6.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Throwing flame</TITLE>
+<META NAME="description" CONTENT="Throwing flame">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node7.html">
+<LINK REL="previous" HREF="node5.html">
+<LINK REL="up" HREF="node4.html">
+<LINK REL="next" HREF="node7.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html118"
+ HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html114"
+ HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html108"
+ HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html116"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html119"
+ HREF="node7.html">Eating food</A>
+<B> Up:</B> <A NAME="tex2html115"
+ HREF="node4.html">The Game</A>
+<B> Previous:</B> <A NAME="tex2html109"
+ HREF="node5.html">Overview</A>
+ <B> <A NAME="tex2html117"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00032000000000000000">
+Throwing flame</A>
+</H2>
+
+<P>
+If a feeb decides to throw a flame, and if it is prepared to, it will
+spend energy, and the next turn there will be a flame in the square
+in front of the feeb. For a few turns, the feeb will not be able to
+throw flames. The turn after the feeb throws the flame, it is able
+to see its own flame exactly in front of it, so it shouldn't move
+forward. Each turn, the flame moves forward destroing mushrooms and
+killing feebs it encounters, transforming them into carcass. If there
+is a wall, the flame can reflect, and will turn 180 degrees.
+
+<P>
+Once a feeb is killed, in it's place in the maze there will appear
+a carcass. The feeb goes to the end of the killed feebs line. Whenever
+a carcass rots, the first feeb in line will reincarnate. So, dying
+is not so terrible.
+
+<P>
+These are the parameters related to flames:
+
+<P>
+
+<UL>
+<LI>[<I><B>*flame-energy*</B></I>] Amount of energy lost after
+throwing a flame.
+</LI>
+<LI>[<I><B>*fireball-guaranteed-lifetime*</B></I>] Number of
+turns that a fireball is guaranteed not to dissipate, unless it encounters
+a wall.
+</LI>
+<LI>[<I><B>*fireball-dissipation-probability*</B></I>] Probability
+of the flame to dissipate each turn after the apropriate time.
+</LI>
+<LI>[<I><B>*fireball-reflection-probability*</B></I>] Probability
+of the flame to reflect when encountering a wall.
+</LI>
+<LI>[<I><B>*flame-no-recovery-time*</B></I>] Number of turns
+that a feeb cannot fire.
+</LI>
+<LI>[<I><B>*flame-recovery-probability*</B></I>] Probability
+of the feeb to recover the hability to throw a flame, after the apropriate
+time.
+</LI>
+</UL>
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html118"
+ HREF="node7.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html114"
+ HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html108"
+ HREF="node5.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html116"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html119"
+ HREF="node7.html">Eating food</A>
+<B> Up:</B> <A NAME="tex2html115"
+ HREF="node4.html">The Game</A>
+<B> Previous:</B> <A NAME="tex2html109"
+ HREF="node5.html">Overview</A>
+ <B> <A NAME="tex2html117"
+ HREF="node1.html">Contents</A></B>
+<!--End of Navigation Panel-->
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node7.html
==============================================================================
--- (empty file)
+++ feebs/node7.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Eating food</TITLE>
+<META NAME="description" CONTENT="Eating food">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="previous" HREF="node6.html">
+<LINK REL="up" HREF="node4.html">
+<LINK REL="next" HREF="node8.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html128"
+ HREF="node8.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html124"
+ HREF="node4.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html120"
+ HREF="node6.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html126"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html129"
+ HREF="node8.html">The Feeb</A>
+<B> Up:</B> <A NAME="tex2html125"
+ HREF="node4.html">The Game</A>
+<B> Previous:</B> <A NAME="tex2html121"
+ HREF="node6.html">Throwing flame</A>
+ <B> <A NAME="tex2html127"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00033000000000000000">
+Eating food</A>
+</H2>
+
+<P>
+There are two kinds of food, carcasses and mushrooms. Carcasses usually
+give less energy than mushrooms, and may rot, but, while it does not
+rot, a feeb can feed as long as it wishes. By eating food, the feeb
+will be able to recover energy, wich is important because, if a feeb
+stays with 0 or less units of energy, it starves.
+
+<P>
+These are the quantities:
+
+<P>
+
+<UL>
+<LI>[<I><B>*mushroom-energy*</B></I>] Amount of energy recovered
+when the feeb eats a mushroom.
+</LI>
+<LI>[<I><B>*carcass-energy*</B></I>] Amount of energy recovered
+each turn that the feeb eats a carcass.
+</LI>
+<LI>[<I><B>*carcass-guaranteed-lifetime*</B></I>] Number of
+turns that a carcass will surely stay there. After these turns, it
+can rot, depending on probabilities.
+</LI>
+<LI>[<I><B>*carcass-rot-probability*</B></I>] Probability of
+the carcass to rot, after the apropriate time.
+</LI>
+<LI>[<I><B>*maximum-energy*</B></I>] Maximum amount of energy
+that a feeb can have eating.
+</LI>
+<LI>[<I><B>*starting-energy*</B></I>] Amount of energy a feeb
+has when it reincarnates.
+</LI>
+<LI>[<I><B>*number-of-mushrooms*</B></I>] Quantity of mushrooms
+that exist in the maze.
+</LI>
+</UL>
+<P>
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node8.html
==============================================================================
--- (empty file)
+++ feebs/node8.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>The Feeb</TITLE>
+<META NAME="description" CONTENT="The Feeb">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node18.html">
+<LINK REL="previous" HREF="node4.html">
+<LINK REL="up" HREF="feebs.html">
+<LINK REL="next" HREF="node9.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html140"
+ HREF="node9.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html136"
+ HREF="feebs.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html130"
+ HREF="node7.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html138"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html141"
+ HREF="node9.html">Possible decisions</A>
+<B> Up:</B> <A NAME="tex2html137"
+ HREF="feebs.html">The Feebs War</A>
+<B> Previous:</B> <A NAME="tex2html131"
+ HREF="node7.html">Eating food</A>
+ <B> <A NAME="tex2html139"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H1><A NAME="SECTION00040000000000000000">
+The Feeb</A>
+</H1>
+
+<P>
+A feeb needs four things: a name, a brain, an initialize function
+(optional) and a set of graphics (optional).
+
+<P>
+
+<UL>
+<LI>The name, a string.
+</LI>
+<LI>The brain is a function that decides what the feeb will do next, based
+on what it is seeing and feeling.
+</LI>
+<LI>The initializer is invoked when the game is about to start, so it
+can analyze the map, global parameters, and so on.
+</LI>
+<LI>The set of graphics is an image file (of format BMP, JPEG, PNG, and
+any others that supported by SDL_image).
+</LI>
+</UL>
+One can create a feeb calling <I><B>(define-feeb </B></I><I>name brain </I><I><B>:initializer</B></I><I> prepare </I><I><B>:graphics</B></I><I> graphics</I><I><B>)</B></I>.
+If name is already used, a warning will be signaled, and the old feeb
+will be substituted. Calling <I><B>(list-of-feebs)</B></I> will
+return the list of the feebs (names only) that will be defined when
+the game begins. <I><B>(delete-feeb</B></I><I> name</I><I><B>)</B></I>
+will delete the feeb with this name from this list, and <I><B>(delete-all-feebs)</B></I>
+will clear it.
+
+<P>
+<BR><HR>
+<!--Table of Child-Links-->
+<A NAME="CHILD_LINKS"><STRONG>Subsections</STRONG></A>
+
+<UL>
+<LI><A NAME="tex2html142"
+ HREF="node9.html">Possible decisions</A>
+<LI><A NAME="tex2html143"
+ HREF="node10.html">Information available</A>
+<UL>
+<LI><A NAME="tex2html144"
+ HREF="node11.html">Status</A>
+<LI><A NAME="tex2html145"
+ HREF="node12.html">Proximity and vision</A>
+<LI><A NAME="tex2html146"
+ HREF="node13.html">Feebs and fireballs images</A>
+<LI><A NAME="tex2html147"
+ HREF="node14.html">Vision-left and vision-right</A>
+</UL>
+<BR>
+<LI><A NAME="tex2html148"
+ HREF="node15.html">Extra functions provided</A>
+<LI><A NAME="tex2html149"
+ HREF="node16.html">Graphics</A>
+<LI><A NAME="tex2html150"
+ HREF="node17.html">Starting the game</A>
+</UL>
+<!--End of Table of Child-Links-->
+<BR><HR>
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: feebs/node9.html
==============================================================================
--- (empty file)
+++ feebs/node9.html Wed Dec 19 15:36:51 2007
@@ -0,0 +1,142 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+
+<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
+original version by: Nikos Drakos, CBLU, University of Leeds
+* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
+* with significant contributions from:
+ Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
+<HTML>
+<HEAD>
+<TITLE>Possible decisions</TITLE>
+<META NAME="description" CONTENT="Possible decisions">
+<META NAME="keywords" CONTENT="feebs">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+
+<LINK REL="STYLESHEET" HREF="feebs.css">
+
+<LINK REL="next" HREF="node10.html">
+<LINK REL="previous" HREF="node8.html">
+<LINK REL="up" HREF="node8.html">
+<LINK REL="next" HREF="node10.html">
+</HEAD>
+
+<BODY >
+<!--Navigation Panel-->
+<A NAME="tex2html161"
+ HREF="node10.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html157"
+ HREF="node8.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html151"
+ HREF="node8.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html159"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html162"
+ HREF="node10.html">Information available</A>
+<B> Up:</B> <A NAME="tex2html158"
+ HREF="node8.html">The Feeb</A>
+<B> Previous:</B> <A NAME="tex2html152"
+ HREF="node8.html">The Feeb</A>
+ <B> <A NAME="tex2html160"
+ HREF="node1.html">Contents</A></B>
+<BR>
+<BR>
+<!--End of Navigation Panel-->
+
+<H2><A NAME="SECTION00041000000000000000">
+Possible decisions</A>
+</H2>
+
+<P>
+After processing the information available, the brain will take a
+decision. If this decision is not one of the decisions listed down,
+a warning will be signaled, and the result will be like <I><B>:wait</B></I>.
+Then, if someone are testing a brain function, he or she will be able
+to know if something goes wrong.
+
+<P>
+The possible values that the brain function can return are these:
+
+<P>
+
+<UL>
+<LI>[<I><B>:move-forward</B></I>] Move one square forward, unless
+there is a wall in front of the feeb.
+</LI>
+<LI>[<I><B>:turn-left</B></I>] Turn 90 degrees to the left.
+</LI>
+<LI>[<I><B>:turn-right</B></I>] Turn 90 degrees to the right.
+</LI>
+<LI>[<I><B>:turn-around</B></I>] Turn 180 degrees.
+</LI>
+<LI>[<I><B>:flame</B></I>] Throw a flame. The flame will be created
+next turn in the front square of the feeb.
+</LI>
+<LI>[<I><B>:wait</B></I>] Do nothing in this turn.
+</LI>
+<LI>[<I><B>:peek-left</B></I>] Peek to the left around a corner.
+The creature does note actually move, but, in the next turn, the creature
+will have the same vision that it would have if he had moved one step
+foward and turned left. This is used so a feeb can analize a corridor
+before trespassing it.
+</LI>
+<LI>[<I><B>:peek-right</B></I>] Peek to the right around a corner,
+analogous of <I><B>:peek-left</B></I>.
+</LI>
+<LI>[<I><B>:eat-carcass</B></I>] Eat a carcass if there is any
+available in the feeb's square. The amount of <I><B>*carcass-energy*</B></I>
+is restored to the feeb's energy.
+</LI>
+<LI>[<I><B>:eat-mushroom</B></I>] Eat a mushroom if there is any
+available in the feeb's square. The amount of <I><B>*mushroom-energy*</B></I>
+is restored to the feeb's energy.
+</LI>
+</UL>
+<P>
+<HR>
+<!--Navigation Panel-->
+<A NAME="tex2html161"
+ HREF="node10.html">
+<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
+ SRC="file:/usr/lib/latex2html/icons/next.png"></A>
+<A NAME="tex2html157"
+ HREF="node8.html">
+<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
+ SRC="file:/usr/lib/latex2html/icons/up.png"></A>
+<A NAME="tex2html151"
+ HREF="node8.html">
+<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
+ SRC="file:/usr/lib/latex2html/icons/prev.png"></A>
+<A NAME="tex2html159"
+ HREF="node1.html">
+<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
+ SRC="file:/usr/lib/latex2html/icons/contents.png"></A>
+<BR>
+<B> Next:</B> <A NAME="tex2html162"
+ HREF="node10.html">Information available</A>
+<B> Up:</B> <A NAME="tex2html158"
+ HREF="node8.html">The Feeb</A>
+<B> Previous:</B> <A NAME="tex2html152"
+ HREF="node8.html">The Feeb</A>
+ <B> <A NAME="tex2html160"
+ HREF="node1.html">Contents</A></B>
+<!--End of Navigation Panel-->
+<ADDRESS>
+
+2007-12-19
+</ADDRESS>
+</BODY>
+</HTML>
Added: graphics.lisp
==============================================================================
--- (empty file)
+++ graphics.lisp Wed Dec 19 15:36:51 2007
@@ -0,0 +1,98 @@
+;;; -*- Common Lisp -*-
+
+#| Copyright (c) 2007 Gustavo Henrique Milaré
+
+ This file is part of The Feebs War.
+
+ The Feebs War is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ The Feebs War is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+|#
+
+(in-package :feebs)
+
+(defun print-direction (dir)
+ (case dir
+ (0 #\N)
+ (1 #\E)
+ (2 #\S)
+ (3 #\W)))
+
+(defun print-map ()
+ (dotimes (y *maze-y-size*)
+ (dotimes (x *maze-x-size*)
+ (let ((elt (aref *maze* x y)))
+ (apply 'format t
+ (cond
+ ((wallp elt)
+ (list " XX"))
+ ((feeb-image-p (car elt))
+ (list "F~1d~a"
+ (feeb-id (feeb-image-feeb (car elt)))
+ (print-direction (feeb-image-facing (car elt)))))
+ ((fireball-image-p (car elt))
+ (list " *~a" (print-direction (fireball-image-direction (car elt)))))
+ ((eq (car elt) :mushroom)
+ (list " mm"))
+ ((eq (car elt) :carcass)
+ (list " cc"))
+ (t (list " "))))))
+ (format t "~%")))
+
+(defun simple-play (&optional layout)
+ (if layout
+ (change-layout layout))
+ (make-auto-feebs (- 10 (length *feebs-to-be*)))
+ (initialize-feebs)
+ (loop repeat *game-length* do
+ (play-one-turn) (print-map) (sleep 0.3) (format t "~%~%"))
+ (format t "Fim de jogo!!~%~%Pontuações:~%~%")
+ (dolist (feeb *feebs*)
+ (format t "~a: ~d~%" (name (feeb-status feeb)) (score (feeb-status feeb)))))
+
+
+#|
+
+;;; Feeb creation.
+
+;; This a little better version of conservative-brain
+;; all others (stupid or redundant) brains of original
+;; feebs.lisp were eliminated
+ (defun simple-brain (status proximity vision vision-left vision-right)
+ (declare (ignore vision-left vision-right))
+ (let ((stuff (my-square proximity)))
+ (cond ((and (consp stuff) (member :mushroom stuff :test #'eq))
+ :eat-mushroom)
+ ((and (consp stuff) (member :carcass stuff :test #'eq))
+ :eat-carcass)
+ ((and (ready-to-fire status)
+ (> (energy-reserve status) 30)
+ (dotimes (index (min (line-of-sight status) 5))
+ (if (find-if #'feeb-image-p (aref vision index))
+ (return t))))
+ :flame)
+ ((and (not (eq (left-square proximity) :rock))
+ (> 2 (random 10)))
+ :turn-left)
+ ((and (not (eq (right-square proximity) :rock))
+ (> 2 (random 10)))
+ :turn-right)
+ ((plusp (line-of-sight status))
+ :move-forward)
+ ((not (wallp (left-square proximity)))
+ :turn-left)
+ ((not (wallp (right-square proximity)))
+ :turn-right)
+ ((not (wallp (rear-square proximity)))
+ :turn-around))))
+
+|#
Added: license
==============================================================================
--- (empty file)
+++ license Wed Dec 19 15:36:51 2007
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Added: main.lisp
==============================================================================
--- (empty file)
+++ main.lisp Wed Dec 19 15:36:51 2007
@@ -0,0 +1,412 @@
+;;; -*- Common Lisp -*-
+
+#| Copyright (c) 2007 Gustavo Henrique Milaré
+
+ This file is part of The Feebs War.
+
+ The Feebs War is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ The Feebs War is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+|#
+
+
+(in-package :feebs)
+
+;;; Some functions
+
+(defmacro def-feeb-parm (name value doc)
+ `(progn
+ (defvar ,name ,value ,doc)
+ (pushnew ',name *feeb-parameters*)))
+
+(defun list-parameter-settings ()
+ (let ((settings nil))
+ (dolist (parm *feeb-parameters*)
+ (push (cons parm (symbol-value parm)) settings))
+ settings))
+
+(defun chance (ratio)
+ (< (random (denominator ratio)) (numerator ratio)))
+
+;;; General game parameters:
+
+(def-feeb-parm *game-length* 320
+ "Number of cycles in the simulation.")
+
+(def-feeb-parm *number-of-auto-feebs* 0
+ "Number of dumb system-provided feebs.")
+
+(def-feeb-parm *slow-feeb-noop-switch* nil
+ "If non-null, each feeb has a chance of having its orders aborted in
+ proportion to the time it takes to produce them.
+ See *slow-feeb-noop-factor*.")
+
+(def-feeb-parm *slow-feeb-noop-factor* 1/4
+ "If *slow-feeb-noop-switch* is non-null, a feeb's orders will be aborted
+ with probability equal to the product of this factor times the time
+ taken by this feeb divided by *reference-time*, if non-nil, or
+ the total time taken by all feebs this turn otherwise.")
+
+(def-feeb-parm *reference-time* nil
+ "Time taken by reference if non-nil. See *slow-feeb-noop-factor*.")
+
+(def-feeb-parm *sense-location-p* t
+ "If non-null, x-position and y-position will return nil when
+ some a behavior function tries to invoke it.")
+
+;;(def-feeb-parm *sense-facing-p* t
+;; "If non-null, facing will return nil when one tries to
+;; invoke it.")
+
+;;; Scoring:
+
+(def-feeb-parm *points-for-killing* 5
+ "Added to one's score for killing an opponent.")
+
+(def-feeb-parm *points-for-dying* -3
+ "Added to one's score for being killed or starving.")
+
+(def-feeb-parm *points-for-slow-down* -1
+ "Points earned when a feeb's move is aborted due to slowness.")
+
+;;; Cheating
+
+(def-feeb-parm *exclude-cheater-p* nil
+ "Tells if a feeb is excluded from the game when a cheating is done.")
+
+(def-feeb-parm *warn-when-cheating-p* t
+ "Tells if a continuable error must be signaled when a cheating is done.")
+
+;;; Characteristics of the maze:
+
+(def-feeb-parm *may-get-maze-map-p* t
+ "Tells if the function (get-maze-map) returns the map layout of nil
+ during the game.")
+
+(def-feeb-parm *maze-x-size* 32
+ "Number of columns in the maze.")
+
+(def-feeb-parm *maze-y-size* 32
+ "Number of rows in the maze.")
+
+(def-feeb-parm *number-of-mushrooms* 8
+ "Average number of mushrooms in the maze at any given time.")
+
+
+;;; Energies:
+
+(def-feeb-parm *flame-energy* 10
+ "Energy used when a feeb flames.")
+
+(def-feeb-parm *mushroom-energy* 50
+ "Energy gained when a mushroom is eaten.")
+
+(def-feeb-parm *carcass-energy* 30
+ "Energy gained by feeding on a carcass.")
+
+(def-feeb-parm *maximum-energy* 100
+ "The most energy a feeb can accumulate.")
+
+(def-feeb-parm *starting-energy* 50
+ "Smallest amount of energy a feeb will start with.")
+
+;;; Carcasses:
+
+(def-feeb-parm *carcass-guaranteed-lifetime* 5
+ "Minimum number of turns a carcass will hang around.")
+
+(def-feeb-parm *carcass-rot-probability* 1/3
+ "Chance of a carcass rotting away each turn after its guaranteed lifetime.")
+
+
+;;; Fireballs:
+
+(def-feeb-parm *fireball-dissipation-probability* 1/5
+ "Chance that a fireball will dissipate each turn after it is fired.")
+
+(def-feeb-parm *fireball-reflection-probability* 2/3
+ "Chance that a fireball will reflect when it hits a wall.")
+
+(def-feeb-parm *flame-recovery-probability* 1/3
+ "Chance a feeb will regain its ability to flame each turn after flaming once.")
+
+
+;;; Structures:
+
+;;; The Feeb structure contains all of the info relevant to a particular feeb.
+;;; The info available to the brain function is in the Status sub-structure.
+
+(defstruct (feeb
+ (:print-function print-feeb)
+ (:constructor make-feeb (id brain)))
+ id
+ brain
+ image
+ status
+ proximity
+ time
+ last-score
+ last-kills
+ facing
+ x-position
+ y-position
+ (dead-p nil)
+ (turns-since-flamed 0)
+ (vision (make-array (max *maze-x-size* *maze-y-size*)))
+ (vision-left (make-array (max *maze-x-size* *maze-y-size*)))
+ (vision-right (make-array (max *maze-x-size* *maze-y-size*))))
+
+(defstruct (status
+ (:conc-name nil)
+ (:constructor make-status (name graphics)))
+ (name "" :read-only t)
+ facing
+ graphics
+ x-position
+ y-position
+ peeking
+ line-of-sight
+ (energy-reserve *starting-energy*)
+ (score 0)
+ (kills 0)
+ (ready-to-fire t)
+ (aborted nil)
+ (last-move :dead))
+
+(defun print-feeb (structure stream depth)
+ (declare (ignore depth))
+ (format stream "#<Feeb ~S>"
+ (name (feeb-status structure))))
+
+
+(defstruct (proximity
+ (:conc-name nil))
+ my-square
+ rear-square
+ left-square
+ right-square)
+
+
+;;; These image structures are used to represent feebs and fireballs in
+;;; the sensory displays of other feebs.
+
+(defstruct (feeb-image
+ (:print-function print-feeb-image)
+ (:constructor make-feeb-image (name feeb)))
+ (name "" :read-only t)
+ facing
+ (feeb nil :read-only t)
+ peeking)
+
+(defun print-feeb-image (structure stream depth)
+ (declare (ignore depth))
+ (format stream "#<Feeb-Image of ~S facing ~S>"
+ (feeb-image-name structure)
+ (feeb-image-facing structure)))
+
+(defstruct (fireball-image
+ (:print-function print-fireball-image)
+ (:constructor make-fireball-image (direction owner x y dx dy)))
+ direction
+ owner
+ x
+ y
+ dx
+ dy
+ (new t))
+
+(defun print-fireball-image (structure stream depth)
+ (declare (ignore depth))
+ (format stream "#<Fireball moving ~S>"
+ (fireball-image-direction structure)))
+
+(defstruct (pos (:constructor make-pos (x y)))
+ x
+ y)
+
+;;; Changing the maze
+(defun change-layout (layout)
+ (when *feebs-to-be*
+ (warn "There are some feebs that have already been defined.
+They could have used (get-maze-map). Those are they:
+~a." (loop for feeb in *feebs-to-be* collect (first feeb))))
+ (let ((x (length layout))
+ (y (length (car layout))))
+ (loop for string in layout do
+ (if (/= (length string) y)
+ (error "Not all the strings in ~a have the same size." layout)))
+ (setf *layout* layout
+ *maze-y-size* y
+ *maze-x-size* x)))
+
+(defun get-maze-map ()
+ (when *may-get-maze-map-p*
+ (unless (and *maze* *fake-maze*)
+ (init-maze))
+ (let ((new-maze (make-array (list *maze-x-size* *maze-y-size*))))
+ (dotimes (x *maze-x-size*)
+ (dotimes (y *maze-y-size*)
+ (setf (aref new-maze x y) (aref *fake-maze* x y))))
+ new-maze)))
+
+(defun init-maze ()
+ (setf *maze* (make-array (list *maze-x-size* *maze-y-size*))
+ *fake-maze* (make-array (list *maze-x-size* *maze-y-size*))
+ *entry-points* nil)
+ (do ((rows *layout* (cdr rows))
+ (i (1- *maze-y-size*) (1- i)))
+ ((null rows))
+ (let ((str (car rows)))
+ (dotimes (j (length str))
+ (setf (aref *maze* j i) nil
+ (aref *fake-maze* j i) nil)
+ (case (schar str j)
+ (#\X
+ (setf (aref *maze* j i) :rock
+ (aref *fake-maze* j i) :rock))
+ (#\*
+ (setf (aref *fake-maze* j i) :mushroom-place)
+ (push (make-pos j i) *mushroom-sites*))
+ (#\e
+ (setf (aref *fake-maze* j i) :feeb-entry-place)
+ (push (make-pos j i) *entry-points*))
+ (#\space nil)
+ (t
+ (error "Unknown spec in maze: ~C." (schar str j))))))))
+
+(defun initialize-feebs ()
+ (setf *mushrooms-alive* *number-of-mushrooms*
+ *dead-feebs* nil
+ *fireballs-flying* nil
+ *continue* t
+ *mushroom-sites* nil
+ *entry-points* nil
+ *carcasses* nil
+ *static-parameters*
+ (loop for (symbol . value) in (list-parameter-settings)
+ collect value))
+ (init-maze)
+ (setf *number-of-mushroom-sites* (length *mushroom-sites*)
+ *number-of-entry-points* (length *entry-points*))
+ (create-feebs)) ; The feebs are defined here
+
+(defun create-mushrooms ()
+ (dotimes (i (- *number-of-mushrooms* (length *mushrooms-alive*) (random 3)))
+ (do ((site (nth (random *number-of-mushroom-sites*) *mushroom-sites*)
+ (nth (random *number-of-mushroom-sites*) *mushroom-sites*)))
+ ((null (aref *maze* (pos-x site) (pos-y site)))
+ (setf (aref *maze* (pos-x site) (pos-y site)) :mushroom)))))
+
+;;; Setting up the feebs.
+
+(defvar *feebs* nil
+ "A list of all the feebs in the current game.")
+
+(defvar *next-feeb-id* 0
+ "A counter used to assign a unique numerical code to each feeb.")
+
+;;; Define-Feeb builds a list of feebs to create. Create-Feebs actually
+;;; builds the feebs on this list.
+
+(defvar *feebs-to-be* nil)
+
+(defun define-feeb (name brain &optional prepare graphs)
+ (if (delete-feeb name)
+ (warn "Feeb ~s already exists, deleting..." name))
+ (push (list name brain prepare graphs) *feebs-to-be*))
+
+(defun delete-feeb (name)
+ (not
+ (equal *feebs-to-be*
+ (setf *feebs-to-be*
+ (remove name *feebs-to-be* :key #'car :test #'string=)))))
+
+(defun create-feebs ()
+ (flet ((create-feeb (name brain prepare graphs)
+ (let ((pos (pick-random-entry-point))
+ (feeb (make-feeb *next-feeb-id* brain)))
+ (incf *next-feeb-id*)
+ (setf (feeb-image feeb)
+ (make-feeb-image name feeb)
+ (feeb-status feeb)
+ (make-status name nil); (sdl:load-and-convert-image graphs))
+ (feeb-proximity feeb)
+ (make-proximity))
+ (change-feeb-pos feeb (pos-x pos) (pos-y pos))
+ (change-feeb-facing feeb (random 4))
+ (push feeb *feebs*)
+ (place-object (feeb-image feeb) (pos-x pos) (pos-y pos))
+ (when prepare
+ (let (*static-parameters* *fake-maze*)
+ (funcall prepare))
+ (check-cheating name)))))
+ (setf *feebs* nil
+ *next-feeb-id* 0)
+ (dolist (feeb-spec (reverse *feebs-to-be*))
+ (apply #'create-feeb feeb-spec))))
+
+;;; Start at some randomly chosen entry point. If this one is occupied,
+;;; scan successive entry points until a winner is found. Circle back
+;;; to start of list if necessary.
+
+(defun pick-random-entry-point ()
+ (do ((points (nth (random *number-of-entry-points*) *entry-points*)
+ (nth (random *number-of-entry-points*) *entry-points*)))
+ (nil)
+ (when (null (aref *maze* (pos-x points)
+ (pos-y points)))
+ (return points))))
+
+;;; Movement interface.
+
+(defun delete-object (thing x y)
+ (when (eq thing :mushroom)
+ (decf *mushrooms-alive*))
+ (setf (aref *maze* x y)
+ (delete thing (aref *maze* x y))))
+
+(defun place-object (thing x j)
+ (when (eq thing :mushroom)
+ (incf *mushrooms-alive*))
+ (push thing (aref *maze* x j)))
+
+;;; Functions to change optional structure in status
+
+(defun change-feeb-pos (feeb x y)
+ (setf (feeb-x-position feeb) x
+ (feeb-y-position feeb) y)
+ (if *sense-location-p*
+ (setf (x-position (feeb-status feeb)) x
+ (y-position (feeb-status feeb)) y)))
+
+(defun change-feeb-facing (feeb facing)
+ (setf (feeb-facing feeb)
+;; ;; use this code to make *sense-facing-p* available
+;; ;; but be carefull - it does not really work
+;; (if (or *sense-location-p* *sense-facing-p*)
+;; (setf (facing (feeb-status feeb))
+;; facing)
+;; facing)
+ (setf (facing (feeb-status feeb))
+ (setf (feeb-image-facing (feeb-image feeb))
+ facing))))
+
+(defun kill-feeb (feeb)
+ (setf *dead-feebs* (nconc *dead-feebs* (list feeb))
+ (feeb-dead-p feeb) t)
+ (let* ((status (feeb-status feeb))
+ (x (feeb-x-position feeb))
+ (y (feeb-y-position feeb)))
+ (push (list 0 x y) *carcasses*)
+ (incf (score status) *points-for-dying*)
+ (delete-object (feeb-image feeb) x y)
+ (place-object :carcass x y)))
Added: mazes.lisp
==============================================================================
--- (empty file)
+++ mazes.lisp Wed Dec 19 15:36:51 2007
@@ -0,0 +1,238 @@
+;;; -*- Common Lisp -*-
+
+;;; Mazes for Planet of the Feebs.
+;;; A somewhat educational simulation game.
+;;;
+;;; Created by Jim Healy, July 1987.
+;;;
+;;; **************************************************
+;;; Maze guidelines:
+;;; Maze should be *maze-i-size* by *maze-j-size*
+;;; (currently 32 x 32).
+;;; X represents a wall.
+;;; * represents a mushroom patch.
+;;; e is a feeb entry point.
+;;; **************************************************
+
+;;; Maze1 has a good number of dead ends and little nooks.
+
+(in-package :feebs)
+
+(defparameter *maze-1*
+ '("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXX *eXXXX *e ** X"
+ "XXX XXXXX XXXX XXXXXXXXXXXX XX X"
+ "XXX XXX XXXXXX X X"
+ "XXXXX XXXXXXX XXXXXXX XXXXXXX XX"
+ "X * XXX XX * XeXX XX"
+ "X XXXXXXX XXX XXXXXXX X XXX XXXX"
+ "X XXXXXX XXX XX X *XX"
+ "X XXXXXXX XXX XXXXXXX XXXXXXXXXX"
+ "X XXXXXXX XXX* e XXXXXX XXX"
+ "X XXXXX XXXXXXXXX * XXX"
+ "X XXXXX XXXXXX XXXXXX XX XX"
+ "X eXXXX XXXXXX XXX XXXXX XX XXX"
+ "X XXXXX* XXXXe XXXX XX XX"
+ "X XXXXX XXXXXX XXXXX XXX XXX XX"
+ "X eXXXX e XXXXXX *XX XX XX"
+ "X XXXXX XXXXXX XXXXXXX X XXeXXX"
+ "X XXX XXXXXXXX XX XX"
+ "X XXXXX XXXXXX XXXXXXXXXX XXXXXX"
+ "X XXXXX * XXXXX XX"
+ "X* XXX XXXXXX XXXXX XXXXXX X XX"
+ "X XXXXX e XXXXX X e X XX"
+ "X XX XX XXXXXX XXXXX X XXXXXX XX"
+ "X *XXX XXXXX * XX"
+ "X XX XX XXXXXX XXXXXXXXXX XXXXXX"
+ "X XXXXX XXXXXX * * XX"
+ "X XXX XXXXXXXXXXXXXXXXXXXXX XX"
+ "X XXXX X X eX X XX"
+ "X XXX XX X XX X XX X XX X XX XX"
+ "X XXXX XX X XX X XX X XX*X XX XX"
+ "X e * XX XX * XX XX XXeXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
+
+;;; Maze2 doesn't have any really long corridors.
+
+(defparameter *maze-2*
+ '("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "X eXXXXX * X XXXXXX X e XXXXX"
+ "X XXXX X X XXXX X X XXXXX"
+ "X XX XXXX XXXX X* X X XXXXX"
+ "XX XX XXX XXXX XX XX X X"
+ "XX e XXX XXXXXXX XX XXXXXXXX*X"
+ "XXXX XXX XXXXX X e XXX XX X"
+ "XXXX XXX XXXXXXXX XXXX X X"
+ "XX * XX XXe XXXXXXXXXX XX XXX"
+ "XX XXXX X XX X XXX XXXXX XXX"
+ "XX XX XXX X XX XXXXX"
+ "XXXXX XXX *XXX X XXXXXXXX"
+ "XX* XXXXXX XXXX XXXX XXXXXXXX"
+ "XXXXX XX XXXX XXXXXXXXX XXXXXXXX"
+ "XXXXX e XXXX *XXXXXX eXXXXX"
+ "XXXXXXXX XXXXXXX XXXXXXXXX XXXXX"
+ "XXXXXX XXXXX eXXXXX XXXXX"
+ "XXXXXX XXX XXXXXXX XXXXX XXXXXXX"
+ "XX XXX X XXX XX X XX"
+ "XX XXX XXXXX XX XX XXX XX XX"
+ "XX XXXXX *X XX X XX XXXXXX*XX"
+ "X XXXXX XXXX X XX XX"
+ "X XX XXXXXXX XXXXX*X X Xe XXXX"
+ "X XXXX e X XXXXX*XX XX XXXX"
+ "X XX XXXXXX XX XXX*XXX XXX"
+ "XXXX eXXX XXXX XX XXXXX X X"
+ "XXXXXX XXXXXXXXX XX XXXX XXX X"
+ "XXX * X X XX XXXX XXX X X"
+ "XX XXXX X XX XXXX XXX X e X"
+ "XX XX * X * X XXXX XX XXX*X"
+ "XX XXX XXX XX eXXX XXX*X"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
+
+;;; Maze3 has the minimum number of mushroom sites, most
+;;; of which are between a rock and a hard place. Those
+;;; poor feebs!
+
+(defparameter *maze-3*
+ '("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "X e XXXXXX XXXXXXX*XXXXXXXXX"
+ "X X XXX XXXXX e XXXX XXX e X"
+ "X XXX XXXXXX XX XX XXX XXX X"
+ "XXX XXX XXXXXX XX XX X X e X"
+ "Xe XXX*XXXX* XX XXeX X XXXXX X"
+ "X X XXX XXXXXX XX XX X XXXXX X"
+ "X XXX XXXXXX XX* XXXXXXXXX X"
+ "X XXXXX XX e XX XXXXXXXX XXX X"
+ "X X XXX XXX XXXXX XXXXXX XXX X"
+ "Xe XXX XXXX XXXX X X X"
+ "XXX XXXX XXXXXXXX X XXX XXX"
+ "XXX eXX XXXXXXXXX XXXXX XXXXX"
+ "XXXXX XXXXXXXXXXXX XXXXXX XXX"
+ "XXXXX * XX eXX XXX XX XXX"
+ "XX*XXXX XXXXXX XX XXX XXX XX XXX"
+ "XX X XXXXX X XXX eXX XXX"
+ "X XXXXXXXX XX XXXX XXX XX XXX"
+ "X XXXXeXXXXXX XXXX XXX XX XXX"
+ "X XX*XXXXX XXXXXXXXX XXX"
+ "XXXXXX XXX XXXX XXXXXX XXX"
+ "XXXXXXXXX XXX XXXXXX XXXXXX XXX"
+ "XXX XX e eX XXXX"
+ "XX XXXXX XXXX XXXX XXXX XXXX"
+ "XX XXXXX XX XXXX XXXX XXXX XX"
+ "XX eXXXX XX XXXX XXXX XXXXXX XX"
+ "XXX XX XXX * XXX XX"
+ "XX XX XXXX* XXXX XXXX XXXXXX XX"
+ "XXX X XXXXX XXXX XXXX X XX"
+ "XXXX e XXXX XXXX X XX X X"
+ "XXXXXXXXXXXX *e X e XX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
+
+
+;;; Maze4 is symmetric about the vertical axis. (Wow...)
+
+(defparameter *maze-4*
+ '("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "X* eXXXXXXXXXXe *X"
+ "X XXXXXXXX XXXXXXXX X"
+ "X XX XXXXXXX XX XXXXXXX XX X"
+ "X XeXXXXXXX XX XXXXXXXeX X"
+ "XX X XXXXXXX eXXe XXXXXXX X XX"
+ "XX X XXXXXXX XXXXXX XXXXXXX X XX"
+ "XX * XXXXXXX XXXXXX XXXXXXX * XX"
+ "XX X XXXe eXXX X XX"
+ "XX X XXX XXXXXXXXXXXXXX XXX X XX"
+ "XX e XXX XXXXXXXX XXX e XX"
+ "XX X XXXXXX XXXXXXXX XXXXXX X XX"
+ "XX X XXXX XXXXXXXX XXXX X XX"
+ "XX XXXX XXXe eXXXX XXXX XX"
+ "XXX XXXXX XXX XXX XXXX XXXXX XXX"
+ "XXX XXXXX XXX XXX XXXXX XXX"
+ "X* XXXXX XXXX XXXXX *X"
+ "X XXXXX XX XX ** XX XX XXXXX X"
+ "X XXXXX XX XX XXXX XX XX XXXXX X"
+ "X XXX e XX XX XXXX XX XX e XXX X"
+ "X XXXXX XX XXXX XX XXXXX X"
+ "X XXXXX XXXXX XXXX XXXXX XXXXX X"
+ "X X XXXXX XXXX XXXXX X X"
+ "XXXXX * * XXXXX"
+ "XXXXX XXXXXXXX XX XXXXXXXX XXXXX"
+ "XXXXX XXXXXXXX XX XXXXXXXX XXXXX"
+ "XXXXX XXXXX XX XXXXX XXXXX"
+ "XXXX XX XXXXeXXeXXXX XX XXXX"
+ "XXX XXXX XXX XX XXX XXXX XXX"
+ "XXX XXXXXX XXX XX XXX XXXXXX XXX"
+ "XX* e XX e *XX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
+
+;;; Maze5 has a lot of long corridors good for feeb showdowns.
+;;; Furthermore, all the feeb entry-points are in the corridors.
+;;; You can run but you can't hide!
+
+(defparameter *maze-5*
+ '("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "X e e X"
+ "X XXXXXXX*XXXXXXXXXXXX XXXXXXX X"
+ "X e X"
+ "X X XXXXX XXXXXXXXXXXX XXXXX X X"
+ "X * X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX XXXXXXXXXXXX XXeXX X X"
+ "X X XX XX * XX XX X X"
+ "XeX XX XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX e XX XXeX X"
+ "X X XXeXX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX XXXXXXXXXXXX XX XX XeX"
+ "X*X XX XX XX XX X X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X XeXX XX XXXXXXXXXXXX*XX XX X X"
+ "X X XX XX * XX XX*X X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX e XX XX*X X"
+ "X X XX*XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX XX XXeX X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X X XX XX XXXXXXXXXXXX XX XX X X"
+ "X e X"
+ "X*X XXXXX XXXXXXXXXXXX XXXXX X*X"
+ "X e * X"
+ "X XXXXXXX XXXXXXXXXXXX XXXXXXX X"
+ "X e * X"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
+
+;;; Use this template to create new mazes.
+
+#| (defparameter *maze-template*
+ '("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")) |#
Added: package.lisp
==============================================================================
--- (empty file)
+++ package.lisp Wed Dec 19 15:36:51 2007
@@ -0,0 +1,211 @@
+;;; -*- Common Lisp -*-
+
+#| Copyright (c) 2007 Gustavo Henrique Milaré
+
+ This file is part of The Feebs War.
+
+ The Feebs War is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ The Feebs War is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+|#
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; ;;;
+;;; The Feebs War ;;;
+;;; ;;;
+;;; Written by Gustavo Henrique Milaré ;;;
+;;; ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;; The GPL should in the file "license", provided with the software.
+
+;;; based on Planet of the Feebs
+
+;;; About Planet of the Feebs:
+;;
+;; Written by Skef Wholey.
+;; Modified by Scott Fahlman.
+;; Modified by Dan Kuokka.
+;; Modified by Jim Healy.
+;;
+;; Graphics ported to X11 by Fred Gilham 8-FEB-1998.
+;;
+;;
+;;; This project exists thanks to them
+
+
+(defpackage :feebs
+ (:use :common-lisp)
+ ;; Export everything we want the players to get their hands on.
+ (:export *number-of-feebs* *game-length*
+ *number-of-auto-feebs*
+
+ ;; Strategic quantities
+ *points-for-killing* *points-for-dying*
+ *flame-energy* *mushroom-energy* *carcass-energy*
+ *maximum-energy*
+ *starting-energy*
+
+ ;; Game quantities
+ *maze-x-size*
+ *maze-y-size*
+ *number-of-mushrooms*
+
+ ;; Probabilities
+ *carcass-guaranteed-lifetime*
+ *carcass-rot-probability*
+ *fireball-dissipation-probability*
+ *fireball-reflection-probability*
+ *flame-recovery-probability*
+
+ ;; Difficulty variables
+ *slow-feeb-noop-switch*
+ *slow-feeb-noop-factor*
+ *sense-location-p*
+;; *sense-facing-p* ;; if this will be used, one must find a way to
+;; ;; a feeb detect other feeb's facing, and fireball's
+;; ;; direction, only relative to the feeb (in the brain call)
+;; ;; should not be so difficult
+ *may-get-maze-map-p*
+
+ ;; Slots accessors
+ name facing
+ x-position y-position peeking line-of-sight
+ energy-reserve
+ score kills
+ ready-to-fire
+ aborted last-move
+
+ my-square left-square right-square rear-square
+
+ ;; Images
+ feeb-image-p feeb-image-name
+ feeb-image-facing feeb-image-peeking
+ fireball-image-p fireball-image-direction
+
+ ;; Functions
+ list-parameter-settings
+ define-feeb delete-feeb
+ feebs
+ change-layout
+ get-maze-map
+
+ ;; Constants
+ north south east west
+
+ ;; Some layouts (can be find in mazes.lisp)
+ *maze-1* *maze-2* *maze-3* *maze-4* *maze-5*
+ *maze-template*
+
+ ;; Graphics
+ create-graphics
+
+ ;; Extras
+
+ ;; Directional arithmetic
+ left-of right-of behind-of
+ relative-facing
+
+ forward-dx forward-dy
+ left-dx left-dy
+ right-dx right-dy
+ behind-dx behind-dy
+
+ ;; Others
+ wallp
+
+ ;; Graphics for alpha release
+ simple-play print-map))
+
+(in-package :feebs)
+
+;;; Directions
+
+(defconstant north 0)
+(defconstant east 1)
+(defconstant south 2)
+(defconstant west 3)
+
+
+;;; Parameters that affect strategy of the game.
+
+(defvar *number-of-mushroom-sites* 0)
+(defvar *feeb-parameters* nil)
+
+;;; These are for security
+
+(defvar *static-parameters* nil)
+
+;;; Setting up the maze.
+
+;;; The default maze.
+;;; X represents a wall,
+;;; * represents a mushroom patch, and
+;;; e is a feeb entry point.
+
+(defvar *maze* nil)
+(defvar *fake-maze* nil)
+
+(defparameter *layout*
+ '("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+ "Xe * XXXXXXX XXXXXXXXXX"
+ "XXXXX XXXXXXX XXXXXXX * XXXXX"
+ "XXXXX XXXXXXX XXXXXXX XXX XXXXXX"
+ "XXXXX XXX XXX XXXXXXeXXX XXXXXX"
+ "XXXXX XXX XXXX XXXXXXXXXX XXXXXX"
+ "XXXXX XXX XXXX XX XXXXXXX XXXXXX"
+ "XXXXX * XX XX XXXXXXX XXXXXX"
+ "XXXXX XXXX XXX XX* * XXXXXX"
+ "XX *XXXX XXX XX XXXX XXXXXXXXX"
+ "XX XX XXXXeXXX XX XXXX XXXXXXXXX"
+ "XX XX XXXX XXX * * * X"
+ "XX XX XXXX XXXXXXXX XXXXXXXXXXeX"
+ "XXeXX XXXX XXXXXXXX XXXXXXXXXX X"
+ "XX XX * * XXXXXXXX X"
+ "XX XXXXXXXXXXX XXXX XXXXXXXX XXX"
+ "XX eXXXXXXXXXX XXXe XXXXXX XXX"
+ "XX XXXXXXXXXXXXe XXXXXXXXXXX XXX"
+ "XX* XXX XXXXXXX XXXXXXXXXX XXX"
+ "XX X XX XXXXXXXX eXXXXXXXXX XXX"
+ "XX XX X XXXXXXXXX XXXXXXXX XXX"
+ "X XXX * XXXXXX* * X"
+ "X XXXXXX XXX XXXXXX XXXXXXXXXX X"
+ "X XXXXXX XXX XXXXXX X X X"
+ "X XXXXXX XXX XXXXXX X XXXXXX X X"
+ "X * * XX X X *eX X X"
+ "XXXXX XXXX XXXXXXXX X XXX XX X X"
+ "XXXXX XXXX XXXXX *X XXX XX X X"
+ "XXXXX XXXX XXXXX XX X e X X"
+ "XXXXX XXXX e XX XXX*XXXXXX X"
+ "XXXXX XXXXXXXXXXXXX X"
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"))
+
+(defparameter *maze-x-size* 32)
+(defparameter *maze-y-size* 32)
+
+
+;;; Quantities during the game
+
+(defvar *mushroom-sites*)
+(defvar *entry-points*)
+(defvar *number-of-entry-points*)
+(defvar *mushrooms-alive*)
+
+;;; Elements in the maze
+
+(defvar *fireballs-flying*)
+(defvar *dead-feebs*)
+(defvar *carcasses*)
+
+(defvar *continue*)
+
Added: system.lisp
==============================================================================
--- (empty file)
+++ system.lisp Wed Dec 19 15:36:51 2007
@@ -0,0 +1,304 @@
+;;; -*- Common Lisp -*-
+
+#| Copyright (c) 2007 Gustavo Henrique Milaré
+
+ This file is part of The Feebs War.
+
+ The Feebs War is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ The Feebs War is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+|#
+
+
+(in-package :feebs)
+
+(defun reincarnate-feeb (feeb)
+ (let ((pos (nth (random (length *entry-points*)) *entry-points*))
+ (status (feeb-status feeb)))
+ (place-object (feeb-image feeb)
+ (pos-x pos) (pos-y pos))
+ (change-feeb-pos feeb (pos-x pos) (pos-y pos))
+ (change-feeb-facing feeb (random 4))
+ (setf (feeb-dead-p feeb) nil
+ (ready-to-fire status) t
+ (energy-reserve status) *starting-energy*
+ (last-move status) :dead)))
+
+
+;;; Vision calculation.
+
+;;; These guys tell us offsets given an orientation.
+
+(defun compute-vision (feeb)
+ (let ((status (feeb-status feeb))
+ (proximity (feeb-proximity feeb))
+ (vision (feeb-vision feeb))
+ (vision-left (feeb-vision-left feeb))
+ (vision-right (feeb-vision-right feeb))
+ (facing (feeb-facing feeb))
+ vision-dx
+ vision-dy
+ (x (feeb-x-position feeb))
+ (y (feeb-y-position feeb)))
+ ;; First fill in proximity info.
+ (setf (my-square proximity)
+ (aref *maze* x y)
+ (left-square proximity)
+ (aref *maze* (+ x (left-dx facing)) (+ y (left-dy facing)))
+ (right-square proximity)
+ (aref *maze* (+ x (right-dx facing)) (+ y (right-dy facing)))
+ (rear-square proximity)
+ (aref *maze* (+ x (behind-dx facing)) (+ y (behind-dy facing))))
+ ;; The vision vector starts in the square the feeb is facing.
+ (setf x (+ x (forward-dx facing))
+ y (+ y (forward-dy facing)))
+ ;; Figure out which direction to scan in.
+ (case (peeking status)
+ (:left (setf facing (left-of facing)))
+ (:right (setf facing (right-of facing))))
+ (setf vision-dx (forward-dx facing)
+ vision-dy (forward-dy facing))
+ ;; compute vision, vision-left and vision-right
+ (do* ((x x (+ x vision-dx))
+ (y y (+ y vision-dy))
+ (left-wall-x (+ x (left-dx facing)) (+ left-wall-x vision-dx))
+ (left-wall-y (+ y (left-dy facing)) (+ left-wall-y vision-dy))
+ (right-wall-x (+ x (right-dx facing)) (+ right-wall-x vision-dx))
+ (right-wall-y (+ y (right-dy facing)) (+ right-wall-y vision-dy))
+ (index 0 (1+ index)))
+ ((wallp (aref *maze* x y))
+ (setf (aref vision index) (aref *maze* x y)
+ (aref vision-left index) :unknown
+ (aref vision-right index) :unknown
+ (line-of-sight status) index))
+ (setf (aref vision index) (aref *maze* x y)
+ (aref vision-left index)
+ (side-imagify (aref *maze* left-wall-x left-wall-y)
+ (right-of facing))
+ (aref vision-right index)
+ (side-imagify (aref *maze* right-wall-x right-wall-y)
+ (left-of facing))))))
+
+;;; Compute the info to be put into the vision-left and vision-right vectors.
+;;; A peeking feeb must be facing in the specified direction in order to count.
+
+(defun side-imagify (stuff facing)
+ (cond
+ ((wallp stuff)
+ stuff)
+ ((find-if #'(lambda (thing)
+ (and (feeb-image-p thing)
+ (peeking (feeb-status (feeb-image-feeb thing)))
+ (= facing (feeb-image-facing thing))
+ (setf facing thing)))
+ stuff)
+ (peeking (feeb-status (feeb-image-feeb facing))))
+ (t nil)))
+
+;;; Movement.
+
+;;; Each turn, the following stuff has to happen:
+;;; 1. Bump the turn counter; end the game if we should.
+;;; 2. Maybe grow some mushrooms.
+;;; 3. Maybe disappear some carcasses.
+;;; 4. Move fireballs around.
+;;; 5. See if any feebs have starved.
+;;; 6. See if any feebs can flame again.
+;;; 7. Compute vision and stuff for feebs.
+;;; 8. Collect the feebs' moves.
+;;; 9. Do the feeb's moves.
+
+(defun play-one-turn ()
+ ;; Grow some mushrooms:
+ (dotimes (x (- *number-of-mushrooms* *mushrooms-alive*))
+ (let* ((site (nth (random *number-of-mushroom-sites*) *mushroom-sites*))
+ (x (pos-x site))
+ (y (pos-y site)))
+ (unless (member :mushroom (aref *maze* x y))
+ (place-object :mushroom x y))))
+ ;; Rot some carcasses:
+ (dolist (carc *carcasses*)
+ (when (and
+ (> (incf (first carc) *carcass-guaranteed-lifetime*))
+ (chance *carcass-rot-probability*))
+ (delete-object :carcass (second carc) (third carc))
+ (setf *carcasses* (delete carc *carcasses*))
+ (if *dead-feebs*
+ (reincarnate-feeb (pop *dead-feebs*)))))
+ ;; Move some fireballs:
+ (dolist (fireball *fireballs-flying*)
+ (move-one-fireball fireball))
+ ;; Starve some feebs:
+ (dolist (feeb *feebs*)
+ (unless (feeb-dead-p feeb)
+ (when (<= (decf (energy-reserve (feeb-status feeb))) 0)
+ (kill-feeb feeb))))
+ ;; Let some feebs regain the power to flame:
+ (dolist (feeb *feebs*)
+ (unless (and (feeb-dead-p feeb)
+ (ready-to-fire (feeb-status feeb)))
+ (when (and (> (incf (feeb-turns-since-flamed feeb))
+ 1)
+ (chance *flame-recovery-probability*))
+ (setf (ready-to-fire (feeb-status feeb)) t))))
+ ;; Collect all the feebs' moves, keeping track of the time each one takes.
+ (let ((total-time 1))
+ (dolist (feeb *feebs*)
+ (unless (feeb-dead-p feeb)
+ (compute-vision feeb) ; Compute vision for all the feeb.
+ (let ((time (get-internal-real-time)))
+ (let ( *static-parameters* *fake-maze*)
+ (setf (last-move (feeb-status feeb))
+ (funcall (feeb-brain feeb)
+ (feeb-status feeb)
+ (feeb-proximity feeb)
+ (feeb-vision feeb)
+ (feeb-vision-left feeb)
+ (feeb-vision-right feeb))
+ time (- (get-internal-real-time) time)))
+ (incf total-time time)
+ (setf (feeb-time feeb) time))))
+ ;; Do all the feebs' moves, or perhaps abort the move according
+ ;; to the time taken by the feeb.
+ (setf total-time (float total-time))
+ (dolist (feeb *feebs*)
+ (unless (feeb-dead-p feeb)
+ (if (and *slow-feeb-noop-switch*
+ (< (random 1.0)
+ (* *slow-feeb-noop-factor*
+ (/ (float (feeb-time feeb))
+ (or *reference-time* total-time)))))
+ (progn
+ (setf (aborted (feeb-status feeb)) t)
+ (incf (score (feeb-status feeb)) *points-for-slow-down*))
+ (progn
+ (setf (aborted (feeb-status feeb)) nil)
+ (do-move feeb (last-move (feeb-status feeb)))))
+ ;; Make the image consistent with the feeb.
+ (setf (feeb-image-facing (feeb-image feeb))
+ (feeb-facing feeb))))))
+
+(defun move-one-fireball (fireball)
+ (let ((x (fireball-image-x fireball))
+ (y (fireball-image-y fireball)))
+ ;; Remove fireball from current square, unless it is new.
+ (if (fireball-image-new fireball)
+ (setf (fireball-image-new fireball) nil)
+ (delete-object fireball x y))
+ ;; The fireball might dissipate.
+ (when (chance *fireball-dissipation-probability*)
+ (setq *fireballs-flying* (delete fireball *fireballs-flying*))
+ (return-from move-one-fireball nil))
+ ;; Now move it to new coordinates.
+ (incf x (fireball-image-dx fireball))
+ (incf y (fireball-image-dy fireball))
+ ;; If it hits rock, either reflect or dissipate.
+ (when (wallp (aref *maze* x y))
+ (cond ((chance *fireball-reflection-probability*)
+ (setf (fireball-image-dx fireball)
+ (- (fireball-image-dx fireball)))
+ (setf (fireball-image-dy fireball)
+ (- (fireball-image-dy fireball)))
+ (setf (fireball-image-direction fireball)
+ (behind (fireball-image-direction fireball)))
+ (setq x (fireball-image-x fireball))
+ (setq y (fireball-image-y fireball)))
+ (t (setq *fireballs-flying*
+ (delete fireball *fireballs-flying*))
+ (return-from move-one-fireball nil))))
+ ;; Now put the fireball into the new square.
+ (setf (fireball-image-x fireball) x)
+ (setf (fireball-image-y fireball) y)
+ (place-object fireball x y)
+ ;; And destroy whatever is there.
+ (delete-object :mushroom x y)
+ (dolist (thing (aref *maze* x y))
+ (if (feeb-image-p thing)
+ (score-kill fireball (feeb-image-feeb thing))))))
+
+;;; The fireball kills the feeb. Update score for killer and victims.
+;;; No credit for the kill if you shoot yourself.
+
+(defun score-kill (fireball feeb)
+ (unless (eq (fireball-image-owner fireball) feeb)
+ (incf (score (feeb-status (fireball-image-owner fireball)))
+ *points-for-killing*)
+ (incf (kills (feeb-status (fireball-image-owner fireball)))))
+ (kill-feeb feeb))
+
+;;; Doing feeb moves.
+
+(defun do-move (feeb move)
+ (let ((status (feeb-status feeb))
+ (facing (feeb-facing feeb)))
+ ;; Peeking gets undone every move.
+ (setf (peeking status)
+ (setf (feeb-image-peeking (feeb-image feeb)) nil))
+ (case move
+ (:turn-left
+ (change-feeb-facing feeb (left-of facing)))
+ (:turn-right
+ (change-feeb-facing feeb (right-of facing)))
+ (:turn-around
+ (change-feeb-facing feeb (behind facing)))
+ (:move-forward
+ (let* ((old-x (feeb-x-position feeb))
+ (old-y (feeb-y-position feeb))
+ (new-x (+ (forward-dx facing) old-x))
+ (new-y (+ (forward-dy facing) old-y))
+ (stuff (aref *maze* new-x new-y)))
+ (when (wallp stuff)
+ (return-from do-move nil))
+ (delete-object (feeb-image feeb) old-x old-y)
+ (change-feeb-pos feeb new-x new-y)
+ (place-object (feeb-image feeb) new-x new-y)
+ ;; Look for a fireball in the destination square.
+ (let ((thing (find-if #'fireball-image-p stuff)))
+ (when thing
+ (score-kill thing feeb)
+ (return-from do-move nil)))))
+ (:flame
+ (when (ready-to-fire status)
+ (let* ((x (feeb-x-position feeb))
+ (y (feeb-y-position feeb))
+ (fireball (make-fireball-image
+ facing feeb x y
+ (forward-dx facing) (forward-dy facing))))
+ ;; Queue the fireball, marked as new, but don't put it on map yet.
+ (push fireball *fireballs-flying*)
+ (decf (energy-reserve status) *flame-energy*)
+ (setf (ready-to-fire status) nil)
+ (setf (feeb-turns-since-flamed feeb) 0))))
+ (:eat-mushroom
+ (let* ((x (feeb-x-position feeb))
+ (y (feeb-y-position feeb)))
+ (when (member :mushroom (aref *maze* x y))
+ (delete-object :mushroom x y)
+ (setf (energy-reserve status)
+ (min (+ (energy-reserve status) *mushroom-energy*)
+ *maximum-energy*)))))
+ (:eat-carcass
+ (let* ((x (feeb-x-position feeb))
+ (y (feeb-y-position feeb)))
+ (when (member :carcass (aref *maze* x y))
+ (setf (energy-reserve status)
+ (min (+ (energy-reserve status) *carcass-energy*)
+ *maximum-energy*)))))
+ ((:peek-left :peek-right)
+ (unless (wallp (aref *maze* (+ (feeb-x-position feeb)
+ (forward-dx facing))
+ (+ (feeb-y-position feeb)
+ (forward-dy facing))))
+ (setf (peeking status)
+ (setf (feeb-image-peeking (feeb-image feeb)) move))))
+ (:wait nil)
+ (t (warn "Unknown feeb movement: ~a." move)))))
More information about the The-feebs-war-cvs
mailing list