Exported latest revision from sourceforge cvs, discarding history.

This commit is contained in:
Jason Rohrer 2017-10-11 13:16:19 -07:00
parent 9c297bbe8b
commit cc3108fe85
1304 changed files with 79564 additions and 2 deletions

43
Makefile.GnuLinux Normal file
View File

@ -0,0 +1,43 @@
#
# Modification History
#
# 2006-June-27 Jason Rohrer
# Created. Condensed from X86 and PPC makefiles in Transcend project.
#
# 2007-April-23 Jason Rohrer
# Removed unneeded libraries.
#
##
# The common GnuLinux portion of Makefiles.
# Should not be made manually---used by configure to build Makefiles.
##
PLATFORM_COMPILE_FLAGS = -DLINUX
# various GL and X windows librariesneeded for linux
# also need portaudio library (which in turn needs pthreads)
PLATFORM_LINK_FLAGS = -L/usr/X11R6/lib -lGL -lGLU -lX11 -lSDL -lpthread -lpng -lz
# All platforms but OSX support g++ and need no linker hacks
GXX = g++
LINK_FLAGS =
##
# Platform-specific minorGems file path prefixes
##
PLATFORM = Linux
PLATFORM_PATH = linux
TIME_PLATFORM = Unix
TIME_PLATFORM_PATH = unix
DIRECTORY_PLATFORM = Unix
DIRECTORY_PLATFORM_PATH = unix

44
Makefile.MacOSX Normal file
View File

@ -0,0 +1,44 @@
#
# Modification History
#
# 2006-June-27 Jason Rohrer
# Created. Adapted from Transcend project.
#
##
# The common MacOSX portion of Makefiles.
# Should not be made manually---used by configure to build Makefiles.
##
# __mac__ to trigger certain mac-specific coping code
# paths to GL and GLUT headers
PLATFORM_COMPILE_FLAGS = -DBSD -D__mac__ -I/System/Library/Frameworks/OpenGL.framework/Headers
# various frameworks to support OpenGL and SDL
# static linking against zlib and libpng
PLATFORM_LINK_FLAGS = -framework OpenGL -framework SDL -framework Cocoa mac/SDLMain.m /usr/lib/libz.a /usr/lib/libpng.a
# Nothing special for OS X here
GXX = g++
LINK_FLAGS =
##
# Platform-specific minorGems file path prefixes
##
PLATFORM = Linux
PLATFORM_PATH = linux
TIME_PLATFORM = Unix
TIME_PLATFORM_PATH = unix
DIRECTORY_PLATFORM = Unix
DIRECTORY_PLATFORM_PATH = unix

58
Makefile.MinGW Normal file
View File

@ -0,0 +1,58 @@
#
# Modification History
#
# 2003-November-2 Jason Rohrer
# Created.
#
# 2003-November-10 Jason Rohrer
# Removed pthread flag.
# Changed LINUX flag to WIN_32 flag.
# Added wsock32 library flag.
#
##
# The common MinGW (GNU for Win32) portion of Makefiles.
# Should not be made manually---used by configure to build Makefiles.
##
# static lib flag needed to link compiled objs against miniupnp
PLATFORM_COMPILE_FLAGS = -DWIN_32 -DSTATICLIB
# need various GL libraries, winmm, and portaudio
# -mwindows tells mingw to hide the dos command window on launch
PLATFORM_LINK_FLAGS = -lopengl32 -lglu32 -lmingw32 -lSDLmain -lSDL -mwindows -lwsock32 -lpng -lz
# All platforms but OSX support g++ and need no linker hacks
GXX = g++
LINK_FLAGS =
# don't build icon.o when make invoked with no arguments!
all: SleepIsDeath
icon.o: ../build/win32/icon.ico ../build/win32/icon.rc
cp ../build/win32/icon.ico ../build/win32/icon.rc .
windres -i icon.rc -o icon.o
ICON_FILE = icon.o
##
# Platform-specific minorGems file path prefixes
##
PLATFORM = Win32
PLATFORM_PATH = win32
TIME_PLATFORM = Win32
TIME_PLATFORM_PATH = win32
DIRECTORY_PLATFORM = Win32
DIRECTORY_PLATFORM_PATH = win32

82
Makefile.common Normal file
View File

@ -0,0 +1,82 @@
#
# Modification History
#
# 2004-April-30 Jason Rohrer
# Created. Modified from MUTE source.
#
# 2005-August-29 Jason Rohrer
# Added optimization options.
#
# 2007-April-23 Jason Rohrer
# Upgraded to latest minorGems dependency format.
#
##
# The common portion of all Makefiles.
# Should not be made manually---used by configure to build Makefiles.
##
EXE_LINKER = ${GXX}
RANLIB = ranlib
LIBRARY_LINKER = ar
DEBUG_ON_FLAG = -g #-DDEBUG_MEMORY
DEBUG_OFF_FLAG =
DEBUG_FLAG = ${DEBUG_ON_FLAG}
PROFILE_ON_FLAG = -pg -DUSE_GPROF_THREADS
PROFILE_OFF_FLAG =
PROFILE_FLAG = ${PROFILE_OFF_FLAG}
OPTIMIZE_ON_FLAG = -O9
OPTIMIZE_OFF_FLAG = -O0
OPTIMIZE_FLAG = ${OPTIMIZE_OFF_FLAG}
# common to all platforms
SOCKET_UDP_PLATFORM_PATH = unix
SOCKET_UDP_PLATFORM = Unix
COMPILE_FLAGS = -Wall -Wwrite-strings -Wchar-subscripts -Wparentheses ${DEBUG_FLAG} ${PLATFORM_COMPILE_FLAGS} ${PROFILE_FLAG} ${OPTIMIZE_FLAG} -I${ROOT_PATH}
COMMON_LIBS = ${ROOT_PATH}/minorGems/network/upnp/miniupnpc/libminiupnpc.a
COMPILE = ${GXX} ${COMPILE_FLAGS} -c
EXE_LINK = ${EXE_LINKER} ${COMPILE_FLAGS} ${LINK_FLAGS}
LIBRARY_LINK = ${LIBRARY_LINKER} cru
#
# Generic:
#
# Map all .cpp C++ and C files into .o object files
#
# $@ represents the name.o file
# $< represents the name.cpp file
#
.cpp.o:
${COMPILE} -o $@ $<
.c.o:
${COMPILE} -o $@ $<

View File

@ -1,2 +0,0 @@
# SleepIsDeath
a storytelling game for two players

BIN
build/icon_base.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 B

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleIdentifier</key>
<string>org.passage</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>SleepIsDeath</string>
<key>CFBundleIconFile</key>
<string>SleepIsDeath.icns</string>
<key>CFBundleName</key>
<string>SleepIsDeath</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0</string>
<key>CFBundleShortVersionString</key>
<string>0</string>
<key>CFBundleGetInfoString</key>
<string>SleepIsDeath</string>
<key>CFBundleLongVersionString</key>
<string>0</string>
<key>NSHumanReadableCopyright</key>
<string>Public Domain, 2010</string>
<key>LSRequiresCarbon</key>
<true/>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1 @@
APPL????

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

23
build/macOSX/dmgNotes.txt Normal file
View File

@ -0,0 +1,23 @@
To mount dmg:
hdiutil mount Test.dmg
To unmount:
hdiutil unmount /Volumes/Test
To convert DMG to compressed:
hdiutil convert Test.dmg -format UDZO -o Test_compressed.dmg
To convert compressed DMG to R/W:
hdiutil convert Test_compressed.dmg -format UDRW -o Test.dmg
To rename a volume:
diskutil rename /Volumes/NameA NameB

BIN
build/macOSX/iconColor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
build/macOSX/iconMask.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

72
build/makeDistributionMacOSX Executable file
View File

