Index: /trunk/config.guess
===================================================================
--- /trunk/config.guess	(revision 5749)
+++ /trunk/config.guess	(revision 5750)
@@ -4,5 +4,5 @@
 #   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-timestamp='2005-05-27'
+timestamp='2005-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
@@ -18,6 +18,5 @@
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #
 # As a special exception to the GNU General Public License, if you
@@ -25,5 +24,4 @@
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
-
 
 # Originally written by Per Bothner <per@bothner.com>.
@@ -69,9 +67,9 @@
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
+       echo "$timestamp" ; exit 0 ;;
     --version | -v )
-       echo "$version" ; exit ;;
+       echo "$version" ; exit 0 ;;
     --help | --h* | -h )
-       echo "$usage"; exit ;;
+       echo "$usage"; exit 0 ;;
     -- )     # Stop option processing
        shift; break ;;
@@ -138,21 +136,4 @@
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-if [ "${UNAME_SYSTEM}" = "Linux" ] ; then
-	eval $set_cc_for_build
-	cat << EOF > $dummy.c
-	#include <features.h>
-	#ifdef __UCLIBC__
-	# ifdef __UCLIBC_CONFIG_VERSION__
-	LIBC=uclibc __UCLIBC_CONFIG_VERSION__
-	# else
-	LIBC=uclibc
-	# endif
-	#else
-	LIBC=gnu
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'`
-fi
 
 # Note: order is significant - the case branches are not exclusive.
@@ -216,53 +197,53 @@
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
-	exit ;;
+	exit 0 ;;
     amd64:OpenBSD:*:*)
 	echo x86_64-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     amiga:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     cats:OpenBSD:*:*)
 	echo arm-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     hp300:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     luna88k:OpenBSD:*:*)
     	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mac68k:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     macppc:OpenBSD:*:*)
 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mvme68k:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mvme88k:OpenBSD:*:*)
 	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mvmeppc:OpenBSD:*:*)
 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     sgi:OpenBSD:*:*)
 	echo mips64-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     sun3:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:OpenBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     macppc:MirBSD:*:*)
 	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
@@ -317,5 +298,5 @@
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	exit 0 ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
@@ -323,35 +304,32 @@
 	# of the specific Alpha model?
 	echo alpha-pc-interix
-	exit ;;
+	exit 0 ;;
     21064:Windows_NT:50:3)
 	echo alpha-dec-winnt3.5
-	exit ;;
+	exit 0 ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
-	exit ;;
+	exit 0;;
     *:[Aa]miga[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit ;;
+	exit 0 ;;
     *:[Mm]orph[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-morphos
-	exit ;;
+	exit 0 ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
-	exit ;;
+	exit 0 ;;
     *:z/VM:*:*)
 	echo s390-ibm-zvmoe
-	exit ;;
+	exit 0 ;;
     *:OS400:*:*)
         echo powerpc-ibm-os400
-	exit ;;
+	exit 0 ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
+	exit 0;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
+	exit 0;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
@@ -361,24 +339,24 @@
 		echo pyramid-pyramid-bsd
 	fi
-	exit ;;
+	exit 0 ;;
     NILE*:*:*:dcosx)
 	echo pyramid-pyramid-svr4
-	exit ;;
+	exit 0 ;;
     DRS?6000:unix:4.0:6*)
 	echo sparc-icl-nx6
-	exit ;;
+	exit 0 ;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
 	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
 	esac ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     i86pc:SunOS:5.*:*)
 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
@@ -386,5 +364,5 @@
 	# it's likely to be more like Solaris than SunOS4.
 	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     sun4*:SunOS:*:*)
 	case "`/usr/bin/arch -k`" in
@@ -395,8 +373,8 @@
 	# Japanese Language versions have a version number like `4.1.3-JL'.
 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
+	exit 0 ;;
     sun3*:SunOS:*:*)
 	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
@@ -410,8 +388,8 @@
 		;;
 	esac
-	exit ;;
+	exit 0 ;;
     aushp:SunOS:*:*)
 	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
@@ -424,38 +402,38 @@
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+        exit 0 ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
         echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+        exit 0 ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
         echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+        exit 0 ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+        exit 0 ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
-	exit ;;
+	exit 0 ;;
     RISC*:ULTRIX:*:*)
 	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     VAX*:ULTRIX*:*:*)
 	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
 	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
 	eval $set_cc_for_build
@@ -481,31 +459,30 @@
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
 	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     Motorola:PowerMAX_OS:*:*)
 	echo powerpc-motorola-powermax
-	exit ;;
+	exit 0 ;;
     Motorola:*:4.3:PL8-*)
 	echo powerpc-harris-powermax
-	exit ;;
+	exit 0 ;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
 	echo powerpc-harris-powermax
-	exit ;;
+	exit 0 ;;
     Night_Hawk:Power_UNIX:*:*)
 	echo powerpc-harris-powerunix
-	exit ;;
+	exit 0 ;;
     m88k:CX/UX:7*:*)
 	echo m88k-harris-cxux7
-	exit ;;
+	exit 0 ;;
     m88k:*:4*:R4*)
 	echo m88k-motorola-sysv4
-	exit ;;
+	exit 0 ;;
     m88k:*:3*:R3*)
 	echo m88k-motorola-sysv3
-	exit ;;
+	exit 0 ;;
     AViiON:dgux:*:*)
         # DG/UX returns AViiON for all architectures
@@ -523,27 +500,27 @@
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+ 	exit 0 ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
-	exit ;;
+	exit 0 ;;
     M88*:*:R3*:*)
 	# Delta 88k system running SVR3
 	echo m88k-motorola-sysv3
-	exit ;;
+	exit 0 ;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
 	echo m88k-tektronix-sysv3
-	exit ;;
+	exit 0 ;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
 	echo m68k-tektronix-bsd
-	exit ;;
+	exit 0 ;;
     *:IRIX*:*:*)
 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
+	exit 0 ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
 	echo i386-ibm-aix
-	exit ;;
+	exit 0 ;;
     ia64:AIX:*:*)
 	if [ -x /usr/bin/oslevel ] ; then
@@ -553,5 +530,5 @@
 	fi
 	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
+	exit 0 ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
@@ -568,10 +545,6 @@
 			}
 EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
 		echo rs6000-ibm-aix3.2.4
@@ -579,5 +552,5 @@
 		echo rs6000-ibm-aix3.2
 	fi
-	exit ;;
+	exit 0 ;;
     *:AIX:*:[45])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
@@ -593,26 +566,26 @@
 	fi
 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
+	exit 0 ;;
     *:AIX:*:*)
 	echo rs6000-ibm-aix
-	exit ;;
+	exit 0 ;;
     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
-	exit ;;
+	exit 0 ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
 	echo rs6000-bull-bosx
-	exit ;;
+	exit 0 ;;
     DPX/2?00:B.O.S.:*:*)
 	echo m68k-bull-sysv3
-	exit ;;
+	exit 0 ;;
     9000/[34]??:4.3bsd:1.*:*)
 	echo m68k-hp-bsd
-	exit ;;
+	exit 0 ;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
 	echo m68k-hp-bsd4.4
-	exit ;;
+	exit 0 ;;
     9000/[34678]??:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
@@ -678,16 +651,5 @@
 	    # avoid double evaluation of $set_cc_for_build
 	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
 	    then
 		HP_ARCH="hppa2.0w"
@@ -697,9 +659,9 @@
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
+	exit 0 ;;
     ia64:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
+	exit 0 ;;
     3050*:HI-UX:*:*)
 	eval $set_cc_for_build
@@ -729,23 +691,22 @@
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
 	echo unknown-hitachi-hiuxwe2
-	exit ;;
+	exit 0 ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
 	echo hppa1.1-hp-bsd
-	exit ;;
+	exit 0 ;;
     9000/8??:4.3bsd:*:*)
 	echo hppa1.0-hp-bsd
-	exit ;;
+	exit 0 ;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
-	exit ;;
+	exit 0 ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
 	echo hppa1.1-hp-osf
-	exit ;;
+	exit 0 ;;
     hp8??:OSF1:*:*)
 	echo hppa1.0-hp-osf
-	exit ;;
+	exit 0 ;;
     i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
@@ -754,11 +715,11 @@
 	    echo ${UNAME_MACHINE}-unknown-osf1
 	fi
-	exit ;;
+	exit 0 ;;
     parisc*:Lites*:*:*)
 	echo hppa1.1-hp-lites
-	exit ;;
+	exit 0 ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+        exit 0 ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
@@ -766,17 +727,17 @@
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+        exit 0 ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+        exit 0 ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+        exit 0 ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+        exit 0 ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*[A-Z]90:*:*:*)
 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
@@ -784,17 +745,17 @@
 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
 	      -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*TS:*:*:*)
 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*T3E:*:*:*)
 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     CRAY*SV1:*:*:*)
 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     *:UNICOS/mp:*:*)
 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
+	exit 0 ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
@@ -802,41 +763,37 @@
         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+        exit 0 ;;
     5000:UNIX_System_V:4.*:*)
         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
         FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
         echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
+	exit 0 ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     sparc*:BSD/OS:*:*)
 	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:BSD/OS:*:*)
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:FreeBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
+	exit 0 ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
+	exit 0 ;;
     i*:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
+	exit 0 ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
+	exit 0 ;;
     x86:Interix*:[34]*)
 	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit ;;
+	exit 0 ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
+	exit 0 ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
@@ -844,49 +801,49 @@
 	# UNAME_MACHINE based on the output of uname instead of i386?
 	echo i586-pc-interix
-	exit ;;
+	exit 0 ;;
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
+	exit 0 ;;
     amd64:CYGWIN*:*:*)
 	echo x86_64-unknown-cygwin
-	exit ;;
+	exit 0 ;;
     p*:CYGWIN*:*)
 	echo powerpcle-unknown-cygwin
-	exit ;;
+	exit 0 ;;
     prep*:SunOS:5.*:*)
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
+	exit 0 ;;
     *:GNU:*:*)
 	# the GNU system
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
+	exit 0 ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
 	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit ;;
+	exit 0 ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
+	exit 0 ;;
     arm*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-${LIBC}
-	exit ;;
+	echo cris-axis-linux-gnu
+	exit 0 ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-${LIBC}
-	exit ;;
+	echo crisv32-axis-linux-gnu
+	exit 0 ;;
     frv:Linux:*:*)
-    	echo frv-unknown-linux-${LIBC}
-	exit ;;
+    	echo frv-unknown-linux-gnu
+	exit 0 ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     mips:Linux:*:*)
 	eval $set_cc_for_build
@@ -906,5 +863,5 @@
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
 	;;
     mips64:Linux:*:*)
@@ -925,12 +882,12 @@
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
 	;;
     ppc:Linux:*:*)
-	echo powerpc-unknown-linux-${LIBC}
-	exit ;;
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
     ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-${LIBC}
-	exit ;;
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -944,33 +901,33 @@
         esac
 	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-	  *)    echo hppa-unknown-linux-${LIBC} ;;
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
-	exit ;;
+	exit 0 ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-${LIBC}
-	exit ;;
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
-	exit ;;
+	exit 0 ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-${LIBC}
-	exit ;;
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
     i*86:Linux:*:*)
 	# The BFD linker knows what the default object file format is, so
@@ -986,19 +943,18 @@
         case "$ld_supported_targets" in
 	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}"
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
 		;;
 	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout"
-		exit ;;
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;
 	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff"
-		exit ;;
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
 	  "")
 		# Either a pre-BFD a.out linker (linux-gnuoldld) or
 		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld"
-		exit ;;
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
 	esac
-	if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi
 	# Determine whether the default compiler is a.out or elf
 	eval $set_cc_for_build
@@ -1027,9 +983,6 @@
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
 	;;
     i*86:DYNIX/ptx:4*:*)
@@ -1038,5 +991,5 @@
 	# sysname and nodename.
 	echo i386-sequent-sysv4
-	exit ;;
+	exit 0 ;;
     i*86:UNIX_SV:4.2MP:2.*)
         # Unixware is an offshoot of SVR4, but it has its own version
@@ -1046,25 +999,25 @@
         # Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
+	exit 0 ;;
     i*86:OS/2:*:*)
 	# If we were able to find `uname', then EMX Unix compatibility
 	# is probably installed.
 	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
+	exit 0 ;;
     i*86:XTS-300:*:STOP)
 	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
+	exit 0 ;;
     i*86:atheos:*:*)
 	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
+	exit 0 ;;
+	i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
+	exit 0 ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     i*86:*DOS:*:*)
 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
+	exit 0 ;;
     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
@@ -1074,7 +1027,6 @@
 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
-	exit ;;
-    i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	exit 0 ;;
+    i*86:*:5:[78]*)
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
@@ -1083,5 +1035,5 @@
 	esac
 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
+	exit 0 ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
@@ -1101,5 +1053,5 @@
 		echo ${UNAME_MACHINE}-pc-sysv32
 	fi
-	exit ;;
+	exit 0 ;;
     pc:*:*:*)
 	# Left here for compatibility:
@@ -1107,11 +1059,11 @@
         # the processor, so we play safe by assuming i386.
 	echo i386-pc-msdosdjgpp
-        exit ;;
+        exit 0 ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
-	exit ;;
+	exit 0 ;;
     paragon:*:*:*)
 	echo i860-intel-osf1
-	exit ;;
+	exit 0 ;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
@@ -1120,17 +1072,17 @@
 	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
-	exit ;;
+	exit 0 ;;
     mini*:CTIX:SYS*5:*)
 	# "miniframe"
 	echo m68010-convergent-sysv
-	exit ;;
+	exit 0 ;;
     mc68k:UNIX:SYSTEM5:3.51m)
 	echo m68k-convergent-sysv
-	exit ;;
+	exit 0 ;;
     M680?0:D-NIX:5.3:*)
 	echo m68k-diab-dnix
-	exit ;;
+	exit 0 ;;
     M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
 	OS_REL=''
@@ -1138,34 +1090,34 @@
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+          && echo i486-ncr-sysv4 && exit 0 ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
-	exit ;;
+	exit 0 ;;
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4
-	exit ;;
+	exit 0 ;;
     RM*:SINIX-*:*:*)
 	echo mips-sni-sysv4
