Added lbreakout2 from original source

This commit is contained in:
Jerome Marty
2010-12-20 16:03:09 +01:00
committed by pelya
parent 661fdabbfc
commit 18a15db3d4
587 changed files with 191221 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
DEFS = @DEFS@ @network_flag@ @sdlnet_flag@ @inst_flag@ @locdir_flag@
bin_PROGRAMS = lbreakout2server
lbreakout2server_SOURCES = \
server.c server_game.c
EXTRA_DIST = server.h server_game.h
lbreakout2server_LDADD = ../common/libcommon.a ../game/libgame.a @sdlnet_lib_flag@
SUBDIRS = levels

View File

@@ -0,0 +1,592 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
bin_PROGRAMS = lbreakout2server$(EXEEXT)
subdir = server
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
$(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
$(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
$(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \
$(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \
$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_lbreakout2server_OBJECTS = server.$(OBJEXT) server_game.$(OBJEXT)
lbreakout2server_OBJECTS = $(am_lbreakout2server_OBJECTS)
lbreakout2server_DEPENDENCIES = ../common/libcommon.a \
../game/libgame.a
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(lbreakout2server_SOURCES)
DIST_SOURCES = $(lbreakout2server_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@ @network_flag@ @sdlnet_flag@ @inst_flag@ @locdir_flag@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GMSGFMT = @GMSGFMT@
GREP = @GREP@
HAVE_ASPRINTF = @HAVE_ASPRINTF@
HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
HAVE_SNPRINTF = @HAVE_SNPRINTF@
HAVE_WPRINTF = @HAVE_WPRINTF@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
POSUB = @POSUB@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
ac_ct_CC = @ac_ct_CC@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
appname = @appname@
arch_flag = @arch_flag@
audio_flag = @audio_flag@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
doc_dir = @doc_dir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
hi_dir = @hi_dir@
hi_inst_flag = @hi_inst_flag@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
inst_dir = @inst_dir@
inst_flag = @inst_flag@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
locdir_flag = @locdir_flag@
mandir = @mandir@
mixer_flag = @mixer_flag@
mkdir_p = @mkdir_p@
netdebug_flag = @netdebug_flag@
network_flag = @network_flag@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sdlnet_flag = @sdlnet_flag@
sdlnet_lib_flag = @sdlnet_lib_flag@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
warp_flag = @warp_flag@
win32_deps = @win32_deps@
win32_inst_script = @win32_inst_script@
lbreakout2server_SOURCES = \
server.c server_game.c
EXTRA_DIST = server.h server_game.h
lbreakout2server_LDADD = ../common/libcommon.a ../game/libgame.a @sdlnet_lib_flag@
SUBDIRS = levels
all: all-recursive
.SUFFIXES:
.SUFFIXES: .c .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign server/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign server/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
lbreakout2server$(EXEEXT): $(lbreakout2server_OBJECTS) $(lbreakout2server_DEPENDENCIES)
@rm -f lbreakout2server$(EXEEXT)
$(LINK) $(lbreakout2server_LDFLAGS) $(lbreakout2server_OBJECTS) $(lbreakout2server_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server_game.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(mkdir_p) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile $(PROGRAMS)
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-exec-am: install-binPROGRAMS
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-binPROGRAMS uninstall-info-am
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
clean clean-binPROGRAMS clean-generic clean-recursive ctags \
ctags-recursive distclean distclean-compile distclean-generic \
distclean-recursive distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-exec install-exec-am \
install-info install-info-am install-man install-strip \
installcheck installcheck-am installdirs installdirs-am \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \
tags tags-recursive uninstall uninstall-am \
uninstall-binPROGRAMS uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -0,0 +1,13 @@
EXTRA_DIST = N_Arenas N_Snapshots
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(inst_dir)/levels
@for file in $(EXTRA_DIST); do \
$(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/levels/$$file; \
done
win32-install-script:
@for file in $(EXTRA_DIST); do \
echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\levels\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \
done

View File

@@ -0,0 +1,368 @@
# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = server/levels
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
$(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
$(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
$(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lcmessage.m4 \
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longdouble.m4 \
$(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf-posix.m4 \
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/signed.m4 \
$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GMSGFMT = @GMSGFMT@
GREP = @GREP@
HAVE_ASPRINTF = @HAVE_ASPRINTF@
HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
HAVE_SNPRINTF = @HAVE_SNPRINTF@
HAVE_WPRINTF = @HAVE_WPRINTF@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
POSUB = @POSUB@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
ac_ct_CC = @ac_ct_CC@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
appname = @appname@
arch_flag = @arch_flag@
audio_flag = @audio_flag@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
datarootdir = @datarootdir@
doc_dir = @doc_dir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
hi_dir = @hi_dir@
hi_inst_flag = @hi_inst_flag@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
inst_dir = @inst_dir@
inst_flag = @inst_flag@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
locdir_flag = @locdir_flag@
mandir = @mandir@
mixer_flag = @mixer_flag@
mkdir_p = @mkdir_p@
netdebug_flag = @netdebug_flag@
network_flag = @network_flag@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sdlnet_flag = @sdlnet_flag@
sdlnet_lib_flag = @sdlnet_lib_flag@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
warp_flag = @warp_flag@
win32_deps = @win32_deps@
win32_inst_script = @win32_inst_script@
EXTRA_DIST = N_Arenas N_Snapshots
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign server/levels/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign server/levels/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
uninstall-info-am:
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am: install-data-local
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am \
install-data-local install-exec install-exec-am install-info \
install-info-am install-man install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am uninstall uninstall-am uninstall-info-am
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(inst_dir)/levels
@for file in $(EXTRA_DIST); do \
$(INSTALL_DATA) $$file $(DESTDIR)$(inst_dir)/levels/$$file; \
done
win32-install-script:
@for file in $(EXTRA_DIST); do \
echo "Source: \"`pwd -W`\\$$file\"; DestDir: \"{app}\\levels\"; CopyMode: alwaysoverwrite" >> @win32_inst_script@; \
done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -0,0 +1,247 @@
Version: 1.00
Level:
Michael Speck
Duell-1
Bricks:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Bonus:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Level:
Michael Speck
Duell-2
Bricks:
..............
..............
..............
..............
..#..#..#..#..
..#..#..#..#..
..#..#..#..#..
..@..@..@..@..
..@..@..@..@..
..@..@..@..@..
..@..@..@..@..
..#..#..#..#..
..#..#..#..#..
..#..#..#..#..
..............
..............
..............
..............
Bonus:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Level:
Michael Speck
Duell-1
Bricks:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Bonus:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Level:
Michael Speck
Duell-3
Bricks:
..............
..............
..............
..............
..............
..#..#..#..#..
..............
#...@....@...#
..............
..............
#...@....@...#
..............
..#..#..#..#..
..............
..............
..............
..............
..............
Bonus:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Level:
Michael Speck
Duell-1
Bricks:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Bonus:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
Level:
Michael Speck
Duell-4
Bricks:
..............
..............
.#...#..#...#.
..............
@............@
@............@
@............@
@............@
@............@
@............@
@............@
@............@
@............@
@............@
..............
.#...#..#...#.
..............
..............
Bonus:
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............
..............

View File

@@ -0,0 +1,411 @@
Version: 1.00
Level:
Michael Speck
Chinese
Bricks:
..............
..............
..............
ffffffffffffff
ffffffffffffff
gggggggggggggg
gggggggggggggg
jbbbbbbbbbbbbj
jbjjjjjjjjjjbj
jbjjjjjjjjjjbj
jbbbbbbbbbbbbj
dddddddddddddd
dddddddddddddd
eeeeeeeeeeeeee
eeeeeeeeeeeeee
..............
..............
..............
Bonus:
..............
..............
..............
?......-.....?
....+.....>...
..p.....b.....
.....~.....+..
...s....j.b.w.
.*1323232323..
..3232323231*.
.w...j....s...
.......~...+..
....b.....p...
..b...+.>.....
?...-........?
..............
..............
..............
Level:
Michael Speck
Spearhead
Bricks:
..............
..............
..............
jjjj..........
kkkkkk........
aaaaaaaa......
kkkkkkkkkk....
jjjjjjjjjjjj..
#####....zzzzz
#####....zzzzz
kkkkkkkkkkkk..
jjjjjjjjjj....
aaaaaaaa......
jjjjjj........
kkkk..........
..............
..............
..............
Bonus:
..............
..............
..............
.2.-..........
.+............
2.w2b..+......
.-....2..~....
.p.*.}..s..c..
.........44444
.........44444
p..*...}s.~...
.2...2-..+....
..b2w..d......
.-.+..........
2.............
..............
..............
..............
Level:
Michael Speck
Fortress
Bricks:
..............
..............
..............
..............
..............
..E##zzzz##E..
.kE@..gg..@Ek.
kkE.iiiiii.Ekk
kkEgiggggigEkk
kkEgiggggigEkk
kkE.iiiiii.Ekk
.kE@..gg..@Ek.
..E##zzzz##E..
..............
..............
..............
..............
..............
Bonus:
..............
..............
..............
..............
..............
.....f>.f.....
.p..........p.
?...3....3...+
.b...34.3.....
.....3.43...b.
+...3....3...?
.p..........p.
.....f.>f.....
..............
..............
..............
..............
..............
Level:
Michael Speck
Soccer Worldcup
Bricks:
..............
..............
ffffffffffffff
ffffffffffffff
ffffffffffffff
jjjffffffffjjj
ffjffffffffjff
ffjfffjjfffjff
jfjffjffjffjfj
jfjffjffjffjfj
ffjfffjjfffjff
ffjffffffffjff
jjjffffffffjjj
ffffffffffffff
ffffffffffffff
ffffffffffffff
..............
..............
Bonus:
..............
..............
>...+.bb.+...>
..b..-..-..b..
..............
11>........>11
.f1..b..b..1..
..1...33...1..
?.1..3553..1.?
?.1..3553..1.?
..1...33...1..
..1..b..b..1f.
11>........>11
..............
..b..-..-..b..
>...+.bb.+...>
..............
..............
Level:
Michael Speck
Construction Time
Bricks:
..............
..............
..............
..!..!kk!..!..
.....*kk*.....
.gggggggggggg.
.ffhhhhhhhhff.
.*fh*dddd*hf*.
.@!h@!ee!@h!@.
.@!h@!ee!@h!@.
.*fh*dddd*hf*.
.ffhhhhhhhhff.
.gggggggggggg.
.....*kk*.....
..!..!kk!..!..
..............
..............
..............
Bonus:
..............
..............
..b..c..+..0+.
.0.0...3.3....
..s........0..
..............
..............
.....4..4.>...
..w..b.m...p..
..p...g.b..w..
.....4..4.....
..............
..............
..0>.......s..
....3.3...0.0.
.+0..+..b..c..
..............
..............
Level:
Michael Speck
Four Seasons
Bricks:
..............
..............
hhhh......eeee
hhhh......eeee
hhhh......eeee
hhhh......eeee
hhhh......eeee
hhhh......eeee
..............
..............
ffff......jjjj
ffff......jjjj
ffff......jjjj
ffff......jjjj
ffff......jjjj
ffff......jjjj
..............
..............
Bonus:
..............
..............
+..b.......2.4
3.s.......4{..
.3.2......f.*.
?.-........b.?
...}......c.3.
.p........2pjb
..............
..............
bjp2........p.
.3.d......}...
?.b........-.?
.*.f......2.3.
..{4.......s.3
4.2.......b..+
..............
..............
Level:
Michael Speck
Hidden Obstacles
Bricks:
..............
..............
..............
..............
.v#eeeeeeee#v.
..e#......#e..
..eg#vvvv#ge..
..egf....fge..
..egf.dd.fge..
..egf.dd.fge..
..egf....fge..
..eg#vvvv#ge..
..e#......#e..
.v#eeeeeeee#v.
..............
..............
..............
..............
Bonus:
..............
..............
..............
..............
...00000000...
..............
.....4444.....
..+?......?b..
...?b.pp.-?...
...?-.pp.b?...
..b?......?+..
.....4444.....
..............
...00000000...
..............
..............
..............
..............
Level:
Michael Speck
Oh, Deer!
Bricks:
..............
..............
.d..e....e..d.
.e..d....d..e.
.#..#....#..#.
.a..i....i..a.
.g..a....a..g.
.a..i....i..a.
.g..a....a..g.
.a..i....i..a.
.g..a....a..g.
.a..i....i..a.
.g..a....a..g.
.#..#....#..#.
.h..d....d..h.
.d..h....h..d.
..............
..............
Bonus:
..............
..............
.p..p....p..p.
.p..p....p..p.
..............
....5....5....
.4..........4.
....5....5....
.4..b....b..j.
....5....5....
.j..b....b..4.
....5....5....
.4..........4.
..............
.p..p....p..p.
.p..p....p..p.
..............
..............
Level:
Michael Speck
Pipes
Bricks:
..............
..............
.j..!..!..###.
.j..#dd#..#gg.
.jj.#dd#..#g..
.jj.####......
.##...........
.f#*.###.*.##.
.f#!.!.!.!.#e.
.f#.!.!.!.!#e.
.##.*.###.*#e.
...........##.
......####.jj.
..g#..#hh#.jj.
.gg#..#hh#..j.
.###..!..!..j.
..............
..............
Bonus:
..............
..............
.f............
.3....b....*>.
..f..+.....d..
..3...........
..............
.3............
.5..?2?2?2?.3.
.3.?2?2?2?..5.
............3.
..............
...........3..
..c.....+..f..
.>*....b....3.
............f.
..............
..............
Level:
Michael Speck
Collect Your Reward!
Bricks:
..............
..............
.x..........x.
..............
...z.z..z.z...
..............
.x..........x.
...z.z..z.z...
..............
..............
...z.z..z.z...
.x..........x.
..............
...z.z..z.z...
..............
.x..........x.
..............
..............
Bonus:
..............
..............
.b..........b.
..............
...5.5..5.5...
..............
.b..........b.
...5.5..5.5...
..............
..............
...5.5..5.5...
.b..........b.
..............
...5.5..5.5...
..............
.b..........b.
..............
..............

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,121 @@
/***************************************************************************
server.h - description
-------------------
begin : 03/03/19
copyright : (C) 2003 by Michael Speck
email : kulkanie@gmx.net
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef __SERVER_H
#define __SERVER_H
/***** INCLUDES ************************************************************/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <SDL.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <signal.h>
#include <time.h>
#include "../common/tools.h"
#include "../common/net.h"
#include "../common/messages.h"
#include "../common/list.h"
#include "../common/parser.h"
#include "../game/game.h"
/* i18n */
#include "../common/gettext.h"
#if ENABLE_NLS
#define _(str) gettext (str)
#else
#define _(str) (str)
#endif
/***** TYPE DEFINITIONS ****************************************************/
typedef struct {
int id; /* global user id */
char name[20];
int no_comm; /* user does not communicate: bots and disconnected
users have this set True */
int bot; /* if True this is a paddle bot */
int bot_level; /* paddle speed in pix/sec */
NetSocket socket; /* transmission socket */
int hidden; /* True if chatroom user is not visible
(e.g. looking at game statistics or playing) */
int admin; /* wether user logged in with admit rights */
void *game; /* FIXME: I'M A BAD HACK: points to the current ServerGame
if this user is playing */
int player_id; /* 0 - challenger in game or 1 - challenged */
} ServerUser;
typedef struct {
char name[20];
int id;
List *users;
} ServerChannel;
enum {
SERVER_AWAIT_ACCEPT, /* the first user has created the game and is already
added. a challenge note is sent to the challenged
user. in this state the server awaits either a
ACCEPTED or REFUSED message by the remote
or a CANCEL, DISCONNECT by the challenger */
SERVER_AWAIT_READY, /* await ready message from both users, then play */
SERVER_PLAY, /* now the game is actually running: valid messages are
paddle updates, pause requests, chat messages and exits */
SERVER_PAUSE /* game is paused and players may exchange chat messages
until one sends an UNPAUSE */
}; /* states of a server game */
typedef struct {
ServerUser *challenger;
ServerUser *challenged; /* the two users that will play */
char name[20]; /* name of the levelset */
int diff; /* difficulty level */
int rounds; /* per level */
int frags; /* DM: frags required to win */
int balls; /* DM: number of balls a paddle may fire */
} ServerGameCtx;
typedef struct {
int id; /* users join a game by sending its id */
int state; /* current state as above */
ServerUser *users[2]; /* pointers to chat channel:
0 - challenger
1 - challenged */
ServerChannel *channel; /* the channel the users are in */
LevelSet *set; /* pointer to the current set */
int rounds_per_level;
int rounds; /* level count * rounds per level */
int cur_round; /* id of current round. level id
is cur_round / rounds */
int cur_level; /* id of current level */
int ready[2]; /* wether user has sent READY */
Game *game; /* the actual game data used by server */
GameStats stats[2]; /* game stats:
0 - challenger
1 - challenged */
int game_over; /* True after last round was finalized
and stats have been send. */
} ServerGame;
/***** PUBLIC FUNCTIONS ****************************************************/
#endif

View File

@@ -0,0 +1,616 @@
/***************************************************************************
server_game.c - description
-------------------
begin : 03/03/19
copyright : (C) 2003 by Michael Speck
email : kulkanie@gmx.net
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/***** INCLUDES ************************************************************/
#include "server.h"
/***** EXTERNAL VARIABLES **************************************************/
extern List *games;
extern int global_id;
extern char errbuf[128]; /* used to compile error messages */
extern char msgbuf[MAX_MSG_SIZE]; /* used to compile messages */
extern int msglen;
extern List *levelsets;
extern char net_buffer[MAX_MSG_SIZE + PACKET_HEADER_SIZE];
extern int server_frame_delay;
extern int msg_read_pos, net_buffer_cur_size;
extern void send_info( ServerUser *user, int type, char *format, ... );
extern void channel_hide_user( ServerChannel *channel, ServerUser *user, int hide );
extern void channel_remove_user( ServerChannel *channel, ServerUser *user );
extern void send_full_update( ServerUser *user, ServerChannel *channel );
/***** EXPORTS *************************************************************/
/***** FORWARDED DECLARATIONS **********************************************/
/***** LOCAL TYPE DEFINITIONS **********************************************/
/***** LOCAL VARIABLES *****************************************************/
/***** LOCAL FUNCTIONS *****************************************************/
#ifdef NETWORK_ENABLED
/* update the position of top paddle */
static void update_bot_paddle( Game *game, int ms )
{
int src_x, dest_x, dir;
Ball *ball, *min_ball = 0;
Extra *extra, *min_extra = 0;
Paddle *paddle = game->paddles[PADDLE_TOP];
int move = 0;
static int entropy = 0;
float change;
/* always fire */
paddle->fire_left = 1;
/* get nearest ball */
list_reset( game->balls );
while ( ( ball = list_next( game->balls ) ) ) {
if ( ball->attached ) continue;
if ( min_ball == 0 || ball->y < min_ball->y )
min_ball = ball;
}
/* get nearest extra */
list_reset( game->extras );
while ( ( extra = list_next( game->extras ) ) ) {
if ( extra->dir != -1 ) continue;
if ( min_extra == 0 || extra->y < min_extra->y )
min_extra = extra;
}
src_x = paddle->x + paddle->w/2;
dest_x = paddle->x + paddle->w/2;
if ( min_ball || min_extra ) {
if ( min_ball && ( min_extra == 0 || min_ball->y < min_extra->y ) ) {
dest_x = min_ball->x + 6;
move = 1;
}
else
if ( min_extra && ( min_ball == 0 || min_extra->y < min_ball->y ) ) {
dest_x = min_extra->x + 20;
move = 1;
}
}
dir = (dest_x<src_x)?-1:(dest_x>src_x)?1:0;
entropy = (rand() % 17)-8;
if ( move && dir != 0 ) {
change = paddle->bot_vx * ms;
/* due to high 'ms' the change might be so much that
* the paddle would start to jump epileptically, so
* set position to 'dest' then */
if ( dir < 0 && src_x-change<dest_x+entropy )
paddle->cur_x = dest_x+entropy - paddle->w/2;
else
if ( dir > 0 && src_x+change>dest_x-entropy )
paddle->cur_x = dest_x-entropy - paddle->w/2;
else
paddle->cur_x += change * dir;
if ( paddle->cur_x < BRICK_WIDTH )
paddle->cur_x = BRICK_WIDTH;
if ( paddle->cur_x + paddle->w >= 640 - BRICK_WIDTH )
paddle->cur_x = 640 - BRICK_WIDTH - paddle->w;
paddle->x = (int)paddle->cur_x;
}
}
static LevelSet *find_levelset( char *name )
{
LevelSet *set;
list_reset( levelsets );
while ( (set = list_next( levelsets ) ) )
if ( !strcmp( set->name, name ) )
return set;
return 0;
}
static void send_level( Level *level, ServerUser *user, int l_pos )
{
if ( user->bot ) return;
msgbuf[0] = MSG_LEVEL_DATA;
msgbuf[1] = l_pos;
msglen = 2;
comm_pack_level( level, msgbuf, &msglen );
socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf );
}
static void init_next_round( ServerGame *game )
{
game->cur_round++;
game->cur_level = game->cur_round / game->rounds_per_level;
game_init( game->game, game->set->levels[game->cur_level] );
/* send level and wait for ready */
game->state = SERVER_AWAIT_READY;
game->ready[0] = game->ready[1] = 0;
send_level( game->set->levels[game->cur_level],
game->users[0], PADDLE_BOTTOM );
if ( !game->users[1]->bot )
send_level( game->set->levels[game->cur_level],
game->users[1], PADDLE_TOP );
else
game->ready[1] = 1; /* bot is always the challenged one */
/* set up bot top paddle if any */
if ( game->users[1]->bot )
game->game->paddles[PADDLE_TOP]->bot_vx =
0.001 * game->users[1]->bot_level;
}
static void finalize_round( ServerGame *game )
{
/* update stats */
game_update_stats( 0, &game->stats[0] );
game_update_stats( 1, &game->stats[1] );
/* finalize */
game_finalize( game->game );
/* tell clients that round is over */
if ( game->cur_round == game->rounds-1 )
msgbuf[0] = MSG_LAST_ROUND_OVER;
else
msgbuf[0] = MSG_ROUND_OVER;
msgbuf[1] = game->game->winner;
msglen = 2;
socket_transmit( &game->users[0]->socket, CODE_BLUE, msglen, msgbuf );
if ( !game->users[1]->bot )
socket_transmit( &game->users[1]->socket, CODE_BLUE, msglen, msgbuf );
/* if this was the last round set game_over */
if ( game->cur_round == game->rounds-1 )
game->game_over = 1;
}
/* send game statistics were the first stats is the user it is send
* to and the second is the opponents stats */
static void send_stats( ServerUser *user, GameStats *stats1, GameStats *stats2 )
{
int count;
int kept[2] = {0,0}, bricks[2] = {0,0}, extras[2] = {0,0};
if ( user->bot ) return;
count = stats1->balls_reflected + stats1->balls_lost;
if ( count > 0 )
kept[0] = 100 * stats1->balls_reflected / count;
count = stats2->balls_reflected + stats2->balls_lost;
if ( count > 0 )
kept[1] = 100 * stats2->balls_reflected / count;
if ( stats1->total_brick_count > 0 )
bricks[0] = 100 * stats1->bricks_cleared / stats1->total_brick_count;
if ( stats2->total_brick_count > 0 )
bricks[1] = 100 * stats2->bricks_cleared / stats2->total_brick_count;
if ( stats1->total_extra_count > 0 )
extras[0] = 100 * stats1->extras_collected / stats1->total_extra_count;
if ( stats2->total_extra_count > 0 )
extras[1] = 100 * stats2->extras_collected / stats2->total_extra_count;
msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE );
msg_write_int8( MSG_GAME_STATS );
msg_write_int8( stats1->wins );
msg_write_int8( stats2->wins );
msg_write_int8( stats1->losses );
msg_write_int8( stats2->losses );
msg_write_int8( stats1->draws );
msg_write_int8( stats2->draws );
msg_write_int32( stats1->total_score );
msg_write_int32( stats2->total_score );
msg_write_int8( kept[0] );
msg_write_int8( kept[1] );
msg_write_int8( bricks[0] );
msg_write_int8( bricks[1] );
msg_write_int8( extras[0] );
msg_write_int8( extras[1] );
socket_transmit( &user->socket, CODE_BLUE, msglen, msgbuf );
}
/***** PUBLIC FUNCTIONS ****************************************************/
/* Add a new game by the context information, hide both users
* and send a challenge message to the challenged user. */
void server_game_add( ServerChannel *channel, ServerGameCtx *ctx )
{
ServerGame *game = salloc( 1, sizeof( ServerGame ) );
/* copy game data */
game->state = SERVER_AWAIT_ACCEPT;
game->id = global_id++;
game->channel = channel;
game->set = find_levelset( ctx->name );
if ( game->set == 0 ) {
/* should never happen... */
sprintf( errbuf, "game_create_failed: no levelset '%s' found\n", ctx->name );
send_info( ctx->challenger, MSG_ERROR, errbuf );
free( game );
return;
}
game->rounds_per_level = ctx->rounds;
game->rounds = game->set->count * game->rounds_per_level;
game->cur_round = -1; /* init_next_round will increase this to 0 */
/* create game module */
if ( (game->game = game_create( GT_NETWORK, ctx->diff, 100/*no rel warp*/ )) == 0 ) {
/* send error to user */
strncpy(errbuf,"game_create failed: out of memory",128);
send_info( ctx->challenger, MSG_ERROR, errbuf );
free( game );
return;
}
game_set_current( game->game );
game_set_ball_ammo( ctx->balls );
game_set_frag_limit( ctx->frags );
game_set_convex_paddle( 1 );
game_set_ball_random_angle( 1 );
/* set game for both users and set both users for game */
ctx->challenger->game = game;
ctx->challenged->game = game;
ctx->challenger->player_id = 0;
ctx->challenged->player_id = 1;
game->users[0] = ctx->challenger;
game->users[1] = ctx->challenged;
/* hide both users */
channel_hide_user( channel, ctx->challenger, 1 );
channel_hide_user( channel, ctx->challenged, 1 );
/* inform challenged user */
if ( !ctx->challenged->bot ) {
msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE );
msg_write_int8( MSG_CHALLENGE );
msg_write_string( ctx->challenger->name );
msg_write_string( ctx->name );
msg_write_int8( ctx->diff );
msg_write_int8( ctx->rounds );
msg_write_int8( ctx->frags );
msg_write_int8( ctx->balls );
socket_transmit( &ctx->challenged->socket, CODE_BLUE, msglen, msgbuf );
}
else {
/* instantly accept as bot */
msgbuf[0] = MSG_ACCEPT_CHALLENGE;
socket_transmit( &game->users[0]->socket,
CODE_BLUE, 1, msgbuf );
init_next_round( game );
}
list_add( games, game );
printf( _("game added: %s (%i): %i rounds: %s vs. %s\n"),
game->set->name, game->id, game->rounds,
game->users[0]->name, game->users[1]->name );
}
/* Free game memory. */
void server_game_delete( void *ptr )
{
ServerGame *game = (ServerGame*)ptr;
if ( game ) {
printf( _("game deleted: %s (%i)\n"), game->set->name, game->id );
if ( game->game )
game_delete( &game->game );
free( game );
}
}
/* unhide the users to their chat channel and delete the game.
* if game was beyond state AWAIT_ACCEPT the game stats are send
*/
void server_game_remove( ServerGame *game )
{
int i;
/* users are not unhidden if the actual game has already started
* as they need time to read the error messages (if any) then */
if ( game->state == SERVER_AWAIT_ACCEPT )
for ( i = 0; i < 2; i++ ) {
if ( game->users[i]->hidden )
channel_hide_user( game->channel, game->users[i], 0 );
}
else {
/* send stats */
send_stats( game->users[0], &game->stats[0], &game->stats[1] );
send_stats( game->users[1], &game->stats[1], &game->stats[0] );
/* and unhide bot if any */
if ( game->users[1]->bot )
channel_hide_user( game->channel, game->users[1], 0 );
}
/* clear user game pointer */
game->users[0]->game = 0;
game->users[1]->game = 0;
/* free memory */
list_delete_item( games, game );
}
/* void parse_packet_game
* IN ServerGame *game
* IN ServerUser *user
*
* Check all messages in packet from user who is currently within
* a game. The header has already been successfully processed and
* the read pointer is at the beginning of the first message.
*/
void parse_packet_game( ServerGame *game, ServerUser *user )
{
ServerUser *peer;
unsigned char type;
int handled, i;
game_set_current( game->game );
while ( 1 ) {
type = (unsigned)msg_read_int8(); handled = 0;
msglen = 0; /* the extract functions require a position pointer */
if ( msg_read_failed() ) break; /* no more messages */
/* general messages */
switch ( type ) {
case MSG_HEARTBEAT:
/* updates the socket information automatically
* so connection is not closed */
handled = 1;
break;
case MSG_DISCONNECT:
/* update stats and finalize context if playing */
if ( game->state != SERVER_AWAIT_ACCEPT ) {
game->game->winner = -1; /* count unfinished level as draw */
game_update_stats( 0, &game->stats[0] );
game_update_stats( 1, &game->stats[1] );
game_finalize( game->game );
}
if ( user == game->users[0] )
peer = game->users[1];
else
peer = game->users[0];
send_info( peer, MSG_ERROR, _("Remote player has disconnected...") );
server_game_remove( game );
printf( _("%s (%i) disconnected\n"), user->name, user->id );
channel_remove_user( game->channel, user );
handled = 1;
break;
case MSG_QUIT_GAME:
if ( user == game->users[0] )
peer = game->users[1];
else
peer = game->users[0];
send_info( peer, MSG_ERROR, _("Remote player has left the game...") );
/* update stats and finalize context */
game->game->winner = -1; /* count unfinished level as draw */
game_update_stats( 0, &game->stats[0] );
game_update_stats( 1, &game->stats[1] );
game_finalize( game->game );
server_game_remove( game );
handled = 1;
break;
case MSG_UNHIDE:
/* it's very unlikely that the user sends this
* message while being in the game context but to be sure
* he may unhide here */
if ( user->hidden )
channel_hide_user( game->channel, user, 0 );
handled = 1;
break;
}
/* challenge */
if ( game->state == SERVER_AWAIT_ACCEPT )
switch ( type ) {
case MSG_ACCEPT_CHALLENGE:
if ( user == game->users[1] ) {
/* inform opponent */
msgbuf[0] = MSG_ACCEPT_CHALLENGE;
socket_transmit( &game->users[0]->socket,
CODE_BLUE, 1, msgbuf );
init_next_round( game );
handled = 1;
}
break;
case MSG_REJECT_CHALLENGE:
if ( user == game->users[1] ) {
/* tell challenger that you refused the offer */
msgbuf[0] = MSG_REJECT_CHALLENGE;
socket_transmit( &game->users[0]->socket,
CODE_BLUE, 1, msgbuf );
server_game_remove( game );
handled = 1;
}
break;
case MSG_CANCEL_GAME:
if ( user == game->users[0] ) {
/* tell challenged that you cancelled the offer */
msgbuf[0] = MSG_CANCEL_GAME;
socket_transmit( &game->users[1]->socket,
CODE_BLUE, 1, msgbuf );
server_game_remove( game );
handled = 1;
}
break;
}
/* preparation */
if ( game->state == SERVER_AWAIT_READY )
if ( type == MSG_READY ) {
game->ready[user->player_id] = 1;
if ( game->ready[0] && game->ready[1] )
game->state = SERVER_PLAY;
handled = 1;
}
/* in-game messages */
if ( game->state == SERVER_PLAY )
switch ( type ) {
case MSG_PADDLE_STATE:
comm_unpack_paddle( game->game->paddles[user->player_id],
net_buffer, &msg_read_pos );
handled = 1;
break;
case MSG_PAUSE:
game->state = SERVER_PAUSE;
msgbuf[0] = MSG_PAUSE; msglen = 1;
if ( user == game->users[0] )
peer = game->users[1];
else
peer = game->users[0];
if ( !peer->bot )
socket_transmit( &peer->socket, CODE_BLUE, msglen, msgbuf );
handled = 1;
break;
}
/* pause messages */
if ( game->state == SERVER_PAUSE )
switch ( type ) {
case MSG_UNPAUSE:
game->state = SERVER_PLAY;
for ( i = 0; i < game->game->paddle_count; i++ )
game->game->paddles[i]->last_ball_contact = SDL_GetTicks();
msgbuf[0] = MSG_UNPAUSE; msglen = 1;
if ( user == game->users[0] )
peer = game->users[1];
else
peer = game->users[0];
if ( !peer->bot )
socket_transmit( &peer->socket, CODE_BLUE, msglen, msgbuf );
handled = 1;
break;
case MSG_CHATTER:
/* client has added <user> prefix so simply pass it
* to the remote user */
msg_begin_writing( msgbuf, &msglen, MAX_MSG_SIZE );
msg_write_int8( MSG_CHATTER );
msg_write_string( msg_read_string() );
if ( !msg_write_failed() ) {
if ( user == game->users[0] )
peer = game->users[1];
else
peer = game->users[0];
if ( !peer->bot )
socket_transmit( &peer->socket,
CODE_BLUE, msglen, msgbuf );
}
handled = 1;
break;
}
if ( !handled ) {
printf( _("game %i: %s: state %i: invalid message %x: skipping %i bytes\n"),
game->id, net_addr_to_string( &user->socket.remote_addr ),
game->state, type, net_buffer_cur_size - msg_read_pos );
msg_read_pos = net_buffer_cur_size;
}
}
}
/* void update_games
* IN int ms milliseconds passed since last call
*
* Update the objects of all games that are actually playing.
*/
void update_games( int ms )
{
int i;
ServerGame *game;
list_reset( games );
while ( (game = list_next( games ) ) ) {
if ( game->state != SERVER_PLAY ) continue;
game_set_current( game->game );
game_update( ms );
/* send updates to remote players */
if ( game->game->level_over ) {
finalize_round( game );
if ( game->game_over )
server_game_remove( game );
else
init_next_round( game );
continue;
}
/* if playing against a bot update the top paddle */
if ( game->users[1]->bot )
update_bot_paddle( game->game, ms );
/* pack update */
msglen = 0;
msgbuf[msglen++] = MSG_PADDLE_STATE;
comm_pack_paddle( game->game->paddles[1], msgbuf, &msglen );
msgbuf[msglen++] = MSG_BALL_POSITIONS;
comm_pack_balls( msgbuf, &msglen );
if ( game->game->shots->count > 0 ) {
msgbuf[msglen++] = MSG_SHOT_POSITIONS;
comm_pack_shots( msgbuf, &msglen );
}
msgbuf[msglen++] = MSG_SCORES;
comm_pack_scores( msgbuf, &msglen );
if ( game->game->mod.brick_hit_count > 0 ) {
msgbuf[msglen++] = MSG_BRICK_HITS;
comm_pack_brick_hits( msgbuf, &msglen );
}
if ( game->game->mod.collected_extra_count[0] > 0 ||
game->game->mod.collected_extra_count[1] > 0 ) {
msgbuf[msglen++] = MSG_NEW_EXTRAS;
comm_pack_collected_extras( msgbuf, &msglen );
}
/* send packet */
socket_transmit( &game->users[0]->socket, CODE_BLUE, msglen, msgbuf );
/* replace paddle which has a constant size */
i = 1;
comm_pack_paddle( game->game->paddles[0], msgbuf, &i );
if ( !game->users[1]->bot )
socket_transmit( &game->users[1]->socket, CODE_BLUE, msglen, msgbuf );
game_reset_mods();
}
}
#endif

View File

@@ -0,0 +1,57 @@
/***************************************************************************
server_game.h - description
-------------------
begin : 03/03/19
copyright : (C) 2003 by Michael Speck
email : kulkanie@gmx.net
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef __SERVER_GAME_H
#define __SERVER_GAME_H
/***** INCLUDES ************************************************************/
/***** TYPE DEFINITIONS ****************************************************/
/***** PUBLIC FUNCTIONS ****************************************************/
/* Add a new game by the context information, hide both users
* and send a challenge message to the challenged user. */
void server_game_add( ServerChannel *channel, ServerGameCtx *ctx );
/* Free game memory. */
void server_game_delete( void *ptr );
/* unhide the users to their chat channel and delete the game.
* if game was beyond state AWAIT_ACCEPT the game stats are send
*/
void server_game_remove( ServerGame *game );
/* void parse_packet_game
* IN ServerGame *game
* IN ServerUser *user
*
* Check all messages in packet from user who is currently within
* a game. The header has already been successfully processed and the
* read pointer is at the beginning of the first message.
*/
void parse_packet_game( ServerGame *game, ServerUser *user );
/* void update_games
* IN int ms milliseconds passed since last call
*
* Update the objects of all games that are actually playing.
*/
void update_games( int ms );
#endif