@ -0,0 +1,72 @@
#!/bin/sh
#
# Modification History
#
# 2007-November-12 Jason Rohrer
# Copied from Cultivation build.
#
if [ $# -lt 3 ] ; then
echo "Usage: $0 release_name unix_platform_name path_to_SDL.framework"
exit 1
fi
rm -rf mac
mkdir mac
mkdir mac/SleepIsDeath
mkdir mac/SleepIsDeath/graphics
mkdir mac/SleepIsDeath/settings
mkdir mac/SleepIsDeath/languages
mkdir mac/SleepIsDeath/templates
mkdir mac/SleepIsDeath/loadingBay
mkdir mac/SleepIsDeath/importOldCache
cp ../gameSource/resourceSet15.tar.gz .
tar xzf resourceSet15.tar.gz
cp -r resourceSet15/* mac/SleepIsDeath/
rm -r resourceSet15/ resourceSet15.tar.gz
cp ../gameSource/graphics/*.tga mac/SleepIsDeath/graphics
cp ../gameSource/settings/*.ini mac/SleepIsDeath/settings
cp ../gameSource/languages/*.txt mac/SleepIsDeath/languages
cp ../gameSource/templates/*.php mac/SleepIsDeath/templates
cp ../gameSource/templates/*.html mac/SleepIsDeath/templates
cp ../gameSource/templates/*.png mac/SleepIsDeath/templates
cp ../gameSource/language.txt mac/SleepIsDeath
cp ../documentation/Readme.txt mac/SleepIsDeath
cp ../documentation/Upgrading.txt mac/SleepIsDeath
cp -r macOSX/SleepIsDeath.app mac/SleepIsDeath/SleepIsDeath.app
cp ../gameSource/SleepIsDeath mac/SleepIsDeath/SleepIsDeath.app/Contents/MacOS
rm -r mac/SleepIsDeath/SleepIsDeath.app/CVS
rm -r mac/SleepIsDeath/SleepIsDeath.app/Contents/CVS
rm -r mac/SleepIsDeath/SleepIsDeath.app/Contents/MacOS/CVS
rm -r mac/SleepIsDeath/SleepIsDeath.app/Contents/Resources/CVS
rm -r mac/SleepIsDeath/SleepIsDeath.app/Contents/Frameworks/CVS
# install SDL framework
cp -r $3 mac/SleepIsDeath/SleepIsDeath.app/Contents/Frameworks/
cd mac
tar cf "SleepIsDeath_$1_$2.tar" SleepIsDeath
gzip "SleepIsDeath_$1_$2.tar"

102
build/makeDistributions Executable file
View File

@ -0,0 +1,102 @@
#!/bin/sh
#
# Modification History
#
# 2007-November-12 Jason Rohrer
# Copied from Cultivation build.
#
if [ $# -lt 2 ] ; then
echo "Usage: $0 release_name unix_platform_name"
exit 1
fi
rm -rf unix
rm -rf windows
mkdir windows
mkdir unix
# work on unix tree first
mkdir unix/SleepIsDeath
mkdir unix/SleepIsDeath/graphics
mkdir unix/SleepIsDeath/settings
mkdir unix/SleepIsDeath/languages
mkdir unix/SleepIsDeath/templates
mkdir unix/SleepIsDeath/loadingBay
mkdir unix/SleepIsDeath/importOldCache
cp ../gameSource/resourceSet15.tar.gz .
tar xzf resourceSet15.tar.gz
cp -r resourceSet15/* unix/SleepIsDeath/
rm -r resourceSet15/ resourceSet15.tar.gz
cp ../gameSource/graphics/*.tga unix/SleepIsDeath/graphics
cp ../gameSource/settings/*.ini unix/SleepIsDeath/settings
cp ../gameSource/languages/*.txt unix/SleepIsDeath/languages
cp ../gameSource/templates/*.php unix/SleepIsDeath/templates
cp ../gameSource/templates/*.html unix/SleepIsDeath/templates
cp ../gameSource/templates/*.png unix/SleepIsDeath/templates
cp ../gameSource/language.txt unix/SleepIsDeath
cp ../documentation/Readme.txt unix/SleepIsDeath
cp ../documentation/Upgrading.txt unix/SleepIsDeath
# duplicate unix tree so far to make windows tree
cp -r unix/SleepIsDeath windows/
cp ../gameSource/SleepIsDeath unix/SleepIsDeath/
cp win32/SleepIsDeath.exe win32/*.dll windows/SleepIsDeath/
cd unix
tar cf "SleepIsDeath_$1_$2.tar" SleepIsDeath
gzip "SleepIsDeath_$1_$2.tar"
cd ..
g++ -o unix2dos unix2dos.c
cp unix2dos windows
cp unix2dosScript windows
cd windows
for file in SleepIsDeath/languages/*.txt
do
./unix2dosScript "$file"
done
for file in SleepIsDeath/templates/*.php
do
./unix2dosScript "$file"
done
for file in SleepIsDeath/templates/*.html
do
./unix2dosScript "$file"
done
./unix2dosScript "SleepIsDeath/resourceCache/stringDatabase.txt"
./unix2dosScript "SleepIsDeath/Readme.txt"
./unix2dosScript "SleepIsDeath/Upgrading.txt"
zip -r "SleepIsDeath_$1_Windows.zip" SleepIsDeath

18
build/source/cleanSrc Executable file
View File

@ -0,0 +1,18 @@
rm -r minorGems/ai
rm -r minorGems/bench
rm -r minorGems/doc
rm -r minorGems/examples
rm -r minorGems/sound
rm -r SleepIsDeath/documentation/guides
rm -r SleepIsDeath/documentation/html
rm -r SleepIsDeath/documentation/installation
rm -r SleepIsDeath/documentation/press
rm -r SleepIsDeath/documentation/releasePlan
rm -r SleepIsDeath/documentation/teaser
rm SleepIsDeath/gameSource/resourcePack*.tar.gz
rm SleepIsDeath/gameSource/resourceSet10.tar.gz
rm SleepIsDeath/gameSource/resourceSet12.tar.gz
rm SleepIsDeath/gameSource/resourceSet14.tar.gz

9
build/source/exportSrc Executable file
View File

@ -0,0 +1,9 @@
SOURCEDIR=`pwd`
echo "running export from $SOURCEDIR"
cd ../../../../minorGems
hg archive $SOURCEDIR/minorGems
cd $SOURCEDIR
cvs -z3 -d:ext:jcr13@hcsoftware.cvs.sourceforge.net:/cvsroot/hcsoftware export -r HEAD SleepIsDeath

82
build/source/runToBuild Executable file
View File

@ -0,0 +1,82 @@
#!/bin/bash
#
# Modification History
#
# 2010-April-2 Andy Sommerville
# - Added a few "|| exit 1" to terminate as soon as error occurs.
# - Read menu choice from argv[1].
# - Added "-p" to mkdir to suppress "already exists" message.
# - Added automatic backup of "resourceCache". (wish I'd thought of that a few minutes ago....)
#
# 2007-November-12 Jason Rohrer
# Copied from Cultivation.
#
cd SleepIsDeath
chmod u+x ./configure
./configure $@ || exit 1
echo "Building miniUPNP..."
cd ../minorGems/network/upnp/miniupnpc
make || exit 1
cd ../../../../SleepIsDeath
cd gameSource
echo "Building SleepIsDeath..."
make || exit 1
cd ../..
mkdir -p graphics
mkdir -p settings
mkdir -p languages
mkdir -p templates
mkdir -p loadingBay
mkdir -p importOldCache
# this now happens from resource pack expansion, below
#mkdir resourceCache
#cd resourceCache
#mkdir object room sprite tile
#cd ..
cp SleepIsDeath/gameSource/SleepIsDeath ./SleepIsDeathApp
cp SleepIsDeath/documentation/Readme.txt .
cp SleepIsDeath/documentation/Upgrading.txt .
cp SleepIsDeath/gameSource/graphics/* ./graphics
cp SleepIsDeath/gameSource/settings/* ./settings
cp SleepIsDeath/gameSource/languages/* ./languages
cp SleepIsDeath/gameSource/language.txt ./
cp SleepIsDeath/gameSource/templates/*.php ./templates
cp SleepIsDeath/gameSource/templates/*.html ./templates
cp SleepIsDeath/gameSource/templates/*.png ./templates
# backup old resources
if [ -d resourceCache ] ; then
BACKUP=resourceCache-backup-$(date '+%Y%m%d%H%M%S').tar.gz
echo "Backing up resources to $BACKUP"
tar -czf $BACKUP resourceCache
fi
# copy default resources
tar xzf SleepIsDeath/gameSource/resourceSet15.tar.gz
cp -r resourceSet15/* .
echo "Run SleepIsDeathApp to play."

22
build/unix2dos.c Normal file
View File

@ -0,0 +1,22 @@
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
while(1) {
int c = getchar();
if(c == EOF)
exit(0);
if(c == '\n') {
putchar(015); /* ^M */
putchar(012); /* ^J */
} else {
putchar(c);
}
}
exit(0);
}