-	exit ;;
+	exit 0 ;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
@@ -1175,32 +1127,28 @@
 		echo ns32k-sni-sysv
 	fi
-	exit ;;
+	exit 0 ;;
     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                       # says <Richard.M.Bartel@ccMail.Census.GOV>
         echo i586-unisys-sysv4
-        exit ;;
+        exit 0 ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
 	echo hppa1.1-stratus-sysv4
-	exit ;;
+	exit 0 ;;
     *:*:*:FTX*)
 	# From seanf@swdc.stratus.com.
 	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
+	exit 0 ;;
     *:VOS:*:*)
 	# From Paul.Green@stratus.com.
 	echo hppa1.1-stratus-vos
-	exit ;;
+	exit 0 ;;
     mc68*:A/UX:*:*)
 	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
-	exit ;;
+	exit 0 ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
@@ -1209,29 +1157,29 @@
 	        echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+        exit 0 ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
-	exit ;;
+	exit 0 ;;
     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
 	echo powerpc-apple-beos
-	exit ;;
+	exit 0 ;;
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
-	exit ;;
+	exit 0 ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     SX-5:SUPER-UX:*:*)
 	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:Rhapsody:*:*)
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
@@ -1241,5 +1189,5 @@
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
@@ -1249,23 +1197,23 @@
 	fi
 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:QNX:*:4*)
 	echo i386-pc-qnx
-	exit ;;
+	exit 0 ;;
     NSE-?:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     NSR-?:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
-	exit ;;
+	exit 0 ;;
     BS2000:POSIX*:*:*)
 	echo bs2000-siemens-sysv
-	exit ;;
+	exit 0 ;;
     DS/*:UNIX_System_V:*:*)
 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
@@ -1278,42 +1226,39 @@
 	fi
 	echo ${UNAME_MACHINE}-unknown-plan9
-	exit ;;
+	exit 0 ;;
     *:TOPS-10:*:*)
 	echo pdp10-unknown-tops10
-	exit ;;
+	exit 0 ;;
     *:TENEX:*:*)
 	echo pdp10-unknown-tenex
-	exit ;;
+	exit 0 ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 	echo pdp10-dec-tops20
-	exit ;;
+	exit 0 ;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
 	echo pdp10-xkl-tops20
-	exit ;;
+	exit 0 ;;
     *:TOPS-20:*:*)
 	echo pdp10-unknown-tops20
-	exit ;;
+	exit 0 ;;
     *:ITS:*:*)
 	echo pdp10-unknown-its
-	exit ;;
+	exit 0 ;;
     SEI:*:*:SEIUX)
         echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
+	exit 0 ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
+	exit 0 ;;
     *:*VMS:*:*)
     	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
+	    A*) echo alpha-dec-vms && exit 0 ;;
+	    I*) echo ia64-dec-vms && exit 0 ;;
+	    V*) echo vax-dec-vms && exit 0 ;;
 	esac ;;
     *:XENIX:*:SysV)
 	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-	exit ;;
+	exit 0 ;;
 esac
 
@@ -1347,5 +1292,5 @@
 
 #if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
+  printf ("arm-acorn-riscix"); exit (0);
 #endif
 
@@ -1436,10 +1381,9 @@
 EOF
 
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-	{ echo "$SYSTEM_NAME"; exit; }
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
 
 # Apollos put the system type in the environment.
 
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
 
 # Convex versions that predate uname can use getsysinfo(1)
@@ -1450,5 +1394,5 @@
     c1*)
 	echo c1-convex-bsd
-	exit ;;
+	exit 0 ;;
     c2*)
 	if getsysinfo -f scalar_acc
@@ -1456,14 +1400,14 @@
 	else echo c2-convex-bsd
 	fi
-	exit ;;
+	exit 0 ;;
     c34*)
 	echo c34-convex-bsd
-	exit ;;
+	exit 0 ;;
     c38*)
 	echo c38-convex-bsd
-	exit ;;
+	exit 0 ;;
     c4*)
 	echo c4-convex-bsd
-	exit ;;
+	exit 0 ;;
     esac
 fi
@@ -1476,7 +1420,5 @@
 download the most up to date version of the config scripts from
 
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-and
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+    ftp://ftp.gnu.org/pub/gnu/config/
 
 If the version you run ($0) is already up to date, please
Index: /trunk/config.sub
===================================================================
--- /trunk/config.sub	(revision 5749)
+++ /trunk/config.sub	(revision 5750)
@@ -4,5 +4,5 @@
 #   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-timestamp='2005-06-02'
+timestamp='2005-02-10'
 
 # This file is (in principle) common to ALL GNU software.
@@ -22,12 +22,11 @@
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
-
 
 # Please send patches to <config-patches@gnu.org>.  Submit a context
@@ -85,9 +84,9 @@
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
+       echo "$timestamp" ; exit 0 ;;
     --version | -v )
-       echo "$version" ; exit ;;
+       echo "$version" ; exit 0 ;;
     --help | --h* | -h )
-       echo "$usage"; exit ;;
+       echo "$usage"; exit 0 ;;
     -- )     # Stop option processing
        shift; break ;;
@@ -101,5 +100,5 @@
        # First pass through any local machine types.
        echo $1
-       exit ;;
+       exit 0;;
 
     * )
@@ -233,7 +232,6 @@
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-	| bfin \
 	| c4x | clipper \
-	| d10v | d30v | dlx | dsp16xx | dvp \
+	| d10v | d30v | dlx | dsp16xx \
 	| fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
@@ -249,5 +247,4 @@
 	| mips64vr4300 | mips64vr4300el \
 	| mips64vr5000 | mips64vr5000el \
-	| mips64r5900 | mips64r5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
@@ -258,5 +255,4 @@
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
-	| ms1 \
 	| msp430 \
 	| ns16k | ns32k \
@@ -267,6 +263,5 @@
 	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
 	| strongarm \
 	| tahoe | thumb | tic4x | tic80 | tron \
@@ -275,7 +270,4 @@
 	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
 	| z8k)
-		basic_machine=$basic_machine-unknown
-		;;
-	m32c)
 		basic_machine=$basic_machine-unknown
 		;;
@@ -307,5 +299,5 @@
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* \
-	| bfin-* | bs2000-* \
+	| bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
 	| clipper-* | craynv-* | cydra-* \
@@ -328,5 +320,4 @@
 	| mips64vr4300-* | mips64vr4300el-* \
 	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64r5900-* | mips64r5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
@@ -337,5 +328,4 @@
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
-	| ms1-* \
 	| msp430-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
@@ -347,6 +337,5 @@
 	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
 	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
@@ -360,6 +349,4 @@
 	| z8k-*)
 		;;
-	m32c-*)
-		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
@@ -678,22 +665,4 @@
 		basic_machine=m68k-atari
 		os=-mint
-		;;
-	mipsEE* | ee | ps2)
-		basic_machine=mips64r5900el-scei
-		case $os in
-		    -linux*)
-			;;
-		    *)
-			os=-elf
-			;;
-		esac
-		;;
-	iop)
-		basic_machine=mipsel-scei
-		os=-irx
-		;;
-	dvp)
-		basic_machine=dvp-scei
-		os=-elf
 		;;
 	mips3*-*)
@@ -1210,6 +1179,5 @@
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* | -skyos* \
-	      | -irx* )
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
@@ -1589,5 +1557,5 @@
 
 echo $basic_machine$os
-exit
+exit 0
 
 # Local variables:
Index: /trunk/configure
===================================================================
--- /trunk/configure	(revision 5749)
+++ /trunk/configure	(revision 5750)
@@ -274,5 +274,5 @@
 PACKAGE_BUGREPORT='orxonox-dev at mail.datacore.ch'
 
-ac_unique_file="."
+ac_unique_file="src"
 # Factoring default headers for most tests.
 ac_includes_default="\
Index: /trunk/configure.ac
===================================================================
--- /trunk/configure.ac	(revision 5749)
+++ /trunk/configure.ac	(revision 5750)
@@ -25,5 +25,5 @@
 #########################
 AC_PREREQ(2.59)
-AC_INIT([orxonox],[0.3.2_alpha],[orxonox-dev at mail.datacore.ch])
+AC_INIT([orxonox], [0.3.2_alpha], [orxonox-dev at mail.datacore.ch])
 
 ## Detect the canonical host and target build environment.
@@ -34,5 +34,5 @@
 AM_INIT_AUTOMAKE
 
-AC_CONFIG_SRCDIR([.])
+AC_CONFIG_SRCDIR([src])
 AC_CONFIG_HEADER([config.h])
 
Index: /trunk/depcomp
===================================================================
--- /trunk/depcomp	(revision 5749)
+++ /trunk/depcomp	(revision 5750)
@@ -2,5 +2,5 @@
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2005-07-09.11
+scriptversion=2005-02-09.22
 
 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
@@ -18,6 +18,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
 # As a special exception to the GNU General Public License, if you
@@ -468,6 +468,5 @@
 
   "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
     sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
Index: /trunk/install-sh
===================================================================
--- /trunk/install-sh	(revision 5749)
+++ /trunk/install-sh	(revision 5750)
@@ -2,5 +2,5 @@
 # install - install a program, script, or datafile
 
-scriptversion=2005-05-14.22
+scriptversion=2005-02-02.21
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
Index: /trunk/missing
===================================================================
--- /trunk/missing	(revision 5749)
+++ /trunk/missing	(revision 5750)
@@ -2,5 +2,5 @@
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2005-06-08.21
+scriptversion=2005-02-08.22
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
@@ -20,6 +20,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
 # As a special exception to the GNU General Public License, if you
@@ -298,7 +298,4 @@
       test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
     touch $file
     ;;
Index: /trunk/mkinstalldirs
===================================================================
--- /trunk/mkinstalldirs	(revision 5749)
+++ /trunk/mkinstalldirs	(revision 5750)
@@ -2,5 +2,5 @@
 # mkinstalldirs --- make directory hierarchy
 
-scriptversion=2005-06-29.22
+scriptversion=2005-02-02.21
 
 # Original author: Noah Friedman <friedman@prep.ai.mit.edu>
@@ -13,5 +13,5 @@
 
 errstatus=0
-dirmode=
+dirmode=""
 
 usage="\
@@ -104,19 +104,11 @@
 for file
 do
-  case $file in
-    /*) pathcomp=/ ;;
-    *)  pathcomp= ;;
-  esac
-  oIFS=$IFS
-  IFS=/
-  set fnord $file
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
   shift
-  IFS=$oIFS
 
+  pathcomp=
   for d
   do
-    test "x$d" = x && continue
-
-    pathcomp=$pathcomp$d
+    pathcomp="$pathcomp$d"
     case $pathcomp in
       -*) pathcomp=./$pathcomp ;;
@@ -133,5 +125,5 @@
 	if test ! -z "$dirmode"; then
 	  echo "chmod $dirmode $pathcomp"
-	  lasterr=
+	  lasterr=""
 	  chmod "$dirmode" "$pathcomp" || lasterr=$?
 
@@ -143,5 +135,5 @@
     fi
 
-    pathcomp=$pathcomp/
+    pathcomp="$pathcomp/"
   done
 done
Index: /trunk/src/Makefile.am
===================================================================
--- /trunk/src/Makefile.am	(revision 5749)
+++ /trunk/src/Makefile.am	(revision 5750)
@@ -48,6 +48,7 @@
                   world_entities/camera.cc \
                   world_entities/player.cc \
-                  world_entities/npc.cc \
-                  world_entities/npc2.cc \
+                  world_entities/npcs/npc.cc \
+                  world_entities/npcs/npc_test1.cc \
+                  world_entities/npcs/npc_test.cc \
                   world_entities/environment.cc \
                   world_entities/skysphere.cc \
@@ -62,8 +63,12 @@
                   world_entities/weapons/test_gun.cc \
                   world_entities/weapons/turret.cc \
+                  world_entities/weapons/ground_turret.cc \
+                  world_entities/weapons/aiming_turret.cc \
+                  world_entities/weapons/cannon.cc \
                   world_entities/weapons/test_bullet.cc \
                   world_entities/weapons/rocket.cc \
                   world_entities/weapons/laser.cc \
                   world_entities/weapons/aim.cc \
+                  world_entities/weapons/bomb.cc \
                   world_entities/weapons/crosshair.cc \
                   world_entities/power_ups/power_up.cc \
@@ -82,6 +87,7 @@
                  world_entities/camera.h \
                  world_entities/player.h \
-                 world_entities/npc.h \
-                 world_entities/npc2.h \
+                 world_entities/npcs/npc.h \
+                 world_entities/npcs/npc_test.h \
+                 world_entities/npcs/npc_test1.h \
                  world_entities/environment.h \
                  world_entities/skysphere.h \
@@ -95,9 +101,12 @@
                  world_entities/weapons/projectile.h \
                  world_entities/weapons/test_gun.h \
+                 world_entities/weapons/cannon.h \
                  world_entities/weapons/turret.h \
+                 world_entities/weapons/aiming_turret.h \
                  world_entities/weapons/test_bullet.h \
                  world_entities/weapons/rocket.h \
                  world_entities/weapons/laser.h \
                  world_entities/weapons/aim.h \
+                 world_entities/weapons/bomb.h \
                  world_entities/weapons/crosshair.h \
                  world_entities/power_ups/power_up.h \
Index: /trunk/src/defs/class_id.h
===================================================================
--- /trunk/src/defs/class_id.h	(revision 5749)
+++ /trunk/src/defs/class_id.h	(revision 5750)
@@ -135,10 +135,12 @@
   CL_TEST_GUN                   =    0x00000230,
   CL_TURRET                     =    0x00000231,
-
+  CL_AIMING_TURRET              =    0x00000232,
+  CL_CANNON                     =    0x00000233,
 
   CL_TEST_BULLET                =    0x00000240,
   CL_ROCKET                     =    0x00000241,
   CL_LASER                      =    0x00000242,
-
+  CL_BOMB                       =    0x00000243,
+  CL_GROUND_TURRET		=    0x00000244,
 
   // gamePlay (range from 0x00000500 0x000005ff)
Index: /trunk/src/lib/collision_detection/Makefile.am
===================================================================
--- /trunk/src/lib/collision_detection/Makefile.am	(revision 5749)
+++ /trunk/src/lib/collision_detection/Makefile.am	(revision 5750)
@@ -6,22 +6,22 @@
 libORXcd_a_SOURCES = cd_engine.cc \
                      collision.cc \
-		     obb.cc \
+                     obb.cc \
                      obb_tree.cc \
-		     obb_tree_node.cc \
+                     obb_tree_node.cc \
                      bv_tree.cc \
-		     bv_tree_node.cc \
-		     bounding_volume.cc \
-		     bounding_sphere.cc
+                     bv_tree_node.cc \
+                     bounding_volume.cc \
+                     bounding_sphere.cc
 
 
 noinst_HEADERS =     cd_engine.h \
-		     collision_defs.h \
+                     collision_defs.h \
                      collision.h \
-		     obb.h \
+                     obb.h \
                      obb_tree.h \
-		     obb_tree_node.h \
+                     obb_tree_node.h \
                      bv_tree.h \
-		     bv_tree_node.h \
-		     bounding_volume.h \
-		     bounding_sphere.h
+                     bv_tree_node.h \
+                     bounding_volume.h \
+                     bounding_sphere.h
 
Index: /trunk/src/lib/coord/p_node.h
===================================================================
--- /trunk/src/lib/coord/p_node.h	(revision 5749)
+++ /trunk/src/lib/coord/p_node.h	(revision 5750)
@@ -70,4 +70,5 @@
   inline const Vector& getAbsCoor () const { return this->absCoordinate; };
   void shiftCoor (const Vector& shift);
+  void shiftCoor (float x, float y, float z) { this->shiftCoor(Vector(x, y, z)); };
 
   void setRelDir (const Quaternion& relDir);
@@ -127,4 +128,6 @@
   static const char* parentingModeToChar(int parentingMode);
   static PARENT_MODE charToParentingMode(const char* parentingMode);
+
+
  private:
   void init(PNode* parent);
Index: /trunk/src/lib/graphics/light.cc
===================================================================
--- /trunk/src/lib/graphics/light.cc	(revision 5749)
+++ /trunk/src/lib/graphics/light.cc	(revision 5750)
@@ -29,5 +29,5 @@
 using namespace std;
 
-CREATE_FACTORY(Light);
+CREATE_FACTORY(Light, CL_LIGHT);
 
 //! Definition of the Lights and their Names
Index: /trunk/src/lib/gui/gl_gui/glmenu/glmenu_imagescreen.cc
===================================================================
--- /trunk/src/lib/gui/gl_gui/glmenu/glmenu_imagescreen.cc	(revision 5749)
+++ /trunk/src/lib/gui/gl_gui/glmenu/glmenu_imagescreen.cc	(revision 5750)
@@ -25,5 +25,5 @@
 #include "load_param.h"
 
-CREATE_FACTORY(GLMenuImageScreen);
+CREATE_FACTORY(GLMenuImageScreen, CL_GLMENU_IMAGE_SCREEN);
 
 using namespace std;
Index: /trunk/src/lib/particles/particle_emitter.cc
===================================================================
--- /trunk/src/lib/particles/particle_emitter.cc	(revision 5749)
+++ /trunk/src/lib/particles/particle_emitter.cc	(revision 5750)
@@ -29,5 +29,5 @@
 
 
-CREATE_FACTORY(ParticleEmitter);
+CREATE_FACTORY(ParticleEmitter, CL_PARTICLE_EMITTER);
 
 /**
Index: /trunk/src/lib/particles/particle_system.cc
===================================================================
--- /trunk/src/lib/particles/particle_system.cc	(revision 5749)
+++ /trunk/src/lib/particles/particle_system.cc	(revision 5750)
@@ -32,5 +32,5 @@
 #include "tinyxml.h"
 
-CREATE_FACTORY(ParticleSystem);
+CREATE_FACTORY(ParticleSystem, CL_PARTICLE_SYSTEM);
 SHELL_COMMAND(texture, ParticleSystem, setMaterialTexture)
     ->defaultValues(1, "maps/evil-flower.png");
Index: /trunk/src/lib/physics/fields/gravity.cc
===================================================================
--- /trunk/src/lib/physics/fields/gravity.cc	(revision 5749)
+++ /trunk/src/lib/physics/fields/gravity.cc	(revision 5750)
@@ -23,5 +23,5 @@
 using namespace std;
 
-CREATE_FACTORY(Gravity);
+CREATE_FACTORY(Gravity, CL_FIELD_GRAVITY);
 
 Gravity::Gravity(const TiXmlElement* root)
Index: /trunk/src/lib/physics/physics_connection.cc
===================================================================
--- /trunk/src/lib/physics/physics_connection.cc	(revision 5749)
+++ /trunk/src/lib/physics/physics_connection.cc	(revision 5750)
@@ -29,5 +29,5 @@
 using namespace std;
 
-CREATE_FACTORY(PhysicsConnection);
+CREATE_FACTORY(PhysicsConnection, CL_PHYSICS_CONNECTION);
 
 /**
Index: /trunk/src/story_entities/world.cc
===================================================================
--- /trunk/src/story_entities/world.cc	(revision 5749)
+++ /trunk/src/story_entities/world.cc	(revision 5750)
@@ -70,6 +70,5 @@
 
 #include "cd_engine.h"
-#include "npc.h"
-#include "npc2.h"
+#include "npcs/npc_test1.h"
 #include "shader.h"
 
@@ -81,5 +80,5 @@
 
 //! This creates a Factory to fabricate a World
-CREATE_FACTORY(World);
+CREATE_FACTORY(World, CL_WORLD);
 
 World::World(const TiXmlElement* root)
@@ -469,5 +468,5 @@
   for(int i = 0; i < 100; i++)
   {
-    WorldEntity* tmp = new NPC();
+    WorldEntity* tmp = new NPCTest1();
     char npcChar[10];
     sprintf (npcChar, "NPC_%d", i);
Index: /trunk/src/subprojects/benchmark.cc
===================================================================
--- /trunk/src/subprojects/benchmark.cc	(revision 5749)
+++ /trunk/src/subprojects/benchmark.cc	(revision 5750)
@@ -36,5 +36,5 @@
 #include <stdlib.h>
 #include <asm/msr.h>
-#include <linux/timex.h>
+//#include <linux/timex.h>
 
 
Index: /trunk/src/subprojects/collision_detection/Makefile.am
===================================================================
--- /trunk/src/subprojects/collision_detection/Makefile.am	(revision 5749)
+++ /trunk/src/subprojects/collision_detection/Makefile.am	(revision 5750)
@@ -6,4 +6,5 @@
 
 collision_LDADD = $(MAINSRCDIR)/util/libORXutils.a \
+                  $(MAINSRCDIR)/lib/physics/libORXphysics.a \
                   $(MAINSRCDIR)/lib/collision_detection/libORXcd.a \
                   $(MAINSRCDIR)/lib/libORXlibs.a \
Index: /trunk/src/subprojects/collision_detection/collision_test_entity.cc
===================================================================
--- /trunk/src/subprojects/collision_detection/collision_test_entity.cc	(revision 5749)
+++ /trunk/src/subprojects/collision_detection/collision_test_entity.cc	(revision 5750)
@@ -26,5 +26,5 @@
 
 using namespace std;
-CREATE_FACTORY(CollisionTestEntity);
+CREATE_FACTORY(CollisionTestEntity, CL_ENVIRONMENT);
 
 /**
Index: /trunk/src/subprojects/importer/Makefile.am
===================================================================
--- /trunk/src/subprojects/importer/Makefile.am	(revision 5749)
+++ /trunk/src/subprojects/importer/Makefile.am	(revision 5750)
@@ -31,3 +31,4 @@
                   $(MAINSRCDIR)/lib/util/substring.cc \
                   $(MAINSRCDIR)/lib/util/color.cc \
+                  $(MAINSRCDIR)/lib/util/multi_type.cc \
                   $(MAINSRCDIR)/util/loading/factory.cc
Index: /trunk/src/util/Makefile.am
===================================================================
--- /trunk/src/util/Makefile.am	(revision 5749)
+++ /trunk/src/util/Makefile.am	(revision 5750)
@@ -5,4 +5,5 @@
 
 libORXutils_a_SOURCES = fast_factory.cc \
+			object_manager.cc \
                         loading/factory.cc \
 			garbage_collector.cc \
@@ -18,7 +19,8 @@
 			track/pilot_node.cc \
 			track/track_manager.cc \
-			track/track_node.cc
+			track/track_node.cc 
 
 noinst_HEADERS =        fast_factory.h \
+			object_manager.h \
 			garbage_collector.h \
 			state.h \
Index: /trunk/src/util/fast_factory.cc
===================================================================
--- /trunk/src/util/fast_factory.cc	(revision 5749)
+++ /trunk/src/util/fast_factory.cc	(revision 5750)
@@ -13,5 +13,5 @@
 */
 
