Commit 5c7b87bc authored by Michael's avatar Michael
Browse files

Initial commit

You, brave soul, have dared to consider building POWDER?
Do you not know this source is only released to taunt you?
Still undeterred?
Well, let us first examine your target platform.
(Hint: If it is not Linux/Mac OSX you are in for a world of pain)
If you just want to replace the graphics, go no farther! Look for
an artpack distribution on a previous release for instructions on
how to do this with no compiling needed!
= Linux =
A script called is here. Invoke it. If nothing goes wrong, you
are done. If things go wrong? Perhaps install sdl-dev? Sacrifice another
grid bug? The signs are unclear.
The tea leaves clear. Make sure you have bash and GNU make!
Do not try to run make from the source root.
You may need to chmod +x some scripts. Cygwin sucks.
= Mac OSX =
A script called is here. Invoke it. If nothing goes
wrong, you are done. If things go wrong? Make sure you have
installed the SDL framework in /Library/Framework. Otherwise I don't
Do not try to run make from the source root. Do not try to run make
from port/mac either, as it requires ARCH to be set.
You may need to chmod +x some scripts. Cygwin sucks.
= Windows =
.sln is your friend. You need MSVC2003 or later. Build everything in your
support directory that has .sln. Put them in your path.
Use those tools to build the support files - the contains clues.
port/windows may then be loaded and build.
= GBA =
Purchase a copy of HAM Lib. The free version does not work.
Use your local compiler to build all the support directory files and put them
in your path.
In gfx, run domake.bat.
In the source root, run make.
= DS =
Download devkitPro. Thank Richard Quirk for fixing the r21
compatibility problem, allowing you to merely use the latest version.
Use your local compiler to build all the support directory and dump them in
your path. Again, you must manually transform the secondary files using as a clue.
Finally, invoke make in your MSys devkitpro window in the port/ds directory.
Victory shall be thine!
= PSP =
The PSP port is thanks to the most excellent Marvin Sanchez. Since I
don't have a PSP myself, I'm compiling this blindly.
He reports success with Cygwin on Windows, I am building under Linux.
In either case, you want a copy of pspdev from Download the Toolchain specified there.
You also need to install/compile the SDL for the PSP. I found this
website intructive:
Then you should be able to follow the DS instructions.
= GP2X =
The GP2X port is thanks to the most excellent David Parker. Since I
don't have a GP2X myself, I'm compiling this blindly.
A script called is here that should get you going.
He used oopo's toolchain, which should work with the given Makefile,
but if not you may need to change ports/gp2x/Makefile to the correct
paths to your SDK/compiler.
Packaging involves copying the Powder2X directory from port/gp2x to
your SD card. Follow that by the executable powder in port/gp2x into
the Powder2x/pdata directory. Finally, dump the gfx and rooms
directories to Powder2X/pdata on the SD card.
= WinCE =
The Windows CE port is thanks to the most excellent Ilya Kasnacheev.
I don't have a Windows CE device nor a build environment, so Ilya has
been releasing the versions.
In the port/wince directory there is a README should consult on how to
get this working. Be warned that setting up the toolchain is not
trivial, so it is likely best if you first successfully build a normal
Windows POWDER version before trying this.
Compile time flags are:
A Un*x system is being built. This includes Mac OSX.
A specifically Mac version.
Built in Windows
Nintendo DS build
Built for Windows CE.
Use 10x10 base tiles by default rather than 8x8.
PSP build. USING_SDL is also set.
A GBA build with devkitPro rather than HAM
An SDL based build.
Keyboard input method present, hamfake_getkey() does something.
If not set, buttons are used for the input method.
A stylus exists, enabling mouse based input
A button based input with four normal buttons.
System can save and load arbitrary files.
printf and assert exist and are used.
Please remember that this is not open source. Thank you.
Looking at the header of the various .cpp and .h files, you will see
the following boiler plate:
* PROPRIETARY INFORMATION. This software is proprietary to POWDER
* Development, and is not to be reproduced, transmitted, or disclosed
* in any way without written permission.
This would seem to prohibit all use or distribution of this source.
So, how on earth did you get a copy?
The answer is that the author (Jeff Lait) decided to extend a sort of
written permission over the source code.
So, the million dollar question, which license?
This work is licensed under the Creative Commons Sampling Plus 1.0
License. To view a copy of this license, visit or send a letter to
Creative Commons, 171 Second Street, Suite 300, San Francisco,
California, 94105, USA.
(This, obviously, does not apply to files which state other licenses,
for example, mt19937ar.c is separately licensed. Note, in particular,
the bitmaps are under a different license(s) that you can find in the
relevant artpacks)
Now, what does Sampling Plus entail?
1) This is *NOT* an Open Source license. This code is not "free".
2) You can redistribute the UNCHANGED source non-commercially.
3) You can modify the source to port to other platform or get it to
compile on your system. ("The above rights include the right to
make such modifications as are technically necessary to exercise
the rights in other media and formats.") You may also publish the
resulting changes to the source.
a) You are not required to publish the changes, but I encourage you
to provide them to me to roll into the main POWDER baseline.
4) You may *NOT* "fork" the POWDER distribution. But...
a) You can extract "samples" from the distribution. These samples
can be used commercially. The samples must not constitute a
substantial part of your new work. For example, you could lift
the Line of Sight routines for your roguelike and merge it into
whatever new license you wish.
b) You can "mash up" the code. Think "total conversion" - a result
which a player would not recognize the similarities to POWDER.
The sampling license, you will note, is designed for music, not code.
This leaves open some questions of interpretation which I shall
interpret here:
1) Warranties. This code is not executable hence requires no more a
warranty than the science fiction novel I just read. The compiler
of the code is responsible for disclaiming warranties in the
resulting executable. This is likely *you*. So, if you are
paranoid, read the damn source.
2) The result of sending the source through the compiler is a derived
work, but *not* a "highly transformative" work. The purpose of the
re-creativity is for there to be an injection of creativity in the
process which, barring AI, we shall claim the computer does not
3) If you want to get all rules-lawyersy and what-not about the
specifics of what this means, you have two options:
a) Contact me (Jeff Lait) regarding your specific application and I
will try and find someway to approve it.
b) Treat this whole license as invalidly formed and hence reverting
to a standard all-rights-reserved distribution. In which case I
ask you to please immediately delete your unauthorized copy of
the source. HTH. HAND.
Finally, a note about patches. I understand it is commonly
understood that patches submitted to the creator are implied to be
under the creator's license. In this case, I shall consider such
patches to be "samples". As such, I will be able to incorprate them
burdened only by the need to attribute the patch creator. I will
retain the right to re-license the resulting work under another
license, either stricter (ie, stop distributing source) or weaker (ie,
public domain (if that is even possible, sigh) or GPL)
The development of POWDER has been influenced, both directly and
indirectly, from many sources.
This document is by no means exhaustive. The release notes for the
individual versions is likely more complete.
:Influential People:
Everyone who has posted on* while I've
lurked there :>
:Bug Reporters:
R. Alan Monroe, Gottardo Zancani (Zak), James Parker, Ben Shadwick,
Lauri Vallo, Casey Robinson, Janne Joensuu, Stu, Igor D. WonderLlama,
Victor Rehorst, copx, Florian 'The Outrider' Piesche, Andrew Walker,
Kelly Bailey, Bill (hotpoo), Carsten Brockmann, Alexander (Monsterz),
PBP, Jorge Gonzalez, Brandon Mullins, Lars Radmacher, Cheese Lottery,
Andrew Poandl, Syrra, Erik Piper, David Damerell, Clare Boothby,
Elias Erkamo, Guy Banay, Arthur Littlefield, James (darkspoon), Mark
Ehlke, Elias Erkamo, Yann Vernier, Fancy Carrot, Richard Quirk, Peter
Biocini, Akoi Meexx, David Hong, Martin Read, JCM, Brendan, Ben Hjelt,
Grothias, Kaddar, John Overmars, Ciaran Walsh, Michal Bielinski,
Kantaphon Tongmee, Rachel Elizabeth Dillon, Matthew Rollins, Rapacity,
Nick Sabo, Markus Maier, Tomo, Matt, TemporalParadox, wing, Michael
Brough, Deozaan, elcugo, Zappa Penguin, Colin Pritchard, sparrohawc, Zach
Firth, R. Dan Henry, Xaintrix, stabwound, Oohara Yuuma, Eilu, Robert,
Iain McCord, Mark Rushakoff, Korgoth, Malte Helmert, The Rani, Peter
Roozemaal, Robert Hamaker, FEG, Bridget Farace, David R. Schultz,
Tobias Pierce, Vladimir Stalin, Narius Varigor, jockmo 42, Cuboidz,
Meddyan, Stefan O'Rear, Pikadude No. 1, Teun Peelen, Roger Bolton,
Mikko Karttunen, SparroHawc, Ambvai, Erik Spigel, Joe B, Strange Child,
Kayvon, Stefan O'Rear, Gwazi01, Will Weinzettl, Johaan Strojandogg,
Nicholas Young, Lawrence T. Levine, Garron Bailey, Michal Skrzypek,
Garron, Eris Discordia, Nathan Bogue, Inu, Kender, Mental Mouse,
Patrick Don't have one, Matt_S, Sam Spencer, Alex Marsh, Robert Barber,
Mattock, Lorenzo Batallones, Konstantin Stupnik, Paul Nguyen,
sulai, Claudio, B. Perry, Julian Agloro, Aapo Rantalainen,
Paul Strickland, Michael Gindt, Mike Ratzlaff, Gurkan Sengun,
Don Collins.
:Patch Writers:
Richard Quirk, Ciaran Walsh, Marvin Sanchez, Oohara Yuuma, Peter Roozemaal,
Derek S. Ray, David Parker, Ilya Kasnacheev, Andreas Bohm, Zasenko Sergey,
Joe Buck, Michael Sterrett, Matthew Wyatt.
:Tileset Artists:
Adam Bolt, Akoi Meexx, Andrea Menga, Zak, Kelly Bailey, Markus Maier,
Ibson the Grey, Chris Lomaka.
:Special Notes:
Adam Bolt: Unsurprisingly, the tiles in the Adam Bolt tileset came
from Adam Bolt's tileset.
Akoi Meexx: The Akoi Meexx tileset, which is now the default POWDER
Andrea Menga (Widar): The Nethackish Tileset.
Bill Blake: The PS3 Port
Ben Shadwick: Another use for bottles of water, skill level
notification, and many other valuable suggestions.
Casey Robinson: [Select] to do a one time command on Start menu.
Darshan Shaligram: Character Dump option.
David Parker: Port of POWDER to the GP2X.
Emanuel Schleussinger: Creator of HAM, the library for the GBA that
made this much, much, easier.
Erik Piper: Numerous UI suggestions for both SDL and GBA versions which
I used.
Gottardo Zancani (Zak): Binding [L] and [R] buttons. Cool maps.
Compiling the Adam Bolt tilesets.
Hansjorg Malthaner: Sunfire Spell.
Ilya Kasnacheev: WinCE port.
Igor D. WonderLlama: Second ascension post on (063).
Jose Ignacio Rodriguez Fernandez: Push to multilingualism. Reminder
to invalidate games on death.
Jonathan Buchanan: The Wii Port
Kantaphon Tongmee: Discussion on god code.
Kelly Bailey: The ASCII Tileset.
Lauri Vallo: First [POWDER] post on First
ascension post on Inspirational rumours for
the Blue Dragon Cavern. Now all I need are fortune cookies of some
Markus Maier: Bevy of font redesigns.
Marvin Sanchez: Port of POWDER to PSP.
R. Alan Monroe: Suggestions for UI improvements. Most of which I
haven't used, but know that I should. (One day I'll get around to
proportional fonts...)
R. Dan Henry: Reminding me the inventory screen is ugly.
Richard Quirk: Submitted (the first) code patches for improved DS
5parrow: Mouse movement algorithm on
Takuji Nishimura and Makoto Matsumoto: The most excellent Mersenne
Tim Jordan: Character sheet improvements.
Magne Groenhuis: Item teleportation.
Victor Rehorst: Requesting better Pogoshell support.
William Franklin: Proper death of Skeletons.
Will Shattuck: Plain text key assignment list.
:Influential Games:
The first roguelike I played. POWDER seeks to build a similar world
of interoperability, where one can say "The dev team thought of
everything!" Seeks is the operative word here.
While my introduction to Nethack was a finished game, I had the chance
to play ADOM as it evolved. This gave a good insight into the
development process.
Started POWDER without having played this. However, when I returned
to the roguelike newsgroups after many years absence, I found everyone
talking about Crawl. From what I've read, for good reasons. Thus,
I've read up on spoilers for Crawl, seeking always the key pieces of
game design that can be lifted into POWDER. Sticky Flames, for
example, comes from here. After playing Crawl for a bit, I also was
motivated to change the shadow code to highlight LOS.
POWDER is copyright 2003-2009 by Jeff Lait.
All rights reserved.
The Adam Bolt tileset are copyright by Adam Bolt and are licensed
separately. Other tilesets are creations of the respective creators -
download the latest artpack for details.
MSVCP71.DLL and MSVCR71.DLL are owned and licensed entirely by
Microsoft. They are redistributed with POWDER as per their edicts. I'd
rather not have to include them.
Simple DirectMedia Layer (SDL) library is licensed under the GNU
Lesser General Public License (LGPL). POWDER conforms to the third
clause - where you downloaded this should also have been a link to
download a source tarball.
Information about SDL can be found at:
Information about the LGPL license can be found at:
Information about the Mersenne Twister can be found at:
You are allowed to execute the POWDER binary, either by running it in
an emulator or on hardware.
You are allowed to duplicate the POWDER distribution provided you:
1) Keep the distribution intact. This means keeping this license.
2) Do not charge for the act of duplication, nor for the medium of
duplication above the rate which you paid to acquire it.
3) Do not add to the distribution in a manner which obscures the
original author.
4) Do not modify the POWDER binary nor accompanying files. This
includes, but is not limited to, the removal of any licensing or
copyright information embedded in the files.
An exception is made when duplicating to a cartridge or similar device
for purpose of executing the binary on hardware. In this case, the
binary alone needs to be duplicated (as that is all that is practical)
An exception is made for patching the binary to run on certain
You are free to transfer copies of POWDER to others, provided they
remain unaltered, and the transfer is performed without payment. You
are encouraged to instead show people to the author's current web site
where the latest version may be acquired.
Reverse Engineering
You are strongly discouraged from reverse engingeering the POWDER
binary. If you have questions about how an algorithm worked, contact
the author who will likely freely answer. If would like the source,
check the download site where it is available.
Neither the author, nor anyone associated with the distribution of
this binary to your system, is responsible for any damage done to your
computer, console, or handheld. This includes, but is not limited
to, loss of data, work, time, or hardware.
In some, or all, places, a limitation of liability may not be
possible. It is your responsibility to verify that within your
jurisdiction the above disclaimer fully exempts the author from all
liability. If it does not, all earlier rights of execution,
duplication, and transfer are rescinded.
Welcome to POWDER!
This is the distribution of the POWDER roguelike created by me (Jeff
Lait) for the Gameboy Advance. There's not much in this README,
primarily because I've been to lazy to turn questions into a FAQ, but
also because I'm relying on the built-in help to provide proper
Check out:
If that website is gone, I recommend mashing all the keys on your GBA
until you find out what controls what.
To get in game help on the Gameboy, while playing hit [Start], scroll
down to Options..., then select Help. The Gameboy help option will
explain how the Gameboy buttons work.
If you want to work on POWDER, please contact me! I am not adverse to
outside input - the tilesets other than classic are all from POWDER
players. Special room maps are also relatively easy to build. Coding is
also an option - POWDER's source is available on the zincland website.
Please read COPYING.TXT in the source distribution for details.
Thanks to Will Shattuck, we now have a key-assignment list for those
playing the PC versions of POWDER:
POWDER Key Assignments
k 8
h.l or 4.6 or arrow keys
j 2
Both > and < can be used to climb ladders, dive into or swim out of
pools, or climb into or out of pits.
By default, you attack things when you move into them. If you change your
safewalk status, either permamently with the safe walk option, or temporarily
by hitting Ctrl, you will not attack when you try to move into creatures.
Shift-moving will swap in that direction. Alt-moving will jump.
Other Keys:
[ENTER], Space, 5 = select current entry, bring up context menu,
Esc, 0 = cancel current entry or menu
These can be pressed when walking around the map.
? = Help
i = Inventory
O = Options Menu
o = Open
c = Close
e = Eat
B = Breathe (Not very interesting in your default state)
W = Move (Also not very interesting... usually)
<, > = Climb up (<) or down (>)
, or g = Pick up Item
S = Swap position with a creature.
R = Go to sleep and rest.
q = Release control of possessed creature.
s = search
. or w or 5 = Wait
r = Run until you see something interesting.
x = Look. Get detailed monster info by looking at them.
z = Cast a spell
J = Jump
m or X = Mini-map
N = Name a creature
C = Command a creature
_ = Pray.
F = Forget Something. Useful when you have run out of skill/spell slots.
f = Fire quivered item
p or ^p = Previous message
v = View message history
V = Command List
& = Make a wish
Inventory Quick Keys:
Instead of using the context sensitive menu in the inventory menu, you
can hit these keys directly.
w = Wear or Wield
T = Take off
d = Drop
e = Eat or Quaff
r = Read. When reading a book, hit 'i' or '?' to get info on that spell or
! = Dip
z = Zap
f = Mark as a favorite. Favorite items are outlined yellow and sorted first.
q = Put in Quiver. Quiverred items are 'f'ired. They are also
autopicked up for free when you walk over them.
t = Throw
n = Name
s = Sort inventory
S = Split Stack
x = Examine
POWDER Status Line
S12H010/01M010/00X932L02 LR AB
^ ^^ ^ ^^ ^ ^^ ^ ^ ^ ^
| || | || | || | | | \-- Button mappings on GBA, Zinc on SDL
| || | || | || | | \------ Current Dungeon Level
| || | || | || | \-------- Ladder icon
| || | || | || \---------- Experience, new level every 1000
| || | || | |\------------ X for Experience