7
build/unix2dosScript Executable file
View File

@ -0,0 +1,7 @@
cat "$1" | ./unix2dos > tempUNIX2DOS.txt
cp -f tempUNIX2DOS.txt "$1"
rm -f tempUNIX2DOS.txt

BIN
build/win32/SDL.dll Executable file

Binary file not shown.

BIN
build/win32/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
build/win32/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

1
build/win32/icon.rc Normal file
View File

@ -0,0 +1 @@
IDI_ICON1 ICON DISCARDABLE "icon.ico"

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

BIN
build/win32/libpng3.dll Executable file

Binary file not shown.

BIN
build/win32/zlib1.dll Executable file

Binary file not shown.

104
configure vendored Executable file
View File

@ -0,0 +1,104 @@
#!/bin/bash
#
# Modification History
#
# 2010-April-2 Andy Sommerville
# Allow menu choice from argv.
# "exit 1" when user chooses 'q'; terminate build.
#
# 2006-June-27 Jason Rohrer
# Copied/modified from Transcend project. Dropped a platforms that were only
# nominally supported.
#
if [[ "$1" < "4" ]] ; then
if [[ "$1" > "0" ]] ; then
platformSelection="$1"
fi
fi
while [ -z "$platformSelection" ]
do
echo "select platform:"
echo " 1 -- GNU/Linux"
echo " 2 -- MacOSX"
echo " 3 -- Win32 using MinGW"
echo " q -- quit"
echo ""
echo -n "> "
read platformSelection
if [ "$platformSelection" = "q" ]
then
exit 1
fi
# use ASCII comparison.
if [[ "$platformSelection" > "3" ]]
then
platformSelection=""
fi
if [[ "$platformSelection" < "1" ]]
then
platformSelection=""
fi
done
# use partial makefiles from minorGems project
makefileMinorGems="../minorGems/build/Makefile.minorGems"
makefileMinorGemsTargets="../minorGems/build/Makefile.minorGems_targets"
platformName="Generic"
platformMakefile="generic"
case "$platformSelection" in
"1" )
platformName="GNU/Linux"
platformMakefile="Makefile.GnuLinux"
;;
"2" )
platformName="MacOSX"
platformMakefile="Makefile.MacOSX"
;;
"3" )
platformName="Win32 MinGW"
platformMakefile="Makefile.MinGW"
;;
esac
rm -f Makefile.temp
echo "# Auto-generated by game7/configure for the $platformName platform. Do not edit manually." > Makefile.temp
rm -f gameSource/Makefile
cat Makefile.temp $platformMakefile Makefile.common $makefileMinorGems gameSource/Makefile.all $makefileMinorGemsTargets > gameSource/Makefile
rm Makefile.temp
exit

5
demo/index.html Normal file
View File

@ -0,0 +1,5 @@
<FORM ACTION="server.php" METHOD="post">
<INPUT TYPE="password" MAXLENGTH=20 SIZE=20 NAME="password">
<INPUT TYPE="hidden" NAME="action" VALUE="show_data">
<INPUT TYPE="Submit" VALUE="login">
</FORM>

914
demo/server.php Normal file
View File