-#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_OBJECT_MANAGER
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_LOAD
 
 #include "fast_factory.h"
Index: /trunk/src/util/loading/factory.cc
===================================================================
--- /trunk/src/util/loading/factory.cc	(revision 5749)
+++ /trunk/src/util/loading/factory.cc	(revision 5750)
@@ -34,5 +34,5 @@
    set everything to zero and define factoryName
 */
-Factory::Factory (const char* factoryName)
+Factory::Factory (const char* factoryName, ClassID classID)
 {
   this->setClassID(CL_FACTORY, "Factory");
@@ -40,4 +40,5 @@
 
   this->next = NULL;
+  this->classID = classID;
 
   Factory::registerFactory(this);
Index: /trunk/src/util/loading/factory.h
===================================================================
--- /trunk/src/util/loading/factory.h	(revision 5749)
+++ /trunk/src/util/loading/factory.h	(revision 5750)
@@ -33,6 +33,6 @@
  * this should be used at the beginning of all the Classes that should be loadable (in the cc-file)
 */
-#define CREATE_FACTORY(CLASS_NAME) \
-    tFactory<CLASS_NAME>* global_##CLASS_NAME##_Factory = new tFactory<CLASS_NAME>(#CLASS_NAME)
+#define CREATE_FACTORY(CLASS_NAME, CLASS_ID) \
+    tFactory<CLASS_NAME>* global_##CLASS_NAME##_Factory = new tFactory<CLASS_NAME>(#CLASS_NAME, CLASS_ID)
 
 //! The Factory is a loadable object handler
@@ -40,8 +40,9 @@
 
  public:
-  Factory (const char* factoryName = NULL);
+  Factory (const char* factoryName = NULL, ClassID classID = CL_NULL);
   virtual ~Factory ();
 
   void fabricate(const char* className, const char* entityName);
+  virtual BaseObject* fabricate(ClassID classID) = NULL;
   virtual BaseObject* fabricate(const TiXmlElement* root) = NULL;
   virtual BaseObject* fabricateDirect() = NULL;
@@ -57,4 +58,8 @@
     Factory* getNext() const { return this->next; };
 
+
+  protected:
+    ClassID           classID;              //!< The CLass-Identifyer of the Factory.
+
   private:
     Factory*          next;                 //!< pointer to the next factory.
@@ -64,15 +69,16 @@
 /**
  *  a factory that is able to load any kind of Object
-   (this is a Functor)
-*/
+ * (this is a Functor)
+ */
 template<class T> class tFactory : public Factory
 {
- public:
-  tFactory(const char* factoryName);
-  virtual ~tFactory();
+  public:
+    tFactory(const char* factoryName, ClassID classID);
+    virtual ~tFactory();
 
   private:
-  virtual BaseObject* fabricate(const TiXmlElement* root);
-  virtual BaseObject* fabricateDirect();
+    virtual BaseObject* fabricate(ClassID classID);
+    virtual BaseObject* fabricate(const TiXmlElement* root);
+    virtual BaseObject* fabricateDirect();
 };
 
@@ -82,16 +88,23 @@
 */
 template<class T>
-tFactory<T>::tFactory(const char* factoryName) : Factory(factoryName)
+    tFactory<T>::tFactory(const char* factoryName, ClassID classID) : Factory(factoryName, classID)
 {
   PRINTF(4)("Class: %s loadable\n", this->getName());
 }
 
-
+/**
+ * destructs the type-Factory
+ */
 template<class T>
-tFactory<T>::~tFactory()
+    tFactory<T>::~tFactory()
 {}
 
+/**
+ * fabricates an Object of type T, with the constructor T::T(const TiXmlElemnt*)
+ * @param root the TiXmlElement T should load parameters from.
+ * @return the newly fabricated T, NULL otherwise.
+ */
 template<class T>
-BaseObject* tFactory<T>::fabricate(const TiXmlElement* root)
+    BaseObject* tFactory<T>::fabricate(const TiXmlElement* root)
 {
   if (root == NULL)
@@ -106,4 +119,24 @@
 }
 
+
+/**
+ * fabricates an Object of type T, with the constructor T::T(const TiXmlElemnt*)
+ * @param classID the ClassID of T that should be created.
+ * @return the newly fabricated T if fabricated NULL otherwise.
+ */
+template<class T>
+    BaseObject* tFactory<T>::fabricate(ClassID classID)
+{
+  if(classID == this->classID)
+    return this->fabricateDirect();
+  else if( getNext() != NULL)
+    return getNext()->fabricate( classID);
+  else
+    return NULL;
+}
+
+/**
+ * directly fabricate an Entity of this factory.
+ */
 template<class T>
     BaseObject* tFactory<T>::fabricateDirect()
Index: /trunk/src/util/object_manager.cc
===================================================================
--- /trunk/src/util/object_manager.cc	(revision 5750)
+++ /trunk/src/util/object_manager.cc	(revision 5750)
@@ -0,0 +1,43 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: ...
+   co-programmer: ...
+*/
+
+//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
+
+#include "object_manager.h"
+
+using namespace std;
+
+
+/**
+ * standard constructor
+ */
+ObjectManager::ObjectManager ()
+{
+   this->setClassID(CL_OBJECT_MANAGER, "ObjectManager");
+   this->setName("ObjectManager");
+}
+
+/**
+ *  the singleton reference to this class
+ */
+ObjectManager* ObjectManager::singletonRef = NULL;
+
+/**
+   @brief standard deconstructor
+ */
+ObjectManager::~ObjectManager ()
+{
+  ObjectManager::singletonRef = NULL;
+}
Index: /trunk/src/util/object_manager.h
===================================================================
--- /trunk/src/util/object_manager.h	(revision 5750)
+++ /trunk/src/util/object_manager.h	(revision 5750)
@@ -0,0 +1,43 @@
+/*!
+ * @file object_manager.h
+ * @brief Definition of the ... singleton Class
+*/
+
+#ifndef _OBJECT_MANAGER_H
+#define _OBJECT_MANAGER_H
+
+#include "base_object.h"
+#include <list>
+
+// FORWARD DECLARATION
+
+
+class ObjectGroupList
+{
+
+
+
+};
+
+
+//! A default singleton class.
+class ObjectManager : public BaseObject {
+
+ public:
+  virtual ~ObjectManager(void);
+  /** @returns a Pointer to the only object of this Class */
+  inline static ObjectManager* getInstance(void) { if (!ObjectManager::singletonRef) ObjectManager::singletonRef = new ObjectManager();  return ObjectManager::singletonRef; };
+
+
+  ObjectGroupList* getGroupList( );
+
+ private:
+  ObjectManager(void);
+  static ObjectManager* singletonRef;
+
+  std::list<ObjectGroupList>           groupList;
+
+
+};
+
+#endif /* _OBJECT_MANAGER_H */
Index: /trunk/src/world_entities/Makefile.am
===================================================================
--- /trunk/src/world_entities/Makefile.am	(revision 5749)
+++ /trunk/src/world_entities/Makefile.am	(revision 5750)
@@ -25,5 +25,7 @@
                   weapons/rocket.cc \
                   weapons/laser.cc \
+		  weapons/ground_turret.cc \
                   weapons/crosshair.cc \
+		  weapons/ground_turret.cc \
                   power_ups/power_up.cc \
                   power_ups/turret_power_up.cc \
Index: /trunk/src/world_entities/environment.cc
===================================================================
--- /trunk/src/world_entities/environment.cc	(revision 5749)
+++ /trunk/src/world_entities/environment.cc	(revision 5750)
@@ -28,5 +28,5 @@
 
 using namespace std;
-CREATE_FACTORY(Environment);
+CREATE_FACTORY(Environment, CL_ENVIRONMENT);
 
 /**
Index: unk/src/world_entities/npc.cc
===================================================================
--- /trunk/src/world_entities/npc.cc	(revision 5749)
+++ 	(revision )
@@ -1,88 +1,0 @@
-
-
-/*
-   orxonox - the future of 3D-vertical-scrollers
-
-   Copyright (C) 2004 orx
-
-   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, or (at your option)
-   any later version.
-
-   ### File Specific:
-   main-programmer: Patrick Boenzli
-   co-programmer:
-*/
-#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
-
-
-#include "npc.h"
-#include "obb_tree.h"
-
-#include "state.h"
-#include "list.h"
-#include "stdlibincl.h"
-#include "power_ups/turret_power_up.h"
-#include "power_ups/laser_power_up.h"
-
-using namespace std;
-
-
-NPC::NPC()
-{
-  this->setClassID(CL_NPC, "NPC");
-
-  this->loadModel("models/ships/bolido.obj", 2);
-
-  this->randomRotAxis =  VECTOR_RAND(1);
-}
-
-
-NPC::~NPC () {}
-
-
-void NPC::collidesWith(WorldEntity* entity, const Vector& location)
-{
-  if (entity->isA(CL_PROJECTILE) && entity != this->collider)
-  {
-//    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
-//    this->applyForce(Vector(0,0,0)-location*1000);
-    if ((float)rand()/RAND_MAX < .3)
-    {
-      WorldEntity* powerUp = new TurretPowerUp();
-      powerUp->setAbsCoor(this->getAbsCoor());
-      State::getWorldEntityList()->add(powerUp);
-    }
-    else if ((float)rand()/RAND_MAX < .3)
-    {
-      WorldEntity* powerUp = new LaserPowerUp();
-      powerUp->setAbsCoor(this->getAbsCoor());
-      State::getWorldEntityList()->add(powerUp);
-    }
-    State::getWorldEntityList()->remove(this);
-
-      this->collider = entity;
-  }
-  else if (entity->isA(CL_PLAYER))
-    this->applyForce(Vector(0,0,0)-location*100);
-  else if (entity->isA(CL_NPC))
-  {
-    this->setVisibiliy(false);
-    State::getWorldEntityList()->remove(this);
-  }
-}
-
-
-void NPC::tick(float dt)
-{
-//  Vector direction = (State::getCameraTarget()->getAbsCoor() - this->getAbsCoor());
-
-  //if (directin.len() < 100)
-//  this->shiftCoor(direction *dt * 5 * exp(-direction.len() / 30.0));
-  this->shiftDir(Quaternion(dt, this->randomRotAxis));
-
-}
-
-
-
Index: unk/src/world_entities/npc.h
===================================================================
--- /trunk/src/world_entities/npc.h	(revision 5749)
+++ 	(revision )
@@ -1,31 +1,0 @@
-
-#ifndef _NPC_H
-#define _NPC_H
-
-#include "world_entity.h"
-#include "physics_interface.h"
-
-class AI;
-
-class NPC : public WorldEntity, public PhysicsInterface {
-
- public:
-  NPC ();
-  ~NPC ();
-
-
-  void addAI(AI* ai);
-
-  virtual void tick(float dt);
-
-  virtual void collidesWith (WorldEntity* entity, const Vector& location);
-
-
- private:
-   Vector   randomRotAxis;
-
-   WorldEntity* collider;
-
-};
-
-#endif /* _NPC_H */
Index: unk/src/world_entities/npc2.cc
===================================================================
--- /trunk/src/world_entities/npc2.cc	(revision 5749)
+++ 	(revision )
@@ -1,116 +1,0 @@
-
-
-/*
-   orxonox - the future of 3D-vertical-scrollers
-
-   Copyright (C) 2004 orx
-
-   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, or (at your option)
-   any later version.
-
-   ### File Specific:
-   main-programmer: Patrick Boenzli
-   co-programmer:
-*/
-#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
-
-
-#include "npc2.h"
-#include "obb_tree.h"
-
-#include "shader.h"
-#include "state.h"
-#include "list.h"
-#include "stdlibincl.h"
-#include "debug.h"
-
-
-using namespace std;
-
-
-NPC2::NPC2()
-{
-  this->setClassID(CL_NPC, "NPC");
-
-  this->loadModel("models/ships/bolido.obj", 3);
-  this->shader = NULL;
-  if (likely(Shader::checkShaderAbility()))
-    this->shader = Shader::getShader("shaders/toon.vert", "shaders/toon.frag");
-
-  this->obj = gluNewQuadric();
-
-  this->randomRotAxis = VECTOR_RAND(1);
-}
-
-
-NPC2::~NPC2 ()
-{
-  if (this->shader)
-    Shader::unload(this->shader);
-  gluDeleteQuadric(this->obj);
-}
-
-
-void NPC2::collidesWith(WorldEntity* entity, const Vector& location)
-{
-  if (entity->isA(CL_PROJECTILE))
-  {
-    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
-    this->applyForce(Vector(0,0,0)-location*1000);
-  }
-  else if (entity->isA(CL_PLAYER))
-    this->applyForce(Vector(0,0,0)-location*100);
-  else
-  {
-    this->setVisibiliy(false);
-   State::getWorldEntityList()->remove(this);
-  }
-}
-
-
-/**
- *  the entity is drawn onto the screen with this function
- *
- * This is a central function of an entity: call it to let the entity painted to the screen.
- * Just override this function with whatever you want to be drawn.
- */
-void NPC2::draw() const
-{
-  glMatrixMode(GL_MODELVIEW);
-  glPushMatrix();
-  float matrix[4][4];
-
-  /* translate */
-  glTranslatef (this->getAbsCoor ().x,
-                this->getAbsCoor ().y,
-                this->getAbsCoor ().z);
-  /* rotate */
-  this->getAbsDir ().matrix (matrix);
-  glMultMatrixf((float*)matrix);
-
-  if (this->shader != NULL && this->shader != Shader::getActiveShader())
-    shader->activateShader();
-  gluSphere(this->obj, 3, 10, 10);
-  shader->deactivateShader();
-
-
-/*  if (this->model)
-    this->model->draw();*/
-  glPopMatrix();
-}
-
-
-void NPC2::tick(float dt)
-{
-//  Vector direction = (State::getCameraTarget()->getAbsCoor() - this->getAbsCoor());
-
-  //if (directin.len() < 100)
-//  this->shiftCoor(direction *dt * 5 * exp(-direction.len() / 30.0));
-  this->shiftDir(Quaternion(dt, this->randomRotAxis));
-
-}
-
-
-
Index: unk/src/world_entities/npc2.h
===================================================================
--- /trunk/src/world_entities/npc2.h	(revision 5749)
+++ 	(revision )
@@ -1,35 +1,0 @@
-
-#ifndef _NPC22_H
-#define _NPC2_H
-
-#include "world_entity.h"
-#include "physics_interface.h"
-
-#include "glincl.h"
-
-class AI;
-class Shader;
-
-class NPC2 : public WorldEntity, public PhysicsInterface {
-
- public:
-  NPC2 ();
-  ~NPC2 ();
-
-
-  void addAI(AI* ai);
-
-  virtual void tick(float dt);
-  virtual void draw() const;
-
-  virtual void collidesWith (WorldEntity* entity, const Vector& location);
-
-
- private:
-   Vector   randomRotAxis;
-   Shader*  shader;
-   GLUquadricObj* obj;
-
-};
-
-#endif /* _NPC2_H */
Index: /trunk/src/world_entities/npcs/npc.cc
===================================================================
--- /trunk/src/world_entities/npcs/npc.cc	(revision 5750)
+++ /trunk/src/world_entities/npcs/npc.cc	(revision 5750)
@@ -0,0 +1,80 @@
+
+
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer:
+*/
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
+
+
+#include "npc.h"
+#include "obb_tree.h"
+
+#include "state.h"
+#include "list.h"
+#include "stdlibincl.h"
+#include "power_ups/turret_power_up.h"
+#include "power_ups/laser_power_up.h"
+
+using namespace std;
+
+
+NPC::NPC()
+{
+  this->setClassID(CL_NPC, "NPC");
+
+}
+
+
+NPC::~NPC () {}
+
+
+void NPC::collidesWith(WorldEntity* entity, const Vector& location)
+{
+  if (entity->isA(CL_PROJECTILE) && entity != this->collider)
+  {
+//    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
+//    this->applyForce(Vector(0,0,0)-location*1000);
+    if ((float)rand()/RAND_MAX < .3)
+    {
+      WorldEntity* powerUp = new TurretPowerUp();
+      powerUp->setAbsCoor(this->getAbsCoor());
+      State::getWorldEntityList()->add(powerUp);
+    }
+    else if ((float)rand()/RAND_MAX < .3)
+    {
+      WorldEntity* powerUp = new LaserPowerUp();
+      powerUp->setAbsCoor(this->getAbsCoor());
+      State::getWorldEntityList()->add(powerUp);
+    }
+    State::getWorldEntityList()->remove(this);
+
+      this->collider = entity;
+  }
+  else if (entity->isA(CL_PLAYER))
+    this->applyForce(Vector(0,0,0)-location*100);
+  else if (entity->isA(CL_NPC))
+  {
+    this->setVisibiliy(false);
+    State::getWorldEntityList()->remove(this);
+  }
+}
+
+
+void NPC::tick(float dt)
+{
+
+}
+
+
+
Index: /trunk/src/world_entities/npcs/npc.h
===================================================================
--- /trunk/src/world_entities/npcs/npc.h	(revision 5750)
+++ /trunk/src/world_entities/npcs/npc.h	(revision 5750)
@@ -0,0 +1,30 @@
+
+#ifndef _NPC_H
+#define _NPC_H
+
+#include "world_entity.h"
+#include "physics_interface.h"
+
+class AI;
+
+class NPC : public WorldEntity, public PhysicsInterface {
+
+ public:
+  NPC ();
+  ~NPC ();
+
+
+  void addAI(AI* ai);
+
+  virtual void tick(float dt);
+
+  virtual void collidesWith (WorldEntity* entity, const Vector& location);
+
+
+ private:
+
+   WorldEntity* collider;
+
+};
+
+#endif /* _NPC_H */
Index: /trunk/src/world_entities/npcs/npc_test.cc
===================================================================
--- /trunk/src/world_entities/npcs/npc_test.cc	(revision 5750)
+++ /trunk/src/world_entities/npcs/npc_test.cc	(revision 5750)
@@ -0,0 +1,120 @@
+
+
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer:
+*/
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
+
+
+#include "npc_test.h"
+#include "obb_tree.h"
+
+#include "shader.h"
+#include "state.h"
+#include "list.h"
+#include "stdlibincl.h"
+#include "debug.h"
+
+
+using namespace std;
+
+
+NPC2::NPC2()
+{
+  this->setClassID(CL_NPC, "NPC");
+
+  if ((float)rand()/RAND_MAX > .5f)
+    this->loadModel("models/ships/bolido.obj", 3);
+  else
+    this->loadModel("models/ships/gobblin.obj", 3);
+
+  this->shader = NULL;
+  if (likely(Shader::checkShaderAbility()))
+    this->shader = Shader::getShader("shaders/toon.vert", "shaders/toon.frag");
+
+  this->obj = gluNewQuadric();
+
+  this->randomRotAxis = VECTOR_RAND(1);
+}
+
+
+NPC2::~NPC2 ()
+{
+  if (this->shader)
+    Shader::unload(this->shader);
+  gluDeleteQuadric(this->obj);
+}
+
+
+void NPC2::collidesWith(WorldEntity* entity, const Vector& location)
+{
+  if (entity->isA(CL_PROJECTILE))
+  {
+    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
+    this->applyForce(Vector(0,0,0)-location*1000);
+  }
+  else if (entity->isA(CL_PLAYER))
+    this->applyForce(Vector(0,0,0)-location*100);
+  else
+  {
+    this->setVisibiliy(false);
+   State::getWorldEntityList()->remove(this);
+  }
+}
+
+
+/**
+ *  the entity is drawn onto the screen with this function
+ *
+ * This is a central function of an entity: call it to let the entity painted to the screen.
+ * Just override this function with whatever you want to be drawn.
+ */
+void NPC2::draw() const
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  float matrix[4][4];
+
+  /* translate */
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y,
+                this->getAbsCoor ().z);
+  /* rotate */
+  this->getAbsDir ().matrix (matrix);
+  glMultMatrixf((float*)matrix);
+
+  if (this->shader != NULL && this->shader != Shader::getActiveShader())
+    shader->activateShader();
+  gluSphere(this->obj, 3, 10, 10);
+  shader->deactivateShader();
+
+
+/*  if (this->model)
+    this->model->draw();*/
+  glPopMatrix();
+}
+
+
+void NPC2::tick(float dt)
+{
+//  Vector direction = (State::getCameraTarget()->getAbsCoor() - this->getAbsCoor());
+
+  //if (directin.len() < 100)
+//  this->shiftCoor(direction *dt * 5 * exp(-direction.len() / 30.0));
+  this->shiftDir(Quaternion(dt, this->randomRotAxis));
+
+}
+
+
+
Index: /trunk/src/world_entities/npcs/npc_test.h
===================================================================
--- /trunk/src/world_entities/npcs/npc_test.h	(revision 5750)
+++ /trunk/src/world_entities/npcs/npc_test.h	(revision 5750)
@@ -0,0 +1,35 @@
+
+#ifndef _NPC22_H
+#define _NPC2_H
+
+#include "world_entity.h"
+#include "physics_interface.h"
+
+#include "glincl.h"
+
+class AI;
+class Shader;
+
+class NPC2 : public WorldEntity, public PhysicsInterface {
+
+ public:
+  NPC2 ();
+  ~NPC2 ();
+
+
+  void addAI(AI* ai);
+
+  virtual void tick(float dt);
+  virtual void draw() const;
+
+  virtual void collidesWith (WorldEntity* entity, const Vector& location);
+
+
+ private:
+   Vector   randomRotAxis;
+   Shader*  shader;
+   GLUquadricObj* obj;
+
+};
+
+#endif /* _NPC2_H */
Index: /trunk/src/world_entities/npcs/npc_test1.cc
===================================================================
--- /trunk/src/world_entities/npcs/npc_test1.cc	(revision 5750)
+++ /trunk/src/world_entities/npcs/npc_test1.cc	(revision 5750)
@@ -0,0 +1,91 @@
+
+
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer:
+*/
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
+
+
+#include "npc_test1.h"
+#include "obb_tree.h"
+
+#include "state.h"
+#include "list.h"
+#include "stdlibincl.h"
+#include "power_ups/turret_power_up.h"
+#include "power_ups/laser_power_up.h"
+
+using namespace std;
+
+
+NPCTest1::NPCTest1()
+{
+  this->setClassID(CL_NPC, "NPCTest1");
+
+  if ((float)rand()/RAND_MAX > .5f)
+    this->loadModel("models/ships/bolido.obj", 2);
+  else
+    this->loadModel("models/ships/gobblin.obj", 2);
+
+  this->randomRotAxis =  VECTOR_RAND(1);
+}
+
+
+NPCTest1::~NPCTest1 () {}
+
+
+void NPCTest1::collidesWith(WorldEntity* entity, const Vector& location)
+{
+  if (entity->isA(CL_PROJECTILE) && entity != this->collider)
+  {
+//    PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z);
+//    this->applyForce(Vector(0,0,0)-location*1000);
+    if ((float)rand()/RAND_MAX < .3)
+    {
+      WorldEntity* powerUp = new TurretPowerUp();
+      powerUp->setAbsCoor(this->getAbsCoor());
+      State::getWorldEntityList()->add(powerUp);
+    }
+    else if ((float)rand()/RAND_MAX < .3)
+    {
+      WorldEntity* powerUp = new LaserPowerUp();
+      powerUp->setAbsCoor(this->getAbsCoor());
+      State::getWorldEntityList()->add(powerUp);
+    }
+    State::getWorldEntityList()->remove(this);
+
+      this->collider = entity;
+  }
+  else if (entity->isA(CL_PLAYER))
+    this->applyForce(Vector(0,0,0)-location*100);
+  else if (entity->isA(CL_NPC))
+  {
+    this->setVisibiliy(false);
+    State::getWorldEntityList()->remove(this);
+  }
+}
+
+
+void NPCTest1::tick(float dt)
+{
+//  Vector direction = (State::getCameraTarget()->getAbsCoor() - this->getAbsCoor());
+
+  //if (directin.len() < 100)
+//  this->shiftCoor(direction *dt * 5 * exp(-direction.len() / 30.0));
+  this->shiftDir(Quaternion(dt, this->randomRotAxis));
+
+}
+
+
+
Index: /trunk/src/world_entities/npcs/npc_test1.h
===================================================================
--- /trunk/src/world_entities/npcs/npc_test1.h	(revision 5750)
+++ /trunk/src/world_entities/npcs/npc_test1.h	(revision 5750)
@@ -0,0 +1,31 @@
+
+#ifndef _NPC_Test1_H
+#define _NPC_Test1_H
+
+#include "world_entity.h"
+#include "physics_interface.h"
+
+class AI;
+
+class NPCTest1 : public WorldEntity, public PhysicsInterface {
+
+ public:
+  NPCTest1 ();
+  ~NPCTest1 ();
+
+
+  void addAI(AI* ai);
+
+  virtual void tick(float dt);
+
+  virtual void collidesWith (WorldEntity* entity, const Vector& location);
+
+
+ private:
+   Vector   randomRotAxis;
+
+   WorldEntity* collider;
+
+};
+
+#endif /* _NPC_Test1_H */
Index: /trunk/src/world_entities/player.cc
===================================================================
--- /trunk/src/world_entities/player.cc	(revision 5749)
+++ /trunk/src/world_entities/player.cc	(revision 5750)
@@ -28,4 +28,5 @@
 #include "weapons/test_gun.h"
 #include "weapons/turret.h"
