kaw's 7DRL project for 2010. (A roguelike game.)
Python
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
cerealizer
fonts
meta
.gitignore
LICENSE
LICENSE.Bitstream
Makefile
README
ai.py
cursesui.py
gamewidget.py
grammar.py
harmless7drl.py
items.py
level.py
levelgen.py
libtcodpy.py
magic.py
monsters.py
pathfind.py
plot.py
py2exe_setup.py
serialization.py
standard.cfg
tcodui.py
textwrap.py
timing.py
traps.py
vision.py
widgets.py
windows.cfg

README

                      Harmless
               A seven-day roguelike
                       by kaw

                    Version 1.1
                  (second release)

    == CONCEPT ==

This is a game about surviving by using your abilities
cleverly. Direct hack-and-slash approaches are
probably -- hopefully! -- doomed to failure (though
if you become very skilled at the game, it may be fun
to try as a challenge game).

Nearly every monster in the game has some sort of
special behaviour. Observing how the monsters behave
and figuring out ways to deal with them (not
necessarily kill them) is a large part of the game.

Good luck!

    == STARTING THE GAME ==

To start the Windows binary, simply extract all the
files in a directory the executable will be able to
write to (for save files and win/loss reports), and
execute harmless7drl.exe.

To start the game from source (on Linux or another
platform that supports curses in Python), simply type
    python harmless7drl.py
at the console. (Substitute appropriately if your
"python" does not point to a version of Python 2.
The game was tested on Python 2.5 for Linux and
Python 2.6 for Windows.)

    == MAGIC SYSTEM ==

Figuring out the magic system is not meant to be
"part of the challenge", so I will explain it here
in case it is confusing.

To succeed in the game, you will almost certainly need
to cast spells -- the ability to cast these is the only
advantage you have over the monsters (well, besides
human-level intelligence).

You start the game with no spells in your spellbook.
To obtain spells, you need to collect magical runes
and identify them. Unidentified runes in your
possession can be identified by using a magic
scroll (by selecting it from the inventory menu).
At any time, you can press 'w' to attempt to scribe
a spell. If you have identified runes in your
possession that would form a spell, you will be
given the option to write it into your spellbook,
losing the runes.

After you have written a spell into your spellbook,
you can cast it as often as you like from the
magic menu ('m'). However, you are limited by the
amount of mana available in your staff. This amount
does not recharge -- after your staff is depleted,
you must discard it and find a new staff. (Of course,
it's probably wise to keep spare staves, so that you
will not ever end up in a situation where you are
completely unable to cast spells.)

    == ABOUT ROGUELIKES IN GENERAL ==

Roguelikes with traditional interfaces (like this one)
can be daunting to first-time players. If you have not
played any other roguelikes (games like NetHack or ADOM),
reading the "Instructions" on the main menu may be
of help in comprehending how the game works.

    == WIN REPORTS ==

The game writes reports on wins and losses as .txt
files in the main game directory.

If you win, or just play an interesting game, please
do share these -- I'd find it intestesting to see how
other people are playing the game.

During testing I have _almost_ finished the game, so
I feel confident saying that it's theoretically
completable, just pretty difficult. (If it sounds
amazing that I haven't even finished my own game,
please do consider that there's not a lot of time to
test a 7DRL.)

    == KNOWN ISSUES ==

Bug- and annoyance-fix versions may or may not be
released later. Here are a few issues that are known
to me:

Saving and loading takes a long time, and the files
may grow large. (This is not likely to be fixed
since it's a direct result of programmer-time saving
simplifications.)

The game may on occasion appear to freeze for a
moment; this is related to level generation and
should only happen once for each dungeon floor.
(It might happen before the player actually
descends.)

In some situations, it's easy to miss console messages.
A solution to this is likely to be worked out in
an annoyance-fix release.

There are also probably a few straight-out bugs remaining;
if you experience weird behaviour or crashes, please send
me a bug report. If the game crashes, the error output
from Python will likely be very useful to me: this is
output to the console if you're executing from source
and put in a ".log" file if you're executing the packaged
Windows binary.

    == ABOUT THE SOURCE ==

The source is freely available, but if you want to play
the game unspoiled (which might lead to the best play
experience, since the game is at least partly one of
discovery), you should stay away from certain source
files until you have played for a while.

These files are marked with comments in the first few
lines.

Note also that this is hardly exemplary code, having
been written under a strict time limit.

The code has been released under the MIT license.
The full text of the license can be found in the
LICENSE file.

The source can currently be found on github:
      http://github.com/svk/harmless7drl

    == CONTROLS ==

Movement (use any of the listed keys)

                    Vi      Numpad      Arrow
    north           k       8           up
    south           j       2           down
    east            l       6           right
    west            h       4           left
    northeast       u       9
    northwest       y       7
    southeast       n       3
    southwest       b       1

Menu system
    up              k       8           up
    down            j       2           down

    select              enter, space

Other game keys
    wait                .
    pick up             ,
    drop                d
    close door          c
    down                >
    up                  <
    write spell         w
    cast spell          m
    inventory           i
    look-mode           :

Game management keys
    quit and save       q
    abandon game        Q
    help                ?

    == ACKNOWLEDGEMENTS ==

Stuff included in this package that is not my own work:
    Cerealizer 0.7
    http://home.gna.org/oomadness/en/cerealizer/index.html
    Python License
    Jean-Baptiste Lamy "Jiba"

    Fonts derived from Bitstream Vera (for the license,
    see LICENSE.Bitstream).

    (with the Windows binary)
    The Python 2.6 interpreter, as packaged by Py2Exe.


    == DEVELOPMENT TIME ==

The first released version of this game was coded entirely
in 168 hours starting from 18:00 on Sunday March 7 2010,
UTC+1. It was an entry in the 2010 7DRL challenge.

This release fixes bugs (including one crash bug) and
enhances the UI in several ways, but does not change
any of the gameplay.

    == THINGS I'VE LEARNED DURING THE CODING OF THIS GAME ==

 -Learning Haskell really changes your Python code.
 -WCurses (the Python curses port for Windows) is not
  terribly great.
 -But libtcod is pretty good. I can't imagine ever hacking
  up an ASCII window in SDL for a 7DRL ever again.
 -Tea tastes a great deal better when it's fresh.
 -Being restricted to the curses standard colours is hell
  on UI designers.
 -Cerealizer is pretty neat!
 -..but looking at the uncompressed stream in a hex editor
  really makes you wonder about it.
 -I'll never be able to get Spiral FOV right on the first
  try.
 -Sometimes, it might be better to have separate classes
  for boulders, monsters and player objects. (This is
  advice I did not actually take with this project.)
 -With an average height of 16 inches and a weight of 2
  pounds, the little blue penguin is the smallest of all
  18 species of penguins. [Thanks to an educational site
  for 4th to 6th graders for that one.]
 -git is pretty useful, and not just as a dev-log writing
  tool.
 -Random brainstorming tends to be more effective with
  just pen and paper than with the code in front of you.
 -Working on Windows is tolerable as long as you can
  stay within PuTTY for all your work.
 -Going back to Python 2.5 string formatting after getting
  used to the 2.6 way is painful.
 -Py2Exe binaries don't actually need to be tens of
  megabytes!
 -Freeze is.. not a realistic alternative. Terribly sorry
  to people who want binaries for Mac/Linux.
 -Writing lists for the README during dev time is a form
  of procrastination.

    == CONTACTING THE AUTHOR ==
If you have questions or comments about the game, please
do contact me. I can be reached on kaw.dev@gmail.com or
as "kaw" on #rgrd on QuakeNet (IRC).