@ -0,0 +1,914 @@
<?php
global $dps_version;
$dps_version = "1";
// edit settings.php to change server' settings
include( "settings.php" );
// no end-user settings below this point
// no caching
//header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');
// enable verbose error reporting to detect uninitialized variables
error_reporting( E_ALL );
// page layout for web-based setup
$setup_header = "
<HTML>
<HEAD><TITLE>Demo Permissions Server Web-based setup</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#FF0000>
<CENTER>
<TABLE WIDTH=75% BORDER=0 CELLSPACING=0 CELLPADDING=1>
<TR><TD BGCOLOR=#000000>
<TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=10>
<TR><TD BGCOLOR=#EEEEEE>";
$setup_footer = "
</TD></TR></TABLE>
</TD></TR></TABLE>
</CENTER>
</BODY></HTML>";
// ensure that magic quotes are on (adding slashes before quotes
// so that user-submitted data can be safely submitted in DB queries)
if( !get_magic_quotes_gpc() ) {
// force magic quotes to be added
$_GET = array_map( 'dps_addslashes_deep', $_GET );
$_POST = array_map( 'dps_addslashes_deep', $_POST );
$_REQUEST = array_map( 'dps_addslashes_deep', $_REQUEST );
$_COOKIE = array_map( 'dps_addslashes_deep', $_COOKIE );
}
// all calls need to connect to DB, so do it once here
dps_connectToDatabase();
// close connection down below (before function declarations)
// testing:
//sleep( 5 );
// general processing whenver server.php is accessed directly
// grab POST/GET variables
$action = "";
if( isset( $_REQUEST[ "action" ] ) ) {
$action = $_REQUEST[ "action" ];
}
$debug = "";
if( isset( $_REQUEST[ "debug" ] ) ) {
$debug = $_REQUEST[ "debug" ];
}
$remoteIP = "";
if( isset( $_SERVER[ "REMOTE_ADDR" ] ) ) {
$remoteIP = $_SERVER[ "REMOTE_ADDR" ];
}
if( $action == "version" ) {
global $dps_version;
echo "$dps_version";
}
else if( $action == "show_log" ) {
dps_showLog();
}
else if( $action == "clear_log" ) {
dps_clearLog();
}
else if( $action == "create_demo_id" ) {
dps_createDemoID();
}
else if( $action == "block_demo_id" ) {
dps_blockDemoID();
}
else if( $action == "delete_demo_id" ) {
dps_deleteDemoID();
}
else if( $action == "check_permitted" ) {
dps_checkPermitted();
}
else if( $action == "show_data" ) {
dps_showData();
}
else if( $action == "show_detail" ) {
dps_showDetail();
}
else if( $action == "dps_setup" ) {
global $setup_header, $setup_footer;
echo $setup_header;
echo "<H2>Demo Permissions Server Web-based Setup</H2>";
echo "Creating tables:<BR>";
echo "<CENTER><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=1>
<TR><TD BGCOLOR=#000000>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=5>
<TR><TD BGCOLOR=#FFFFFF>";
dps_setupDatabase();
echo "</TD></TR></TABLE></TD></TR></TABLE></CENTER><BR><BR>";
echo $setup_footer;
}
else if( preg_match( "/server\.php/", $_SERVER[ "SCRIPT_NAME" ] ) ) {
// server.php has been called without an action parameter
// the preg_match ensures that server.php was called directly and
// not just included by another script
// quick (and incomplete) test to see if we should show instructions
global $tableNamePrefix;
// check if our "games" table exists
$tableName = $tableNamePrefix . "demos";
$exists = dps_doesTableExist( $tableName );
if( $exists ) {
echo "Demo Permissions server database setup and ready";
}
else {
// start the setup procedure
global $setup_header, $setup_footer;
echo $setup_header;
echo "<H2>Demo Permissions Server Web-based Setup</H2>";
echo "Demo Permissions Server will walk you through a " .
"brief setup process.<BR><BR>";
echo "Step 1: ".
"<A HREF=\"server.php?action=dps_setup\">".
"create the database tables</A>";
echo $setup_footer;
}
}
// done processing
// only function declarations below
dps_closeDatabase();
/**
* Creates the database tables needed by seedBlogs.
*/
function dps_setupDatabase() {
global $tableNamePrefix;
$tableName = $tableNamePrefix . "log";
if( ! dps_doesTableExist( $tableName ) ) {
// this table contains general info about the server
// use INNODB engine so table can be locked
$query =
"CREATE TABLE $tableName(" .
"entry TEXT NOT NULL, ".
"entry_time DATETIME NOT NULL );";
$result = dps_queryDatabase( $query );
echo "<B>$tableName</B> table created<BR>";
}
else {
echo "<B>$tableName</B> table already exists<BR>";
}
$tableName = $tableNamePrefix . "demos";
if( ! dps_doesTableExist( $tableName ) ) {
// this table contains general info about each game
// use INNODB engine so table can be locked
$query =
"CREATE TABLE $tableName(" .
"demo_id CHAR(10) NOT NULL PRIMARY KEY," .
"creation_date DATETIME NOT NULL," .
"last_run_date DATETIME NOT NULL," .
"note CHAR(40) NOT NULL," .
"blocked TINYINT NOT NULL," .
"run_count INT NOT NULL );";
$result = dps_queryDatabase( $query );
echo "<B>$tableName</B> table created<BR>";
}
else {
echo "<B>$tableName</B> table already exists<BR>";
}
$tableName = $tableNamePrefix . "runs";
if( ! dps_doesTableExist( $tableName ) ) {
// this table contains information for each user
$query =
"CREATE TABLE $tableName(" .
"demo_id CHAR(10) NOT NULL," .
"run_date DATETIME NOT NULL," .
"blocked TINYINT NOT NULL," .
"ip_address CHAR(255) NOT NULL," .
"PRIMARY KEY( demo_id, run_date ) );";
$result = dps_queryDatabase( $query );
echo "<B>$tableName</B> table created<BR>";
}
else {
echo "<B>$tableName</B> table already exists<BR>";
}
}
function dps_showLog() {
$password = dps_checkPassword( "show_log" );
echo "[<a href=\"server.php?action=show_data&password=$password" .
"\">Main</a>]<br><br><br>";
global $tableNamePrefix;
$query = "SELECT * FROM $tableNamePrefix"."log ".
"ORDER BY entry_time DESC;";
$result = dps_queryDatabase( $query );
$numRows = mysql_numrows( $result );
echo "<a href=\"server.php?action=clear_log&password=$password\">".
"Clear log</a>";
echo "<hr>";
echo "$numRows log entries:<br><br><br>\n";
for( $i=0; $i<$numRows; $i++ ) {
$time = mysql_result( $result, $i, "entry_time" );
$entry = mysql_result( $result, $i, "entry" );
echo "<b>$time</b>:<br>$entry<hr>\n";
}
}
function dps_clearLog() {
$password = dps_checkPassword( "clear_log" );
echo "[<a href=\"server.php?action=show_data&password=$password" .
"\">Main</a>]<br>";
global $tableNamePrefix;
$query = "DELETE FROM $tableNamePrefix"."log;";
$result = dps_queryDatabase( $query );
if( $result ) {
echo "Log cleared.";
}
else {
echo "DELETE operation failed?";
}
}
function dps_createDemoID() {
$password = dps_checkPassword( "create_demo_id" );
global $tableNamePrefix;
$note = "";
if( isset( $_REQUEST[ "note" ] ) ) {
$note = $_REQUEST[ "note" ];
}
$found_unused_id = 0;
$salt = 0;
while( ! $found_unused_id ) {
$randVal = rand();
$hash = md5( $note . uniqid( "$randVal"."$salt", true ) );
$hash = strtoupper( $hash );
$demo_id = substr( $hash, 0, 10 );
// make code more human-friendly (alpha only)
$digitArray =
array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" );
$letterArray =
array( "W", "H", "J", "K", "X", "M", "N", "P", "T", "Y" );
$demo_id = str_replace( $digitArray, $letterArray, $demo_id );
$query = "INSERT INTO $tableNamePrefix". "demos VALUES ( " .
"'$demo_id', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ".
"'$note', '0', '0' );";
$result = mysql_query( $query );
if( $result ) {
$found_unused_id = 1;
global $remoteIP;
dps_log( "Demo $demo_id created by $remoteIP" );
//echo "$demo_id";
dps_showData();
}
else {
global $debug;
if( $debug == 1 ) {
echo "Duplicate ids? Error: " . mysql_error() ."<br>";
}
// try again
$salt += 1;
}
}
}
function dps_blockDemoID() {
$password = dps_checkPassword( "block_demo_id" );
global $tableNamePrefix;
$demo_id = "";
if( isset( $_REQUEST[ "demo_id" ] ) ) {
$demo_id = $_REQUEST[ "demo_id" ];
}
$demo_id = strtoupper( $demo_id );
$blocked = "";
if( isset( $_REQUEST[ "blocked" ] ) ) {
$blocked = $_REQUEST[ "blocked" ];
}
global $remoteIP;
$query = "SELECT * FROM $tableNamePrefix"."demos ".
"WHERE demo_id = '$demo_id';";
$result = dps_queryDatabase( $query );
$numRows = mysql_numrows( $result );
if( $numRows == 1 ) {
$query = "UPDATE $tableNamePrefix"."demos SET " .
"blocked = '$blocked' " .
"WHERE demo_id = '$demo_id';";
$result = dps_queryDatabase( $query );
dps_log( "$demo_id block changed to $blocked by $remoteIP" );
dps_showData();
}
else {
dps_log( "$demo_id not found for $remoteIP" );
echo "$demo_id not found";
}
}
function dps_deleteDemoID() {
$password = dps_checkPassword( "delete_demo_id" );
global $tableNamePrefix, $remoteIP;
$demo_id = "";
if( isset( $_REQUEST[ "demo_id" ] ) ) {
$demo_id = $_REQUEST[ "demo_id" ];
}
$demo_id = strtoupper( $demo_id );
$query = "DELETE FROM $tableNamePrefix"."demos ".
"WHERE demo_id = '$demo_id';";
$result = dps_queryDatabase( $query );
if( $result ) {
dps_log( "$demo_id deleted by $remoteIP" );
echo "$demo_id deleted.<hr>";
dps_showData();
}
else {
dps_log( "$demo_id delete failed for $remoteIP" );
echo "DELETE operation failed?";
}
}
function dps_checkPermitted() {
$demo_id = "";
if( isset( $_REQUEST[ "demo_id" ] ) ) {
$demo_id = $_REQUEST[ "demo_id" ];
}
$demo_id = strtoupper( $demo_id );
$challenge = "";
if( isset( $_REQUEST[ "challenge" ] ) ) {
$challenge = $_REQUEST[ "challenge" ];
}
global $tableNamePrefix, $remoteIP;
$query = "SELECT * FROM $tableNamePrefix"."demos ".
"WHERE demo_id = '$demo_id';";
$result = dps_queryDatabase( $query );
$numRows = mysql_numrows( $result );
if( $numRows == 1 ) {
$row = mysql_fetch_array( $result, MYSQL_ASSOC );
$blocked = $row[ "blocked" ];
// catalog blocked runs, too
$run_count = $row[ "run_count" ];
$run_count ++;
$query = "UPDATE $tableNamePrefix"."demos SET " .
"last_run_date = CURRENT_TIMESTAMP, " .
"run_count = '$run_count' " .
"WHERE demo_id = '$demo_id';";
$result = dps_queryDatabase( $query );
$query = "INSERT INTO $tableNamePrefix". "runs VALUES ( " .
"'$demo_id', CURRENT_TIMESTAMP, '$blocked', '$remoteIP' );";
$result = mysql_query( $query );
if( !$blocked ) {
dps_log( "$demo_id permitted to run by $remoteIP" );
// response to challenge using shared secret
global $sharedSecret;
$hash = sha1( $challenge . $sharedSecret );
$hash = strtoupper( $hash );
echo "permitted $hash";
return;
}
}
dps_log( "$demo_id denied to run by $remoteIP" );
echo "denied";
}
function dps_showData() {
$password = dps_checkPassword( "show_data" );
global $tableNamePrefix, $remoteIP;
echo "[<a href=\"server.php?action=show_data&password=$password" .
"\">Main</a>]";
$query = "SELECT * FROM $tableNamePrefix"."demos ".
"ORDER BY last_run_date DESC;";
$result = dps_queryDatabase( $query );
$numRows = mysql_numrows( $result );
// form
?>
<hr>
Create new ID:<br>
<FORM ACTION="server.php" METHOD="post">
<INPUT TYPE="hidden" NAME="password" VALUE="<?php echo $password;?>">
<INPUT TYPE="hidden" NAME="action" VALUE="create_demo_id">
Note:
<INPUT TYPE="text" MAXLENGTH=40 SIZE=20 NAME="note">
<INPUT TYPE="Submit" VALUE="Generate">
</FORM>
<hr>
<?php
echo "$numRows active IDs:<br><br><br>\n";
echo "<table border=1 cellpadding=5>\n";
echo "<tr><td>Demo ID</td>\n";
echo "<td>Note</td>\n";
echo "<td>Blocked?</td>\n";
echo "<td>Created</td> <td>Test</td> <td>Last Run</td>";
echo "<td>Run Count</td></tr>\n";
for( $i=0; $i<$numRows; $i++ ) {
$demo_id = mysql_result( $result, $i, "demo_id" );
$creation = mysql_result( $result, $i, "creation_date" );
$lastRun = mysql_result( $result, $i, "last_run_date" );
$count = mysql_result( $result, $i, "run_count" );
$note = mysql_result( $result, $i, "note" );
$blocked = mysql_result( $result, $i, "blocked" );
$block_toggle = "";
if( $blocked ) {
$blocked = "BLOCKED";
$block_toggle = "<a href=\"server.php?action=block_demo_id&".
"blocked=0&demo_id=$demo_id&password=$password\">unblock</a>";
}
else {
$blocked = "";
$block_toggle = "<a href=\"server.php?action=block_demo_id&".
"blocked=1&demo_id=$demo_id&password=$password\">block</a>";
}
// challenge to include in test link
$randVal = rand();
$challenge = md5( $demo_id . uniqid( "$randVal", true ) );
echo "<tr>\n";
echo "<td><b>$demo_id</b></td>\n";
echo "<td>$note</td>\n";
echo "<td align=right>$blocked [$block_toggle]</td>\n";
echo "<td>$creation</td> ";
echo "<td>[<a href=\"server.php?action=check_permitted".
"&demo_id=$demo_id&challenge=$challenge\">run test</a>]</td>";
echo "<td>$lastRun</td>";
echo "<td>$count runs ";
echo "[<a href=\"server.php?action=show_detail&password=$password" .
"&demo_id=$demo_id\">list</a>]</td>";
echo "</tr>\n";
}
echo "</table>";
echo "<hr>";
echo "<a href=\"server.php?action=show_log&password=$password\">".
"Show log</a>";
echo "<hr>";
echo "Generated for $remoteIP\n";
}
function dps_showDetail() {
$password = dps_checkPassword( "show_detail" );
echo "[<a href=\"server.php?action=show_data&password=$password" .
"\">Main</a>]";
global $tableNamePrefix;
$demo_id = "";
if( isset( $_REQUEST[ "demo_id" ] ) ) {
$demo_id = $_REQUEST[ "demo_id" ];
}
$demo_id = strtoupper( $demo_id );
$query = "SELECT * FROM $tableNamePrefix"."runs ".
"WHERE demo_id = '$demo_id' ORDER BY run_date DESC;";
$result = dps_queryDatabase( $query );
$numRows = mysql_numrows( $result );
echo "$numRows runs for $demo_id:";
echo " [<a href=\"server.php?action=delete_demo_id&password=$password" .
"&demo_id=$demo_id\">DELETE this id</a>]";
echo "<br><br><br>\n";
for( $i=0; $i<$numRows; $i++ ) {
$date = mysql_result( $result, $i, "run_date" );
$ipAddress = mysql_result( $result, $i, "ip_address" );
$blocked = mysql_result( $result, $i, "blocked" );
if( $blocked ) {
$blocked = "BLOCKED";
}
else {
$blocked = "";
}
echo "<b>$date</b>: $ipAddress $blocked<hr>\n";
}
}
// general-purpose functions down here, many copied from seedBlogs
/**
* Connects to the database according to the database variables.
*/
function dps_connectToDatabase() {
global $databaseServer,
$databaseUsername, $databasePassword, $databaseName;
mysql_connect( $databaseServer, $databaseUsername, $databasePassword )
or dps_fatalError( "Could not connect to database server: " .
mysql_error() );
mysql_select_db( $databaseName )
or dps_fatalError( "Could not select $databaseName database: " .
mysql_error() );
}
/**
* Closes the database connection.
*/
function dps_closeDatabase() {
mysql_close();
}
/**
* Queries the database, and dies with an error message on failure.
*
* @param $inQueryString the SQL query string.
*
* @return a result handle that can be passed to other mysql functions.
*/
function dps_queryDatabase( $inQueryString ) {
$result = mysql_query( $inQueryString )
or dps_fatalError( "Database query failed:<BR>$inQueryString<BR><BR>" .
mysql_error() );
return $result;
}
/**
* Checks whether a table exists in the currently-connected database.
*
* @param $inTableName the name of the table to look for.
*
* @return 1 if the table exists, or 0 if not.
*/
function dps_doesTableExist( $inTableName ) {
// check if our table exists
$tableExists = 0;
$query = "SHOW TABLES";
$result = dps_queryDatabase( $query );
$numRows = mysql_numrows( $result );
for( $i=0; $i<$numRows && ! $tableExists; $i++ ) {
$tableName = mysql_result( $result, $i, 0 );
if( $tableName == $inTableName ) {
$tableExists = 1;
}
}
return $tableExists;
}
function dps_log( $message ) {
global $enableLog, $tableNamePrefix;
$slashedMessage = addslashes( $message );
if( $enableLog ) {
$query = "INSERT INTO $tableNamePrefix"."log VALUES ( " .
"'$slashedMessage', CURRENT_TIMESTAMP );";
$result = dps_queryDatabase( $query );
}
}
/**
* Displays the error page and dies.
*
* @param $message the error message to display on the error page.
*/
function dps_fatalError( $message ) {
//global $errorMessage;
// set the variable that is displayed inside error.php
//$errorMessage = $message;
//include_once( "error.php" );
// for now, just print error message
$logMessage = "Fatal error: $message";
echo( $logMessage );
dps_log( $logMessage );
die();
}
/**
* Displays the operation error message and dies.
*
* @param $message the error message to display.
*/
function dps_operationError( $message ) {
// for now, just print error message
echo( "ERROR: $message" );
die();
}
/**
* Recursively applies the addslashes function to arrays of arrays.
* This effectively forces magic_quote escaping behavior, eliminating
* a slew of possible database security issues.
*
* @inValue the value or array to addslashes to.
*
* @return the value or array with slashes added.
*/
function dps_addslashes_deep( $inValue ) {
return
( is_array( $inValue )
? array_map( 'dps_addslashes_deep', $inValue )
: addslashes( $inValue ) );
}
/**
* Recursively applies the stripslashes function to arrays of arrays.
* This effectively disables magic_quote escaping behavior.
*
* @inValue the value or array to stripslashes from.
*
* @return the value or array with slashes removed.
*/
function dps_stripslashes_deep( $inValue ) {
return
( is_array( $inValue )
? array_map( 'sb_stripslashes_deep', $inValue )
: stripslashes( $inValue ) );
}
function dps_checkPassword( $inFunctionName ) {
$password = "";
if( isset( $_REQUEST[ "password" ] ) ) {
$password = $_REQUEST[ "password" ];
}
global $accessPassword, $tableNamePrefix, $remoteIP;
if( $password != $accessPassword ) {
echo "Incorrect password.";
dps_log( "Failed $inFunctionName access with password: $password" );
die();
}
return $password;
}
?>