+#include "weapons/cannon.h"
 
 #include "list.h"
@@ -37,5 +38,5 @@
 using namespace std;
 
-CREATE_FACTORY(Player);
+CREATE_FACTORY(Player, CL_PLAYER);
 
 /**
@@ -46,13 +47,4 @@
 {
   this->init();
-
-  //weapons:
-  Weapon* wpRight = new TestGun(this->weaponMan, 0);
-  Weapon* wpLeft = new TestGun(this->weaponMan, 1);
-
-  this->weaponMan->addWeapon(wpRight);
-//  this->weaponMan->addWeapon(wpLeft, WM_CONFIG1, WM_SLOT1);
-//  this->weaponMan->addWeapon(wpRight, WM_CONFIG2);
-//  this->weaponMan->addWeapon(wpLeft, WM_CONFIG2);
 }
 
@@ -88,11 +80,16 @@
 
   //weapons:
-  Weapon* wpRight = new TestGun(this->weaponMan, 0);
+  Weapon* wpRight = new TestGun(0);
   wpRight->setName("testGun Right");
-  Weapon* wpLeft = new TestGun(this->weaponMan, 1);
+  Weapon* wpLeft = new TestGun(1);
   wpLeft->setName("testGun Left");
+  Weapon* cannon = dynamic_cast<Weapon*>(Factory::getFirst()->fabricate(CL_CANNON));
+
+  cannon->setName("BFG");
 
   this->weaponMan->addWeapon(wpLeft, 1, 0);
   this->weaponMan->addWeapon(wpRight,1 ,1);
+  this->weaponMan->addWeapon(cannon, 0, 6);
+
   //this->weaponMan->addWeapon(turret, 3, 0);
 
@@ -134,5 +131,5 @@
 
   this->weaponMan = new WeaponManager(this);
-  this->weaponMan->setSlotCount(10);
+  this->weaponMan->setSlotCount(7);
 
   this->weaponMan->setSlotPosition(0, Vector(-2.6, .1, -3.0));
@@ -153,13 +150,14 @@
   this->weaponMan->setSlotPosition(5, Vector(-1.5, -.5, -.5));
   this->weaponMan->setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
-
-  this->weaponMan->setSlotPosition(6, Vector(-2.0, 0.1, -2.0));
-  this->weaponMan->setSlotPosition(7, Vector(-2.0, 0.1, 2.0));
-
-  this->weaponMan->setSlotPosition(8, Vector(-2.5, -0.3, -2.0));
-  this->weaponMan->setSlotDirection(8, Quaternion(-M_PI, Vector(1,0,0)));
-
-  this->weaponMan->setSlotPosition(9, Vector(-2.5, -0.3, 2.0));
-  this->weaponMan->setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));
+//
+   this->weaponMan->setSlotPosition(6, Vector(-1, 0.0, 0));
+   this->weaponMan->setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+   //
+//   this->weaponMan->setSlotPosition(8, Vector(-2.5, -0.3, -2.0));
+//   this->weaponMan->setSlotDirection(8, Quaternion(-M_PI, Vector(1,0,0)));
+//
+//   this->weaponMan->setSlotPosition(9, Vector(-2.5, -0.3, 2.0));
+//   this->weaponMan->setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));:
+
 }
 
@@ -337,13 +335,34 @@
 }
 
+#include "weapons/aiming_turret.h"
 // FIXME THIS MIGHT BE CONSIDERED EITHER A FEATURE, OR A BUG
 void Player::ADDWEAPON()
 {
-  Weapon* turret1 = new Turret(this->weaponMan);
-  turret1->setName("Turret");
-  turret1->setStateDuration(WS_SHOOTING, (float)rand()/RAND_MAX*.5+.1);
-
-  this->weaponMan->addWeapon(turret1, 2);
-
-  this->weaponMan->changeWeaponConfig(2);
-}
+  Weapon* turret = NULL;
+
+  if ((float)rand()/RAND_MAX < .1)
+  {
+    //if (this->weaponMan->hasFreeSlot(2, WTYPE_TURRET))
+    {
+      turret = new Turret();
+      this->weaponMan->addWeapon(turret, 2);
+      this->weaponMan->changeWeaponConfig(2);
+    }
+  }
+  else
+  {
+    //if (this->weaponMan->hasFreeSlot(3))
+    {
+      turret = new AimingTurret();
+      this->weaponMan->addWeapon(turret, 3);
+
+      this->weaponMan->changeWeaponConfig(3);
+    }
+  }
+
+  if(turret != NULL)
+  {
+    turret->setName("Turret");
+    turret->setStateDuration(WS_SHOOTING, (float)rand()/RAND_MAX*.5+.1);
+  }
+}
Index: /trunk/src/world_entities/power_ups/laser_power_up.cc
===================================================================
--- /trunk/src/world_entities/power_ups/laser_power_up.cc	(revision 5749)
+++ /trunk/src/world_entities/power_ups/laser_power_up.cc	(revision 5750)
@@ -25,5 +25,5 @@
 using namespace std;
 
-CREATE_FACTORY(LaserPowerUp);
+CREATE_FACTORY(LaserPowerUp, CL_LASER_POWER_UP);
 
 LaserPowerUp::LaserPowerUp ()
Index: /trunk/src/world_entities/power_ups/turret_power_up.cc
===================================================================
--- /trunk/src/world_entities/power_ups/turret_power_up.cc	(revision 5749)
+++ /trunk/src/world_entities/power_ups/turret_power_up.cc	(revision 5750)
@@ -25,5 +25,5 @@
 using namespace std;
 
-CREATE_FACTORY(TurretPowerUp);
+CREATE_FACTORY(TurretPowerUp, CL_TURRET_POWER_UP);
 
 TurretPowerUp::TurretPowerUp ()
Index: /trunk/src/world_entities/skybox.cc
===================================================================
--- /trunk/src/world_entities/skybox.cc	(revision 5749)
+++ /trunk/src/world_entities/skybox.cc	(revision 5750)
@@ -25,5 +25,5 @@
 using namespace std;
 
-CREATE_FACTORY(SkyBox);
+CREATE_FACTORY(SkyBox, CL_SKYBOX);
 
 /**
Index: /trunk/src/world_entities/terrain.cc
===================================================================
--- /trunk/src/world_entities/terrain.cc	(revision 5749)
+++ /trunk/src/world_entities/terrain.cc	(revision 5750)
@@ -29,5 +29,5 @@
 using namespace std;
 
-CREATE_FACTORY(Terrain);
+CREATE_FACTORY(Terrain, CL_TERRAIN);
 
 /**
Index: /trunk/src/world_entities/weapons/aim.cc
===================================================================
--- /trunk/src/world_entities/weapons/aim.cc	(revision 5749)
+++ /trunk/src/world_entities/weapons/aim.cc	(revision 5750)
@@ -20,7 +20,11 @@
 #include "load_param.h"
 #include "graphics_engine.h"
-#include "glincl.h"
 #include "state.h"
+#include "list.h"
 #include "material.h"
+#include "t_animation.h"
+#include "text.h"
+
+#include "world_entity.h"
 
 using namespace std;
@@ -30,7 +34,9 @@
  * standart constructor
  */
