Author:
- Name: John Williams
Location: US - United States of America (United States)
To build:
make
NOTE: this entry requires the X11/Xlib.h
header file and the X11 library to
compile. For more information see the
FAQ on “X11”.
Bugs and (Mis)features:
The current status of this entry is:
STATUS: known bug - please help us fix
For more detailed information see 2001/williams in bugs.html.
To use:
./williams
Judges’ remarks:
A strange game. The only winning move is not to play. No, really; you can’t actually win. :)
The formatting really wants a wide screen; if you can’t read it that way, it’s the standard “three triangles around a circular” logo for nukes.
This is a pretty straightforward game.
Author’s remarks:
What this program does:
It plays Missile Command, complete with MIRVs, smart bombs, extra cities, and scoring.
Command line arguments and input files are ignored.
To play, just point and click where you want your ABMs to explode.
The score is 10 points for each missile which is destroyed before it reaches the ground, -1 point for each ABM used, and 100 bonus points for each city left at the end of a level.
The game ends when you lose all your cities, although you will have to wait until the level finishes raining down to see your final score.
Obfuscation
The main obfuscation technique is the need to compress the code to fit
all the functionality within the size limits. I could not have included
smart bombs without the rule excluding {};
characters in the counts.
All of the #define
s are there to reduce code size.
On the other hand, I did waste a few characters in order to include
some rather obfuscated math in the program. It uses fixed-point
arithmetic, resulting in the overuse of bitwise shift operators.
Another example is (x|1)
, which is used in a couple different ways.
The purpose of A/(x|1)
is probably obvious, but what does (x|1)%2
do?
Inventory for 2001/williams
Primary files
- williams.c - entry source code
- Makefile - entry Makefile
- williams.orig.c - original source code
Secondary files
- 2001_williams.tar.bz2 - download entry tarball
- README.md - markdown source for this web page
- .entry.json - entry summary and manifest in JSON
- .gitignore - list of files that should not be committed under git
- .path - directory path from top level directory
- index.html - this web page