46
demo/settings.php Normal file
View File

@ -0,0 +1,46 @@
<?php
// Basic settings
// You must set these for the server to work
$databaseServer = "localhost";
$databaseUsername = "testUser";
$databasePassword = "testPassword";
$databaseName = "test";
// The URL of to the server.php script.
$fullServerURL = "http://localhost/jcr13/demoServer/server.php";
// End Basic settings
// Customization settings
// Adjust these to change the way the server works.
// Prefix to use in table names (in case more than one application is using
// the same database). Two tables are created: "games" and "columns".
//
// If $tableNamePrefix is "test_" then the tables will be named
// "test_games" and "test_columns". Thus, more than one server
// installation can use the same database (or the server can share a database
// with another application that uses similar table names).
$tableNamePrefix = "demoServer_";
$enableLog = 1;
// for web-based admin access
$accessPassword = "secret";
// secret shared with game code
$sharedSecret = "secret 2";
?>

52
documentation/Readme.txt Normal file
View File

@ -0,0 +1,52 @@
Sleep is Death (Geisterfahrer)
An asymmetric storytelling game for two players by Jason Rohrer
http://sleepisdeath.net
Designed for a LAN:
1. Set up two computers on your local network (WiFi or Wire).
2. Plugging two computers directly together with a single Ethernet cable also
works.
3. Start one as Controller.
4. Give the Player the Controller's IP address as displayed by the game.
5. If the Controller and Player are in the same room, give the Controller
headphones.
6. Don't look at each other's screens.
7. Enjoy each other's company.
Possible to play over the Internet:
1. Player should work fine with any reliable Internet connection.
2. Controller must be able to receive incoming connections.
3. Controller tries to use UPnP to open a port on your router and determine
your external IP address. This should work automatically on most modern
routers.
4. If UPnP doesn't work:
5. By default, Controller listens on port 7778.
6. Set up Port Forwarding, DMZ, or Static IP for the Controller on your DSL
or Cable Modem's router.
5. Give the Player your real, EXTERNAL IP address.
Try a service like http://www.whatismyip.com/
Probably does not start with 192.168... (that's your internal IP).
6. If 7778 doesn't work for you, change it in settings/port.ini
Make sure the Player changes his or her port.ini to match yours.

View File

@ -0,0 +1,40 @@
Instructions for upgrading from previous versions to v16.
To transfer your resources across:
1. PLEASE make and keep a backup of your old game directory. I would be sad if
you lost any of your hard work, through your error or my error.
2. COPY (don't move) your old "resourceCache" folder INTO the "importOldCache"
folder in v16.
3. Start the v16 game, and enter Controller mode. This will "pause" for
longer than normal after you hit "G" (before the Controller mode is shown),
while your old resources are merged and upgraded. This will only happen
once, so be patient.
4. After the Controller mode loads, check that your resources have been
imported correctly.
v16 is compatible in every way with v15.
v13 Packs can be loaded into v16, but they will trigger a similar pause at
startup (while they are converted).
v14 Packs can be loaded into v16.
v15/v16 Packs are NOT compatible with v13.
v15/v16 Packs are compatible with v14 as long as they do not contain
Color Palette resources.
v16 should be able to both host and play against v14.
v16 CANNOT host games for a v13 player (the objects sent across now have more
information in them that v13 cannot handle). v13 should be able to host a
v16 player, however.

508
documentation/changeLog.txt Normal file
View File

@ -0,0 +1,508 @@
Version 16 2010-November-15
--Improved responsiveness of mouse and keyboard controls.
--More accurate frame timing for true 30 frames-per-second when possible.
--Enabled GL swap control to minimize visual tearing.
--Added auto-removal of bad search database entries when they are encountered.
--Changed to ignore duplicate search database entries.
--Added "used in" tool tip for resources that cannot be deleted due to usage.
Version 15b 2010-June-10
--Rolled back to older Windows SDL version (1.2.13), fixing international
keyboard input issues.
--Fixed reversed o accents in font image file.
Version 15 2010-May-28
--Fixed crash when getting local address on certain platforms with certain
network setups (VPN).
--Fixed crash when scale reduced to zero tones.
--Added missing tool tip for Scene deletion.
--Improved build time by making dependency tracking modular.
--Added usage tracking to prevent accidental deletion of resources that are
being used by other resources (such as objects still used in some scenes).
--Fixed a Controller freeze triggered by a Player that previously ran in
Controller mode in the same session.
--Improved Unix source build scripts (thanks to Andy Sommerville).
--Window close button now functions properly in windowed mode (thanks to
Andy Sommerville).
--Fixed freeze on Player end when Controller sends a Song referencing parts
that have been deleted.
--Added Extended ASCII support for non-US accents and characters. Most
western-European languages should be supported by the included font image
(ISO/8859-1, Latin-1). Other languages (such as those that use Cyrillic)
can be used by modifying the font image.
--Added Color Palettes as first-class resources with their own Picker.
--Fixed many compile warnings thrown by certain versions of GCC.
--Fixed bug in rubber stamp tool when dealing with transparent areas.
--Improved appearance of grid in Room Editor.
--Improved grid lines in various pixel editors to reduce color distortions.
--Added a note about ESC key to menu screen.
--Can now use mouse, in addition to arrow keys, on menu screen.
--Shows port number on manual connection screen.
--New object position hints in room editor (helpful when placing wall flags
around objects).
--Added IP (and IP:port) command-line argument to auto-join a hosted game.
--Added memory of last set speech bubble position for each object, alleviating
the need to manually set speech bubble positions most of the time.
--Added tool tips for each tile in Room Editor grid.
--Added check for resouceCache write permissions.
--Added a button for holding certain objects across scene changes.
--Added a button for colorizing all pixels of a sprite or tile.
--Ctrl-Q can be used to quit (in addition to ESC).
--Fixed a bug that caused control key to stick when opening editor with
keyboard shortcuts.
--Ctrl-A to add a new sprite layer to an object at current mouse location
(great for adding many of the same sprite, like tree leaves).
--Ctrl-A to add a new object to a scene at current mouse location
(great for adding many of the same objects, like flowers).
--Improved object editor mouse input so that only dragging moves a layer
(clicking on an empty spot no longer moves a layer).
--Added buttons for moving a sprite layer up and down in the Object Editor.
Version 14b 2010-April-23
--Fixed import cache hang when a referenced resource does not exist.
--Fixed line endings in stringDatabase.txt on windows.
--Fixed long loading times when importing resource packs.
--Improved loading times when importing an old resource cache.
--Added a loading screen.
--Fixed a glitch where Waiting message not shown after joining a second game as Player.
--Reduced audio buffer size to improve latency (was increased during v14
debugging).
--Added missing "add to pack" button for Songs, removed for Phrases.
--Removed wayward "edit timbre" button from Phrase Editor.
--Added Ctrl-E to edit selected object or selected sprite layer.
Version 14 2010-April-20
--Fixed memory allocation bug in unique IDs.
--Fixed code to be 64-bit clean.
--Fixed bug in adding resources to a picker stack when that stack is visible.
--Fixed crash when undoing back to default object in Object editor.
--Fixed flip book sizing and distortion issues when screen is not 640x480
--Overhauled music editor, making it much more powerful.
--Fixed bug in selection of previously colored but erased sprite areas.
--Improved transparency toggle tool tip in Object editor.
--Added Ctrl-W to close editors.
--Added Alt-Enter to leave fullscreen mode (as work-around for lack of working
alt-tab behavior on the Mac).
--Added an import directory to make upgrading easier.
--Made UPNP messages more clear.
--Cleared external address if going back to hosting a local game.
--Added per-layer additive blend mode (for glowing objects).
--Search results with same name are now shown in newest-first order.
Version 13 2010-April-9
--Fixed crash when opening and closing color editor repeatedly.
--Fixed glitch in dragging to edit room wall markers.
--Fixed a glitch in editing selection for stamp tool.
--Fixed keyboard event bug in Practice mode.
--Changed flashing warning display so it always on top (was blocked by color
palette).
--Fixed quit confirmation to linger on the screen even if mouse moved.
--Fixed screen size bug when user specifies an unsupported resolution for
his or her monitor.
--Changed so that background tile (for pickers and object editor) does not
follow tile chosen in room editor. Instead, it always matches the background
tile under the currently selected object in the scene.
--Changed so that speech bubble moving tool cannot change selected object.
Version 12 2010-April-8
--Fixed timing bug that allowed duplicate moves to be sent, leading to
out-of-synch games
--Fixed crash (and misbehavior) when dragging whole object in object editor
starting from off the edge of the display.
--Fixed behavior when dragging between sliders and buttons. Sliders can
now be dragged around wildly without affecting nearby components.
--Dragging around in color palette changes selected color well.
--Improved focus behavior of text fields on menu screen.
--Now Controller interface holds keyboard focus on speech bubbles no matter
where the user clicks on display (unless typing in a text field).
Typing always adds to current object's speech now.
--Fixed a crash when more than 255 layers added to an object.
--Added better user feedback when an object is full.
--Added better user feedback when a scene is full.
--Tool tips and timer now on top of all scenery.
--Practice mode now outputs flipbooks too (solo play?).
--Blocked Controller typing into Player's bubble, since it's not sent anyway.
--Fixed Picker background tile being updated due to keyboard events.
--No longer treats mouse wheel events as mouse clicks.
--Fixed crash when resourceCache foldernot preset---makes a new folder
if needed.
--Moved stringDatabase.txt into resourceCache folder.
--Fixed a slow-down when dragging large objects across tile boundaries.
--Changed to hide selected layer flashing border when dragging layer (for
precise positioning).
--Added checksum to network protocol, fixing a crash when bad network data
received.
--Updated all bundled v9 resource files to the v10+ format.
Version 11 2010-April-7
--Fixed drag and drop crash bug in object editor.
--Fixed a line-end bug in windows fullscreen settings file.
Version 10 2010-April-7
--Changed OpenGL color functions to work around a bug in some video drivers.
--Added key-repeat when holding down a key (deleting text is easier).
--Added text boxes in addition to speech bubbles.
--Added an object locking feature that makes it easier to manipulate complex
scenes.
--Made Close button infinite to upper left.
--Switched to an HSV color picker (from RGB).
--Replaced color stack with a collection of editable color wells.
--Added rotate and flip buttons in object editor.
--Added resource packs for sharing resources through email and web.
--Added disk-based cache of thumbnail images to speed up resource pickers.
--Improved thumbnail view of Scenes with small rooms.
--Improved centering of room thumbnails.
--Fixed timing inconsistencies (30 seconds is now always 30 seconds).
--Fixed resizing and mouse handling for screen sizes other than 640x480.
--Moved flip book PNGs into an images subdir. Made file names order-proof.
--Added pure HTML version of flip books for easy local viewing.
--Added a per-layer transparency to objects.
--Fixed rendering of object transparencies in scene thumbnails.
--Fixed event passing bug when new editor opened.
--Made text fields easier to click.
--Changed default mode to speech when player position frozen.
--Added a practice mode against timer for Controller.
--Speech delete button on Controller side now clear's Player's action too.
--Added settings file for time limit.
--Moved all printed output to a log file.
--Ctrl-X mapped to delete for scene objects and object layers.
--Added confirmation on quit (after pressing Escape).
--Fixed a movement glitch when player types before moving.
--Improved highlights of selected object layers.
--Fixed jitter when speech bubble auto-flips.
--Added any-key message to bottom of volume screen.
--Background tile in picker now set properly when object added or removed.
--Speech flip button enabled properly after speech deleted.
Version 9 2010-March-30
--Fixed freeze bug when objects requested across wire that have been deleted.
--Fixed image cache of deleted objects.
--Removed multiple fetching of same new object in one batch network request.
--Action arrows fixed to never go off sides of screen.
--Re-wrote word-wrapping algorithm for speech bubbles to handle spacing
automatically and hyphenate words that are too long for one line.
--Fixed bug in speech flip button appearing when it can't be used.
Version 8 2010-March-29
--Fixed position of Clear button in room editor.
--Improved search box behavior for multi-word searches.
--Fixed a drag-and-drop bug that occured accross editors.
--Removed unnecessary object descriptor tool tips on Player side.
--Added dynamic bubble tails to keep speech from going off top or sides
of screen.
--Fixed bug that made Player's speech not deleteable on Controller side.
--Improved sizing of verb box with single-pixel increments.
--Typing on Player's side automatically adds speech, even if in Move mode.
--Player's Speech and Action Delete buttons are now modeless.
Version 7 2010-March-25
--Disabled player send button on initial turn waiting screen, fixing a
potential out-of-synch issue.
--Added UPNP support for opening ports on routers and obtaining the external
IP address (makes remote internet games easier to set up).
--ESC from inside the game now takes you back to the menu where you can
start a new game.
--Added Scenes (rooms with placed objects) as first-class resources.
--Got rid of redundant "new object" mode on game state toolbar.
--Improved object selection behavior when objects overlap.
--Added an "add object" button.
--Added button for editing the selected object directly.
--Improved arrangement of state editor UI.
--Removed flipbook output toggle button. Flipbooks always on now.
--Improved arrangement of object editor UI.
--Added button for editing the selected sprite layer directly.
--Added support for moving all sprite layers together relative to object
anchor.
--Added support for dragging and dropping all layers from one object into
another.
--Controller editing of selected object's speech now happens whenever you type,
regardless of what mode you are in.
--Added confirmation for Send button.
Version 6 2010-March-21
--Drag-and-drop from object picker to add objects to scene.
--Selected sprite layer blinks in object editor.
--Fixed empty verb arrows that appeared in slide show when player frozen.
--Sprite Picker selected sprite now follows current sprite layer in object
editor. Got rid of redundant Grab Layer button.
--Added missing warning display to music editor.
--Increased to 10 bookmarks, fixed add button, added mnemonic colors.
--Locked keyboard focus even if player clicks off main game display area.
--Fixed double-space issue in speech bubbles.
--Fleshed out music editor with more functionality.
--Graceful failure if game folder is read-only.
Version 5 2010-March-18
--Fixed bug in player send behavior and stale speech clearing.
--Redesign of sprite mask editing to make it more intuitive.
--Basic keyboard commands (shift-click to pick color, ctrl-z to undo)
--Click to pick object sprite layer in object editor.
--Drag-and-drop from sprite picker into object editor.
--Flipbook output now on by default.
Version 4 2010-March-7
--Controller can now receive subsequent Player connections after initial Player
quits.
--Highlight speech bubble that is currently being edited.
--Auto-choose background tile for picker displays using current object position
in game.
--Slide-show output.
--Player send button.
--Game state bookmarks.
--Buttons for jumping to top/bottom object layers.
--Object depth sorting.
--Object anchors more visible.
--Warning display for controller (important game events).
--Autoclearing stale speech.
Version 3 2010-February-11
--Added fade sliders for objects and room.
--Fixed 1 pixel text overlap in speech bubbles (added more leading).
--Fixed undo behavior of switching selected object.
--Pickers now update properly when game state is cleared.
--Added auto-host and auto-join modes to make startup automatic in a gallery
setting.
--Fixed room editor mini view when clear button pressed.
Version 2 2010-February-1
Initial release for Art History of Games conference.

View File

@ -0,0 +1,29 @@
#
# Generic:
#
# Map all .cpp C++ and C files into .o object files
#
# $@ represents the name.o file
# $< represents the name.cpp file
#
%.eps: %.png
convert $< $@
%.eps: %.sk
sk2ps $< $@
%.dvi: %.tex
latex $<
%.ps: %.dvi
dvips -Ppdf -t letter -o $@ $<
%.pdf: %.ps
ps2pdf $<
all: controllerGuide.pdf
clean:
rm *.pdf *.ps *.dvi *.log *.aux
controllerGuide.dvi: screen.eps close.eps stack.eps search.eps replace.eps edit.eps clear.eps

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

View File

@ -0,0 +1,63 @@
\documentclass[12pt]{article}
\usepackage{amssymb,latexsym,fullpage,epsfig}
\newcommand{\buttonFig}[1]{
\parbox[c]{1em}{\vspace{0em} \includegraphics[width=1em]{#1} }
}
\begin{document}
\title{Sleep Is Death (Geisterfahrer)}
\date{}
\maketitle
%\thispagestyle{empty}
\vspace{-0.9in}
\begin{center}
{\Large \it Controller Interface Guide}
\end{center}
%\section{Overview}
{\it Sleep Is Death} is a two-player, turn-based game. One person plays as the ``Player,'' and the other plays as the ``Controller.''
The Player commands the behavior of a single character in the world. Hopefully, the world and other objects react coherently to the Player's actions---it is the Controller's job to ensure this coherence. The Controller commands the behavior of all the other characters and objects in the world, essentially fabricating an interactive illusion that folds around the Player.
%The user interface shown to the Player is too simple to warrent explanation. The Controller's interface, on the other hand, is quite complex. However, the Controller's interface was designed to be as simple as possible while still allowing the Controller to {\it quickly} manipulate every aspect of the game world.
The Controller's interface is comprehensive. Swapping rooms, swapping objects, editing speech, moving things around, and editing the soundtrack are all at your fingertips. Deeper levels of the interface also support editing rooms and objects on the fly, a technique that becomes necessary for advanced Controller play.
The basic Controller interface is show below:
\begin{center}
\includegraphics[width=0.6\textwidth]{screen.eps}
\end{center}
If your screen doesn't look like this, you may be down inside one of the sub-editors. Look for a Close button (\buttonFig{close.eps}) in the upper-left corner of the screen. Press Close until you back out to the basic screen shown above. If you want to return to a ``clean slate'' at any point, press the Clear button:
\begin{center}
\includegraphics[width=3em]{clear.eps}
\end{center}
Tool tips are provided for every button in the game. Some of the more subtle aspects of Controller play are described on the following page.
\paragraph{Turn structure} Each side has {\it 30 seconds} to commit a move, one after the other. The timer for your move is shown in the upper left corner of the screen. When the counter reaches 0, your move is sent. Your counter goes negative during the other player's move, but jumps back up to positive 30 again when it's your turn.
During the Controller's move time, the Player's view is frozen in a ``Waiting...'' state. The Controller manipulates the state of the world, and after the Controller's move is sent, the Player's view is updated to match that state. During the Player's move time, the Controller can continue to manipulate the world, behind the scenes, in anticipation of the move that the Player will eventually send. These behind-the-scenes manipulations are invisible to the Player. %Thus, while the Player has only 30 seconds to pick a move, the Controller effectively has 60 seconds. This extra time can be used to prepare new objects and rooms for potential future needs in the game.
\paragraph{Game resources} Objects and Rooms in the game can be browsed and selected with the Picker interfaces on the right side of the screen. These interfaces can be toggled between Stack and Search modes with the \buttonFig{stack.eps} and \buttonFig{search.eps} buttons. The game state's Room will switch to whatever Room is selected in the picker. Objects are a bit different, though, as picking an Object doesn't automatically alter the game state. Instead, pressing this button will replace the current Object in the game state with the selected Object from the Picker:
\begin{center}
\includegraphics[width=3em]{replace.eps}
\end{center}
\paragraph{Manipulating Objects} The toolbar at the bottom of the screen allows you to manipulate Objects in the game state in various ways. Undo and Redo buttons are also provided, so there's no danger in making a mistake.
\paragraph{Going deeper} Every resource in the game is fully editable, should the need arise. Look for the Edit buttons (\buttonFig{edit.eps}) at the top of each picker to enter a sub-editor. Some of these have further sub-editors. Whenever you edit a resource, your new version of that resource is added to the database. You can then use your new version in the current game state by backing out to the main state editor (press the Close button, \buttonFig{close.eps}, in the upper left corner).
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B

View File

@ -0,0 +1,29 @@
</center>
<?php
global $imageNumber;
echo "<table width=\"100%\" border=0><tr><td align=right>";
if( $imageNumber == 1 ) {
?>
<script src="//static.getclicky.com/js" type="text/javascript"></script>
<script type="text/javascript">try{ clicky.init(100708513); }catch(e){}</script>
<noscript><p><img alt="Clicky" width="1" height="1" src="//in.getclicky.com/100708513ns.gif" /></p></noscript>
<?php
}
echo "</td></tr></table>";
?>
</body>
</html>

View File

@ -0,0 +1 @@
<?php $frameList = array( "00001", "00002", "00003", "00004", "00005", "00006", "00007", "00008", "00009", "00010", "00011", "00012", "00013", "00014", "00015", "00016", "00017", "00018", "00019", "00020", "00021", "00022", "00023", "00024", "00025", "00026", "00027", "00028", "00029", "00030", "00031", "00032", "00033", "00034", "00035", "00036", "00037", "00038", "00039", "00040", "00041", "00042", "00043", "00044", "00045", "00046", "00047", "00048", "00049", "00050", "00051", "00052", "00053", "00054", "00055", "00056", "00057", "00058", "00059", "00060", "00061", "00062", "00063", "00064", "00065", "00066", "00067", "00068", "00069", "00070", "00071", "00072", "00073", "00074", "00075", "00076", "00077", "00078", "00079", "00080", "00081", "00082", "00083", "00084", "00085", "00086", "00087", "00088", "00089", "00090", "00091", "00092", "00093", "00094", "00095", "00096", "00097" ); ?>

View File

@ -0,0 +1,13 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
[<a href="/">home</a>] [<a href="https://sites.fastspring.com/jasonrohrer/instant/sleepisdeathticket">order</a>] [<a href="index.php">start</a>]
<center>

View File

@ -0,0 +1,44 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00002.html" title="Next">
<img src="00001.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
</td>
<td align=right>
<a href="00002.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00002.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00003.html" title="Next">
<img src="00002.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00001.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00003.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00003.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00004.html" title="Next">
<img src="00003.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00002.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00004.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00004.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00005.html" title="Next">
<img src="00004.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00003.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00005.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00005.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00006.html" title="Next">
<img src="00005.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00004.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00006.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00006.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00007.html" title="Next">
<img src="00006.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00005.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00007.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00007.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00008.html" title="Next">
<img src="00007.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00006.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00008.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00008.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00009.html" title="Next">
<img src="00008.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00007.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00009.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00009.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00010.html" title="Next">
<img src="00009.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00008.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00010.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00010.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00011.html" title="Next">
<img src="00010.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00009.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00011.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00011.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00012.html" title="Next">
<img src="00011.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00010.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00012.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00012.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00013.html" title="Next">
<img src="00012.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00011.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00013.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00013.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00014.html" title="Next">
<img src="00013.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00012.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00014.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00014.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00015.html" title="Next">
<img src="00014.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00013.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00015.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00015.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00016.html" title="Next">
<img src="00015.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00014.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00016.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00016.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00017.html" title="Next">
<img src="00016.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00015.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00017.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00017.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00018.html" title="Next">
<img src="00017.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00016.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00018.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00018.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00019.html" title="Next">
<img src="00018.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00017.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00019.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00019.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00020.html" title="Next">
<img src="00019.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00018.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00020.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00020.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00021.html" title="Next">
<img src="00020.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00019.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00021.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00021.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00022.html" title="Next">
<img src="00021.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00020.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00022.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00022.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00023.html" title="Next">
<img src="00022.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00021.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00023.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00023.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00024.html" title="Next">
<img src="00023.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00022.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00024.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00024.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00025.html" title="Next">
<img src="00024.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00023.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00025.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00025.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00026.html" title="Next">
<img src="00025.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00024.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00026.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00026.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,46 @@
<html>
<head>
<title>Sleep Is Death Flip Book</title>
</head>
<body bgcolor="#000000" text="#ffffff"
link="#FD8109" alink="#ffff00" vlink="#FD8109">
<center>
<br>
<table border=0>
<tr><td colspan=2>
<a href="00027.html" title="Next">
<img src="00026.png" border=0 width=640 height=416></a>
</td></tr>
<tr>
<td>
<a href="00025.html" title="Previous">
<img src="../prev.png" width="32" height="32" border="0"></a>
</td>
<td align=right>
<a href="00027.html" title="Next">
<img src="../next.png" width="32" height="32" border="0"></a>
</td>
</tr>
</table>
<img src="00027.png" border=0 width=0 height=0></center>
</center>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Some files were not shown because too many files have changed in this diff Show More