-Aim::Aim (const TiXmlElement* root)
+Aim::Aim (PNode* source, const TiXmlElement* root)
 {
   this->init();
+
+  this->source = source;
 
   if (root)
@@ -47,4 +53,7 @@
   if (this->material)
     delete this->material;
+
+  if (this->text != NULL)
+    delete this->text;
 }
 
@@ -58,11 +67,23 @@
 
   this->setLayer(E2D_LAYER_TOP);
-  this->setRotationSpeed(5);
+  this->setRotationSpeed(30.0* (float)rand()/RAND_MAX + 10.0);
   this->setSize(GraphicsEngine::getInstance()->getResolutionX()/10.0);
 
-//  this->setBindNode(this);
+  this->setBindNode(this);
   this->material = new Material;
-}
-
+  this->source = NULL;
+
+  this->anim = new tAnimation<Aim>(this, &Aim::setSize);
+  this->anim->setInfinity(ANIM_INF_CONSTANT);
+  this->anim->addKeyFrame(500, .3, ANIM_LINEAR);
+  this->anim->addKeyFrame(100, .2, ANIM_LINEAR);
+  this->anim->addKeyFrame(50, .01, ANIM_LINEAR);
+
+  this->text = new Text();
+  this->text->setParent2D(this);
+  this->text->setRelCoor2D(10, -50);
+  this->text->setParentMode2D(E2D_PARENT_MOVEMENT);
+  this->text->setText("Testing");
+}
 
 void Aim::loadParams(const TiXmlElement* root)
@@ -80,4 +101,27 @@
 }
 
+void Aim::searchTarget(float range)
+{
+  tIterator<WorldEntity>* iterator = State::getWorldEntityList()->getIterator();
+  WorldEntity* entity = iterator->firstElement();
+  while (likely(entity != NULL))
+  {
+    if (entity->isA(CL_NPC) && this->source->getAbsCoor().x < entity->getAbsCoor().x && (this->source->getAbsCoor() - entity->getAbsCoor()).len() < range)
+    {
+      if (this->getParent() != entity)
+      {
+        this->anim->replay();
+        this->setParentSoft(entity, 5);
+      }
+      delete iterator;
+      return;
+    }
+    entity = iterator->nextElement();
+  }
+
+  delete iterator;
+}
+
+
 
 /**
@@ -108,27 +152,33 @@
   this->shiftDir2D(dt * rotationSpeed);
 
-
-  float z = 0.0f;
-  glReadPixels ((int)this->getAbsCoor2D().x,
-                 GraphicsEngine::getInstance()->getResolutionY()-(int)this->getAbsCoor2D().y-1,
-                 1,
-                 1,
-                 GL_DEPTH_COMPONENT,
-                 GL_FLOAT,
-                 &z);
-
-
-  GLdouble objX=.0, objY=.0, objZ=.0;
-  gluUnProject(this->getAbsCoor2D().x,
-               GraphicsEngine::getInstance()->getResolutionY()-this->getAbsCoor2D().y-1,
-               .99,  // z
-               GraphicsEngine::modMat,
-               GraphicsEngine::projMat,
-               GraphicsEngine::viewPort,
-               &objX,
-               &objY,
-               &objZ );
-
-  this->setAbsCoor(objX, objY, objZ);
+  char outputText[100];
+  sprintf(outputText, "%s - distance: %f\n", this->getParent()->getName(), (this->source->getAbsCoor() - this->getAbsCoor()).len());
+  this->text->setText(outputText);
+
+
+  if (this->source->getAbsCoor().x > this->getAbsCoor().x )
+    this->searchTarget(1000);
+//   float z = 0.0f;
+//   glReadPixels ((int)this->getAbsCoor2D().x,
+//                  GraphicsEngine::getInstance()->getResolutionY()-(int)this->getAbsCoor2D().y-1,
+//                  1,
+//                  1,
+//                  GL_DEPTH_COMPONENT,
+//                  GL_FLOAT,
+//                  &z);
+//
+//
+//   GLdouble objX=.0, objY=.0, objZ=.0;
+//   gluUnProject(this->getAbsCoor2D().x,
+//                GraphicsEngine::getInstance()->getResolutionY()-this->getAbsCoor2D().y-1,
+//                .99,  // z
+//                GraphicsEngine::modMat,
+//                GraphicsEngine::projMat,
+//                GraphicsEngine::viewPort,
+//                &objX,
+//                &objY,
+//                &objZ );
+//
+//   this->setAbsCoor(objX, objY, objZ);
 }
 
@@ -138,4 +188,5 @@
 void Aim::draw() const
 {
+
   glPushMatrix();
   glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0);
Index: /trunk/src/world_entities/weapons/aim.h
===================================================================
--- /trunk/src/world_entities/weapons/aim.h	(revision 5749)
+++ /trunk/src/world_entities/weapons/aim.h	(revision 5750)
@@ -12,12 +12,20 @@
 // FORWARD DECLARATION
 class Model;
+class Text;
 class Material;
 class TiXmlElement;
+template<class T> class tAnimation;
 
 //! An Aim for zooming in on Targets.
+/**
+ * An Aim is a PNode, that is connected, to the Target, it has aquired
+ * The target becomes, if selected its Parent.
+ *
+ * Also the Aim is a Element2D, as it draws a cross onto the Target.
+ */
 class Aim : public PNode, public Element2D {
 
  public:
-  Aim(const TiXmlElement* root = NULL);
+  Aim(PNode* source, const TiXmlElement* root = NULL);
   virtual ~Aim();
 
@@ -25,7 +33,10 @@
   void loadParams(const TiXmlElement* root);
 
+  inline void setSource(PNode* source) { this->source = source; };
+
   inline void selectTarget(PNode* target) { this->setParent(target); };
   inline PNode* getTarget(PNode* target) { return this->getParent(); };
 
+  void searchTarget(float range);
 
   void setSize(float size);
@@ -40,4 +51,9 @@
    Material*        material;             //!< a material for the Aim.
    float            rotationSpeed;        //!< Speed of the Rotation.
+   tAnimation<Aim>* anim;
+
+   PNode*           source;               //!< Where this Shot has come from.
+
+   Text*            text;                 //!< A Text to display onto this Node. (distance to Target)
 };
 
Index: /trunk/src/world_entities/weapons/aiming_turret.cc
===================================================================
--- /trunk/src/world_entities/weapons/aiming_turret.cc	(revision 5750)
+++ /trunk/src/world_entities/weapons/aiming_turret.cc	(revision 5750)
@@ -0,0 +1,175 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific
+   main-programmer: Benjamin Grauer
+   co-programmer:
+*/
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
+
+#include "aiming_turret.h"
+
+#include "weapon_manager.h"
+#include "aim.h"
+#include "projectile.h"
+
+#include "model.h"
+
+#include "null_parent.h"
+
+#include "animation3d.h"
+#include "sound_engine.h"
+
+#include "factory.h"
+
+CREATE_FACTORY(AimingTurret, CL_AIMING_TURRET);
+
+using namespace std;
+
+
+/**
+ *  standard constructor
+
+   creates a new weapon
+*/
+AimingTurret::AimingTurret ()
+  : Weapon()
+{
+  this->init();
+
+  this->loadModel("models/guns/turret2.obj");
+
+
+  this->setActionSound(WA_SHOOT, "sound/shot1.wav");
+  this->setActionSound(WA_ACTIVATE, "sound/vocals/missiles.wav");
+  this->setActionSound(WA_RELOAD, "sound/vocals/reload.wav");
+}
+
+
+AimingTurret::AimingTurret(const TiXmlElement* root)
+{
+  this->init();
+  this->loadParams(root);
+}
+
+/**
+ *  standard deconstructor
+*/
+AimingTurret::~AimingTurret ()
+{
+  // model will be deleted from WorldEntity-destructor
+//  delete this->target;
+}
+
+void AimingTurret::init()
+{
+  this->setClassID(CL_AIMING_TURRET, "AimingTurret");
+
+  Animation3D* animation1 = this->getAnimation(WS_ACTIVATING, this);
+  Animation3D* animation2 = this->getAnimation(WS_DEACTIVATING, this);
+
+  animation1->addKeyFrame(Vector(0, -.5, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+  animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+  animation2->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+  animation2->addKeyFrame(Vector(0, -.5, 0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+
+  animation1->setInfinity(ANIM_INF_CONSTANT);
+  animation2->setInfinity(ANIM_INF_CONSTANT);
+
+  this->setStateDuration(WS_SHOOTING, .1);
+  this->setStateDuration(WS_RELOADING, .1);
+  this->setStateDuration(WS_ACTIVATING, .4);
+  this->setStateDuration(WS_DEACTIVATING, .4);
+
+  this->setMaximumEnergy(10000, 50);
+  this->increaseEnergy(100000);
+  //this->minCharge = 2;
+
+  this->setCapability(WTYPE_ALLDIRS | WTYPE_TURRET);
+  this->setProjectileType(CL_ROCKET);
+
+
+  this->setEmissionPoint(1.684, 0.472, 0);
+  //this->getProjectileFactory()->prepare(100);
+
+  this->target = new Aim(this);
+  this->target->setVisibility(false);
+}
+
+void AimingTurret::loadParams(const TiXmlElement* root)
+{
+  static_cast<Weapon*>(this)->loadParams(root);
+
+}
+
+void AimingTurret::activate()
+{
+  this->target->setVisibility(true);
+}
+
+void AimingTurret::deactivate()
+{
+  this->target->setVisibility(false);
+}
+
+void AimingTurret::tick(float dt)
+{
+  Quaternion quat;
+  Vector direction = this->target->getAbsCoor() - this->getAbsCoor();
+
+  direction.normalize();
+
+  if (likely (this->getParent() != NULL))
+    quat = Quaternion(direction, this->getParent()->getAbsDir().apply(Vector(0,1,0))) * Quaternion ( -M_PI_2, Vector(0,1,0)) ;
+  else
+    quat = Quaternion(direction, Vector(0,1,0)) * Quaternion ( -M_PI_2, Vector(0,1,0)) ;
+
+  this->setAbsDirSoft(quat, 5);
+
+  this->target->tick(dt);
+}
+
+void AimingTurret::fire()
+{
+  Projectile* pj = this->getProjectile();
+  if (pj == NULL)
+    return;
+
+    pj->setVelocity(/*this->getVelocity()+*/(this->getAbsDir().apply(Vector(1,0,0))*250.0 + VECTOR_RAND(13)
+            /*target->getAbsCoor() - this->getAbsCoor()*/)*.5);//this->getVelocity());
+
+  pj->setParent(NullParent::getInstance());
+  pj->setAbsCoor(this->getEmissionPoint());
+  pj->setAbsDir(this->getAbsDir());
+  pj->activate();
+  this->target->searchTarget(100);
+}
+
+void AimingTurret::destroy ()
+{}
+
+/**
+ * draws the AimingTurret
+*/
+void AimingTurret::draw () const
+{
+  /* draw gun body */
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y,
+                this->getAbsCoor ().z);
+  Vector tmpRot = this->getAbsDir().getSpacialAxis();
+  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+
+  this->model->draw();
+  glPopMatrix();
+}
+
Index: /trunk/src/world_entities/weapons/aiming_turret.h
===================================================================
--- /trunk/src/world_entities/weapons/aiming_turret.h	(revision 5750)
+++ /trunk/src/world_entities/weapons/aiming_turret.h	(revision 5750)
@@ -0,0 +1,37 @@
+/*!
+ * @file aiming_turret.h
+*/
+
+
+#ifndef _AIMING_TURRET_H
+#define _AIMING_TURRET_H
+
+#include "weapon.h"
+
+/* FORWARD DECLARATION */
+class Aim;
+
+class AimingTurret : public Weapon
+  {
+  public:
+    AimingTurret ();
+    AimingTurret(const TiXmlElement* root);
+    virtual ~AimingTurret ();
+
+    void init();
+    void loadParams(const TiXmlElement* root);
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void tick(float dt);
+    virtual void fire();
+    virtual void destroy();
+
+    virtual void draw() const;
+
+  private:
+    Aim*          target;
+  };
+
+#endif /* _AIMING_TURRET_H */
Index: /trunk/src/world_entities/weapons/bomb.cc
===================================================================
--- /trunk/src/world_entities/weapons/bomb.cc	(revision 5750)
+++ /trunk/src/world_entities/weapons/bomb.cc	(revision 5750)
@@ -0,0 +1,173 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Stefan Lienhard
+   co-programmer: ...
+*/
+
+#include "bomb.h"
+#include "glincl.h"
+#include "state.h"
+#include "list.h"
+#include "model.h"
+#include "vector.h"
+#include "fast_factory.h"
+
+
+#include "particle_engine.h"
+#include "particle_emitter.h"
+#include "particle_system.h"
+
+using namespace std;
+
+CREATE_FAST_FACTORY_STATIC(Bomb, CL_BOMB);
+
+/**
+ * constructs and loads a Bomb from a XML-element
+ * @param root the XML-element to load from
+ */
+Bomb::Bomb(const TiXmlElement* root)
+{
+  this->init();
+  if (root != NULL)
+    this->loadParams(root);
+
+  float modelSize = 1.0;
+  this->loadModel("models/projectiles/RadioActiveBomb.obj", 1.0);
+
+  this->energyMin = 1;
+  this->energyMax = 1;
+  this->remove();
+  this->lifeSpan = 15;
+
+  this->emitter = new ParticleEmitter(Vector(0,1,0), M_2_PI, 100, 5);
+  this->emitter->setParent(this);
+  this->emitter->setSpread(M_PI, M_PI);
+}
+
+
+/**
+ * standard deconstructor
+ */
+Bomb::~Bomb ()
+{
+
+}
+
+
+/**
+ * initializes the Bomb
+ * @todo change this to what you wish
+ */
+void Bomb::init()
+{
+  this->setClassID(CL_BOMB, "Bomb");
+
+  /**
+   * @todo: Write CL_PROTO_WORLD_ENTITY INTO THE src/defs/class_id.h (your own definition)
+   */
+
+}
+
+
+/**
+ * loads a Bomb from a XML-element
+ * @param root the XML-element to load from
+ * @todo make the class Loadable
+ */
+void Bomb::loadParams(const TiXmlElement* root)
+{
+  // all the clases this Entity is directly derived from must be called in this way, to load all settings.
+  static_cast<WorldEntity*>(this)->loadParams(root);
+
+
+  /**
+   * @todo: make the class Loadable
+   */
+}
+
+
+/**
+ * advances the Bomb about time seconds
+ * @param time the Time to step
+ */
+void Bomb::tick(float time)
+{
+  //Vector v = *this->flightDirection * ( this->speed * time * 1000 + 0.1);
+  Vector v = this->velocity * (time);
+  this->shiftCoor(v);
+
+  this->lifeCycle += time/this->lifeSpan;
+  if( this->lifeCycle >= 1.0)
+    {
+      PRINTF(5)("FINALIZE==========================\n");
+      PRINTF(5)("current life cycle is: %f\n", this->lifeCycle);
+      PRINTF(5)("FINALIZE===========================\n");
+
+      this->deactivate();
+    }
+}
+
+/**
+ * draws this worldEntity
+ */
+void Bomb::draw () const
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  float matrix[4][4];
+
+  /* translate */
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y,
+                this->getAbsCoor ().z);
+  /* rotate */
+  this->getAbsDir().matrix(matrix);
+  glMultMatrixf((float*)matrix);
+
+  if (model)
+    model->draw();
+  glPopMatrix();
+}
+
+
+/**
+ *
+ *
+ */
+void Bomb::collidesWith (WorldEntity* entity, const Vector& location)
+{
+	this->detonate();
+}
+
+void Bomb::activate()
+{
+  State::getWorldEntityList()->add(this);
+
+}
+
+void Bomb::deactivate()
+{
+  State::getWorldEntityList()->remove(this);
+  Bomb::fastFactory->kill(this);
+}
+
+void Bomb::detonate()
+{
+  tIterator<WorldEntity>* it = State::getWorldEntityList()->getIterator();
+  WorldEntity* lm = it->firstElement();
+
+  while(lm != NULL)
+  {
+   
+    lm = it->nextElement();
+  }
+}
Index: /trunk/src/world_entities/weapons/bomb.h
===================================================================
--- /trunk/src/world_entities/weapons/bomb.h	(revision 5750)
+++ /trunk/src/world_entities/weapons/bomb.h	(revision 5750)
@@ -0,0 +1,45 @@
+/*!
+ * @file bomb.h
+ * @brief description
+*/
+
+#ifndef _BOMB_H
+#define _BOMB_H
+
+#include "projectile.h"
+class FastFactory;
+class ParticleSystem;
+class ParticleEmitter;
+
+//! A Class to ...
+class Bomb : public Projectile
+{
+
+ public:
+  Bomb(const TiXmlElement* root = NULL);
+  virtual ~Bomb();
+
+  void loadParams(const TiXmlElement* root);
+  void init();
+
+//  virtual void postSpawn ();
+//  virtual void leftWorld ();
+
+
+  virtual void draw() const;
+  virtual void tick(float time);
+  virtual void collidesWith (WorldEntity* entity, const Vector& location);
+  virtual void activate();
+  virtual void detonate();
+  virtual void deactivate();
+
+ private:
+  static FastFactory*               fastFactory;
+  static ParticleSystem*            trailParticles;
+  static ParticleSystem*            explosionParticles;
+
+  ParticleEmitter*                  emitter;
+
+};
+
+#endif /* BOMB */
Index: /trunk/src/world_entities/weapons/cannon.cc
===================================================================
--- /trunk/src/world_entities/weapons/cannon.cc	(revision 5750)
+++ /trunk/src/world_entities/weapons/cannon.cc	(revision 5750)
@@ -0,0 +1,211 @@
+
+
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific
+   main-programmer: Patrick Boenzli
+   co-programmer:
+
+
+   @todo: direction in which the projectile flights
+   @todo: a target to set/hit
+*/
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WEAPON
+
+#include "cannon.h"
+
+#include "world_entity.h"
+#include "model.h"
+#include "test_bullet.h"
+#include "weapon_manager.h"
+#include "factory.h"
+
+#include "vector.h"
+#include "list.h"
+#include "animation3d.h"
+#include "sound_engine.h"
+
+#include "null_parent.h"
+
+#include "fast_factory.h"
+
+
+using namespace std;
+
+CREATE_FACTORY(Cannon, CL_CANNON);
+
+/**
+ *  standard constructor
+
+   creates a new weapon
+*/
+Cannon::Cannon ()
+  : Weapon()
+{
+  this->init();
+}
+
+
+Cannon::Cannon(const TiXmlElement* root)
+{
+  this->init();
+  this->loadParams(root);
+}
+
+/**
+ *  standard deconstructor
+*/
+Cannon::~Cannon ()
+{
+  // model will be deleted from WorldEntity-destructor
+}
+
+
+void Cannon::init()
+{
+  this->setClassID(CL_CANNON, "Cannon");
+
+//  this->model = (Model*)ResourceManager::getInstance()->load("models/guns/test_gun.obj", OBJ, RP_CAMPAIGN);
+
+  this->loadModel("models/guns/cannon.obj");
+
+  this->setStateDuration(WS_SHOOTING, 2.0);
+  this->setStateDuration(WS_RELOADING, .1);
+  this->setStateDuration(WS_ACTIVATING, .1);
+  this->setStateDuration(WS_DEACTIVATING, .4);
+
+  this->setMaximumEnergy(100, 1);
+  this->increaseEnergy(30);
+  //this->minCharge = 2;
+
+  this->setActionSound(WA_SHOOT, "sound/shot1.wav");
+
+  this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
+  this->setProjectileType(CL_BOMB);
+  this->prepareProjectiles(5);
+
+//  this->objectComponent1 = new PNode();
+//  Animation3D* animation1 = this->getAnimation(WS_SHOOTING, this->objectComponent1);
+  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
+  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
+  //parent->addChild(this->objectComponent1, PNODE_ALL);
+//  this->addChild(this->objectComponent1);
+
+//  animation1->setInfinity(ANIM_INF_CONSTANT);
+  animation2->setInfinity(ANIM_INF_CONSTANT);
+  animation3->setInfinity(ANIM_INF_CONSTANT);
+
+  this->setEmissionPoint(3.8, 1.2, 0);
+
+//     animation1->addKeyFrame(Vector(0, -1.5, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+//     animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_NULL);
+//     animation1->addKeyFrame(Vector(0, 0, 0), Quaternion(), 0.0, ANIM_LINEAR, ANIM_NULL);
+
+  animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animation2->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+
+  animation3->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animation3->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+}
+
+
+void Cannon::loadParams(const TiXmlElement* root)
+{
+
+
+}
+
+
+/**
+ *  this activates the weapon
+
+   This is needed, since there can be more than one weapon on a ship. the
+   activation can be connected with an animation. for example the weapon is
+   been armed out.
+*/
+void Cannon::activate()
+{
+}
+
+
+/**
+ *  this deactivates the weapon
+
+   This is needed, since there can be more than one weapon on a ship. the
+   activation can be connected with an animation. for example the weapon is
+   been armed out.
+*/
+void Cannon::deactivate()
+{
+}
+
+
+/**
+ *  fires the weapon
+
+   this is called from the player.cc, when fire-button is been pushed
+   @todo: the ObjectManager deliveres Projectiles not TestBullets! this should be diffrent
+*/
+void Cannon::fire()
+{
+  Projectile* pj =  this->getProjectile();
+  if (pj == NULL)
+    return;
+
+  pj->setParent(NullParent::getInstance());
+
+  pj->setVelocity(this->getVelocity() + this->getAbsDir().apply(Vector(1,0,0))*15+VECTOR_RAND(5));
+
+  pj->setAbsCoor(this->getEmissionPoint());
+  pj->setAbsDir(this->getAbsDir());
+  pj->activate();
+}
+
+/**
+ *  is called, when the weapon is destroyed
+ *
+ * this is in conjunction with the hit function, so when a weapon is able to get
+ * hit, it can also be destoryed.
+*/
+void Cannon::destroy ()
+{}
+
+/**
+ *  this will draw the weapon
+*/
+void Cannon::draw () const
+{
+  /* draw gun body */
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y,
+                this->getAbsCoor ().z);
+
+  Vector tmpRot = this->getAbsDir().getSpacialAxis();
+  glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+
+  this->model->draw();
+  glPopMatrix();
+
+  /* draw objectComponent1: gun coil - animated stuff */
+/*  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  glTranslatef (this->objectComponent1->getAbsCoor ().x,
+                this->objectComponent1->getAbsCoor ().y,
+                this->objectComponent1->getAbsCoor ().z);
+  tmpRot = this->objectComponent1->getAbsDir().getSpacialAxis();
+  glRotatef (this->objectComponent1->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+  this->model->draw(0);
+
+  glPopMatrix();*/
+}
+
Index: /trunk/src/world_entities/weapons/cannon.h
===================================================================
--- /trunk/src/world_entities/weapons/cannon.h	(revision 5750)
+++ /trunk/src/world_entities/weapons/cannon.h	(revision 5750)
@@ -0,0 +1,33 @@
+/*!
+ * @file cannon.h
+ * a weapon that is fix on top of the player to fire heavy weaponary.
+*/
+
+
+#ifndef _CANNON_H
+#define _CANNON_H
+
+#include "weapon.h"
+
+class Cannon : public Weapon
+  {
+  public:
+    Cannon ();
+    Cannon (const TiXmlElement* root);
+    virtual ~Cannon ();
+
+    void init();
+    void loadParams(const TiXmlElement* root);
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void fire();
+    virtual void destroy();
+
+    virtual void draw() const;
+
+  private:
+//     PNode* objectComponent1;         //<! the gun is made of multiple parts, these PNodes represent their location and orientation
+  };
+#endif /* _CANNON_H */
Index: /trunk/src/world_entities/weapons/crosshair.cc
===================================================================
--- /trunk/src/world_entities/weapons/crosshair.cc	(revision 5749)
+++ /trunk/src/world_entities/weapons/crosshair.cc	(revision 5750)
@@ -76,4 +76,5 @@
   GraphicsEngine::showMouse(false);
   GraphicsEngine::stealWMEvents(true);
+  SDL_WarpMouse(GraphicsEngine::getInstance()->getResolutionX()/2, GraphicsEngine::getInstance()->getResolutionY()/2);
 }
 
Index: /trunk/src/world_entities/weapons/ground_turret.cc
===================================================================
--- /trunk/src/world_entities/weapons/ground_turret.cc	(revision 5750)
+++ /trunk/src/world_entities/weapons/ground_turret.cc	(revision 5750)
@@ -0,0 +1,140 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Manuel Leuenberger
+   co-programmer: ...
+*/
+
+#include "ground_turret.h"
+#include "factory.h"
+#include "model.h"
+#include "turret.h"
+
+CREATE_FACTORY(GroundTurret, CL_GROUND_TURRET);
+
+using namespace std;
+
+
+/**
+ * constructs and loads a GroundTurret from a XML-element
+ * @param root the XML-element to load from
+ */
+GroundTurret::GroundTurret(const TiXmlElement* root)
+{
+  this->init();
+  if (root != NULL)
+    this->loadParams(root);
+}
+
+
+/**
+ * standard deconstructor
+ */
+GroundTurret::~GroundTurret ()
+{
+
+}
+
+
+/**
+ * initializes the GroundTurret
+ * @todo change this to what you wish
+ */
+void GroundTurret::init()
+{
+  this->setClassID(CL_GROUND_TURRET, "GroundTurret");
+  this->loadModel("models/ground_turret.obj", 5);
+  left = new Turret();
+  left->setParent(this);
+  left->setRelCoor(0,10,0);
+  right = new Turret();
+  right->setParent(this);
+  right->setRelCoor(0,10,0);
+}
+
+
+/**
+ * loads a GroundTurret from a XML-element
+ * @param root the XML-element to load from
+ * @todo make the class Loadable
+ */
+void GroundTurret::loadParams(const TiXmlElement* root)
+{
+  // all the clases this Entity is directly derived from must be called in this way, to load all settings.
+  static_cast<NPC*>(this)->loadParams(root);
+
+
+  /**
+   * @todo: make the class Loadable
+   */
+}
+
+
+/**
+ * advances the GroundTurret about time seconds
+ * @param time the Time to step
+ */
+void GroundTurret::tick(float time)
+{
+
+}
+
+/**
+ * draws this worldEntity
+ */
+void GroundTurret::draw () const
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+  float matrix[4][4];
+
+  /* translate */
+  glTranslatef (this->getAbsCoor ().x,
+                this->getAbsCoor ().y,
+                this->getAbsCoor ().z);
+  /* rotate */
+  this->getAbsDir().matrix(matrix);
+  glMultMatrixf((float*)matrix);
+
+  if (model)
+    model->draw();
+  //left->draw();
+  //right->draw();
+  glPopMatrix();
+}
+
+
+/**
+ *
+ *
+ */
+void GroundTurret::collidesWith (WorldEntity* entity, const Vector& location)
+{
+
+}
+
+/**
+ *
+ *
+ */
+void GroundTurret::postSpawn ()
+{
+    
+}
+
+/**
+ *
+ *
+ */
+void GroundTurret::leftWorld ()
+{
+    
+}
Index: /trunk/src/world_entities/weapons/ground_turret.h
===================================================================
--- /trunk/src/world_entities/weapons/ground_turret.h	(revision 5750)
+++ /trunk/src/world_entities/weapons/ground_turret.h	(revision 5750)
@@ -0,0 +1,36 @@
+/*!
+ * @file ground_turret.h
+ * @brief description
+*/
+
+#ifndef _GROUND_TURRET_H
+#define _GROUND_TURRET_H
+
+#include "npcs/npc.h"
+
+class Weapon;
+
+//! A Class to ...
+class GroundTurret : public NPC
+{
+
+ public:
+  GroundTurret(const TiXmlElement* root = NULL);
+  virtual ~GroundTurret();
+
+  void loadParams(const TiXmlElement* root);
+  void init();
+
+  virtual void postSpawn ();
+  virtual void leftWorld ();
+
+
+  virtual void draw() const;
+  virtual void tick(float time);
+  virtual void collidesWith (WorldEntity* entity, const Vector& location);
+
+ private:
+   Weapon *left, *right;
+};
+
+#endif /* _GROUND_TURRET_H */
Index: /trunk/src/world_entities/weapons/laser.cc
===================================================================
--- /trunk/src/world_entities/weapons/laser.cc	(revision 5749)
+++ /trunk/src/world_entities/weapons/laser.cc	(revision 5750)
@@ -84,5 +84,5 @@
     Laser::explosionParticles->setName("LaserExplosionParticles");
     Laser::explosionParticles->setLifeSpan(.5, .3);
-    Laser::explosionParticles->setRadius(0.0, 3.0);
+    Laser::explosionParticles->setRadius(0.0, 10.0);
     Laser::explosionParticles->setRadius(.5, 6.0);
     Laser::explosionParticles->setRadius(1.0, 3.0);
Index: /trunk/src/world_entities/weapons/laser.h
===================================================================
--- /trunk/src/world_entities/weapons/laser.h	(revision 5749)
+++ /trunk/src/world_entities/weapons/laser.h	(revision 5750)
@@ -42,5 +42,4 @@
 
     WorldEntity* hitEntity; // FIXME TEMPORARY
-
 };
 
Index: /trunk/src/world_entities/weapons/test_gun.cc
===================================================================
--- /trunk/src/world_entities/weapons/test_gun.cc	(revision 5749)
+++ /trunk/src/world_entities/weapons/test_gun.cc	(revision 5750)
@@ -41,5 +41,5 @@
 using namespace std;
 
-CREATE_FACTORY(TestGun);
+CREATE_FACTORY(TestGun, CL_TEST_GUN);
 
 /**
@@ -48,6 +48,6 @@
    creates a new weapon
 */
-TestGun::TestGun (WeaponManager* weaponManager, int leftRight)
-  : Weapon(weaponManager)
+TestGun::TestGun ( int leftRight)
+  : Weapon()
 {
   this->init();
Index: /trunk/src/world_entities/weapons/test_gun.h
===================================================================
--- /trunk/src/world_entities/weapons/test_gun.h	(revision 5749)
+++ /trunk/src/world_entities/weapons/test_gun.h	(revision 5750)
@@ -38,5 +38,5 @@
   {
   public:
-    TestGun (WeaponManager* weaponManager, int leftRight);
+    TestGun (int leftRight);
     TestGun (const TiXmlElement* root);
     virtual ~TestGun ();
Index: /trunk/src/world_entities/weapons/turret.cc
===================================================================
--- /trunk/src/world_entities/weapons/turret.cc	(revision 5749)
+++ /trunk/src/world_entities/weapons/turret.cc	(revision 5750)
@@ -30,16 +30,15 @@
 #include "factory.h"
 
-CREATE_FACTORY(Turret);
+CREATE_FACTORY(Turret, CL_TURRET);
 
 using namespace std;
 
-
 /**
  *  standard constructor
-
-   creates a new weapon
-*/
-Turret::Turret (WeaponManager* weaponManager)
-  : Weapon(weaponManager)
+ *
+ * creates a new Turret
+ */
+Turret::Turret ()
+  : Weapon()
 {
   this->init();
@@ -53,5 +52,7 @@
 }
 
-
+/**
+ * creates a new Turret from a TiXmlElement
+ */
 Turret::Turret(const TiXmlElement* root)
 {
@@ -117,5 +118,5 @@
 {
   Quaternion quat;
-  Vector direction = this->getWeaponManager()->getFixedTarget()->getAbsCoor() - this->getAbsCoor();
+  Vector direction = this->getAbsCoor();/*this->getWeaponManager()->getFixedTarget()->getAbsCoor() - this->getAbsCoor();*/
 
   direction.normalize();
@@ -135,13 +136,6 @@
     return;
 
-  PNode* target = this->getWeaponManager()->getFixedTarget();
-
-  if (target != NULL)
-  {
     pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*100.0 + VECTOR_RAND(13)
             /*target->getAbsCoor() - this->getAbsCoor()*/)*.5);//this->getVelocity());
-  }
-  else
-    pj->setVelocity(target->getVelocity());
 
   pj->setParent(NullParent::getInstance());
@@ -159,6 +153,4 @@
 void Turret::draw () const
 {
-  this->getWeaponManager()->getFixedTarget()->debugDraw(10);
-
   /* draw gun body */
   glMatrixMode(GL_MODELVIEW);
Index: /trunk/src/world_entities/weapons/turret.h
===================================================================
--- /trunk/src/world_entities/weapons/turret.h	(revision 5749)
+++ /trunk/src/world_entities/weapons/turret.h	(revision 5750)
@@ -12,5 +12,5 @@
   {
   public:
-    Turret (WeaponManager* weaponManager);
+    Turret ();
     Turret(const TiXmlElement* root);
     virtual ~Turret ();
Index: /trunk/src/world_entities/weapons/weapon.cc
===================================================================
--- /trunk/src/world_entities/weapons/weapon.cc	(revision 5749)
+++ /trunk/src/world_entities/weapons/weapon.cc	(revision 5750)
@@ -41,8 +41,7 @@
  * creates a new weapon
 */
-Weapon::Weapon (WeaponManager* weaponManager)
+Weapon::Weapon ()
 {
   this->init();
-  this->setWeaponManager(weaponManager);
 }
 
@@ -97,6 +96,4 @@
   this->energyMax = 10.0;                          //< How much energy can be carried
   this->capability = WTYPE_ALL;                    //< The Weapon has all capabilities @see W_Capability.
-
-  this->setWeaponManager(NULL);                    //< By default the Weapon is free, and unhandled by a WeaponManager (this is good for small enemies).
 }
 
Index: /trunk/src/world_entities/weapons/weapon.h
===================================================================
--- /trunk/src/world_entities/weapons/weapon.h	(revision 5749)
+++ /trunk/src/world_entities/weapons/weapon.h	(revision 5750)
@@ -81,5 +81,5 @@
   public:
     // INITIALISATION //
-    Weapon (WeaponManager* weaponManager = NULL);
+    Weapon ();
     virtual ~Weapon ();
 
@@ -93,13 +93,8 @@
     ///////////////////
 
-    /** @param weaponManager sets the WeaponManager for this Weapon (NULL if free)) */
-    inline void setWeaponManager(WeaponManager* weaponManager) { this->weaponManager = weaponManager; };
-    /** @returns the WeaponManager of this Weapon (or NULL if it is free) */
-    inline WeaponManager* getWeaponManager() const { return this->weaponManager; };
-
     /** @returns true if the Weapon is Active  (this is used to check if the weapon must be drawn)*/
-    inline bool isActive() const { return (this->currentState == WS_INACTIVE)?false:true; };
+    inline bool isActive() const { return (this->currentState == WS_INACTIVE)? false : true; };
     /** @returns true if the weapon must be drawn */
-    inline bool isVisible() const { return (this->currentState != WS_INACTIVE || !this->hideInactive)?true:false; };
+    inline bool isVisible() const { return (this->currentState != WS_INACTIVE || !this->hideInactive) ? true : false; };
     /** @returns true if the Weapon is chargeable */
     inline bool isChargeable() const { return this->chargeable; };
@@ -120,4 +115,5 @@
 
 
+    // EMISSION
     void setEmissionPoint(const Vector& point);
     /** @see void setEmissionPoint(const Vector& point); */
@@ -126,4 +122,5 @@
     inline const Vector& getEmissionPoint() const { return this->emissionPoint.getAbsCoor(); };
 
+    // STATE CHANGES //
     /** @param state the State to time @param duration the duration of the State */
     inline void setStateDuration(const char* state, float duration) { setStateDuration(charToState(state), duration); };
@@ -131,7 +128,7 @@
     inline void setStateDuration(WeaponState state, float duration) { /*(state < WS_STATE_COUNT)?*/this->times[state] = duration; };
     /** @param state The state to query @returns the Time the queried State takes to complete */
-    inline float getStateDuration(WeaponState state) const { return (state < WS_STATE_COUNT)?this->times[state]:0.0; };
+    inline float getStateDuration(WeaponState state) const { return (state < WS_STATE_COUNT)? this->times[state] : 0.0; };
     /** @returns true if the time of the currentState is elapsed, false otherwise */
-    inline bool stateTimeElapsed() const { return (this->stateDuration > this->times[currentState])?true:false; };
+    inline bool stateTimeElapsed() const { return (this->stateDuration > this->times[currentState])? true : false; };
     /** @returns the current State of the Weapon */
     inline WeaponState getCurrentState() const { return this->currentState; };
@@ -149,4 +146,5 @@
     // FLOW
     void tickW(float dt); //!< this is a function that must be called by the weaponManager, or any other weaponHandler, all other functions are handled from within
+
     virtual void tick(float dt) {};
     virtual void draw() const;
@@ -194,5 +192,5 @@
     // it is all about energy
     float                energy;                           //!< The energy stored in the weapons secondary buffers (reserve)
-    float                energyLoaded;                     //!< The energy stored in the weapons primary buffers (firewithout reload)
+    float                energyLoaded;                     //!< The energy stored in the weapons primary buffers (fire without reload)
     float                energyMax;                        //!< The maximal energy that can be stored in the secondary buffers (reserveMax)
     float                energyLoadedMax;                  //!< The maximal energy that can be stored in the primary buffers
@@ -220,6 +218,4 @@
     ClassID              projectile;                      //!< the projectile used for this weapon (since they should be generated via macro and the FastFactory, only the ClassID must be known.)
     FastFactory*         projectileFactory;               //!< A factory, that produces and handles the projectiles.
-
-    WeaponManager*       weaponManager;                   //!< The weaponManager this weapon is connected to. if NULL it is assumed, that the weapon is freely connected to an entity without a binding WeaponManager.
   };
 
Index: /trunk/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- /trunk/src/world_entities/weapons/weapon_manager.cc	(revision 5749)
+++ /trunk/src/world_entities/weapons/weapon_manager.cc	(revision 5750)
@@ -23,10 +23,11 @@
 #include "crosshair.h"
 
+#include "class_list.h"
 #include "load_param.h"
 #include "factory.h"
-#include "vector.h"
 #include "list.h"
 #include "t_animation.h"
 #include "null_parent.h"
+
 
 using namespace std;
@@ -109,4 +110,6 @@
   this->crossHairSizeAnim->addKeyFrame(100, .05, ANIM_LINEAR);
   this->crossHairSizeAnim->addKeyFrame(50, .01, ANIM_LINEAR);
+
+  this->targetIterator = NULL;
 }
 
@@ -334,4 +337,57 @@
     }
   }
+}
+
+
+/**
+ * Selects an Entity from the NPC-list, and returns the Target
+ */
+PNode* WeaponManager::getSomeTarget()
+{
+   if (this->targetIterator == NULL)
+   {
+     tList<BaseObject>* npcList = ClassList::getList(CL_NPC);
+     if (npcList != NULL)
+     {
+       this->targetIterator = npcList->getIterator();
+       this->targetIterator->firstElement();
+     }
+     else
+       return NULL;
+   }
+
+   PNode* retNode = dynamic_cast<PNode*>(targetIterator->nextElement());
+   if (retNode == NULL && this->targetIterator->getList()->getSize() > 0)
+     retNode =  dynamic_cast<PNode*>(targetIterator->firstElement());
+
+   return retNode;
+}
+
+
+/**
+ * Selects an Entity from the Entity-List, that is near of the carrier PNode.
+ * @param carrier: The PNode from which the distance should be measured
+ * @param distance: The Maximum Distance to Return.
+ */
+PNode* WeaponManager::getDistanceTarget(const PNode* carrier, float distance)
+{
+  tList<BaseObject>* npcList = ClassList::getList(CL_NPC);
+  if (npcList != NULL)
+  {
+    tIterator<BaseObject>* npcIT = npcList->getIterator();
+    PNode* tmpNPC = dynamic_cast<PNode*>(npcIT->firstElement());
+    while (tmpNPC != NULL)
+    {
+      if ((carrier->getAbsCoor() - tmpNPC->getAbsCoor()).len() < distance)
+      {
+        delete npcIT;
+        return tmpNPC;
+      }
+      tmpNPC = dynamic_cast<PNode*>(npcIT->nextElement());
+    }
+    delete npcIT;
+  }
+  return this->getFixedTarget();
+
 }
 
Index: /trunk/src/world_entities/weapons/weapon_manager.h
===================================================================
--- /trunk/src/world_entities/weapons/weapon_manager.h	(revision 5749)
+++ /trunk/src/world_entities/weapons/weapon_manager.h	(revision 5750)
@@ -17,4 +17,5 @@
 // FORWARD DECLARATION
 template <class T> class tAnimation;
+template <class T> class tIterator;
 
 
@@ -70,5 +71,6 @@
     void removeWeapon(Weapon* weapon, int configID = -1);
 
-
+    // FIXME ::
+//    bool hasFreeSlot(int configID, long capability = WTYPE_ALL) { return ( getNextFreeSlot(configID, capability ) != -1)? true : false; };
 
     void nextWeaponConfig();
@@ -77,6 +79,11 @@
 
     /** @returns a fixed target namely the Crosshair's 3D position */
-    inline PNode* getFixedTarget() { return this->crosshair; };
+    inline PNode* getFixedTarget() const { return this->crosshair; };
+    PNode* getSomeTarget();
+    PNode* getDistanceTarget(const PNode* carrier, float distance);
+
     void fire();
+    //! @TODO: implement this function (maybe also in Weapon itself)
+    void releaseFire();
 
     void tick(float dt);
@@ -85,5 +92,5 @@
     void debug() const;
 
-  private:
+ // private:
     int getNextFreeSlot(int configID, long capability = WTYPE_ALL);
 
@@ -102,3 +109,5 @@
     Crosshair*              crosshair;                                //!< an aim.
     tAnimation<Crosshair>*  crossHairSizeAnim;                        //!< An animation for the crosshair (scaling)
+
+    tIterator<BaseObject>*  targetIterator;                           //!< An iterator for traversion lists of enemies.
 };
