Page MenuHomePhabricator (Chris)

No OneTemporary

Size
1 MB
Referenced Files
None
Subscribers
None
This file is larger than 256 KB, so syntax highlighting was skipped.
This document is not UTF8. It was detected as JIS and converted to UTF8 for display.
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..19e9f6f
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+upi <upi@apocalypse.rulez.org>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..c7aea18
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..e69de29
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..02a4a07
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,167 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes a while. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 4. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..074cfbd
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,7 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = src data
+EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL README TODO openmortal.lsm
+AUTOMAKE_OPTIONS = foreign 1.4
+
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..35daf9b
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,366 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+SUBDIRS = src data
+EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL README TODO openmortal.lsm
+AUTOMAKE_OPTIONS = foreign 1.4
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
+Makefile.am Makefile.in TODO acinclude.m4 aclocal.m4 config.guess \
+config.h.in config.sub configure configure.in install-sh missing \
+mkinstalldirs
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4): configure.in acinclude.m4
+ cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+ cd $(srcdir) && $(AUTOCONF)
+
+config.h: stamp-h
+ @if test ! -f $@; then \
+ rm -f stamp-h; \
+ $(MAKE) stamp-h; \
+ else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES= CONFIG_HEADERS=config.h \
+ $(SHELL) ./config.status
+ @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
+ @if test ! -f $@; then \
+ rm -f $(srcdir)/stamp-h.in; \
+ $(MAKE) $(srcdir)/stamp-h.in; \
+ else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+ -rm -f config.h
+
+maintainer-clean-hdr:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" != "." || dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ -rm -rf $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ dc_install_base=`cd $(distdir)/=inst && pwd`; \
+ cd $(distdir)/=build \
+ && ../configure --srcdir=.. --prefix=$$dc_install_base \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) dist
+ -rm -rf $(distdir)
+ @banner="$(distdir).tar.gz is ready for distribution"; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ echo "$$dashes"
+dist: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+dist-all: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+distdir: $(DISTFILES)
+ -rm -rf $(distdir)
+ mkdir $(distdir)
+ -chmod 777 $(distdir)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+all-recursive-am: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am:
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am:
+uninstall: uninstall-recursive
+all-am: Makefile config.h
+all-redirect: all-recursive-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-hdr distclean-tags distclean-generic clean-am
+
+distclean: distclean-recursive
+ -rm -f config.status
+
+maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
+ maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+install-data-recursive uninstall-data-recursive install-exec-recursive \
+uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
+all-recursive check-recursive installcheck-recursive info-recursive \
+dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/README b/README
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..298b746
--- /dev/null
+++ b/TODO
@@ -0,0 +1,23 @@
+Characters:
+
++ Surba
+ Bence
+ Dani
+ Kinga
+ Ambrus
+ Dia
+ Judy
+ Siska
+
+
+Others:
+
+ Block after hit
+ Doodads / projectiles.
+ Resolution-free RlePack.draw()
+
+ No hitting falling opponent.
+ Polish character graphics.
+ More levels.
+
+ Single-player mode.
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..c4479fc
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,340 @@
+
+
+# OMAC_PATH_PERL
+# --------------
+AC_DEFUN([OMAC_PATH_PERL],
+[AC_PATH_PROG(PERL, perl)])
+
+# OMAC_PERL_EMBED_FLAGS
+# ---------------------
+AC_DEFUN([OMAC_PERL_EMBED_FLAGS],[
+ AC_REQUIRE([OMAC_PATH_PERL])
+ AC_MSG_CHECKING(for flags to compile embedded Perl)
+ perl_embed_ldflags=`$PERL -MExtUtils::Embed -e ldopts`
+ perl_embed_ccflags=`$PERL -MExtUtils::Embed -e ccopts`
+ AC_SUBST(perl_embed_ldflags)
+ AC_SUBST(perl_embed_ccflags)
+ AC_MSG_RESULT([$perl_embed_ccflags])
+])
+
+# Configure paths for SDL
+# Sam Lantinga 9/21/99
+# stolen from Manish Singh
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
+dnl
+AC_DEFUN(AM_PATH_SDL,
+[dnl
+dnl Get the cflags and libraries from the sdl-config script
+dnl
+AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
+ sdl_prefix="$withval", sdl_prefix="")
+AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
+ sdl_exec_prefix="$withval", sdl_exec_prefix="")
+AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
+ , enable_sdltest=yes)
+
+ if test x$sdl_exec_prefix != x ; then
+ sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+ fi
+ fi
+ if test x$sdl_prefix != x ; then
+ sdl_args="$sdl_args --prefix=$sdl_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_prefix/bin/sdl-config
+ fi
+ fi
+
+ AC_REQUIRE([AC_CANONICAL_TARGET])
+ PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+ AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
+ min_sdl_version=ifelse([$1], ,0.11.0,$1)
+ AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
+ no_sdl=""
+ if test "$SDL_CONFIG" = "no" ; then
+ no_sdl=yes
+ else
+ SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
+ SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
+
+ sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_sdltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+dnl
+dnl Now check if the installed SDL is sufficiently new. (Also sanity
+dnl checks the results of sdl-config to some extent
+dnl
+ rm -f conf.sdltest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ /* This hangs on some systems (?)
+ system ("touch conf.sdltest");
+ */
+ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_sdl_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_sdl_version");
+ exit(1);
+ }
+
+ if (($sdl_major_version > major) ||
+ (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+ (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+ printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+ printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_sdl" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$SDL_CONFIG" = "no" ; then
+ echo "*** The sdl-config script installed by SDL could not be found"
+ echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the SDL_CONFIG environment variable to the"
+ echo "*** full path to sdl-config."
+ else
+ if test -f conf.sdltest ; then
+ :
+ else
+ echo "*** Could not run SDL test program, checking why..."
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef main
+#define main K_and_R_C_main
+], [ return 0; ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding SDL or finding the wrong"
+ echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+ echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+ echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ SDL_CFLAGS=""
+ SDL_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(SDL_CFLAGS)
+ AC_SUBST(SDL_LIBS)
+ rm -f conf.sdltest
+])
+
+
+
+# Configure paths for FreeType2
+# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
+
+dnl AC_CHECK_FT2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for FreeType2, and define FT2_CFLAGS and FT2_LIBS
+dnl
+AC_DEFUN(AC_CHECK_FT2,
+[dnl
+dnl Get the cflags and libraries from the freetype-config script
+dnl
+AC_ARG_WITH(ft-prefix,
+[ --with-ft-prefix=PREFIX
+ Prefix where FreeType is installed (optional)],
+ ft_config_prefix="$withval", ft_config_prefix="")
+AC_ARG_WITH(ft-exec-prefix,
+[ --with-ft-exec-prefix=PREFIX
+ Exec prefix where FreeType is installed (optional)],
+ ft_config_exec_prefix="$withval", ft_config_exec_prefix="")
+AC_ARG_ENABLE(freetypetest,
+[ --disable-freetypetest Do not try to compile and run
+ a test FreeType program],
+ [], enable_fttest=yes)
+
+if test x$ft_config_exec_prefix != x ; then
+ ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+ fi
+fi
+if test x$ft_config_prefix != x ; then
+ ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+ fi
+fi
+AC_PATH_PROG(FT2_CONFIG, freetype-config, no)
+
+min_ft_version=ifelse([$1], ,6.1.0,$1)
+AC_MSG_CHECKING(for FreeType - version >= $min_ft_version)
+no_ft=""
+if test "$FT2_CONFIG" = "no" ; then
+ no_ft=yes
+else
+ FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+ FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+ ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ ft_min_major_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ ft_min_minor_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ ft_min_micro_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test x$enable_fttest = xyes ; then
+ ft_config_is_lt=""
+ if test $ft_config_major_version -lt $ft_min_major_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_major_version -eq $ft_min_major_version ; then
+ if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_minor_version -eq $ft_min_minor_version ; then
+ if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+ ft_config_is_lt=yes
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test x$ft_config_is_lt = xyes ; then
+ no_ft=yes
+ else
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $FT2_CFLAGS"
+ LIBS="$FT2_LIBS $LIBS"
+dnl
+dnl Sanity checks for the results of freetype-config to some extent
+dnl
+ AC_TRY_RUN([
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main()
+{
+ FT_Library library;
+ FT_Error error;
+
+ error = FT_Init_FreeType(&library);
+
+ if (error)
+ return 1;
+ else
+ {
+ FT_Done_FreeType(library);
+ return 0;
+ }
+}
+],, no_ft=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi # test $ft_config_version -lt $ft_min_version
+ fi # test x$enable_fttest = xyes
+fi # test "$FT2_CONFIG" = "no"
+if test x$no_ft = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+else
+ AC_MSG_RESULT(no)
+ if test "$FT2_CONFIG" = "no" ; then
+ echo "*** The freetype-config script installed by FreeType 2 could not be found."
+ echo "*** If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the FT2_CONFIG environment variable to the"
+ echo "*** full path to freetype-config."
+ else
+ if test x$ft_config_is_lt = xyes ; then
+ echo "*** Your installed version of the FreeType 2 library is too old."
+ echo "*** If you have different versions of FreeType 2, make sure that"
+ echo "*** correct values for --with-ft-prefix or --with-ft-exec-prefix"
+ echo "*** are used, or set the FT2_CONFIG environment variable to the"
+ echo "*** full path to freetype-config."
+ else
+ echo "*** The FreeType test program failed to run. If your system uses"
+ echo "*** shared libraries and they are installed outside the normal"
+ echo "*** system library path, make sure the variable LD_LIBRARY_PATH"
+ echo "*** (or whatever is appropiate for your system) is correctly set."
+ fi
+ fi
+ FT2_CFLAGS=""
+ FT2_LIBS=""
+ ifelse([$3], , :, [$3])
+fi
+AC_SUBST(FT2_CFLAGS)
+AC_SUBST(FT2_LIBS)
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..20bcc52
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,498 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4-p6
+
+dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+
+
+# OMAC_PATH_PERL
+# --------------
+AC_DEFUN([OMAC_PATH_PERL],
+[AC_PATH_PROG(PERL, perl)])
+
+# OMAC_PERL_EMBED_FLAGS
+# ---------------------
+AC_DEFUN([OMAC_PERL_EMBED_FLAGS],[
+ AC_REQUIRE([OMAC_PATH_PERL])
+ AC_MSG_CHECKING(for flags to compile embedded Perl)
+ perl_embed_ldflags=`$PERL -MExtUtils::Embed -e ldopts`
+ perl_embed_ccflags=`$PERL -MExtUtils::Embed -e ccopts`
+ AC_SUBST(perl_embed_ldflags)
+ AC_SUBST(perl_embed_ccflags)
+ AC_MSG_RESULT([$perl_embed_ccflags])
+])
+
+# Configure paths for SDL
+# Sam Lantinga 9/21/99
+# stolen from Manish Singh
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
+dnl
+AC_DEFUN(AM_PATH_SDL,
+[dnl
+dnl Get the cflags and libraries from the sdl-config script
+dnl
+AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
+ sdl_prefix="$withval", sdl_prefix="")
+AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
+ sdl_exec_prefix="$withval", sdl_exec_prefix="")
+AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
+ , enable_sdltest=yes)
+
+ if test x$sdl_exec_prefix != x ; then
+ sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+ fi
+ fi
+ if test x$sdl_prefix != x ; then
+ sdl_args="$sdl_args --prefix=$sdl_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_prefix/bin/sdl-config
+ fi
+ fi
+
+ AC_REQUIRE([AC_CANONICAL_TARGET])
+ PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+ AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
+ min_sdl_version=ifelse([$1], ,0.11.0,$1)
+ AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
+ no_sdl=""
+ if test "$SDL_CONFIG" = "no" ; then
+ no_sdl=yes
+ else
+ SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
+ SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
+
+ sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_sdltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+dnl
+dnl Now check if the installed SDL is sufficiently new. (Also sanity
+dnl checks the results of sdl-config to some extent
+dnl
+ rm -f conf.sdltest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ /* This hangs on some systems (?)
+ system ("touch conf.sdltest");
+ */
+ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_sdl_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_sdl_version");
+ exit(1);
+ }
+
+ if (($sdl_major_version > major) ||
+ (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+ (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+ printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+ printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_sdl" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$SDL_CONFIG" = "no" ; then
+ echo "*** The sdl-config script installed by SDL could not be found"
+ echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the SDL_CONFIG environment variable to the"
+ echo "*** full path to sdl-config."
+ else
+ if test -f conf.sdltest ; then
+ :
+ else
+ echo "*** Could not run SDL test program, checking why..."
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef main
+#define main K_and_R_C_main
+], [ return 0; ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding SDL or finding the wrong"
+ echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+ echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+ echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ SDL_CFLAGS=""
+ SDL_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(SDL_CFLAGS)
+ AC_SUBST(SDL_LIBS)
+ rm -f conf.sdltest
+])
+
+
+
+# Configure paths for FreeType2
+# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
+
+dnl AC_CHECK_FT2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for FreeType2, and define FT2_CFLAGS and FT2_LIBS
+dnl
+AC_DEFUN(AC_CHECK_FT2,
+[dnl
+dnl Get the cflags and libraries from the freetype-config script
+dnl
+AC_ARG_WITH(ft-prefix,
+[ --with-ft-prefix=PREFIX
+ Prefix where FreeType is installed (optional)],
+ ft_config_prefix="$withval", ft_config_prefix="")
+AC_ARG_WITH(ft-exec-prefix,
+[ --with-ft-exec-prefix=PREFIX
+ Exec prefix where FreeType is installed (optional)],
+ ft_config_exec_prefix="$withval", ft_config_exec_prefix="")
+AC_ARG_ENABLE(freetypetest,
+[ --disable-freetypetest Do not try to compile and run
+ a test FreeType program],
+ [], enable_fttest=yes)
+
+if test x$ft_config_exec_prefix != x ; then
+ ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+ fi
+fi
+if test x$ft_config_prefix != x ; then
+ ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+ fi
+fi
+AC_PATH_PROG(FT2_CONFIG, freetype-config, no)
+
+min_ft_version=ifelse([$1], ,6.1.0,$1)
+AC_MSG_CHECKING(for FreeType - version >= $min_ft_version)
+no_ft=""
+if test "$FT2_CONFIG" = "no" ; then
+ no_ft=yes
+else
+ FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+ FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+ ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ ft_min_major_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ ft_min_minor_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ ft_min_micro_version=`echo $min_ft_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test x$enable_fttest = xyes ; then
+ ft_config_is_lt=""
+ if test $ft_config_major_version -lt $ft_min_major_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_major_version -eq $ft_min_major_version ; then
+ if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_minor_version -eq $ft_min_minor_version ; then
+ if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+ ft_config_is_lt=yes
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test x$ft_config_is_lt = xyes ; then
+ no_ft=yes
+ else
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $FT2_CFLAGS"
+ LIBS="$FT2_LIBS $LIBS"
+dnl
+dnl Sanity checks for the results of freetype-config to some extent
+dnl
+ AC_TRY_RUN([
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main()
+{
+ FT_Library library;
+ FT_Error error;
+
+ error = FT_Init_FreeType(&library);
+
+ if (error)
+ return 1;
+ else
+ {
+ FT_Done_FreeType(library);
+ return 0;
+ }
+}
+],, no_ft=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi # test $ft_config_version -lt $ft_min_version
+ fi # test x$enable_fttest = xyes
+fi # test "$FT2_CONFIG" = "no"
+if test x$no_ft = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+else
+ AC_MSG_RESULT(no)
+ if test "$FT2_CONFIG" = "no" ; then
+ echo "*** The freetype-config script installed by FreeType 2 could not be found."
+ echo "*** If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the FT2_CONFIG environment variable to the"
+ echo "*** full path to freetype-config."
+ else
+ if test x$ft_config_is_lt = xyes ; then
+ echo "*** Your installed version of the FreeType 2 library is too old."
+ echo "*** If you have different versions of FreeType 2, make sure that"
+ echo "*** correct values for --with-ft-prefix or --with-ft-exec-prefix"
+ echo "*** are used, or set the FT2_CONFIG environment variable to the"
+ echo "*** full path to freetype-config."
+ else
+ echo "*** The FreeType test program failed to run. If your system uses"
+ echo "*** shared libraries and they are installed outside the normal"
+ echo "*** system library path, make sure the variable LD_LIBRARY_PATH"
+ echo "*** (or whatever is appropiate for your system) is correctly set."
+ fi
+ fi
+ FT2_CFLAGS=""
+ FT2_LIBS=""
+ ifelse([$3], , :, [$3])
+fi
+AC_SUBST(FT2_CFLAGS)
+AC_SUBST(FT2_LIBS)
+])
+
+# Do all the work for Automake. This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+# Copyright 2002 Free Software Foundation, Inc.
+
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# 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., 59 Temple Place - Suite 330, Boston, MA
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.4-p6])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "[$]2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN([AM_MISSING_PROG],
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN([AM_CONFIG_HEADER],
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated. We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+ case " <<$>>CONFIG_HEADERS " in
+ *" <<$>>am_file "*<<)>>
+ echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+ ;;
+ esac
+ am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..dff9e48
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1317 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+
+timestamp='2001-09-04'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# 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., 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.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# Please send patches to <config-patches@gnu.org>.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script.
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int dummy(){}" > $dummy.c ;
+ for c in cc gcc c89 ; do
+ ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
+ if test $? = 0 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ rm -f $dummy.c $dummy.o $dummy.rel ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # Netbsd (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ # Determine the machine/vendor (is the vendor relevant).
+ case "${UNAME_MACHINE}" in
+ amiga) machine=m68k-unknown ;;
+ arm32) machine=arm-unknown ;;
+ atari*) machine=m68k-atari ;;
+ sun3*) machine=m68k-sun ;;
+ mac68k) machine=m68k-apple ;;
+ macppc) machine=powerpc-apple ;;
+ hp3[0-9][05]) machine=m68k-hp ;;
+ ibmrt|romp-ibm) machine=romp-ibm ;;
+ *) machine=${UNAME_MACHINE}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE}" in
+ i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit 0 ;;
+ alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ cat <<EOF >$dummy.s
+ .data
+\$Lformat:
+ .byte 37,100,45,37,120,10,0 # "%d-%x\n"
+
+ .text
+ .globl main
+ .align 4
+ .ent main
+main:
+ .frame \$30,16,\$26,0
+ ldgp \$29,0(\$27)
+ .prologue 1
+ .long 0x47e03d80 # implver \$0
+ lda \$2,-1
+ .long 0x47e20c21 # amask \$2,\$1
+ lda \$16,\$Lformat
+ mov \$0,\$17
+ not \$1,\$18
+ jsr \$26,printf
+ ldgp \$29,0(\$26)
+ mov 0,\$16
+ jsr \$26,exit
+ .end main
+EOF
+ eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ case `./$dummy` in
+ 0-0)
+ UNAME_MACHINE="alpha"
+ ;;
+ 1-0)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 1-1)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 1-101)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 2-303)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ 2-307)
+ UNAME_MACHINE="alphaev67"
+ ;;
+ 2-1307)
+ UNAME_MACHINE="alphaev68"
+ ;;
+ esac
+ fi
+ rm -f $dummy.s $dummy
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit 0;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ arc64:OpenBSD:*:*)
+ echo mips64el-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hkmips:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:NetBSD:*)
+ echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy \
+ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ 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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ 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 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ case "${HPUX_REV}" in
+ 11.[0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ esac ;;
+ esac
+ fi ;;
+ esac
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+ if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+ rm -f $dummy.c $dummy
+ fi ;;
+ esac
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ hppa*:OpenBSD:*:*)
+ echo hppa-unknown-openbsd
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*X-MP:*:*:*)
+ echo xmp-cray-unicos
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3D:*:*:*)
+ echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY-2:*:*:*)
+ echo cray2-cray-unicos
+ exit 0 ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i386-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
+ big) echo mips-unknown-linux-gnu && exit 0 ;;
+ little) echo mipsel-unknown-linux-gnu && exit 0 ;;
+ esac
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ 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-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ ld_supported_targets=`cd /; ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit 0 ;;
+ coff-i386)
+ 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-gnuoldld"
+ exit 0 ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ cat >$dummy.c <<EOF
+#include <features.h>
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __ELF__
+# ifdef __GLIBC__
+# if __GLIBC__ >= 2
+ printf ("%s-pc-linux-gnu\n", argv[1]);
+# else
+ printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+# endif
+# else
+ printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+ printf ("%s-pc-linux-gnuaout\n", argv[1]);
+#endif
+ return 0;
+}
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit 0 ;;
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit 0 ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && 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 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && 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 0 ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ 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 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 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Darwin:*:*)
+ echo `uname -p`-apple-darwin${UNAME_RELEASE}
+ exit 0 ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ if test "${UNAME_MACHINE}" = "x86pc"; then
+ UNAME_MACHINE=pc
+ fi
+ echo `uname -p`-${UNAME_MACHINE}-nto-qnx
+ exit 0 ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+ NSR-[KW]:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit 0 ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit 0 ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ 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 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..1c66097
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,11 @@
+/* config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* Define to empty if the keyword does not work. */
+#undef const
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..393f13d
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1411 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+
+timestamp='2001-09-07'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# 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., 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>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit 0;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | c4x | clipper \
+ | d10v | d30v | dsp16xx \
+ | fr30 \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | m32r | m68000 | m68k | m88k | mcore \
+ | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el | mips64vr4300 \
+ | mips64vr4300el | mips64vr5000 | mips64vr5000el \
+ | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
+ | mipsisa32 \
+ | mn10200 | mn10300 \
+ | ns16k | ns32k \
+ | openrisc \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | s390 | s390x \
+ | sh | sh[34] | sh[34]eb | shbe | shle \
+ | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
+ | stormy16 | strongarm \
+ | tahoe | thumb | tic80 | tron \
+ | v850 \
+ | we32k \
+ | x86 | xscale \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alphapca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armv*-* \
+ | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c54x-* \
+ | clipper-* | cray2-* | cydra-* \
+ | d10v-* | d30v-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | m32r-* \
+ | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
+ | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
+ | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | s390-* | s390x-* \
+ | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
+ | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
+ | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
+ | v850-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ cray2)
+ basic_machine=cray2-cray
+ os=-unicos
+ ;;
+ [cjt]90)
+ basic_machine=${basic_machine}-cray
+ os=-unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mipsel*-linux*)
+ basic_machine=mipsel-unknown
+ os=-linux-gnu
+ ;;
+ mips*-linux*)
+ basic_machine=mips-unknown
+ os=-linux-gnu
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ mmix*)
+ basic_machine=mmix-knuth
+ os=-mmixware
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5 | k5 | k6 | nexgen)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2)
+ basic_machine=i686-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sparclite-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=t3e-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ windows32)
+ basic_machine=i386-pc
+ os=-windows32-msvcrt
+ ;;
+ xmp)
+ basic_machine=xmp-cray
+ os=-unicos
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ mips)
+ if [ x$os = x-linux-gnu ]; then
+ basic_machine=mips-unknown
+ else
+ basic_machine=mips-mips
+ fi
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh3 | sh4 | sh3eb | sh4eb)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ c4x*)
+ basic_machine=c4x-none
+ os=-coff
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto*)
+ os=-nto-qnx
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -vxsim* | -vxworks*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..961fd0b
--- /dev/null
+++ b/configure
@@ -0,0 +1,2125 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_default_prefix=/usr/local
+ac_help="$ac_help
+ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)"
+ac_help="$ac_help
+ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)"
+ac_help="$ac_help
+ --disable-sdltest Do not try to compile and run a test SDL program"
+ac_help="$ac_help
+ --with-ft-prefix=PREFIX
+ Prefix where FreeType is installed (optional)"
+ac_help="$ac_help
+ --with-ft-exec-prefix=PREFIX
+ Exec prefix where FreeType is installed (optional)"
+ac_help="$ac_help
+ --disable-freetypetest Do not try to compile and run
+ a test FreeType program"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=acinclude.m4
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Do some error checking and defaulting for the host and target type.
+# The inputs are:
+# configure --host=HOST --target=TARGET --build=BUILD NONOPT
+#
+# The rules are:
+# 1. You are not allowed to specify --host, --target, and nonopt at the
+# same time.
+# 2. Host defaults to nonopt.
+# 3. If nonopt is not specified, then host defaults to the current host,
+# as determined by config.guess.
+# 4. Target and build default to nonopt.
+# 5. If nonopt is not specified, then target and build default to host.
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+case $host---$target---$nonopt in
+NONE---*---* | *---NONE---* | *---*---NONE) ;;
+*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
+esac
+
+
+# Make sure we can run config.sub.
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:590: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+ case $nonopt in
+ NONE)
+ if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
+ else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+ fi ;;
+ *) host_alias=$nonopt ;;
+ esac ;;
+esac
+
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+echo $ac_n "checking target system type""... $ac_c" 1>&6
+echo "configure:611: checking target system type" >&5
+
+target_alias=$target
+case "$target_alias" in
+NONE)
+ case $nonopt in
+ NONE) target_alias=$host_alias ;;
+ *) target_alias=$nonopt ;;
+ esac ;;
+esac
+
+target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
+target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$target" 1>&6
+
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:629: checking build system type" >&5
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+ case $nonopt in
+ NONE) build_alias=$host_alias ;;
+ *) build_alias=$nonopt ;;
+ esac ;;
+esac
+
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+test "$host_alias" != "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+
+if test "$program_transform_name" = s,x,x,; then
+ program_transform_name=
+else
+ # Double any \ or $. echo might interpret backslashes.
+ cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+ program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+ rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+
+am__api_version="1.4"
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:684: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:737: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "$*" != "X $srcdir/configure conftestfile" \
+ && test "$*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+ fi
+
+ test "$2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:775: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=openmortal
+
+VERSION=0.3
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal-${am__api_version}""... $ac_c" 1>&6
+echo "configure:821: checking for working aclocal-${am__api_version}" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (aclocal-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal-${am__api_version}
+ echo "$ac_t""found" 1>&6
+else
+ ACLOCAL="$missing_dir/missing aclocal-${am__api_version}"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:834: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+ AUTOCONF=autoconf
+ echo "$ac_t""found" 1>&6
+else
+ AUTOCONF="$missing_dir/missing autoconf"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake-${am__api_version}""... $ac_c" 1>&6
+echo "configure:847: checking for working automake-${am__api_version}" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (automake-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake-${am__api_version}
+ echo "$ac_t""found" 1>&6
+else
+ AUTOMAKE="$missing_dir/missing automake-${am__api_version}"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:860: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+ AUTOHEADER=autoheader
+ echo "$ac_t""found" 1>&6
+else
+ AUTOHEADER="$missing_dir/missing autoheader"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:873: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+ MAKEINFO=makeinfo
+ echo "$ac_t""found" 1>&6
+else
+ MAKEINFO="$missing_dir/missing makeinfo"
+ echo "$ac_t""missing" 1>&6
+fi
+
+
+
+
+if test "x$prefix" = "xNONE"; then
+ prefix=$ac_default_prefix
+ ac_configure_args="$ac_configure_args --prefix $prefix"
+fi
+
+
+
+
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:898: checking for working const" >&5
+if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 903 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this. */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this. */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this. */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in an arm
+ of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:952: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_c_const=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+ cat >> confdefs.h <<\EOF
+#define const
+EOF
+
+fi
+
+for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:977: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CXX="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CXX="$ac_cv_prog_CXX"
+if test -n "$CXX"; then
+ echo "$ac_t""$CXX" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$CXX" && break
+done
+test -n "$CXX" || CXX="gcc"
+
+
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1009: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 1020 "configure"
+#include "confdefs.h"
+
+int main(){return(0);}
+EOF
+if { (eval echo configure:1025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cxx_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cxx_cross=no
+ else
+ ac_cv_prog_cxx_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cxx_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
+if test $ac_cv_prog_cxx_works = no; then
+ { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:1051: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
+cross_compiling=$ac_cv_prog_cxx_cross
+
+echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
+echo "configure:1056: checking whether we are using GNU C++" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.C <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1065: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gxx=yes
+else
+ ac_cv_prog_gxx=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gxx" 1>&6
+
+if test $ac_cv_prog_gxx = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+
+ac_test_CXXFLAGS="${CXXFLAGS+set}"
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS=
+echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
+echo "configure:1084: checking whether ${CXX-g++} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.cc
+if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
+ ac_cv_prog_cxx_g=yes
+else
+ ac_cv_prog_cxx_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS="$ac_save_CXXFLAGS"
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+
+
+
+
+
+
+
+
+SDL_VERSION=1.2.0
+# Check whether --with-sdl-prefix or --without-sdl-prefix was given.
+if test "${with_sdl_prefix+set}" = set; then
+ withval="$with_sdl_prefix"
+ sdl_prefix="$withval"
+else
+ sdl_prefix=""
+fi
+
+# Check whether --with-sdl-exec-prefix or --without-sdl-exec-prefix was given.
+if test "${with_sdl_exec_prefix+set}" = set; then
+ withval="$with_sdl_exec_prefix"
+ sdl_exec_prefix="$withval"
+else
+ sdl_exec_prefix=""
+fi
+
+# Check whether --enable-sdltest or --disable-sdltest was given.
+if test "${enable_sdltest+set}" = set; then
+ enableval="$enable_sdltest"
+ :
+else
+ enable_sdltest=yes
+fi
+
+
+ if test x$sdl_exec_prefix != x ; then
+ sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+ fi
+ fi
+ if test x$sdl_prefix != x ; then
+ sdl_args="$sdl_args --prefix=$sdl_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_prefix/bin/sdl-config
+ fi
+ fi
+
+
+ PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+ # Extract the first word of "sdl-config", so it can be a program name with args.
+set dummy sdl-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1166: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_SDL_CONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ case "$SDL_CONFIG" in
+ /*)
+ ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a dos path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_path_SDL_CONFIG="$ac_dir/$ac_word"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no"
+ ;;
+esac
+fi
+SDL_CONFIG="$ac_cv_path_SDL_CONFIG"
+if test -n "$SDL_CONFIG"; then
+ echo "$ac_t""$SDL_CONFIG" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ min_sdl_version=$SDL_VERSION
+ echo $ac_n "checking for SDL - version >= $min_sdl_version""... $ac_c" 1>&6
+echo "configure:1201: checking for SDL - version >= $min_sdl_version" >&5
+ no_sdl=""
+ if test "$SDL_CONFIG" = "no" ; then
+ no_sdl=yes
+ else
+ SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
+ SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
+
+ sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+ sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+ sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+ if test "x$enable_sdltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ rm -f conf.sdltest
+ if test "$cross_compiling" = yes; then
+ echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1225 "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ /* This hangs on some systems (?)
+ system ("touch conf.sdltest");
+ */
+ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_sdl_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_sdl_version");
+ exit(1);
+ }
+
+ if (($sdl_major_version > major) ||
+ (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+ (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+ printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+ printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+
+EOF
+if { (eval echo configure:1286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ no_sdl=yes
+fi
+rm -fr conftest*
+fi
+
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_sdl" = x ; then
+ echo "$ac_t""yes" 1>&6
+ :
+ else
+ echo "$ac_t""no" 1>&6
+ if test "$SDL_CONFIG" = "no" ; then
+ echo "*** The sdl-config script installed by SDL could not be found"
+ echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the SDL_CONFIG environment variable to the"
+ echo "*** full path to sdl-config."
+ else
+ if test -f conf.sdltest ; then
+ :
+ else
+ echo "*** Could not run SDL test program, checking why..."
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ cat > conftest.$ac_ext <<EOF
+#line 1320 "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef main
+#define main K_and_R_C_main
+
+int main() {
+ return 0;
+; return 0; }
+EOF
+if { (eval echo configure:1335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding SDL or finding the wrong"
+ echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+ echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+ echo "*** may want to edit the sdl-config script: $SDL_CONFIG"
+fi
+rm -f conftest*
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ SDL_CFLAGS=""
+ SDL_LIBS=""
+ { echo "configure: error: *** SDL version $SDL_VERSION not found!" 1>&2; exit 1; }
+
+ fi
+
+
+ rm -f conf.sdltest
+
+CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+LIBS="$LIBS $SDL_LIBS"
+
+
+echo $ac_n "checking for IMG_Load in -lSDL_image""... $ac_c" 1>&6
+echo "configure:1374: checking for IMG_Load in -lSDL_image" >&5
+ac_lib_var=`echo SDL_image'_'IMG_Load | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lSDL_image $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1382 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IMG_Load();
+
+int main() {
+IMG_Load()
+; return 0; }
+EOF
+if { (eval echo configure:1393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -lSDL_image"
+else
+ echo "$ac_t""no" 1>&6
+{ echo "configure: error: *** SDL_image library not found!" 1>&2; exit 1; }
+
+fi
+
+
+
+echo $ac_n "checking for Mix_OpenAudio in -lSDL_mixer""... $ac_c" 1>&6
+echo "configure:1418: checking for Mix_OpenAudio in -lSDL_mixer" >&5
+ac_lib_var=`echo SDL_mixer'_'Mix_OpenAudio | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lSDL_mixer $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1426 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char Mix_OpenAudio();
+
+int main() {
+Mix_OpenAudio()
+; return 0; }
+EOF
+if { (eval echo configure:1437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -lSDL_mixer"
+else
+ echo "$ac_t""no" 1>&6
+{ echo "configure: error: *** SDL_mixer library not found!" 1>&2; exit 1; }
+
+fi
+
+
+
+FT2_VERSION=2.1.0
+# Check whether --with-ft-prefix or --without-ft-prefix was given.
+if test "${with_ft_prefix+set}" = set; then
+ withval="$with_ft_prefix"
+ ft_config_prefix="$withval"
+else
+ ft_config_prefix=""
+fi
+
+# Check whether --with-ft-exec-prefix or --without-ft-exec-prefix was given.
+if test "${with_ft_exec_prefix+set}" = set; then
+ withval="$with_ft_exec_prefix"
+ ft_config_exec_prefix="$withval"
+else
+ ft_config_exec_prefix=""
+fi
+
+# Check whether --enable-freetypetest or --disable-freetypetest was given.
+if test "${enable_freetypetest+set}" = set; then
+ enableval="$enable_freetypetest"
+ :
+else
+ enable_fttest=yes
+fi
+
+
+if test x$ft_config_exec_prefix != x ; then
+ ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+ fi
+fi
+if test x$ft_config_prefix != x ; then
+ ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+ if test x${FT2_CONFIG+set} != xset ; then
+ FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+ fi
+fi
+# Extract the first word of "freetype-config", so it can be a program name with args.
+set dummy freetype-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1502: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_FT2_CONFIG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ case "$FT2_CONFIG" in
+ /*)
+ ac_cv_path_FT2_CONFIG="$FT2_CONFIG" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ ac_cv_path_FT2_CONFIG="$FT2_CONFIG" # Let the user override the test with a dos path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_path_FT2_CONFIG="$ac_dir/$ac_word"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_path_FT2_CONFIG" && ac_cv_path_FT2_CONFIG="no"
+ ;;
+esac
+fi
+FT2_CONFIG="$ac_cv_path_FT2_CONFIG"
+if test -n "$FT2_CONFIG"; then
+ echo "$ac_t""$FT2_CONFIG" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+min_ft_version=$FT2_VERSION
+echo $ac_n "checking for FreeType - version >= $min_ft_version""... $ac_c" 1>&6
+echo "configure:1538: checking for FreeType - version >= $min_ft_version" >&5
+no_ft=""
+if test "$FT2_CONFIG" = "no" ; then
+ no_ft=yes
+else
+ FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+ FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+ ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+ ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+ ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+ ft_min_major_version=`echo $min_ft_version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+ ft_min_minor_version=`echo $min_ft_version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+ ft_min_micro_version=`echo $min_ft_version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+ if test x$enable_fttest = xyes ; then
+ ft_config_is_lt=""
+ if test $ft_config_major_version -lt $ft_min_major_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_major_version -eq $ft_min_major_version ; then
+ if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+ ft_config_is_lt=yes
+ else
+ if test $ft_config_minor_version -eq $ft_min_minor_version ; then
+ if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+ ft_config_is_lt=yes
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test x$ft_config_is_lt = xyes ; then
+ no_ft=yes
+ else
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $FT2_CFLAGS"
+ LIBS="$FT2_LIBS $LIBS"
+ if test "$cross_compiling" = yes; then
+ echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1585 "configure"
+#include "confdefs.h"
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main()
+{
+ FT_Library library;
+ FT_Error error;
+
+ error = FT_Init_FreeType(&library);
+
+ if (error)
+ return 1;
+ else
+ {
+ FT_Done_FreeType(library);
+ return 0;
+ }
+}
+
+EOF
+if { (eval echo configure:1611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ no_ft=yes
+fi
+rm -fr conftest*
+fi
+
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi # test $ft_config_version -lt $ft_min_version
+ fi # test x$enable_fttest = xyes
+fi # test "$FT2_CONFIG" = "no"
+if test x$no_ft = x ; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+ if test "$FT2_CONFIG" = "no" ; then
+ echo "*** The freetype-config script installed by FreeType 2 could not be found."
+ echo "*** If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the FT2_CONFIG environment variable to the"
+ echo "*** full path to freetype-config."
+ else
+ if test x$ft_config_is_lt = xyes ; then
+ echo "*** Your installed version of the FreeType 2 library is too old."
+ echo "*** If you have different versions of FreeType 2, make sure that"
+ echo "*** correct values for --with-ft-prefix or --with-ft-exec-prefix"
+ echo "*** are used, or set the FT2_CONFIG environment variable to the"
+ echo "*** full path to freetype-config."
+ else
+ echo "*** The FreeType test program failed to run. If your system uses"
+ echo "*** shared libraries and they are installed outside the normal"
+ echo "*** system library path, make sure the variable LD_LIBRARY_PATH"
+ echo "*** (or whatever is appropiate for your system) is correctly set."
+ fi
+ fi
+ FT2_CFLAGS=""
+ FT2_LIBS=""
+ { echo "configure: error: *** FreeType 2 version $FT2_VERSION not found!" 1>&2; exit 1; }
+
+fi
+
+
+
+CXXFLAGS="$CXXFLAGS $FT2_CFLAGS"
+LIBS="$LIBS $FT2_LIBS"
+
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1667: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ case "$PERL" in
+ /*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_path_PERL="$ac_dir/$ac_word"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac
+fi
+PERL="$ac_cv_path_PERL"
+if test -n "$PERL"; then
+ echo "$ac_t""$PERL" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+
+ echo $ac_n "checking for flags to compile embedded Perl""... $ac_c" 1>&6
+echo "configure:1702: checking for flags to compile embedded Perl" >&5
+ perl_embed_ldflags=`$PERL -MExtUtils::Embed -e ldopts`
+ perl_embed_ccflags=`$PERL -MExtUtils::Embed -e ccopts`
+
+
+ echo "$ac_t""$perl_embed_ccflags" 1>&6
+
+CXXFLAGS="$CXXFLAGS $perl_embed_ccflags"
+LIBS="$LIBS $perl_embed_ldflags"
+
+if test "$program_transform_name" = s,x,x,; then
+ program_transform_name=
+else
+ # Double any \ or $. echo might interpret backslashes.
+ cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+ program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+ rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile src/Makefile data/Makefile data/characters/Makefile
+data/fonts/Makefile data/gfx/Makefile data/script/Makefile
+data/sound/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@target@%$target%g
+s%@target_alias@%$target_alias%g
+s%@target_cpu@%$target_cpu%g
+s%@target_vendor@%$target_vendor%g
+s%@target_os@%$target_os%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@CXX@%$CXX%g
+s%@AUTODIRS@%$AUTODIRS%g
+s%@SDL_CONFIG@%$SDL_CONFIG%g
+s%@SDL_CFLAGS@%$SDL_CFLAGS%g
+s%@SDL_LIBS@%$SDL_LIBS%g
+s%@FT2_CONFIG@%$FT2_CONFIG%g
+s%@FT2_CFLAGS@%$FT2_CFLAGS%g
+s%@FT2_LIBS@%$FT2_LIBS%g
+s%@PERL@%$PERL%g
+s%@perl_embed_ldflags@%$perl_embed_ldflags%g
+s%@perl_embed_ccflags@%$perl_embed_ccflags%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile src/Makefile data/Makefile data/characters/Makefile
+data/fonts/Makefile data/gfx/Makefile data/script/Makefile
+data/sound/Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..2ada3fa
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,92 @@
+dnl without this order in this file, autoconf will not work!
+dnl the argument is a source file out of your sources. But
+dnl acinclude.m4 makes the job for all programs ;-)
+AC_INIT(acinclude.m4)
+
+dnl enable the following if you want to use autoconf/automake
+dnl framework from a certain directory (like kde-common)
+dnl AC_CONFIG_AUX_DIR(admin)
+
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+
+AM_INIT_AUTOMAKE(openmortal, 0.3)
+
+AC_PREFIX_DEFAULT(/usr/local)
+if test "x$prefix" = "xNONE"; then
+ prefix=$ac_default_prefix
+ ac_configure_args="$ac_configure_args --prefix $prefix"
+fi
+
+dnl without this order in this file, automake will be confused!
+dnl
+AM_CONFIG_HEADER(config.h)
+
+AC_C_CONST
+AC_PROG_CXX
+
+dnl checks for programs.
+dnl first check for c/c++ compilers
+dnl AC_CHECK_COMPILERS
+
+dnl create only shared libtool-libraries
+dnl AC_ENABLE_SHARED(yes)
+
+dnl set the following to yes, if you want to create static
+dnl libtool-libraries
+dnl AC_ENABLE_STATIC(no)
+
+AC_SUBST(AUTODIRS)
+
+dnl in this space add everything you want to check for
+dnl examples are specific headers, libraries, etc.
+
+dnl Check for SDL
+SDL_VERSION=1.2.0
+AM_PATH_SDL($SDL_VERSION,
+ :,
+ AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
+)
+CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+LIBS="$LIBS $SDL_LIBS"
+
+dnl Check for SDL_image
+
+AC_CHECK_LIB(SDL_image,
+ IMG_Load,
+ LIBS="$LIBS -lSDL_image",
+ AC_MSG_ERROR([*** SDL_image library not found!])
+)
+
+dnl Check for SDL_mixer
+
+AC_CHECK_LIB(SDL_mixer,
+ Mix_OpenAudio,
+ LIBS="$LIBS -lSDL_mixer",
+ AC_MSG_ERROR([*** SDL_mixer library not found!])
+)
+
+dnl Check for Freetype 2 library
+
+FT2_VERSION=2.1.0
+AC_CHECK_FT2(
+ $FT2_VERSION,
+ :,
+ AC_MSG_ERROR([*** FreeType 2 version $FT2_VERSION not found!])
+)
+CXXFLAGS="$CXXFLAGS $FT2_CFLAGS"
+LIBS="$LIBS $FT2_LIBS"
+
+dnl Perl-related stuff...
+
+OMAC_PERL_EMBED_FLAGS
+CXXFLAGS="$CXXFLAGS $perl_embed_ccflags"
+LIBS="$LIBS $perl_embed_ldflags"
+
+dnl perform program name transformation
+AC_ARG_PROGRAM
+
+dnl add here all your Makefiles. These will be created by configure
+AC_OUTPUT(Makefile src/Makefile data/Makefile data/characters/Makefile
+data/fonts/Makefile data/gfx/Makefile data/script/Makefile
+data/sound/Makefile)
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 0000000..e66a3f5
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1,7 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS=characters fonts gfx script sound
+
+pkgdata_DATA=demo0.om demo1.om demo2.om demo3.om demo4.om demo5.om
+
+EXTRA_DIST=$(pkgdata_DATA)
diff --git a/data/Makefile.in b/data/Makefile.in
new file mode 100644
index 0000000..9966943
--- /dev/null
+++ b/data/Makefile.in
@@ -0,0 +1,313 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+SUBDIRS = characters fonts gfx script sound
+
+pkgdata_DATA = demo0.om demo1.om demo2.om demo3.om demo4.om demo5.om
+
+EXTRA_DIST = $(pkgdata_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(pkgdata_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps data/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-pkgdataDATA: $(pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
+ @list='$(pkgdata_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgdatadir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgdatadir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(pkgdatadir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(pkgdata_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(pkgdatadir)/$$p; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" != "." || dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am: install-pkgdataDATA
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-pkgdataDATA
+uninstall: uninstall-recursive
+all-am: Makefile $(DATA)
+all-redirect: all-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-tags distclean-generic clean-am
+
+distclean: distclean-recursive
+
+maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+
+.PHONY: uninstall-pkgdataDATA install-pkgdataDATA install-data-recursive \
+uninstall-data-recursive install-exec-recursive \
+uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
+all-recursive check-recursive installcheck-recursive info-recursive \
+dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/characters/BENCEDATA.DAT.pl b/data/characters/BENCEDATA.DAT.pl
new file mode 100644
index 0000000..ecafd0c
--- /dev/null
+++ b/data/characters/BENCEDATA.DAT.pl
@@ -0,0 +1,289 @@
+{ 'x'=>450, 'y'=>293, 'w'=>110, 'h'=>319, 'head'=>[489,293,513,293,513,343,489,343,], 'body'=>[466,338,521,338,521,480,466,480,], 'legs'=>[466,470,471,470,516,470,521,470,548,612,455,612,], 'ex'=>1 },
+{ 'x'=>452, 'y'=>287, 'w'=>107, 'h'=>305, 'head'=>[489,287,516,287,516,337,489,337,], 'body'=>[470,332,525,332,525,467,470,467,], 'legs'=>[470,457,475,457,520,457,525,457,549,592,455,592,], 'ex'=>1 },
+{ 'x'=>453, 'y'=>279, 'w'=>112, 'h'=>314, 'head'=>[487,279,510,279,510,329,487,329,], 'body'=>[472,324,527,324,527,463,472,463,], 'legs'=>[472,453,477,453,522,453,527,453,556,593,456,593,], 'ex'=>1 },
+{ 'x'=>449, 'y'=>269, 'w'=>154, 'h'=>324, 'head'=>[473,269,490,269,490,319,473,319,], 'body'=>[473,314,528,314,528,458,473,458,], 'legs'=>[473,448,478,448,523,448,528,448,548,593,455,593,], 'ex'=>1 },
+{ 'x'=>412, 'y'=>278, 'w'=>179, 'h'=>314, 'head'=>[459,278,481,278,481,328,459,328,], 'body'=>[461,323,516,323,516,462,461,462,], 'legs'=>[461,452,466,452,511,452,516,452,544,592,443,592,], 'ex'=>1 },
+{ 'x'=>392, 'y'=>290, 'w'=>253, 'h'=>304, 'head'=>[474,290,516,290,516,340,474,340,], 'body'=>[452,335,507,335,507,469,452,469,], 'legs'=>[452,459,457,459,502,459,507,459,531,594,437,594,], 'ex'=>1 },
+{ 'x'=>381, 'y'=>285, 'w'=>241, 'h'=>308, 'head'=>[465,285,508,285,508,335,465,335,], 'body'=>[450,330,505,330,505,466,450,466,], 'legs'=>[450,456,455,456,500,456,505,456,528,593,434,593,], 'ex'=>1 },
+{ 'x'=>417, 'y'=>243, 'w'=>186, 'h'=>347, 'head'=>[438,243,450,243,450,293,438,293,], 'body'=>[467,288,522,288,522,444,467,444,], 'legs'=>[467,434,472,434,517,434,522,434,538,590,445,590,], 'ex'=>1 },
+{ 'x'=>418, 'y'=>240, 'w'=>153, 'h'=>362, 'head'=>[481,240,488,240,488,290,481,290,], 'body'=>[468,285,523,285,523,448,468,448,], 'legs'=>[468,438,473,438,518,438,523,438,539,602,447,602,], 'ex'=>1 },
+{ 'x'=>455, 'y'=>245, 'w'=>113, 'h'=>345, 'head'=>[541,245,546,245,546,295,541,295,], 'body'=>[482,290,537,290,537,445,482,445,], 'legs'=>[482,435,487,435,532,435,537,435,551,590,458,590,], 'ex'=>1 },
+{ 'x'=>419, 'y'=>285, 'w'=>212, 'h'=>305, 'head'=>[482,285,506,285,506,335,482,335,], 'body'=>[463,330,518,330,518,465,463,465,], 'legs'=>[463,455,468,455,513,455,518,455,539,590,447,590,], 'ex'=>1 },
+{ 'x'=>455, 'y'=>285, 'w'=>130, 'h'=>305, 'head'=>[494,285,519,285,519,335,494,335,], 'body'=>[472,330,527,330,527,465,472,465,], 'legs'=>[472,455,477,455,522,455,527,455,581,590,458,590,], 'ex'=>1 },
+{ 'x'=>454, 'y'=>284, 'w'=>107, 'h'=>307, 'head'=>[494,284,518,284,518,334,494,334,], 'body'=>[466,329,521,329,521,465,466,465,], 'legs'=>[466,455,471,455,516,455,521,455,550,591,457,591,], 'ex'=>1 },
+{ 'x'=>408, 'y'=>283, 'w'=>158, 'h'=>307, 'head'=>[478,283,503,283,503,333,478,333,], 'body'=>[455,328,510,328,510,464,455,464,], 'legs'=>[455,454,460,454,505,454,510,454,535,590,408,590,], 'ex'=>1 },
+{ 'x'=>385, 'y'=>284, 'w'=>172, 'h'=>303, 'head'=>[480,284,506,284,506,334,480,334,], 'body'=>[452,329,507,329,507,463,452,463,], 'legs'=>[452,453,457,453,502,453,507,453,528,587,388,587,], 'ex'=>1 },
+{ 'x'=>387, 'y'=>289, 'w'=>160, 'h'=>308, 'head'=>[478,289,508,289,508,339,478,339,], 'body'=>[440,334,495,334,495,470,440,470,], 'legs'=>[440,460,445,460,490,460,495,460,529,597,390,597,], 'ex'=>1 },
+{ 'x'=>372, 'y'=>293, 'w'=>157, 'h'=>297, 'head'=>[451,293,482,293,482,343,451,343,], 'body'=>[422,338,477,338,477,469,422,469,], 'legs'=>[422,459,427,459,472,459,477,459,525,590,375,590,], 'ex'=>1 },
+{ 'x'=>369, 'y'=>293, 'w'=>219, 'h'=>294, 'head'=>[426,293,456,293,456,343,426,343,], 'body'=>[399,338,454,338,454,467,399,467,], 'legs'=>[399,457,404,457,449,457,454,457,523,587,372,587,], 'ex'=>1 },
+{ 'x'=>369, 'y'=>282, 'w'=>193, 'h'=>304, 'head'=>[412,282,444,282,444,332,412,332,], 'body'=>[389,327,444,327,444,461,389,461,], 'legs'=>[389,451,394,451,439,451,444,451,488,586,372,586,], 'ex'=>1 },
+{ 'x'=>328, 'y'=>281, 'w'=>223, 'h'=>307, 'head'=>[392,281,424,281,424,331,392,331,], 'body'=>[373,326,428,326,428,462,373,462,], 'legs'=>[373,452,378,452,423,452,428,452,464,588,360,588,], 'ex'=>1 },
+{ 'x'=>334, 'y'=>283, 'w'=>210, 'h'=>305, 'head'=>[392,283,425,283,425,333,392,333,], 'body'=>[375,328,430,328,430,463,375,463,], 'legs'=>[375,453,380,453,425,453,430,453,466,588,356,588,], 'ex'=>1 },
+{ 'x'=>362, 'y'=>285, 'w'=>193, 'h'=>305, 'head'=>[401,285,433,285,433,335,401,335,], 'body'=>[378,330,433,330,433,465,378,465,], 'legs'=>[378,455,383,455,428,455,433,455,475,590,365,590,], 'ex'=>1 },
+{ 'x'=>338, 'y'=>286, 'w'=>205, 'h'=>305, 'head'=>[393,286,425,286,425,336,393,336,], 'body'=>[366,331,421,331,421,466,366,466,], 'legs'=>[366,456,371,456,416,456,421,456,467,591,358,591,], 'ex'=>1 },
+{ 'x'=>332, 'y'=>289, 'w'=>205, 'h'=>305, 'head'=>[391,289,423,289,423,339,391,339,], 'body'=>[378,335,433,335,433,470,378,470,], 'legs'=>[364,459,369,459,414,459,448,458,468,594,358,594,], 'ex'=>0 },
+{ 'x'=>332, 'y'=>289, 'w'=>203, 'h'=>305, 'head'=>[392,289,424,289,424,339,392,339,], 'body'=>[378,334,433,334,433,469,378,469,], 'legs'=>[364,459,369,459,414,459,445,457,467,594,359,594,], 'ex'=>0 },
+{ 'x'=>329, 'y'=>291, 'w'=>207, 'h'=>307, 'head'=>[390,291,422,291,422,341,390,341,], 'body'=>[362,336,417,336,417,472,362,472,], 'legs'=>[362,462,367,462,412,462,417,462,465,598,356,598,], 'ex'=>1 },
+{ 'x'=>327, 'y'=>292, 'w'=>210, 'h'=>305, 'head'=>[389,292,421,292,421,342,389,342,], 'body'=>[361,337,416,337,416,472,361,472,], 'legs'=>[361,462,366,462,411,462,416,462,465,597,356,597,], 'ex'=>1 },
+{ 'x'=>332, 'y'=>291, 'w'=>207, 'h'=>302, 'head'=>[391,291,424,291,424,341,391,341,], 'body'=>[360,336,415,336,415,469,360,469,], 'legs'=>[360,459,365,459,410,459,415,459,466,593,358,593,], 'ex'=>1 },
+{ 'x'=>331, 'y'=>293, 'w'=>208, 'h'=>301, 'head'=>[390,293,423,293,423,343,390,343,], 'body'=>[360,338,415,338,415,471,360,471,], 'legs'=>[360,461,365,461,410,461,415,461,465,594,358,594,], 'ex'=>1 },
+{ 'x'=>333, 'y'=>293, 'w'=>210, 'h'=>299, 'head'=>[393,293,425,293,425,343,393,343,], 'body'=>[366,338,421,338,421,470,366,470,], 'legs'=>[366,460,371,460,416,460,421,460,472,592,359,592,], 'ex'=>1 },
+{ 'x'=>344, 'y'=>295, 'w'=>180, 'h'=>298, 'head'=>[402,295,434,295,434,345,402,345,], 'body'=>[374,340,429,340,429,471,374,471,], 'legs'=>[374,461,379,461,424,461,429,461,494,593,362,593,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>299, 'w'=>186, 'h'=>298, 'head'=>[417,299,450,299,450,349,417,349,], 'body'=>[388,344,443,344,443,475,388,475,], 'legs'=>[388,465,393,465,438,465,443,465,522,597,367,597,], 'ex'=>1 },
+{ 'x'=>367, 'y'=>300, 'w'=>184, 'h'=>297, 'head'=>[432,300,464,300,464,350,432,350,], 'body'=>[404,345,459,345,459,476,404,476,], 'legs'=>[404,466,409,466,454,466,459,466,538,597,370,597,], 'ex'=>1 },
+{ 'x'=>369, 'y'=>301, 'w'=>201, 'h'=>296, 'head'=>[448,301,480,301,480,351,448,351,], 'body'=>[421,346,476,346,476,476,421,476,], 'legs'=>[421,466,426,466,471,466,476,466,541,597,372,597,], 'ex'=>1 },
+{ 'x'=>382, 'y'=>300, 'w'=>229, 'h'=>297, 'head'=>[467,300,498,300,498,350,467,350,], 'body'=>[441,345,496,345,496,476,441,476,], 'legs'=>[441,466,446,466,491,466,496,466,547,597,385,597,], 'ex'=>1 },
+{ 'x'=>426, 'y'=>298, 'w'=>208, 'h'=>298, 'head'=>[494,298,526,298,526,348,494,348,], 'body'=>[463,343,518,343,518,474,463,474,], 'legs'=>[463,464,468,464,513,464,518,464,560,596,429,596,], 'ex'=>1 },
+{ 'x'=>450, 'y'=>296, 'w'=>199, 'h'=>301, 'head'=>[509,296,541,296,541,346,509,346,], 'body'=>[477,341,532,341,532,474,477,474,], 'legs'=>[477,464,482,464,527,464,532,464,573,597,458,597,], 'ex'=>1 },
+{ 'x'=>461, 'y'=>297, 'w'=>193, 'h'=>303, 'head'=>[517,297,549,297,549,347,517,347,], 'body'=>[486,342,541,342,541,476,486,476,], 'legs'=>[486,466,491,466,536,466,541,466,580,600,469,600,], 'ex'=>1 },
+{ 'x'=>464, 'y'=>302, 'w'=>193, 'h'=>301, 'head'=>[519,302,552,302,552,352,519,352,], 'body'=>[489,347,544,347,544,480,489,480,], 'legs'=>[489,470,494,470,539,470,544,470,580,603,468,603,], 'ex'=>1 },
+{ 'x'=>337, 'y'=>288, 'w'=>200, 'h'=>305, 'head'=>[397,288,428,288,428,338,397,338,], 'body'=>[368,333,423,333,423,468,368,468,], 'legs'=>[368,458,373,458,418,458,423,458,466,593,363,593,], 'ex'=>1 },
+{ 'x'=>330, 'y'=>288, 'w'=>220, 'h'=>304, 'head'=>[394,288,424,288,424,338,394,338,], 'body'=>[367,333,422,333,422,467,367,467,], 'legs'=>[367,457,372,457,417,457,422,457,464,592,362,592,], 'ex'=>1 },
+{ 'x'=>315, 'y'=>290, 'w'=>240, 'h'=>303, 'head'=>[389,290,418,290,418,340,389,340,], 'body'=>[366,335,421,335,421,469,366,469,], 'legs'=>[366,459,371,459,416,459,421,459,463,593,360,593,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>292, 'w'=>277, 'h'=>315, 'head'=>[367,292,390,292,390,342,367,342,], 'body'=>[365,337,420,337,420,477,365,477,], 'legs'=>[365,467,370,467,415,467,420,467,484,607,346,607,], 'ex'=>1 },
+{ 'x'=>331, 'y'=>295, 'w'=>221, 'h'=>305, 'head'=>[427,295,454,295,454,345,427,345,], 'body'=>[414,340,469,340,469,475,414,475,], 'legs'=>[414,465,419,465,464,465,469,465,540,600,371,600,], 'ex'=>1 },
+{ 'x'=>346, 'y'=>296, 'w'=>212, 'h'=>307, 'head'=>[444,296,473,296,473,346,444,346,], 'body'=>[435,341,490,341,490,477,435,477,], 'legs'=>[435,467,440,467,485,467,490,467,544,603,380,603,], 'ex'=>1 },
+{ 'x'=>377, 'y'=>295, 'w'=>192, 'h'=>306, 'head'=>[467,295,496,295,496,345,467,345,], 'body'=>[460,340,515,340,515,475,460,475,], 'legs'=>[460,465,465,465,510,465,515,465,555,601,407,601,], 'ex'=>1 },
+{ 'x'=>403, 'y'=>294, 'w'=>182, 'h'=>312, 'head'=>[492,294,522,294,522,344,492,344,], 'body'=>[488,339,543,339,543,477,488,477,], 'legs'=>[488,467,493,467,538,467,543,467,569,606,452,606,], 'ex'=>1 },
+{ 'x'=>338, 'y'=>293, 'w'=>140, 'h'=>291, 'head'=>[411,293,437,293,437,343,411,343,], 'body'=>[355,338,410,338,410,466,355,466,], 'legs'=>[355,456,360,456,405,456,410,456,431,584,344,584,], 'ex'=>1 },
+{ 'x'=>326, 'y'=>318, 'w'=>114, 'h'=>272, 'head'=>[380,318,418,318,418,368,380,368,], 'body'=>[342,363,397,363,397,481,342,481,], 'legs'=>[342,471,347,471,392,471,397,471,429,590,339,590,], 'ex'=>1 },
+{ 'x'=>316, 'y'=>332, 'w'=>121, 'h'=>261, 'head'=>[368,332,394,332,394,382,368,382,], 'body'=>[335,377,390,377,390,490,335,490,], 'legs'=>[335,480,340,480,385,480,390,480,426,593,334,593,], 'ex'=>1 },
+{ 'x'=>306, 'y'=>366, 'w'=>148, 'h'=>228, 'head'=>[344,366,378,366,378,416,344,416,], 'body'=>[323,411,378,411,378,507,323,507,], 'legs'=>[323,497,328,497,373,497,378,497,441,594,319,594,], 'ex'=>1 },
+{ 'x'=>293, 'y'=>396, 'w'=>161, 'h'=>212, 'head'=>[326,396,357,396,357,446,326,446,], 'body'=>[308,441,363,441,363,529,308,529,], 'legs'=>[308,519,313,519,358,519,363,519,420,608,304,608,], 'ex'=>1 },
+{ 'x'=>225, 'y'=>418, 'w'=>210, 'h'=>193, 'head'=>[281,418,309,418,309,468,281,468,], 'body'=>[266,463,321,463,321,542,266,542,], 'legs'=>[266,532,271,532,316,532,321,532,393,611,276,611,], 'ex'=>1 },
+{ 'x'=>172, 'y'=>436, 'w'=>235, 'h'=>172, 'head'=>[234,436,264,436,264,486,234,486,], 'body'=>[222,481,277,481,277,549,222,549,], 'legs'=>[222,539,227,539,272,539,277,539,371,608,240,608,], 'ex'=>1 },
+{ 'x'=>138, 'y'=>448, 'w'=>220, 'h'=>147, 'head'=>[191,448,226,448,226,498,191,498,], 'body'=>[184,493,239,493,239,549,184,549,], 'legs'=>[184,539,189,539,234,539,239,539,332,595,223,595,], 'ex'=>1 },
+{ 'x'=>119, 'y'=>463, 'w'=>217, 'h'=>130, 'head'=>[151,463,219,463,219,513,151,513,], 'body'=>[156,508,211,508,211,555,156,555,], 'legs'=>[156,545,161,545,206,545,211,545,307,593,188,593,], 'ex'=>1 },
+{ 'x'=>117, 'y'=>463, 'w'=>210, 'h'=>121, 'head'=>[214,463,290,463,290,513,214,513,], 'body'=>[155,508,210,508,210,551,155,551,], 'legs'=>[155,541,160,541,205,541,210,541,296,584,120,584,], 'ex'=>1 },
+{ 'x'=> 89, 'y'=>437, 'w'=>214, 'h'=>144, 'head'=>[212,437,273,437,273,487,212,487,], 'body'=>[150,482,205,482,205,536,150,536,], 'legs'=>[150,526,155,526,200,526,205,526,247,581, 96,581,], 'ex'=>1 },
+{ 'x'=> 83, 'y'=>417, 'w'=>192, 'h'=>156, 'head'=>[200,417,246,417,246,467,200,467,], 'body'=>[163,462,218,462,218,522,163,522,], 'legs'=>[163,512,168,512,213,512,218,512,229,573, 87,573,], 'ex'=>1 },
+{ 'x'=> 72, 'y'=>405, 'w'=>182, 'h'=>166, 'head'=>[187,405,220,405,220,455,187,455,], 'body'=>[151,450,206,450,206,515,151,515,], 'legs'=>[151,505,156,505,201,505,206,505,216,571, 82,571,], 'ex'=>1 },
+{ 'x'=> 67, 'y'=>390, 'w'=>172, 'h'=>182, 'head'=>[191,390,208,390,208,440,191,440,], 'body'=>[146,435,201,435,201,508,146,508,], 'legs'=>[146,498,151,498,196,498,201,498,214,572, 71,572,], 'ex'=>1 },
+{ 'x'=> 69, 'y'=>383, 'w'=>161, 'h'=>188, 'head'=>[196,383,201,383,201,433,196,433,], 'body'=>[152,428,207,428,207,504,152,504,], 'legs'=>[152,494,157,494,202,494,207,494,214,571, 73,571,], 'ex'=>1 },
+{ 'x'=> 71, 'y'=>385, 'w'=>170, 'h'=>184, 'head'=>[200,385,203,385,203,435,200,435,], 'body'=>[162,430,217,430,217,504,162,504,], 'legs'=>[162,494,167,494,212,494,217,494,216,569, 77,569,], 'ex'=>1 },
+{ 'x'=> 74, 'y'=>423, 'w'=>186, 'h'=>143, 'head'=>[186,423,224,423,224,473,186,473,], 'body'=>[141,468,196,468,196,522,141,522,], 'legs'=>[141,512,146,512,191,512,196,512,217,566, 81,566,], 'ex'=>1 },
+{ 'x'=> 78, 'y'=>448, 'w'=>200, 'h'=>118, 'head'=>[176,448,244,448,244,498,176,498,], 'body'=>[100,493,155,493,155,534,100,534,], 'legs'=>[100,524,105,524,150,524,155,524,222,566,118,566,], 'ex'=>1 },
+{ 'x'=> 99, 'y'=>455, 'w'=>215, 'h'=>112, 'head'=>[174,455,259,455,259,505,174,505,], 'body'=>[134,500,189,500,189,538,134,538,], 'legs'=>[134,528,139,528,184,528,189,528,237,567,134,567,], 'ex'=>1 },
+{ 'x'=>123, 'y'=>425, 'w'=>216, 'h'=>145, 'head'=>[167,425,181,425,181,475,167,475,], 'body'=>[174,470,229,470,229,525,174,525,], 'legs'=>[174,515,179,515,224,515,229,515,275,570,148,570,], 'ex'=>1 },
+{ 'x'=>149, 'y'=>386, 'w'=>204, 'h'=>185, 'head'=>[186,386,191,386,191,436,186,436,], 'body'=>[186,431,241,431,241,506,186,506,], 'legs'=>[186,496,191,496,236,496,241,496,338,571,164,571,], 'ex'=>1 },
+{ 'x'=>168, 'y'=>407, 'w'=>196, 'h'=>172, 'head'=>[230,407,243,407,243,457,230,457,], 'body'=>[191,452,246,452,246,520,191,520,], 'legs'=>[191,510,196,510,241,510,246,510,322,579,193,579,], 'ex'=>1 },
+{ 'x'=>188, 'y'=>391, 'w'=>190, 'h'=>188, 'head'=>[255,391,263,391,263,441,255,441,], 'body'=>[201,436,256,436,256,512,201,512,], 'legs'=>[201,502,206,502,251,502,256,502,371,579,215,579,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>377, 'w'=>179, 'h'=>205, 'head'=>[284,377,290,377,290,427,284,427,], 'body'=>[229,422,284,422,284,507,229,507,], 'legs'=>[229,497,234,497,279,497,284,497,380,582,224,582,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>395, 'w'=>167, 'h'=>189, 'head'=>[300,395,311,395,311,445,300,445,], 'body'=>[237,440,292,440,292,517,237,517,], 'legs'=>[237,507,242,507,287,507,292,507,387,584,235,584,], 'ex'=>1 },
+{ 'x'=>243, 'y'=>361, 'w'=>158, 'h'=>231, 'head'=>[371,361,375,361,375,411,371,411,], 'body'=>[309,406,364,406,364,504,309,504,], 'legs'=>[309,494,314,494,359,494,364,494,393,592,246,592,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>361, 'w'=>148, 'h'=>235, 'head'=>[381,361,385,361,385,411,381,411,], 'body'=>[315,406,370,406,370,506,315,506,], 'legs'=>[315,496,320,496,365,496,370,496,400,596,265,596,], 'ex'=>1 },
+{ 'x'=>272, 'y'=>356, 'w'=>133, 'h'=>241, 'head'=>[375,356,380,356,380,406,375,406,], 'body'=>[304,401,359,401,359,504,304,504,], 'legs'=>[304,494,309,494,354,494,359,494,401,597,283,597,], 'ex'=>1 },
+{ 'x'=>285, 'y'=>364, 'w'=>146, 'h'=>235, 'head'=>[357,364,387,364,387,414,357,414,], 'body'=>[316,409,371,409,371,509,316,509,], 'legs'=>[316,499,321,499,366,499,371,499,414,599,288,599,], 'ex'=>1 },
+{ 'x'=>286, 'y'=>365, 'w'=>165, 'h'=>234, 'head'=>[359,365,392,365,392,415,359,415,], 'body'=>[333,410,388,410,388,509,333,509,], 'legs'=>[333,499,338,499,383,499,388,499,431,599,289,599,], 'ex'=>1 },
+{ 'x'=>307, 'y'=>346, 'w'=>175, 'h'=>256, 'head'=>[375,346,403,346,403,396,375,396,], 'body'=>[356,391,411,391,411,501,356,501,], 'legs'=>[356,491,361,491,406,491,411,491,447,602,314,602,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>295, 'w'=>146, 'h'=>298, 'head'=>[401,295,431,295,431,345,401,345,], 'body'=>[378,340,433,340,433,471,378,471,], 'legs'=>[378,461,383,461,428,461,433,461,477,593,367,593,], 'ex'=>1 },
+{ 'x'=>369, 'y'=>294, 'w'=>128, 'h'=>298, 'head'=>[407,294,437,294,437,344,407,344,], 'body'=>[388,339,443,339,443,470,388,470,], 'legs'=>[388,460,393,460,438,460,443,460,487,592,372,592,], 'ex'=>1 },
+{ 'x'=>370, 'y'=>286, 'w'=>134, 'h'=>307, 'head'=>[419,286,444,286,444,336,419,336,], 'body'=>[394,331,449,331,449,467,394,467,], 'legs'=>[394,457,399,457,444,457,449,457,486,593,373,593,], 'ex'=>1 },
+{ 'x'=>371, 'y'=>289, 'w'=>140, 'h'=>303, 'head'=>[424,289,452,289,452,339,424,339,], 'body'=>[399,334,454,334,454,468,399,468,], 'legs'=>[399,458,404,458,449,458,454,458,487,592,374,592,], 'ex'=>1 },
+{ 'x'=>371, 'y'=>295, 'w'=>145, 'h'=>295, 'head'=>[434,295,466,295,466,345,434,345,], 'body'=>[404,340,459,340,459,470,404,470,], 'legs'=>[404,460,409,460,454,460,459,460,486,590,374,590,], 'ex'=>1 },
+{ 'x'=>371, 'y'=>309, 'w'=>151, 'h'=>296, 'head'=>[443,309,481,309,481,359,443,359,], 'body'=>[409,354,464,354,464,484,409,484,], 'legs'=>[409,474,414,474,459,474,464,474,487,605,374,605,], 'ex'=>1 },
+{ 'x'=>371, 'y'=>328, 'w'=>155, 'h'=>289, 'head'=>[447,328,493,328,493,378,447,378,], 'body'=>[410,373,465,373,465,500,410,500,], 'legs'=>[410,490,415,490,460,490,465,490,486,617,374,617,], 'ex'=>1 },
+{ 'x'=>370, 'y'=>342, 'w'=>160, 'h'=>265, 'head'=>[438,342,499,342,499,392,438,392,], 'body'=>[405,387,460,387,460,502,405,502,], 'legs'=>[405,492,410,492,455,492,460,492,488,607,373,607,], 'ex'=>1 },
+{ 'x'=>316, 'y'=>281, 'w'=>204, 'h'=>308, 'head'=>[375,281,400,281,400,331,375,331,], 'body'=>[364,326,419,326,419,462,364,462,], 'legs'=>[364,452,369,452,414,452,419,452,450,589,347,589,], 'ex'=>1 },
+{ 'x'=>346, 'y'=>273, 'w'=>137, 'h'=>318, 'head'=>[447,273,454,273,454,323,447,323,], 'body'=>[366,318,421,318,421,459,366,459,], 'legs'=>[366,449,371,449,416,449,421,449,457,591,357,591,], 'ex'=>1 },
+{ 'x'=>331, 'y'=>291, 'w'=>128, 'h'=>305, 'head'=>[423,291,429,291,429,341,423,341,], 'body'=>[352,336,407,336,407,471,352,471,], 'legs'=>[352,461,357,461,402,461,407,461,453,596,337,596,], 'ex'=>1 },
+{ 'x'=>309, 'y'=>269, 'w'=>140, 'h'=>333, 'head'=>[404,269,407,269,407,319,404,319,], 'body'=>[356,314,411,314,411,463,356,463,], 'legs'=>[356,453,361,453,406,453,411,453,445,602,312,602,], 'ex'=>1 },
+{ 'x'=>289, 'y'=>299, 'w'=>154, 'h'=>307, 'head'=>[369,299,374,299,374,349,369,349,], 'body'=>[337,344,392,344,392,480,337,480,], 'legs'=>[337,470,342,470,387,470,392,470,439,606,292,606,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>331, 'w'=>173, 'h'=>276, 'head'=>[341,331,347,331,347,381,341,381,], 'body'=>[311,376,366,376,366,496,311,496,], 'legs'=>[311,486,316,486,361,486,366,486,432,607,276,607,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>327, 'w'=>208, 'h'=>284, 'head'=>[310,327,313,327,313,377,310,377,], 'body'=>[283,372,338,372,338,496,283,496,], 'legs'=>[283,486,288,486,333,486,338,486,421,611,220,611,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>329, 'w'=>213, 'h'=>282, 'head'=>[300,329,304,329,304,379,300,379,], 'body'=>[266,374,321,374,321,497,266,497,], 'legs'=>[266,487,271,487,316,487,321,487,422,611,216,611,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>289, 'w'=>180, 'h'=>304, 'head'=>[397,289,426,289,426,339,397,339,], 'body'=>[374,334,429,334,429,468,374,468,], 'legs'=>[374,458,379,458,424,458,429,458,474,593,360,593,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>284, 'w'=>157, 'h'=>309, 'head'=>[404,284,428,284,428,334,404,334,], 'body'=>[379,329,434,329,434,466,379,466,], 'legs'=>[379,456,384,456,429,456,434,456,476,593,362,593,], 'ex'=>1 },
+{ 'x'=>361, 'y'=>259, 'w'=>137, 'h'=>333, 'head'=>[439,259,449,259,449,309,439,309,], 'body'=>[385,304,440,304,440,453,385,453,], 'legs'=>[385,443,390,443,435,443,440,443,478,592,364,592,], 'ex'=>1 },
+{ 'x'=>329, 'y'=>237, 'w'=>161, 'h'=>375, 'head'=>[406,237,413,237,413,287,406,287,], 'body'=>[387,282,442,282,442,452,387,452,], 'legs'=>[387,442,392,442,437,442,442,442,468,612,355,612,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>235, 'w'=>151, 'h'=>372, 'head'=>[402,235,409,235,409,285,402,285,], 'body'=>[396,280,451,280,451,448,396,448,], 'legs'=>[396,438,401,438,446,438,451,438,475,607,362,607,], 'ex'=>1 },
+{ 'x'=>339, 'y'=>234, 'w'=>161, 'h'=>366, 'head'=>[369,234,373,234,373,284,369,284,], 'body'=>[385,279,440,279,440,444,385,444,], 'legs'=>[385,434,390,434,435,434,440,434,472,600,358,600,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>234, 'w'=>139, 'h'=>364, 'head'=>[361,234,364,234,364,284,361,284,], 'body'=>[384,279,439,279,439,443,384,443,], 'legs'=>[384,433,389,433,434,433,439,433,473,598,358,598,], 'ex'=>1 },
+{ 'x'=>354, 'y'=>235, 'w'=>133, 'h'=>363, 'head'=>[375,235,380,235,380,285,375,285,], 'body'=>[383,280,438,280,438,444,383,444,], 'legs'=>[383,434,388,434,433,434,438,434,476,598,361,598,], 'ex'=>1 },
+{ 'x'=>360, 'y'=>288, 'w'=>172, 'h'=>301, 'head'=>[399,288,430,288,430,338,399,338,], 'body'=>[375,333,430,333,430,466,375,466,], 'legs'=>[375,456,380,456,425,456,430,456,480,589,365,589,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>292, 'w'=>132, 'h'=>296, 'head'=>[393,292,424,292,424,342,393,342,], 'body'=>[374,337,429,337,429,467,374,467,], 'legs'=>[374,457,379,457,424,457,429,457,478,588,355,588,], 'ex'=>1 },
+{ 'x'=>345, 'y'=>242, 'w'=>134, 'h'=>346, 'head'=>[437,242,440,242,440,292,437,292,], 'body'=>[380,287,435,287,435,442,380,442,], 'legs'=>[380,432,385,432,430,432,435,432,475,588,348,588,], 'ex'=>1 },
+{ 'x'=>345, 'y'=>245, 'w'=>133, 'h'=>347, 'head'=>[408,245,411,245,411,295,408,295,], 'body'=>[375,290,430,290,430,446,375,446,], 'legs'=>[375,436,380,436,425,436,430,436,474,592,348,592,], 'ex'=>1 },
+{ 'x'=>332, 'y'=>234, 'w'=>149, 'h'=>362, 'head'=>[387,234,390,234,390,284,387,284,], 'body'=>[367,279,422,279,422,442,367,442,], 'legs'=>[367,432,372,432,417,432,422,432,469,596,338,596,], 'ex'=>1 },
+{ 'x'=>353, 'y'=>262, 'w'=>166, 'h'=>326, 'head'=>[467,262,477,262,477,312,467,312,], 'body'=>[381,307,436,307,436,452,381,452,], 'legs'=>[381,442,386,442,431,442,436,442,473,588,356,588,], 'ex'=>1 },
+{ 'x'=>340, 'y'=>291, 'w'=>140, 'h'=>301, 'head'=>[438,291,452,291,452,341,438,341,], 'body'=>[372,336,427,336,427,469,372,469,], 'legs'=>[372,459,377,459,422,459,427,459,475,592,343,592,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>275, 'w'=>140, 'h'=>317, 'head'=>[458,275,461,275,461,325,458,325,], 'body'=>[388,320,443,320,443,461,388,461,], 'legs'=>[388,451,393,451,438,451,443,451,476,592,346,592,], 'ex'=>1 },
+{ 'x'=>345, 'y'=>292, 'w'=>141, 'h'=>308, 'head'=>[456,292,459,292,459,342,456,342,], 'body'=>[402,337,457,337,457,473,402,473,], 'legs'=>[402,463,407,463,452,463,457,463,482,600,348,600,], 'ex'=>1 },
+{ 'x'=>345, 'y'=>318, 'w'=>155, 'h'=>293, 'head'=>[470,318,474,318,474,368,470,368,], 'body'=>[403,363,458,363,458,492,403,492,], 'legs'=>[403,482,408,482,453,482,458,482,486,611,349,611,], 'ex'=>1 },
+{ 'x'=>344, 'y'=>323, 'w'=>165, 'h'=>287, 'head'=>[478,323,482,323,482,373,478,373,], 'body'=>[399,368,454,368,454,494,399,494,], 'legs'=>[399,484,404,484,449,484,454,484,486,610,349,610,], 'ex'=>1 },
+{ 'x'=>344, 'y'=>331, 'w'=>171, 'h'=>278, 'head'=>[481,331,485,331,485,381,481,381,], 'body'=>[393,376,448,376,448,497,393,497,], 'legs'=>[393,487,398,487,443,487,448,487,485,609,348,609,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>334, 'w'=>177, 'h'=>275, 'head'=>[485,334,490,334,490,384,485,384,], 'body'=>[390,379,445,379,445,499,390,499,], 'legs'=>[390,489,395,489,440,489,445,489,487,609,348,609,], 'ex'=>1 },
+{ 'x'=>342, 'y'=>324, 'w'=>163, 'h'=>307, 'head'=>[444,324,448,324,448,374,444,374,], 'body'=>[397,369,452,369,452,505,397,505,], 'legs'=>[397,495,402,495,447,495,452,495,501,631,345,631,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>324, 'w'=>168, 'h'=>308, 'head'=>[428,324,433,324,433,374,428,374,], 'body'=>[393,369,448,369,448,505,393,505,], 'legs'=>[393,495,398,495,443,495,448,495,507,632,346,632,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>359, 'w'=>165, 'h'=>269, 'head'=>[449,359,455,359,455,409,449,409,], 'body'=>[381,404,436,404,436,521,381,521,], 'legs'=>[381,511,386,511,431,511,436,511,504,628,346,628,], 'ex'=>1 },
+{ 'x'=>344, 'y'=>395, 'w'=>217, 'h'=>231, 'head'=>[396,395,428,395,428,445,396,445,], 'body'=>[373,440,428,440,428,538,373,538,], 'legs'=>[373,528,378,528,423,528,428,528,505,626,347,626,], 'ex'=>1 },
+{ 'x'=>344, 'y'=>395, 'w'=>207, 'h'=>230, 'head'=>[393,395,425,395,425,445,393,445,], 'body'=>[370,440,425,440,425,537,370,537,], 'legs'=>[370,527,375,527,420,527,425,527,503,625,347,625,], 'ex'=>0, 'hit'=>[461,481,586,450,586,472,457,574,] },
+{ 'x'=>349, 'y'=>264, 'w'=>172, 'h'=>329, 'head'=>[460,264,472,264,472,314,460,314,], 'body'=>[380,309,435,309,435,456,380,456,], 'legs'=>[380,446,385,446,430,446,435,446,468,593,352,593,], 'ex'=>1 },
+{ 'x'=>351, 'y'=>267, 'w'=>170, 'h'=>323, 'head'=>[452,267,466,267,466,317,452,317,], 'body'=>[378,312,433,312,433,456,378,456,], 'legs'=>[378,446,383,446,428,446,433,446,470,590,354,590,], 'ex'=>1 },
+{ 'x'=>349, 'y'=>274, 'w'=>174, 'h'=>317, 'head'=>[433,274,451,274,451,324,433,324,], 'body'=>[373,319,428,319,428,460,373,460,], 'legs'=>[373,450,378,450,423,450,428,450,470,591,352,591,], 'ex'=>1 },
+{ 'x'=>348, 'y'=>281, 'w'=>178, 'h'=>310, 'head'=>[415,281,437,281,437,331,415,331,], 'body'=>[367,326,422,326,422,463,367,463,], 'legs'=>[367,453,372,453,417,453,422,453,469,591,352,591,], 'ex'=>1 },
+{ 'x'=>339, 'y'=>286, 'w'=>189, 'h'=>304, 'head'=>[394,286,419,286,419,336,394,336,], 'body'=>[362,331,417,331,417,465,362,465,], 'legs'=>[362,455,367,455,412,455,417,455,465,590,349,590,], 'ex'=>1 },
+{ 'x'=>354, 'y'=>270, 'w'=>166, 'h'=>315, 'head'=>[447,270,465,270,465,320,447,320,], 'body'=>[375,315,430,315,430,455,375,455,], 'legs'=>[375,445,380,445,425,445,430,445,474,585,357,585,], 'ex'=>1 },
+{ 'x'=>355, 'y'=>271, 'w'=>124, 'h'=>314, 'head'=>[422,271,441,271,441,321,422,321,], 'body'=>[376,316,431,316,431,455,376,455,], 'legs'=>[376,445,381,445,426,445,431,445,475,585,358,585,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>290, 'w'=>124, 'h'=>295, 'head'=>[398,290,428,290,428,340,398,340,], 'body'=>[376,335,431,335,431,465,376,465,], 'legs'=>[376,455,381,455,426,455,431,455,476,585,359,585,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>292, 'w'=>127, 'h'=>293, 'head'=>[395,292,426,292,426,342,395,342,], 'body'=>[381,337,436,337,436,466,381,466,], 'legs'=>[381,456,386,456,431,456,436,456,476,585,359,585,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>294, 'w'=>123, 'h'=>292, 'head'=>[392,294,423,294,423,344,392,344,], 'body'=>[381,339,436,339,436,467,381,467,], 'legs'=>[381,457,386,457,431,457,436,457,475,586,359,586,], 'ex'=>1 },
+{ 'x'=>355, 'y'=>290, 'w'=>125, 'h'=>296, 'head'=>[393,290,428,290,428,340,393,340,], 'body'=>[382,335,437,335,437,465,382,465,], 'legs'=>[382,455,387,455,432,455,437,455,476,586,358,586,], 'ex'=>1 },
+{ 'x'=>346, 'y'=>259, 'w'=>168, 'h'=>328, 'head'=>[455,259,466,259,466,309,455,309,], 'body'=>[369,304,424,304,424,450,369,450,], 'legs'=>[369,440,374,440,419,440,424,440,473,587,354,587,], 'ex'=>1 },
+{ 'x'=>349, 'y'=>255, 'w'=>130, 'h'=>331, 'head'=>[444,255,450,255,450,305,444,305,], 'body'=>[372,300,427,300,427,448,372,448,], 'legs'=>[372,438,377,438,422,438,427,438,475,586,356,586,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>242, 'w'=>123, 'h'=>342, 'head'=>[413,242,423,242,423,292,413,292,], 'body'=>[386,287,441,287,441,440,386,440,], 'legs'=>[386,430,391,430,436,430,441,430,475,584,359,584,], 'ex'=>1 },
+{ 'x'=>357, 'y'=>269, 'w'=>149, 'h'=>316, 'head'=>[437,269,459,269,459,319,437,319,], 'body'=>[384,314,439,314,439,454,384,454,], 'legs'=>[384,444,389,444,434,444,439,444,478,585,360,585,], 'ex'=>1 },
+{ 'x'=>357, 'y'=>287, 'w'=>199, 'h'=>299, 'head'=>[400,287,431,287,431,337,400,337,], 'body'=>[383,332,438,332,438,464,383,464,], 'legs'=>[383,454,388,454,433,454,438,454,479,586,360,586,], 'ex'=>0, 'hit'=>[504,357,584,332,592,356,510,374,] },
+{ 'x'=>357, 'y'=>287, 'w'=>233, 'h'=>299, 'head'=>[399,287,432,287,432,337,399,337,], 'body'=>[383,332,438,332,438,464,383,464,], 'legs'=>[383,454,388,454,433,454,438,454,482,586,360,586,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>262, 'w'=>148, 'h'=>325, 'head'=>[443,262,457,262,457,312,443,312,], 'body'=>[378,307,433,307,433,452,378,452,], 'legs'=>[378,442,383,442,428,442,433,442,477,587,359,587,], 'ex'=>1 },
+{ 'x'=>358, 'y'=>251, 'w'=>129, 'h'=>336, 'head'=>[455,251,460,251,460,301,455,301,], 'body'=>[387,296,442,296,442,446,387,446,], 'legs'=>[387,436,392,436,437,436,442,436,479,587,361,587,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>286, 'w'=>125, 'h'=>299, 'head'=>[404,286,432,286,432,336,404,336,], 'body'=>[390,331,445,331,445,463,390,463,], 'legs'=>[390,453,395,453,440,453,445,453,479,585,362,585,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>273, 'w'=>190, 'h'=>315, 'head'=>[406,273,433,273,433,323,406,323,], 'body'=>[399,318,454,318,454,458,399,458,], 'legs'=>[399,448,404,448,449,448,454,448,480,588,362,588,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>272, 'w'=>212, 'h'=>316, 'head'=>[391,272,419,272,419,322,391,322,], 'body'=>[400,317,455,317,455,457,400,457,], 'legs'=>[400,447,405,447,450,447,455,447,479,588,362,588,], 'ex'=>0, 'hit'=>[515,329,599,368,586,380,505,348,] },
+{ 'x'=>338, 'y'=>277, 'w'=>168, 'h'=>316, 'head'=>[437,277,453,277,453,327,437,327,], 'body'=>[375,322,430,322,430,462,375,462,], 'legs'=>[375,452,380,452,425,452,430,452,462,593,341,593,], 'ex'=>1 },
+{ 'x'=>348, 'y'=>273, 'w'=>158, 'h'=>320, 'head'=>[447,273,461,273,461,323,447,323,], 'body'=>[385,318,440,318,440,460,385,460,], 'legs'=>[385,450,390,450,435,450,440,450,467,593,358,593,], 'ex'=>1 },
+{ 'x'=>361, 'y'=>270, 'w'=>148, 'h'=>323, 'head'=>[455,270,469,270,469,320,455,320,], 'body'=>[395,315,450,315,450,459,395,459,], 'legs'=>[395,449,400,449,445,449,450,449,477,593,401,593,], 'ex'=>1 },
+{ 'x'=>363, 'y'=>268, 'w'=>159, 'h'=>325, 'head'=>[454,268,468,268,468,318,454,318,], 'body'=>[400,313,455,313,455,458,400,458,], 'legs'=>[400,448,405,448,450,448,455,448,471,593,420,593,], 'ex'=>1 },
+{ 'x'=>368, 'y'=>267, 'w'=>177, 'h'=>325, 'head'=>[458,267,470,267,470,317,458,317,], 'body'=>[405,312,460,312,460,457,405,457,], 'legs'=>[405,447,410,447,455,447,460,447,469,592,436,592,], 'ex'=>1 },
+{ 'x'=>370, 'y'=>267, 'w'=>205, 'h'=>326, 'head'=>[465,267,475,267,475,317,465,317,], 'body'=>[407,312,462,312,462,457,407,457,], 'legs'=>[407,447,412,447,457,447,462,447,474,593,439,593,], 'ex'=>1 },
+{ 'x'=>372, 'y'=>269, 'w'=>220, 'h'=>326, 'head'=>[473,269,480,269,480,319,473,319,], 'body'=>[412,314,467,314,467,459,412,459,], 'legs'=>[412,449,417,449,462,449,467,449,490,595,440,595,], 'ex'=>0, 'hit'=>[532,410,586,382,585,416,537,424,] },
+{ 'x'=>344, 'y'=>275, 'w'=>165, 'h'=>312, 'head'=>[445,275,461,275,461,325,445,325,], 'body'=>[382,320,437,320,437,458,382,458,], 'legs'=>[382,448,387,448,432,448,437,448,474,587,347,587,], 'ex'=>1 },
+{ 'x'=>347, 'y'=>276, 'w'=>151, 'h'=>315, 'head'=>[445,276,462,276,462,326,445,326,], 'body'=>[400,321,455,321,455,461,400,461,], 'legs'=>[400,451,405,451,450,451,455,451,477,591,350,591,], 'ex'=>1 },
+{ 'x'=>363, 'y'=>274, 'w'=>140, 'h'=>315, 'head'=>[455,274,471,274,471,324,455,324,], 'body'=>[414,319,469,319,469,459,414,459,], 'legs'=>[414,449,419,449,464,449,469,449,492,589,406,589,], 'ex'=>1 },
+{ 'x'=>363, 'y'=>278, 'w'=>160, 'h'=>312, 'head'=>[454,278,473,278,473,328,454,328,], 'body'=>[416,323,471,323,471,461,416,461,], 'legs'=>[416,451,421,451,466,451,471,451,500,590,420,590,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>292, 'w'=>235, 'h'=>301, 'head'=>[439,292,466,292,466,342,439,342,], 'body'=>[416,337,471,337,471,470,416,470,], 'legs'=>[416,460,421,460,466,460,471,460,578,593,428,593,], 'ex'=>1 },
+{ 'x'=>355, 'y'=>296, 'w'=>256, 'h'=>295, 'head'=>[433,296,461,296,461,346,433,346,], 'body'=>[417,341,472,341,472,471,417,471,], 'legs'=>[417,461,422,461,467,461,472,461,493,591,434,591,], 'ex'=>0, 'hit'=>[566,470,611,474,592,510,547,487,] },
+{ 'x'=>344, 'y'=>283, 'w'=>177, 'h'=>310, 'head'=>[435,283,458,283,458,333,435,333,], 'body'=>[381,328,436,328,436,465,381,465,], 'legs'=>[381,455,386,455,431,455,436,455,489,593,347,593,], 'ex'=>1 },
+{ 'x'=>325, 'y'=>306, 'w'=>187, 'h'=>291, 'head'=>[406,306,438,306,438,356,406,356,], 'body'=>[382,351,437,351,437,479,382,479,], 'legs'=>[382,469,387,469,432,469,437,469,484,597,342,597,], 'ex'=>1 },
+{ 'x'=>346, 'y'=>317, 'w'=>147, 'h'=>280, 'head'=>[418,317,451,317,451,367,418,367,], 'body'=>[393,362,448,362,448,484,393,484,], 'legs'=>[393,474,398,474,443,474,448,474,489,597,349,597,], 'ex'=>1 },
+{ 'x'=>345, 'y'=>332, 'w'=>157, 'h'=>265, 'head'=>[422,332,457,332,457,382,422,382,], 'body'=>[407,377,462,377,462,492,407,492,], 'legs'=>[407,482,412,482,457,482,462,482,494,597,348,597,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>350, 'w'=>217, 'h'=>247, 'head'=>[425,350,460,350,460,400,425,400,], 'body'=>[413,395,468,395,468,501,413,501,], 'legs'=>[413,491,418,491,463,491,468,491,502,597,346,597,], 'ex'=>1 },
+{ 'x'=>347, 'y'=>365, 'w'=>244, 'h'=>232, 'head'=>[431,365,466,365,466,415,431,415,], 'body'=>[411,410,466,410,466,508,411,508,], 'legs'=>[411,498,416,498,461,498,466,498,511,597,350,597,], 'ex'=>1 },
+{ 'x'=>353, 'y'=>389, 'w'=>218, 'h'=>226, 'head'=>[438,389,473,389,473,439,438,439,], 'body'=>[419,434,474,434,474,529,419,529,], 'legs'=>[419,519,424,519,469,519,474,519,513,615,356,615,], 'ex'=>0, 'hit'=>[531,473,591,486,592,505,533,488,] },
+{ 'x'=>332, 'y'=>273, 'w'=>165, 'h'=>312, 'head'=>[424,273,445,273,445,323,424,323,], 'body'=>[377,318,432,318,432,456,377,456,], 'legs'=>[377,446,382,446,427,446,432,446,473,585,335,585,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>271, 'w'=>149, 'h'=>315, 'head'=>[440,271,460,271,460,321,440,321,], 'body'=>[394,316,449,316,449,456,394,456,], 'legs'=>[394,446,399,446,444,446,449,446,480,586,359,586,], 'ex'=>1 },
+{ 'x'=>366, 'y'=>271, 'w'=>154, 'h'=>315, 'head'=>[450,271,469,271,469,321,450,321,], 'body'=>[408,316,463,316,463,456,408,456,], 'legs'=>[408,446,413,446,458,446,463,446,491,586,421,586,], 'ex'=>1 },
+{ 'x'=>370, 'y'=>276, 'w'=>184, 'h'=>310, 'head'=>[447,276,469,276,469,326,447,326,], 'body'=>[411,321,466,321,466,458,411,458,], 'legs'=>[411,448,416,448,461,448,466,448,487,586,430,586,], 'ex'=>1 },
+{ 'x'=>377, 'y'=>281, 'w'=>227, 'h'=>308, 'head'=>[449,281,472,281,472,331,449,331,], 'body'=>[416,326,471,326,471,462,416,462,], 'legs'=>[416,452,421,452,466,452,471,452,495,589,440,589,], 'ex'=>1 },
+{ 'x'=>387, 'y'=>278, 'w'=>231, 'h'=>309, 'head'=>[457,278,477,278,477,328,457,328,], 'body'=>[422,323,477,323,477,460,422,460,], 'legs'=>[422,450,427,450,472,450,477,450,510,587,448,587,], 'ex'=>0, 'hit'=>[570,414,620,416,600,444,563,432,] },
+{ 'x'=>332, 'y'=>285, 'w'=>171, 'h'=>308, 'head'=>[418,285,443,285,443,335,418,335,], 'body'=>[370,330,425,330,425,466,370,466,], 'legs'=>[370,456,375,456,420,456,425,456,478,593,348,593,], 'ex'=>1 },
+{ 'x'=>342, 'y'=>273, 'w'=>142, 'h'=>318, 'head'=>[431,273,446,273,446,323,431,323,], 'body'=>[395,318,450,318,450,459,395,459,], 'legs'=>[395,449,400,449,445,449,450,449,480,591,351,591,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>289, 'w'=>133, 'h'=>296, 'head'=>[418,289,450,289,450,339,418,339,], 'body'=>[407,334,462,334,462,464,407,464,], 'legs'=>[407,454,412,454,457,454,462,454,485,585,376,585,], 'ex'=>1 },
+{ 'x'=>377, 'y'=>264, 'w'=>147, 'h'=>322, 'head'=>[434,264,443,264,443,314,434,314,], 'body'=>[422,309,477,309,477,452,422,452,], 'legs'=>[422,442,427,442,472,442,477,442,495,586,427,586,], 'ex'=>1 },
+{ 'x'=>398, 'y'=>263, 'w'=>172, 'h'=>324, 'head'=>[441,263,449,263,449,313,441,313,], 'body'=>[434,308,489,308,489,452,434,452,], 'legs'=>[434,442,439,442,484,442,489,442,519,587,447,587,], 'ex'=>0, 'hit'=>[509,412,534,411,539,482,500,474,] },
+{ 'x'=>424, 'y'=>268, 'w'=>170, 'h'=>317, 'head'=>[459,268,471,268,471,318,459,318,], 'body'=>[451,313,506,313,506,454,451,454,], 'legs'=>[451,444,456,444,501,444,506,444,526,585,474,585,], 'ex'=>0, 'hit'=>[533,365,562,367,569,436,540,443,] },
+{ 'x'=>326, 'y'=>286, 'w'=>193, 'h'=>307, 'head'=>[383,286,418,286,418,336,383,336,], 'body'=>[372,331,427,331,427,467,372,467,], 'legs'=>[372,457,377,457,422,457,427,457,474,593,344,593,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>286, 'w'=>160, 'h'=>308, 'head'=>[404,286,440,286,440,336,404,336,], 'body'=>[386,331,441,331,441,467,386,467,], 'legs'=>[386,457,391,457,436,457,441,457,483,594,349,594,], 'ex'=>1 },
+{ 'x'=>347, 'y'=>288, 'w'=>147, 'h'=>305, 'head'=>[426,288,466,288,466,338,426,338,], 'body'=>[396,333,451,333,451,468,396,468,], 'legs'=>[396,458,401,458,446,458,451,458,490,593,350,593,], 'ex'=>1 },
+{ 'x'=>350, 'y'=>293, 'w'=>165, 'h'=>296, 'head'=>[446,293,491,293,491,343,446,343,], 'body'=>[402,338,457,338,457,468,402,468,], 'legs'=>[402,458,407,458,452,458,457,458,487,589,353,589,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>311, 'w'=>182, 'h'=>277, 'head'=>[451,311,512,311,512,361,451,361,], 'body'=>[406,356,461,356,461,477,406,477,], 'legs'=>[406,467,411,467,456,467,461,467,483,588,359,588,], 'ex'=>0, 'hit'=>[492,325,529,327,533,373,507,373,] },
+{ 'x'=>354, 'y'=>335, 'w'=>204, 'h'=>252, 'head'=>[423,335,506,335,506,385,423,385,], 'body'=>[398,380,453,380,453,488,398,488,], 'legs'=>[398,478,403,478,448,478,453,478,481,587,357,587,], 'ex'=>0, 'hit'=>[505,358,540,357,544,403,500,396,] },
+{ 'x'=>354, 'y'=>328, 'w'=>207, 'h'=>259, 'head'=>[423,328,467,328,467,378,423,378,], 'body'=>[405,373,460,373,460,485,405,485,], 'legs'=>[405,475,410,475,455,475,460,475,484,587,357,587,], 'ex'=>1 },
+{ 'x'=>350, 'y'=>280, 'w'=>184, 'h'=>305, 'head'=>[403,280,434,280,434,330,403,330,], 'body'=>[374,325,429,325,429,460,374,460,], 'legs'=>[374,450,379,450,424,450,429,450,473,585,353,585,], 'ex'=>1 },
+{ 'x'=>332, 'y'=>276, 'w'=>197, 'h'=>312, 'head'=>[404,276,431,276,431,326,404,326,], 'body'=>[367,321,422,321,422,459,367,459,], 'legs'=>[367,449,372,449,417,449,422,449,467,588,347,588,], 'ex'=>1 },
+{ 'x'=>314, 'y'=>250, 'w'=>205, 'h'=>339, 'head'=>[457,250,466,250,466,300,457,300,], 'body'=>[363,295,418,295,418,447,363,447,], 'legs'=>[363,437,368,437,413,437,418,437,462,589,340,589,], 'ex'=>1 },
+{ 'x'=>299, 'y'=>221, 'w'=>199, 'h'=>368, 'head'=>[445,221,451,221,451,271,445,271,], 'body'=>[369,266,424,266,424,432,369,432,], 'legs'=>[369,422,374,422,419,422,424,422,463,589,331,589,], 'ex'=>1 },
+{ 'x'=>290, 'y'=>236, 'w'=>181, 'h'=>362, 'head'=>[363,236,368,236,368,286,363,286,], 'body'=>[357,281,412,281,412,444,357,444,], 'legs'=>[357,434,362,434,407,434,412,434,462,598,317,598,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>272, 'w'=>184, 'h'=>347, 'head'=>[303,272,312,272,312,322,303,322,], 'body'=>[349,317,404,317,404,473,349,473,], 'legs'=>[349,463,354,463,399,463,404,463,457,619,317,619,], 'ex'=>1 },
+{ 'x'=>204, 'y'=>295, 'w'=>238, 'h'=>326, 'head'=>[278,295,294,295,294,345,278,345,], 'body'=>[327,340,382,340,382,485,327,485,], 'legs'=>[327,475,332,475,377,475,382,475,438,621,306,621,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>315, 'w'=>213, 'h'=>307, 'head'=>[339,315,362,315,362,365,339,365,], 'body'=>[349,360,404,360,404,496,349,496,], 'legs'=>[349,486,354,486,399,486,404,486,460,622,324,622,], 'ex'=>1 },
+{ 'x'=>321, 'y'=>326, 'w'=>242, 'h'=>296, 'head'=>[368,326,396,326,396,376,368,376,], 'body'=>[362,371,417,371,417,501,362,501,], 'legs'=>[362,491,367,491,412,491,417,491,475,622,341,622,], 'ex'=>1 },
+{ 'x'=>329, 'y'=>331, 'w'=>246, 'h'=>291, 'head'=>[372,331,402,331,402,381,372,381,], 'body'=>[365,376,420,376,420,504,365,504,], 'legs'=>[365,494,370,494,415,494,420,494,475,622,341,622,], 'ex'=>0, 'hit'=>[520,408,569,401,573,419,520,418,] },
+{ 'x'=>341, 'y'=>273, 'w'=>177, 'h'=>329, 'head'=>[434,273,455,273,455,323,434,323,], 'body'=>[370,318,425,318,425,465,370,465,], 'legs'=>[370,455,375,455,420,455,425,455,467,602,344,602,], 'ex'=>1 },
+{ 'x'=>342, 'y'=>275, 'w'=>147, 'h'=>325, 'head'=>[422,275,444,275,444,325,422,325,], 'body'=>[369,320,424,320,424,465,369,465,], 'legs'=>[369,455,374,455,419,455,424,455,468,600,345,600,], 'ex'=>1 },
+{ 'x'=>341, 'y'=>291, 'w'=>130, 'h'=>310, 'head'=>[392,291,425,291,425,341,392,341,], 'body'=>[361,336,416,336,416,473,361,473,], 'legs'=>[361,463,366,463,411,463,416,463,467,601,345,601,], 'ex'=>1 },
+{ 'x'=>338, 'y'=>297, 'w'=>132, 'h'=>317, 'head'=>[388,297,421,297,421,347,388,347,], 'body'=>[358,342,413,342,413,483,358,483,], 'legs'=>[358,473,363,473,408,473,413,473,466,614,344,614,], 'ex'=>1 },
+{ 'x'=>321, 'y'=>297, 'w'=>144, 'h'=>319, 'head'=>[377,297,409,297,409,347,377,347,], 'body'=>[349,342,404,342,404,484,349,484,], 'legs'=>[349,474,354,474,399,474,404,474,461,616,338,616,], 'ex'=>1 },
+{ 'x'=>315, 'y'=>298, 'w'=>147, 'h'=>323, 'head'=>[371,298,403,298,403,348,371,348,], 'body'=>[345,343,400,343,400,487,345,487,], 'legs'=>[345,477,350,477,395,477,400,477,458,621,336,621,], 'ex'=>1 },
+{ 'x'=>329, 'y'=>298, 'w'=>136, 'h'=>322, 'head'=>[376,298,408,298,408,348,376,348,], 'body'=>[351,343,406,343,406,486,351,486,], 'legs'=>[351,476,356,476,401,476,406,476,461,620,340,620,], 'ex'=>1 },
+{ 'x'=>341, 'y'=>300, 'w'=>128, 'h'=>322, 'head'=>[381,300,412,300,412,350,381,350,], 'body'=>[364,345,419,345,419,488,364,488,], 'legs'=>[364,478,369,478,414,478,419,478,465,622,344,622,], 'ex'=>1 },
+{ 'x'=>341, 'y'=>301, 'w'=>156, 'h'=>320, 'head'=>[382,301,412,301,412,351,382,351,], 'body'=>[369,346,424,346,424,488,369,488,], 'legs'=>[369,478,374,478,419,478,424,478,467,621,344,621,], 'ex'=>1 },
+{ 'x'=>344, 'y'=>298, 'w'=>182, 'h'=>317, 'head'=>[387,298,418,298,418,348,387,348,], 'body'=>[373,343,428,343,428,484,373,484,], 'legs'=>[373,474,378,474,423,474,428,474,468,615,347,615,], 'ex'=>1 },
+{ 'x'=>343, 'y'=>301, 'w'=>196, 'h'=>312, 'head'=>[397,301,429,301,429,351,397,351,], 'body'=>[380,346,435,346,435,484,380,484,], 'legs'=>[380,474,385,474,430,474,435,474,468,613,346,613,], 'ex'=>0, 'hit'=>[534,357,544,357,543,369,534,367,] },
+{ 'x'=>306, 'y'=>287, 'w'=>231, 'h'=>306, 'head'=>[383,287,414,287,414,337,383,337,], 'body'=>[355,332,410,332,410,467,355,467,], 'legs'=>[355,457,360,457,405,457,410,457,462,593,349,593,], 'ex'=>1 },
+{ 'x'=>287, 'y'=>287, 'w'=>242, 'h'=>305, 'head'=>[376,287,407,287,407,337,376,337,], 'body'=>[351,332,406,332,406,467,351,467,], 'legs'=>[351,457,356,457,401,457,406,457,457,592,342,592,], 'ex'=>1 },
+{ 'x'=>275, 'y'=>288, 'w'=>244, 'h'=>304, 'head'=>[371,288,403,288,403,338,371,338,], 'body'=>[346,333,401,333,401,467,346,467,], 'legs'=>[346,457,351,457,396,457,401,457,452,592,337,592,], 'ex'=>1 },
+{ 'x'=>281, 'y'=>290, 'w'=>228, 'h'=>304, 'head'=>[373,290,405,290,405,340,373,340,], 'body'=>[350,335,405,335,405,469,350,469,], 'legs'=>[350,459,355,459,400,459,405,459,456,594,339,594,], 'ex'=>1 },
+{ 'x'=>351, 'y'=>291, 'w'=>150, 'h'=>303, 'head'=>[400,291,432,291,432,341,400,341,], 'body'=>[373,336,428,336,428,470,373,470,], 'legs'=>[373,460,378,460,423,460,428,460,481,594,360,594,], 'ex'=>0, 'hit'=>[503,289,515,293,495,336,481,327,] },
+{ 'x'=>360, 'y'=>269, 'w'=>129, 'h'=>326, 'head'=>[423,269,445,269,445,319,423,319,], 'body'=>[387,314,442,314,442,459,387,459,], 'legs'=>[387,449,392,449,437,449,442,449,481,595,363,595,], 'ex'=>0, 'hit'=>[441,231,453,231,461,270,438,277,] },
+{ 'x'=>359, 'y'=>237, 'w'=>153, 'h'=>364, 'head'=>[406,237,416,237,416,287,406,287,], 'body'=>[397,282,452,282,452,446,397,446,], 'legs'=>[397,436,402,436,447,436,452,436,479,601,363,601,], 'ex'=>1 },
+{ 'x'=>301, 'y'=>281, 'w'=>233, 'h'=>306, 'head'=>[382,281,414,281,414,331,382,331,], 'body'=>[355,326,410,326,410,461,355,461,], 'legs'=>[355,451,360,451,405,451,410,451,460,587,341,587,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>287, 'w'=>253, 'h'=>308, 'head'=>[350,287,379,287,379,337,350,337,], 'body'=>[336,332,391,332,391,468,336,468,], 'legs'=>[336,458,341,458,386,458,391,458,444,595,325,595,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>325, 'w'=>255, 'h'=>271, 'head'=>[363,325,402,325,402,375,363,375,], 'body'=>[337,370,392,370,392,488,337,488,], 'legs'=>[337,478,342,478,387,478,392,478,450,596,323,596,], 'ex'=>1 },
+{ 'x'=>285, 'y'=>357, 'w'=>236, 'h'=>241, 'head'=>[384,357,424,357,424,407,384,407,], 'body'=>[364,402,419,402,419,505,364,505,], 'legs'=>[364,495,369,495,414,495,419,495,479,598,340,598,], 'ex'=>1 },
+{ 'x'=>341, 'y'=>368, 'w'=>247, 'h'=>235, 'head'=>[411,368,448,368,448,418,411,418,], 'body'=>[387,413,442,413,442,513,387,513,], 'legs'=>[387,503,392,503,437,503,442,503,506,603,358,603,], 'ex'=>1 },
+{ 'x'=>361, 'y'=>374, 'w'=>220, 'h'=>231, 'head'=>[423,374,458,374,458,424,423,424,], 'body'=>[408,419,463,419,463,517,408,517,], 'legs'=>[408,507,413,507,458,507,463,507,514,605,364,605,], 'ex'=>1 },
+{ 'x'=>365, 'y'=>376, 'w'=>241, 'h'=>228, 'head'=>[429,376,461,376,461,426,429,426,], 'body'=>[404,421,459,421,459,517,404,517,], 'legs'=>[404,507,409,507,454,507,459,507,517,604,368,604,], 'ex'=>1 },
+{ 'x'=>367, 'y'=>376, 'w'=>207, 'h'=>229, 'head'=>[432,376,463,376,463,426,432,426,], 'body'=>[409,421,464,421,464,518,409,518,], 'legs'=>[409,508,414,508,459,508,464,508,518,605,370,605,], 'ex'=>1 },
+{ 'x'=>367, 'y'=>335, 'w'=>164, 'h'=>270, 'head'=>[497,335,507,335,507,385,497,385,], 'body'=>[424,380,479,380,479,497,424,497,], 'legs'=>[424,487,429,487,474,487,479,487,525,605,370,605,], 'ex'=>1 },
+{ 'x'=>368, 'y'=>315, 'w'=>163, 'h'=>290, 'head'=>[457,315,466,315,466,365,457,365,], 'body'=>[432,360,487,360,487,487,432,487,], 'legs'=>[432,477,437,477,482,477,487,477,525,605,371,605,], 'ex'=>1 },
+{ 'x'=>369, 'y'=>349, 'w'=>184, 'h'=>256, 'head'=>[414,349,448,349,448,399,414,399,], 'body'=>[426,394,481,394,481,504,426,504,], 'legs'=>[426,494,431,494,476,494,481,494,527,605,372,605,], 'ex'=>1 },
+{ 'x'=>369, 'y'=>371, 'w'=>172, 'h'=>233, 'head'=>[413,371,458,371,458,421,413,421,], 'body'=>[425,416,480,416,480,515,425,515,], 'legs'=>[425,505,430,505,475,505,480,505,529,604,372,604,], 'ex'=>1 },
+{ 'x'=>370, 'y'=>374, 'w'=>178, 'h'=>230, 'head'=>[420,374,457,374,457,424,420,424,], 'body'=>[425,419,480,419,480,516,425,516,], 'legs'=>[425,506,430,506,475,506,480,506,535,604,373,604,], 'ex'=>1 },
+{ 'x'=>368, 'y'=>366, 'w'=>176, 'h'=>240, 'head'=>[433,366,455,366,455,416,433,416,], 'body'=>[424,411,479,411,479,513,424,513,], 'legs'=>[424,503,429,503,474,503,479,503,536,606,371,606,], 'ex'=>1 },
+{ 'x'=>315, 'y'=>369, 'w'=>201, 'h'=>233, 'head'=>[397,369,428,369,428,419,397,419,], 'body'=>[398,414,453,414,453,513,398,513,], 'legs'=>[398,503,403,503,448,503,453,503,507,602,352,602,], 'ex'=>1 },
+{ 'x'=>341, 'y'=>358, 'w'=>194, 'h'=>240, 'head'=>[408,358,439,358,439,408,408,408,], 'body'=>[403,403,458,403,458,505,403,505,], 'legs'=>[403,495,408,495,453,495,458,495,513,598,361,598,], 'ex'=>1 },
+{ 'x'=>316, 'y'=>345, 'w'=>213, 'h'=>253, 'head'=>[401,345,430,345,430,395,401,395,], 'body'=>[395,390,450,390,450,499,395,499,], 'legs'=>[395,489,400,489,445,489,450,489,503,598,350,598,], 'ex'=>1 },
+{ 'x'=>342, 'y'=>319, 'w'=>178, 'h'=>277, 'head'=>[397,319,417,319,417,369,397,369,], 'body'=>[405,364,460,364,460,485,405,485,], 'legs'=>[405,475,410,475,455,475,460,475,510,596,358,596,], 'ex'=>1 },
+{ 'x'=>362, 'y'=>270, 'w'=>158, 'h'=>323, 'head'=>[403,270,407,270,407,320,403,320,], 'body'=>[416,315,471,315,471,459,416,459,], 'legs'=>[416,449,421,449,466,449,471,449,516,593,365,593,], 'ex'=>1 },
+{ 'x'=>363, 'y'=>252, 'w'=>146, 'h'=>338, 'head'=>[465,252,469,252,469,302,465,302,], 'body'=>[416,297,471,297,471,448,416,448,], 'legs'=>[416,438,421,438,466,438,471,438,505,590,366,590,], 'ex'=>1 },
+{ 'x'=>363, 'y'=>286, 'w'=>191, 'h'=>304, 'head'=>[428,286,456,286,456,336,428,336,], 'body'=>[399,331,454,331,454,465,399,465,], 'legs'=>[399,455,404,455,449,455,454,455,496,590,366,590,], 'ex'=>1 },
+{ 'x'=>363, 'y'=>281, 'w'=>229, 'h'=>310, 'head'=>[422,281,452,281,452,331,422,331,], 'body'=>[398,326,453,326,453,463,398,463,], 'legs'=>[398,453,403,453,448,453,453,453,490,591,366,591,], 'ex'=>1 },
+{ 'x'=>332, 'y'=>293, 'w'=>199, 'h'=>300, 'head'=>[388,293,420,293,420,343,388,343,], 'body'=>[359,338,414,338,414,470,359,470,], 'legs'=>[359,460,364,460,409,460,414,460,467,593,348,593,], 'ex'=>1 },
+{ 'x'=>317, 'y'=>293, 'w'=>190, 'h'=>300, 'head'=>[383,293,415,293,415,343,383,343,], 'body'=>[356,338,411,338,411,470,356,470,], 'legs'=>[356,460,361,460,406,460,411,460,462,593,343,593,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>277, 'w'=>156, 'h'=>316, 'head'=>[433,277,452,277,452,327,433,327,], 'body'=>[378,322,433,322,433,462,378,462,], 'legs'=>[378,452,383,452,428,452,433,452,473,593,355,593,], 'ex'=>1 },
+{ 'x'=>351, 'y'=>293, 'w'=>131, 'h'=>298, 'head'=>[401,293,432,293,432,343,401,343,], 'body'=>[376,338,431,338,431,469,376,469,], 'legs'=>[376,459,381,459,426,459,431,459,472,591,354,591,], 'ex'=>1 },
+{ 'x'=>349, 'y'=>241, 'w'=>129, 'h'=>355, 'head'=>[427,241,431,241,431,291,427,291,], 'body'=>[389,286,444,286,444,446,389,446,], 'legs'=>[389,436,394,436,439,436,444,436,471,596,354,596,], 'ex'=>1 },
+{ 'x'=>334, 'y'=>237, 'w'=>144, 'h'=>355, 'head'=>[391,237,395,237,395,287,391,287,], 'body'=>[383,282,438,282,438,442,383,442,], 'legs'=>[383,432,388,432,433,432,438,432,467,592,347,592,], 'ex'=>1 },
+{ 'x'=>330, 'y'=>277, 'w'=>168, 'h'=>314, 'head'=>[371,277,391,277,391,327,371,327,], 'body'=>[372,322,427,322,427,461,372,461,], 'legs'=>[372,451,377,451,422,451,427,451,465,591,347,591,], 'ex'=>0, 'hit'=>[455,390,488,412,493,424,478,422,] },
+{ 'x'=>316, 'y'=>292, 'w'=>177, 'h'=>299, 'head'=>[385,292,415,292,415,342,385,342,], 'body'=>[361,337,416,337,416,469,361,469,], 'legs'=>[361,459,366,459,411,459,416,459,461,591,341,591,], 'ex'=>0, 'hit'=>[475,356,503,358,503,372,475,366,] },
+{ 'x'=>349, 'y'=>292, 'w'=>159, 'h'=>298, 'head'=>[398,292,429,292,429,342,398,342,], 'body'=>[372,337,427,337,427,468,372,468,], 'legs'=>[372,458,377,458,422,458,427,458,470,590,352,590,], 'ex'=>0, 'hit'=>[504,288,523,278,514,298,499,305,] },
+{ 'x'=>350, 'y'=>271, 'w'=>124, 'h'=>320, 'head'=>[420,271,436,271,436,321,420,321,], 'body'=>[377,316,432,316,432,458,377,458,], 'legs'=>[377,448,382,448,427,448,432,448,470,591,353,591,], 'ex'=>0, 'hit'=>[447,272,460,252,459,286,450,305,] },
+{ 'x'=>349, 'y'=>275, 'w'=>126, 'h'=>315, 'head'=>[394,275,414,275,414,325,394,325,], 'body'=>[376,320,431,320,431,460,376,460,], 'legs'=>[376,450,381,450,426,450,431,450,471,590,352,590,], 'ex'=>1 },
+{ 'x'=>327, 'y'=>292, 'w'=>181, 'h'=>298, 'head'=>[389,292,420,292,420,342,389,342,], 'body'=>[365,337,420,337,420,468,365,468,], 'legs'=>[365,458,370,458,415,458,420,458,462,590,344,590,], 'ex'=>0, 'hit'=>[496,378,532,385,525,399,496,388,] },
+{ 'x'=>347, 'y'=>291, 'w'=>127, 'h'=>299, 'head'=>[397,291,427,291,427,341,397,341,], 'body'=>[373,336,428,336,428,468,373,468,], 'legs'=>[373,458,378,458,423,458,428,458,470,590,352,590,], 'ex'=>0, 'hit'=>[479,330,500,324,490,341,464,353,] },
+{ 'x'=>349, 'y'=>273, 'w'=>128, 'h'=>318, 'head'=>[424,273,442,273,442,323,424,323,], 'body'=>[378,318,433,318,433,459,378,459,], 'legs'=>[378,449,383,449,428,449,433,449,471,591,352,591,], 'ex'=>0, 'hit'=>[464,275,485,255,480,282,467,292,] },
+{ 'x'=>305, 'y'=>285, 'w'=>227, 'h'=>308, 'head'=>[385,285,416,285,416,335,385,335,], 'body'=>[359,330,414,330,414,466,359,466,], 'legs'=>[359,456,364,456,409,456,414,456,466,593,344,593,], 'ex'=>1 },
+{ 'x'=>279, 'y'=>284, 'w'=>240, 'h'=>309, 'head'=>[375,284,406,284,406,334,375,334,], 'body'=>[353,329,408,329,408,466,353,466,], 'legs'=>[353,456,358,456,403,456,408,456,461,593,336,593,], 'ex'=>1 },
+{ 'x'=>249, 'y'=>287, 'w'=>254, 'h'=>312, 'head'=>[365,287,396,287,396,337,365,337,], 'body'=>[342,332,397,332,397,470,342,470,], 'legs'=>[342,460,347,460,392,460,397,460,449,599,327,599,], 'ex'=>1 },
+{ 'x'=>234, 'y'=>285, 'w'=>246, 'h'=>316, 'head'=>[353,285,388,285,388,335,353,335,], 'body'=>[337,330,392,330,392,470,337,470,], 'legs'=>[337,460,342,460,387,460,392,460,447,601,323,601,], 'ex'=>1 },
+{ 'x'=>234, 'y'=>290, 'w'=>224, 'h'=>309, 'head'=>[361,290,416,290,416,340,361,340,], 'body'=>[340,335,395,335,395,472,340,472,], 'legs'=>[340,462,345,462,390,462,395,462,446,599,323,599,], 'ex'=>1 },
+{ 'x'=>280, 'y'=>286, 'w'=>238, 'h'=>309, 'head'=>[374,286,420,286,420,336,374,336,], 'body'=>[357,331,412,331,412,468,357,468,], 'legs'=>[357,458,362,458,407,458,412,458,461,595,338,595,], 'ex'=>1 },
+{ 'x'=>350, 'y'=>288, 'w'=>253, 'h'=>307, 'head'=>[406,288,459,288,459,338,406,338,], 'body'=>[383,333,438,333,438,469,383,469,], 'legs'=>[383,459,388,459,433,459,438,459,482,595,360,595,], 'ex'=>0, 'hit'=>[562,293,604,292,604,302,569,306,] },
+{ 'x'=>360, 'y'=>287, 'w'=>262, 'h'=>308, 'head'=>[401,287,457,287,457,337,401,337,], 'body'=>[391,332,446,332,446,468,391,468,], 'legs'=>[391,458,396,458,441,458,446,458,484,595,363,595,], 'ex'=>0, 'hit'=>[568,314,625,319,621,332,567,328,] },
+{ 'x'=>309, 'y'=>286, 'w'=>221, 'h'=>307, 'head'=>[389,286,421,286,421,336,389,336,], 'body'=>[360,331,415,331,415,467,360,467,], 'legs'=>[360,457,365,457,410,457,415,457,468,593,347,593,], 'ex'=>1 },
+{ 'x'=>313, 'y'=>282, 'w'=>222, 'h'=>311, 'head'=>[384,282,414,282,414,332,384,332,], 'body'=>[362,327,417,327,417,465,362,465,], 'legs'=>[362,455,367,455,412,455,417,455,472,593,348,593,], 'ex'=>1 },
+{ 'x'=>319, 'y'=>282, 'w'=>225, 'h'=>311, 'head'=>[366,282,389,282,389,332,366,332,], 'body'=>[362,327,417,327,417,465,362,465,], 'legs'=>[362,455,367,455,412,455,417,455,474,593,350,593,], 'ex'=>1 },
+{ 'x'=>324, 'y'=>310, 'w'=>227, 'h'=>284, 'head'=>[344,310,392,310,392,360,344,360,], 'body'=>[363,355,418,355,418,479,363,479,], 'legs'=>[363,469,368,469,413,469,418,469,475,594,352,594,], 'ex'=>1 },
+{ 'x'=>329, 'y'=>327, 'w'=>223, 'h'=>267, 'head'=>[345,327,438,327,438,377,345,377,], 'body'=>[361,372,416,372,416,488,361,488,], 'legs'=>[361,478,366,478,411,478,416,478,476,594,352,594,], 'ex'=>1 },
+{ 'x'=>320, 'y'=>297, 'w'=>229, 'h'=>296, 'head'=>[400,297,437,297,437,347,400,347,], 'body'=>[360,342,415,342,415,472,360,472,], 'legs'=>[360,462,365,462,410,462,415,462,455,593,332,593,], 'ex'=>1 },
+{ 'x'=>317, 'y'=>304, 'w'=>235, 'h'=>291, 'head'=>[391,304,434,304,434,354,391,354,], 'body'=>[350,349,405,349,405,477,350,477,], 'legs'=>[350,467,355,467,400,467,405,467,453,595,330,595,], 'ex'=>1 },
+{ 'x'=>305, 'y'=>301, 'w'=>239, 'h'=>293, 'head'=>[361,301,398,301,398,351,361,351,], 'body'=>[326,346,381,346,381,475,326,475,], 'legs'=>[326,465,331,465,376,465,381,465,449,594,319,594,], 'ex'=>1 },
+{ 'x'=>300, 'y'=>298, 'w'=>224, 'h'=>294, 'head'=>[337,298,369,298,369,348,337,348,], 'body'=>[317,343,372,343,372,472,317,472,], 'legs'=>[317,462,322,462,367,462,372,462,448,592,317,592,], 'ex'=>1 },
+{ 'x'=>294, 'y'=>294, 'w'=>209, 'h'=>299, 'head'=>[313,294,343,294,343,344,313,344,], 'body'=>[308,339,363,339,363,471,308,471,], 'legs'=>[308,461,313,461,358,461,363,461,446,593,315,593,], 'ex'=>1 },
+{ 'x'=>279, 'y'=>283, 'w'=>210, 'h'=>306, 'head'=>[287,283,320,283,320,333,287,333,], 'body'=>[296,328,351,328,351,463,296,463,], 'legs'=>[296,453,301,453,346,453,351,453,442,589,309,589,], 'ex'=>1 },
+{ 'x'=>350, 'y'=>274, 'w'=>182, 'h'=>319, 'head'=>[436,274,457,274,457,324,436,324,], 'body'=>[375,319,430,319,430,461,375,461,], 'legs'=>[375,451,380,451,425,451,430,451,470,593,356,593,], 'ex'=>1 },
+{ 'x'=>355, 'y'=>268, 'w'=>156, 'h'=>323, 'head'=>[443,268,460,268,460,318,443,318,], 'body'=>[377,313,432,313,432,457,377,457,], 'legs'=>[377,447,382,447,427,447,432,447,470,591,358,591,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>276, 'w'=>131, 'h'=>316, 'head'=>[427,276,447,276,447,326,427,326,], 'body'=>[383,321,438,321,438,461,383,461,], 'legs'=>[383,451,388,451,433,451,438,451,470,592,359,592,], 'ex'=>1 },
+{ 'x'=>358, 'y'=>304, 'w'=>126, 'h'=>293, 'head'=>[415,304,449,304,449,354,415,354,], 'body'=>[387,349,442,349,442,478,387,478,], 'legs'=>[387,468,392,468,437,468,442,468,471,597,361,597,], 'ex'=>1 },
+{ 'x'=>358, 'y'=>339, 'w'=>125, 'h'=>264, 'head'=>[426,339,464,339,464,389,426,389,], 'body'=>[388,384,443,384,443,498,388,498,], 'legs'=>[388,488,393,488,438,488,443,488,471,603,361,603,], 'ex'=>1 },
+{ 'x'=>353, 'y'=>351, 'w'=>144, 'h'=>269, 'head'=>[427,351,435,351,435,401,427,401,], 'body'=>[399,396,454,396,454,513,399,513,], 'legs'=>[399,503,404,503,449,503,454,503,474,620,356,620,], 'ex'=>1 },
+{ 'x'=>353, 'y'=>357, 'w'=>152, 'h'=>268, 'head'=>[422,357,424,357,424,407,422,407,], 'body'=>[407,402,462,402,462,518,407,518,], 'legs'=>[407,508,412,508,457,508,462,508,479,625,356,625,], 'ex'=>1 },
+{ 'x'=>357, 'y'=>356, 'w'=>149, 'h'=>269, 'head'=>[443,356,445,356,445,406,443,406,], 'body'=>[421,401,476,401,476,518,421,518,], 'legs'=>[421,508,426,508,471,508,476,508,491,625,360,625,], 'ex'=>1 },
+{ 'x'=>338, 'y'=>376, 'w'=>235, 'h'=>238, 'head'=>[399,376,431,376,431,426,399,426,], 'body'=>[378,421,433,421,433,522,378,522,], 'legs'=>[378,512,383,512,428,512,433,512,496,614,341,614,], 'ex'=>1 },
+{ 'x'=>338, 'y'=>370, 'w'=>238, 'h'=>244, 'head'=>[376,370,403,370,403,420,376,420,], 'body'=>[376,415,431,415,431,519,376,519,], 'legs'=>[376,509,381,509,426,509,431,509,497,614,341,614,], 'ex'=>1 },
+{ 'x'=>339, 'y'=>381, 'w'=>240, 'h'=>231, 'head'=>[393,381,422,381,422,431,393,431,], 'body'=>[371,426,426,426,426,524,371,524,], 'legs'=>[371,514,376,514,421,514,426,514,498,612,342,612,], 'ex'=>1 },
+{ 'x'=>337, 'y'=>374, 'w'=>237, 'h'=>238, 'head'=>[473,374,486,374,486,424,473,424,], 'body'=>[364,419,419,419,419,520,364,520,], 'legs'=>[364,510,369,510,414,510,419,510,500,612,340,612,], 'ex'=>1 },
+{ 'x'=>338, 'y'=>389, 'w'=>254, 'h'=>224, 'head'=>[409,389,445,389,445,439,409,439,], 'body'=>[376,434,431,434,431,528,376,528,], 'legs'=>[376,518,381,518,426,518,431,518,499,613,341,613,], 'ex'=>1 },
+{ 'x'=>339, 'y'=>384, 'w'=>255, 'h'=>228, 'head'=>[395,384,431,384,431,434,395,434,], 'body'=>[374,429,429,429,429,525,374,525,], 'legs'=>[374,515,379,515,424,515,429,515,499,612,342,612,], 'ex'=>1 },
+{ 'x'=>341, 'y'=>387, 'w'=>247, 'h'=>224, 'head'=>[375,387,412,387,412,437,375,437,], 'body'=>[372,432,427,432,427,526,372,526,], 'legs'=>[372,516,377,516,422,516,427,516,502,611,344,611,], 'ex'=>1 },
+{ 'x'=>339, 'y'=>395, 'w'=>239, 'h'=>217, 'head'=>[354,395,397,395,397,445,354,445,], 'body'=>[362,440,417,440,417,531,362,531,], 'legs'=>[362,521,367,521,412,521,417,521,501,612,342,612,], 'ex'=>1 },
+{ 'x'=>327, 'y'=>402, 'w'=>241, 'h'=>209, 'head'=>[364,402,417,402,417,452,364,452,], 'body'=>[354,447,409,447,409,534,354,534,], 'legs'=>[354,524,359,524,404,524,409,524,499,611,338,611,], 'ex'=>1 },
+{ 'x'=>340, 'y'=>293, 'w'=>196, 'h'=>300, 'head'=>[398,293,432,293,432,343,398,343,], 'body'=>[363,338,418,338,418,470,363,470,], 'legs'=>[363,460,368,460,413,460,418,460,448,593,350,593,], 'ex'=>1 },
+{ 'x'=>335, 'y'=>299, 'w'=>169, 'h'=>295, 'head'=>[393,299,430,299,430,349,393,349,], 'body'=>[354,344,409,344,409,474,354,474,], 'legs'=>[354,464,359,464,404,464,409,464,445,594,347,594,], 'ex'=>1 },
+{ 'x'=>323, 'y'=>289, 'w'=>146, 'h'=>303, 'head'=>[422,289,440,289,440,339,422,339,], 'body'=>[345,334,400,334,400,468,345,468,], 'legs'=>[345,458,350,458,395,458,400,458,440,592,342,592,], 'ex'=>1 },
+{ 'x'=>313, 'y'=>286, 'w'=>137, 'h'=>302, 'head'=>[416,286,420,286,420,336,416,336,], 'body'=>[342,331,397,331,397,464,342,464,], 'legs'=>[342,454,347,454,392,454,397,454,428,588,337,588,], 'ex'=>1 },
+{ 'x'=>308, 'y'=>293, 'w'=>138, 'h'=>296, 'head'=>[401,293,405,293,405,343,401,343,], 'body'=>[336,338,391,338,391,468,336,468,], 'legs'=>[336,458,341,458,386,458,391,458,419,589,329,589,], 'ex'=>1 },
+{ 'x'=>286, 'y'=>307, 'w'=>149, 'h'=>280, 'head'=>[389,307,393,307,393,357,389,357,], 'body'=>[317,352,372,352,372,474,317,474,], 'legs'=>[317,464,322,464,367,464,372,464,402,587,316,587,], 'ex'=>1 },
+{ 'x'=>285, 'y'=>312, 'w'=>144, 'h'=>274, 'head'=>[389,312,393,312,393,362,389,362,], 'body'=>[311,357,366,357,366,476,311,476,], 'legs'=>[311,466,316,466,361,466,366,466,396,586,307,586,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>312, 'w'=>142, 'h'=>276, 'head'=>[378,312,382,312,382,362,378,362,], 'body'=>[304,357,359,357,359,477,304,477,], 'legs'=>[304,467,309,467,354,467,359,467,389,588,286,588,], 'ex'=>1 },
diff --git a/data/characters/CUMIDATA.DAT.pl b/data/characters/CUMIDATA.DAT.pl
new file mode 100644
index 0000000..34e7635
--- /dev/null
+++ b/data/characters/CUMIDATA.DAT.pl
@@ -0,0 +1,314 @@
+{ 'x'=>316, 'y'=> 40, 'w'=>129, 'h'=>322, 'head'=>[374, 40,396, 40,396, 90,374, 90,], 'body'=>[349, 85,404, 85,404,228,349,228,], 'legs'=>[349,218,354,218,399,218,404,218,424,362,336,362,], 'ex'=>1 },
+{ 'x'=>314, 'y'=> 42, 'w'=>132, 'h'=>320, 'head'=>[379, 42,401, 42,401, 92,379, 92,], 'body'=>[349, 87,404, 87,404,229,349,229,], 'legs'=>[349,219,354,219,399,219,404,219,423,362,336,362,], 'ex'=>1 },
+{ 'x'=>308, 'y'=> 43, 'w'=>138, 'h'=>319, 'head'=>[379, 43,402, 43,402, 93,379, 93,], 'body'=>[351, 88,406, 88,406,230,351,230,], 'legs'=>[351,220,356,220,401,220,406,220,424,362,336,362,], 'ex'=>1 },
+{ 'x'=>317, 'y'=> 44, 'w'=>128, 'h'=>319, 'head'=>[380, 44,402, 44,402, 94,380, 94,], 'body'=>[353, 89,408, 89,408,231,353,231,], 'legs'=>[353,221,358,221,403,221,408,221,423,363,334,363,], 'ex'=>1 },
+{ 'x'=>332, 'y'=> 42, 'w'=>114, 'h'=>320, 'head'=>[383, 42,405, 42,405, 92,383, 92,], 'body'=>[354, 87,409, 87,409,229,354,229,], 'legs'=>[354,219,359,219,404,219,409,219,423,362,335,362,], 'ex'=>1 },
+{ 'x'=>332, 'y'=> 44, 'w'=>114, 'h'=>320, 'head'=>[383, 44,405, 44,405, 94,383, 94,], 'body'=>[354, 89,409, 89,409,231,354,231,], 'legs'=>[354,221,359,221,404,221,409,221,424,364,335,364,], 'ex'=>1 },
+{ 'x'=>332, 'y'=> 44, 'w'=>116, 'h'=>319, 'head'=>[385, 44,408, 44,408, 94,385, 94,], 'body'=>[360, 89,415, 89,415,231,360,231,], 'legs'=>[360,221,365,221,410,221,415,221,424,363,335,363,], 'ex'=>1 },
+{ 'x'=>332, 'y'=> 44, 'w'=>116, 'h'=>319, 'head'=>[389, 44,411, 44,411, 94,389, 94,], 'body'=>[361, 89,416, 89,416,231,361,231,], 'legs'=>[361,221,366,221,411,221,416,221,424,363,335,363,], 'ex'=>1 },
+{ 'x'=>332, 'y'=> 44, 'w'=>113, 'h'=>319, 'head'=>[389, 44,412, 44,412, 94,389, 94,], 'body'=>[359, 89,414, 89,414,231,359,231,], 'legs'=>[359,221,364,221,409,221,414,221,422,363,335,363,], 'ex'=>1 },
+{ 'x'=>327, 'y'=> 46, 'w'=>114, 'h'=>317, 'head'=>[388, 46,412, 46,412, 96,388, 96,], 'body'=>[356, 91,411, 91,411,232,356,232,], 'legs'=>[356,222,361,222,406,222,411,222,423,363,330,363,], 'ex'=>1 },
+{ 'x'=>310, 'y'=> 46, 'w'=>131, 'h'=>318, 'head'=>[382, 46,406, 46,406, 96,382, 96,], 'body'=>[351, 91,406, 91,406,232,351,232,], 'legs'=>[351,222,356,222,401,222,406,222,423,364,313,364,], 'ex'=>1 },
+{ 'x'=>290, 'y'=> 50, 'w'=>156, 'h'=>314, 'head'=>[372, 50,398, 50,398,100,372,100,], 'body'=>[343, 95,398, 95,398,234,343,234,], 'legs'=>[343,224,348,224,393,224,398,224,423,364,293,364,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 50, 'w'=>161, 'h'=>314, 'head'=>[359, 50,382, 50,382,100,359,100,], 'body'=>[335, 95,390, 95,390,234,335,234,], 'legs'=>[335,224,340,224,385,224,390,224,423,364,283,364,], 'ex'=>1 },
+{ 'x'=>276, 'y'=> 53, 'w'=>152, 'h'=>311, 'head'=>[344, 53,371, 53,371,103,344,103,], 'body'=>[322, 98,377, 98,377,236,322,236,], 'legs'=>[322,226,327,226,372,226,377,226,423,364,279,364,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 50, 'w'=>151, 'h'=>312, 'head'=>[332, 50,359, 50,359,100,332,100,], 'body'=>[308, 95,363, 95,363,233,308,233,], 'legs'=>[308,223,313,223,358,223,363,223,422,362,278,362,], 'ex'=>1 },
+{ 'x'=>274, 'y'=> 46, 'w'=>143, 'h'=>308, 'head'=>[323, 46,351, 46,351, 96,323, 96,], 'body'=>[299, 91,354, 91,354,227,299,227,], 'legs'=>[299,217,304,217,349,217,354,217,413,354,277,354,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 42, 'w'=>119, 'h'=>308, 'head'=>[317, 42,343, 42,343, 92,317, 92,], 'body'=>[291, 87,346, 87,346,223,291,223,], 'legs'=>[291,213,296,213,341,213,346,213,390,350,278,350,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 38, 'w'=>101, 'h'=>310, 'head'=>[310, 38,339, 38,339, 88,310, 88,], 'body'=>[284, 83,339, 83,339,220,284,220,], 'legs'=>[284,210,289,210,334,210,339,210,352,348,278,348,], 'ex'=>1 },
+{ 'x'=>269, 'y'=> 33, 'w'=> 98, 'h'=>311, 'head'=>[302, 33,330, 33,330, 83,302, 83,], 'body'=>[275, 78,330, 78,330,216,275,216,], 'legs'=>[275,206,280,206,325,206,330,206,349,344,274,344,], 'ex'=>1 },
+{ 'x'=>269, 'y'=> 32, 'w'=> 98, 'h'=>312, 'head'=>[301, 32,330, 32,330, 82,301, 82,], 'body'=>[276, 77,331, 77,331,215,276,215,], 'legs'=>[276,205,281,205,326,205,331,205,350,344,276,344,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 32, 'w'=> 98, 'h'=>313, 'head'=>[300, 32,330, 32,330, 82,300, 82,], 'body'=>[277, 77,332, 77,332,216,277,216,], 'legs'=>[277,206,282,206,327,206,332,206,353,345,278,345,], 'ex'=>1 },
+{ 'x'=>272, 'y'=> 34, 'w'=> 98, 'h'=>312, 'head'=>[302, 34,332, 34,332, 84,302, 84,], 'body'=>[279, 79,334, 79,334,217,279,217,], 'legs'=>[279,207,284,207,329,207,334,207,355,346,279,346,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 32, 'w'=> 98, 'h'=>314, 'head'=>[305, 32,335, 32,335, 82,305, 82,], 'body'=>[282, 77,337, 77,337,216,282,216,], 'legs'=>[282,206,287,206,332,206,337,206,358,346,280,346,], 'ex'=>1 },
+{ 'x'=>279, 'y'=> 36, 'w'=>104, 'h'=>311, 'head'=>[313, 36,342, 36,342, 86,313, 86,], 'body'=>[290, 81,345, 81,345,219,290,219,], 'legs'=>[290,209,295,209,340,209,345,209,379,347,282,347,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 39, 'w'=>127, 'h'=>308, 'head'=>[320, 39,349, 39,349, 89,320, 89,], 'body'=>[297, 84,352, 84,352,220,297,220,], 'legs'=>[297,210,302,210,347,210,352,210,403,347,283,347,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 44, 'w'=>145, 'h'=>304, 'head'=>[329, 44,358, 44,358, 94,329, 94,], 'body'=>[306, 89,361, 89,361,223,306,223,], 'legs'=>[306,213,311,213,356,213,361,213,421,348,283,348,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 50, 'w'=>158, 'h'=>299, 'head'=>[341, 50,371, 50,371,100,341,100,], 'body'=>[319, 95,374, 95,374,227,319,227,], 'legs'=>[319,217,324,217,369,217,374,217,434,349,283,349,], 'ex'=>1 },
+{ 'x'=>281, 'y'=> 51, 'w'=>160, 'h'=>297, 'head'=>[355, 51,384, 51,384,101,355,101,], 'body'=>[335, 96,390, 96,390,227,335,227,], 'legs'=>[335,217,340,217,385,217,390,217,437,348,284,348,], 'ex'=>1 },
+{ 'x'=>291, 'y'=> 52, 'w'=>149, 'h'=>290, 'head'=>[369, 52,399, 52,399,102,369,102,], 'body'=>[351, 97,406, 97,406,224,351,224,], 'legs'=>[351,214,356,214,401,214,406,214,436,342,294,342,], 'ex'=>1 },
+{ 'x'=>314, 'y'=> 50, 'w'=>135, 'h'=>290, 'head'=>[383, 50,414, 50,414,100,383,100,], 'body'=>[362, 95,417, 95,417,222,362,222,], 'legs'=>[362,212,367,212,412,212,417,212,436,340,317,340,], 'ex'=>1 },
+{ 'x'=>344, 'y'=> 47, 'w'=>114, 'h'=>293, 'head'=>[394, 47,424, 47,424, 97,394, 97,], 'body'=>[371, 92,426, 92,426,221,371,221,], 'legs'=>[371,211,376,211,421,211,426,211,437,340,347,340,], 'ex'=>1 },
+{ 'x'=>371, 'y'=> 47, 'w'=> 94, 'h'=>295, 'head'=>[403, 47,432, 47,432, 97,403, 97,], 'body'=>[378, 92,433, 92,433,222,378,222,], 'legs'=>[378,212,383,212,428,212,433,212,435,342,376,342,], 'ex'=>1 },
+{ 'x'=>381, 'y'=> 45, 'w'=> 95, 'h'=>310, 'head'=>[411, 45,441, 45,441, 95,411, 95,], 'body'=>[388, 90,443, 90,443,227,388,227,], 'legs'=>[388,217,393,217,438,217,443,217,431,355,403,355,], 'ex'=>1 },
+{ 'x'=>386, 'y'=> 42, 'w'=> 95, 'h'=>316, 'head'=>[417, 42,446, 42,446, 92,417, 92,], 'body'=>[394, 87,449, 87,449,227,394,227,], 'legs'=>[394,217,399,217,444,217,449,217,447,358,403,358,], 'ex'=>1 },
+{ 'x'=>390, 'y'=> 42, 'w'=> 95, 'h'=>314, 'head'=>[421, 42,451, 42,451, 92,421, 92,], 'body'=>[398, 87,453, 87,453,226,398,226,], 'legs'=>[398,216,403,216,448,216,453,216,469,356,403,356,], 'ex'=>1 },
+{ 'x'=>395, 'y'=> 45, 'w'=> 99, 'h'=>312, 'head'=>[426, 45,455, 45,455, 95,426, 95,], 'body'=>[403, 90,458, 90,458,228,403,228,], 'legs'=>[403,218,408,218,453,218,458,218,490,357,402,357,], 'ex'=>1 },
+{ 'x'=>246, 'y'=> 38, 'w'=>137, 'h'=>307, 'head'=>[300, 38,328, 38,328, 88,300, 88,], 'body'=>[277, 83,332, 83,332,219,277,219,], 'legs'=>[277,209,282,209,327,209,332,209,357,345,249,345,], 'ex'=>1 },
+{ 'x'=>245, 'y'=> 39, 'w'=>129, 'h'=>306, 'head'=>[302, 39,328, 39,328, 89,302, 89,], 'body'=>[279, 84,334, 84,334,219,279,219,], 'legs'=>[279,209,284,209,329,209,334,209,356,345,248,345,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 37, 'w'=>119, 'h'=>305, 'head'=>[303, 37,326, 37,326, 87,303, 87,], 'body'=>[281, 82,336, 82,336,217,281,217,], 'legs'=>[281,207,286,207,331,207,336,207,358,342,251,342,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 35, 'w'=>124, 'h'=>306, 'head'=>[300, 35,322, 35,322, 85,300, 85,], 'body'=>[280, 80,335, 80,335,215,280,215,], 'legs'=>[280,205,285,205,330,205,335,205,359,341,245,341,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 36, 'w'=>126, 'h'=>304, 'head'=>[292, 36,317, 36,317, 86,292, 86,], 'body'=>[274, 81,329, 81,329,215,274,215,], 'legs'=>[274,205,279,205,324,205,329,205,356,340,239,340,], 'ex'=>1 },
+{ 'x'=>235, 'y'=> 38, 'w'=>123, 'h'=>302, 'head'=>[285, 38,310, 38,310, 88,285, 88,], 'body'=>[273, 83,328, 83,328,216,273,216,], 'legs'=>[273,206,278,206,323,206,328,206,353,340,238,340,], 'ex'=>1 },
+{ 'x'=>233, 'y'=> 37, 'w'=>125, 'h'=>302, 'head'=>[278, 37,305, 37,305, 87,278, 87,], 'body'=>[271, 82,326, 82,326,215,271,215,], 'legs'=>[271,205,276,205,321,205,326,205,354,339,236,339,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 38, 'w'=>126, 'h'=>300, 'head'=>[271, 38,297, 38,297, 88,271, 88,], 'body'=>[269, 83,324, 83,324,215,269,215,], 'legs'=>[269,205,274,205,319,205,324,205,352,338,233,338,], 'ex'=>1 },
+{ 'x'=>245, 'y'=> 38, 'w'=>120, 'h'=>306, 'head'=>[308, 38,339, 38,339, 88,308, 88,], 'body'=>[276, 83,331, 83,331,218,276,218,], 'legs'=>[276,208,281,208,326,208,331,208,334,344,255,344,], 'ex'=>1 },
+{ 'x'=>233, 'y'=> 50, 'w'=>137, 'h'=>294, 'head'=>[312, 50,345, 50,345,100,312,100,], 'body'=>[274, 95,329, 95,329,224,274,224,], 'legs'=>[274,214,279,214,324,214,329,214,334,344,256,344,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 86, 'w'=>126, 'h'=>259, 'head'=>[306, 86,339, 86,339,136,306,136,], 'body'=>[262,131,317,131,317,243,262,243,], 'legs'=>[262,233,267,233,312,233,317,233,332,345,257,345,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>101, 'w'=>158, 'h'=>244, 'head'=>[271,101,299,101,299,151,271,151,], 'body'=>[245,146,300,146,300,250,245,250,], 'legs'=>[245,240,250,240,295,240,300,240,335,345,257,345,], 'ex'=>1 },
+{ 'x'=>204, 'y'=>111, 'w'=>148, 'h'=>231, 'head'=>[233,111,262,111,262,161,233,161,], 'body'=>[212,156,267,156,267,254,212,254,], 'legs'=>[212,244,217,244,262,244,267,244,347,342,256,342,], 'ex'=>1 },
+{ 'x'=>174, 'y'=>124, 'w'=>164, 'h'=>218, 'head'=>[206,124,245,124,245,174,206,174,], 'body'=>[183,169,238,169,238,260,183,260,], 'legs'=>[183,250,188,250,233,250,238,250,334,342,256,342,], 'ex'=>1 },
+{ 'x'=>147, 'y'=>143, 'w'=>166, 'h'=>203, 'head'=>[183,143,225,143,225,193,183,193,], 'body'=>[162,188,217,188,217,272,162,272,], 'legs'=>[162,262,167,262,212,262,217,262,290,346,154,346,], 'ex'=>1 },
+{ 'x'=>122, 'y'=>178, 'w'=>177, 'h'=>174, 'head'=>[162,178,211,178,211,228,162,228,], 'body'=>[133,223,188,223,188,292,133,292,], 'legs'=>[133,282,138,282,183,282,188,282,290,352,127,352,], 'ex'=>1 },
+{ 'x'=> 97, 'y'=>203, 'w'=>194, 'h'=>149, 'head'=>[113,203,152,203,152,253,113,253,], 'body'=>[104,248,159,248,159,305,104,305,], 'legs'=>[104,295,109,295,154,295,159,295,287,352,106,352,], 'ex'=>1 },
+{ 'x'=> 68, 'y'=>221, 'w'=>215, 'h'=>122, 'head'=>[ 77,221,134,221,134,271, 77,271,], 'body'=>[ 81,266,136,266,136,309, 81,309,], 'legs'=>[ 81,299, 86,299,131,299,136,299,275,343, 92,343,], 'ex'=>1 },
+{ 'x'=> 44, 'y'=>233, 'w'=>227, 'h'=>104, 'head'=>[110,233,212,233,212,283,110,283,], 'body'=>[ 64,278,119,278,119,312, 64,312,], 'legs'=>[ 64,302, 69,302,114,302,119,302,182,337, 79,337,], 'ex'=>1 },
+{ 'x'=> 23, 'y'=>221, 'w'=>231, 'h'=>111, 'head'=>[144,221,197,221,197,271,144,271,], 'body'=>[ 55,266,110,266,110,304, 55,304,], 'legs'=>[ 55,294, 60,294,105,294,110,294,249,332, 65,332,], 'ex'=>1 },
+{ 'x'=> 15, 'y'=>215, 'w'=>220, 'h'=>120, 'head'=>[135,215,187,215,187,265,135,265,], 'body'=>[ 78,260,133,260,133,302, 78,302,], 'legs'=>[ 78,292, 83,292,128,292,133,292,231,335, 61,335,], 'ex'=>1 },
+{ 'x'=> 16, 'y'=>217, 'w'=>216, 'h'=>125, 'head'=>[122,217,158,217,158,267,122,267,], 'body'=>[ 71,262,126,262,126,307, 71,307,], 'legs'=>[ 71,297, 76,297,121,297,126,297,228,342, 65,342,], 'ex'=>1 },
+{ 'x'=> 11, 'y'=>215, 'w'=>236, 'h'=>134, 'head'=>[122,215,155,215,155,265,122,265,], 'body'=>[ 70,260,125,260,125,309, 70,309,], 'legs'=>[ 70,299, 75,299,120,299,125,299,230,349, 77,349,], 'ex'=>1 },
+{ 'x'=> 26, 'y'=>233, 'w'=>241, 'h'=>109, 'head'=>[104,233,161,233,161,283,104,283,], 'body'=>[ 54,278,109,278,109,315, 54,315,], 'legs'=>[ 54,305, 59,305,104,305,109,305,246,342, 75,342,], 'ex'=>1 },
+{ 'x'=> 50, 'y'=>213, 'w'=>242, 'h'=>129, 'head'=>[ 59,213, 92,213, 92,263, 59,263,], 'body'=>[ 65,258,120,258,120,305, 65,305,], 'legs'=>[ 65,295, 70,295,115,295,120,295,272,342, 73,342,], 'ex'=>1 },
+{ 'x'=> 74, 'y'=>198, 'w'=>224, 'h'=>147, 'head'=>[ 92,198,123,198,123,248, 92,248,], 'body'=>[ 81,243,136,243,136,299, 81,299,], 'legs'=>[ 81,289, 86,289,131,289,136,289,275,345, 87,345,], 'ex'=>1 },
+{ 'x'=> 97, 'y'=>185, 'w'=>194, 'h'=>161, 'head'=>[128,185,161,185,161,235,128,235,], 'body'=>[104,230,159,230,159,293,104,293,], 'legs'=>[104,283,109,283,154,283,159,283,266,346,113,346,], 'ex'=>1 },
+{ 'x'=>120, 'y'=>187, 'w'=>164, 'h'=>161, 'head'=>[159,187,201,187,201,237,159,237,], 'body'=>[131,232,186,232,186,295,131,295,], 'legs'=>[131,285,136,285,181,285,186,285,240,348,123,348,], 'ex'=>1 },
+{ 'x'=>125, 'y'=>191, 'w'=>154, 'h'=>158, 'head'=>[172,191,222,191,222,241,172,241,], 'body'=>[145,236,200,236,200,297,145,297,], 'legs'=>[145,287,150,287,195,287,200,287,244,349,128,349,], 'ex'=>1 },
+{ 'x'=>134, 'y'=>201, 'w'=>144, 'h'=>149, 'head'=>[193,201,254,201,254,251,193,251,], 'body'=>[162,246,217,246,217,303,162,303,], 'legs'=>[162,293,167,293,212,293,217,293,247,350,137,350,], 'ex'=>1 },
+{ 'x'=>148, 'y'=>201, 'w'=>155, 'h'=>147, 'head'=>[213,201,277,201,277,251,213,251,], 'body'=>[179,246,234,246,234,302,179,302,], 'legs'=>[179,292,184,292,229,292,234,292,251,348,151,348,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>170, 'w'=>131, 'h'=>178, 'head'=>[240,170,294,170,294,220,240,220,], 'body'=>[193,215,248,215,248,286,193,286,], 'legs'=>[193,276,198,276,243,276,248,276,265,348,207,348,], 'ex'=>1 },
+{ 'x'=>189, 'y'=>145, 'w'=>125, 'h'=>203, 'head'=>[251,145,296,145,296,195,251,195,], 'body'=>[202,190,257,190,257,274,202,274,], 'legs'=>[202,264,207,264,252,264,257,264,267,348,220,348,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>123, 'w'=>123, 'h'=>224, 'head'=>[257,123,297,123,297,173,257,173,], 'body'=>[209,168,264,168,264,262,209,262,], 'legs'=>[209,252,214,252,259,252,264,252,273,347,220,347,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 98, 'w'=>116, 'h'=>251, 'head'=>[261, 98,296, 98,296,148,261,148,], 'body'=>[216,143,271,143,271,251,216,251,], 'legs'=>[216,241,221,241,266,241,271,241,301,349,219,349,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 74, 'w'=>107, 'h'=>275, 'head'=>[264, 74,293, 74,293,124,264,124,], 'body'=>[223,119,278,119,278,239,223,239,], 'legs'=>[223,229,228,229,273,229,278,229,299,349,220,349,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 55, 'w'=>100, 'h'=>293, 'head'=>[261, 55,292, 55,292,105,261,105,], 'body'=>[228,100,283,100,283,229,228,229,], 'legs'=>[228,219,233,219,278,219,283,219,279,348,219,348,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 42, 'w'=>104, 'h'=>308, 'head'=>[261, 42,292, 42,292, 92,261, 92,], 'body'=>[232, 87,287, 87,287,223,232,223,], 'legs'=>[232,213,237,213,282,213,287,213,287,350,218,350,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 29, 'w'=>125, 'h'=>320, 'head'=>[264, 29,295, 29,295, 79,264, 79,], 'body'=>[241, 74,296, 74,296,216,241,216,], 'legs'=>[241,206,246,206,291,206,296,206,326,349,218,349,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 25, 'w'=>132, 'h'=>318, 'head'=>[276, 25,305, 25,305, 75,276, 75,], 'body'=>[259, 70,314, 70,314,211,259,211,], 'legs'=>[259,201,264,201,309,201,314,201,326,343,224,343,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 36, 'w'=>119, 'h'=>307, 'head'=>[301, 36,330, 36,330, 86,301, 86,], 'body'=>[276, 81,331, 81,331,217,276,217,], 'legs'=>[276,207,281,207,326,207,331,207,363,343,254,343,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 47, 'w'=>118, 'h'=>297, 'head'=>[311, 47,341, 47,341, 97,311, 97,], 'body'=>[278, 92,333, 92,333,223,278,223,], 'legs'=>[278,213,283,213,328,213,333,213,365,344,254,344,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 64, 'w'=>119, 'h'=>281, 'head'=>[321, 64,349, 64,349,114,321,114,], 'body'=>[278,109,333,109,333,232,278,232,], 'legs'=>[278,222,283,222,328,222,333,222,366,345,254,345,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 94, 'w'=>126, 'h'=>251, 'head'=>[313, 94,359, 94,359,144,313,144,], 'body'=>[278,139,333,139,333,247,278,247,], 'legs'=>[278,237,283,237,328,237,333,237,366,345,254,345,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>118, 'w'=>132, 'h'=>227, 'head'=>[302,118,365,118,365,168,302,168,], 'body'=>[282,163,337,163,337,259,282,259,], 'legs'=>[282,249,287,249,332,249,337,249,366,345,254,345,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>136, 'w'=>136, 'h'=>210, 'head'=>[283,136,365,136,365,186,283,186,], 'body'=>[282,181,337,181,337,268,282,268,], 'legs'=>[282,258,287,258,332,258,337,258,366,346,254,346,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>146, 'w'=>137, 'h'=>199, 'head'=>[305,150,387,150,387,200,305,200,], 'body'=>[287,191,342,191,342,273,287,273,], 'legs'=>[287,263,292,263,337,263,342,263,365,345,254,345,], 'ex'=>0 },
+{ 'x'=>252, 'y'=>149, 'w'=>136, 'h'=>194, 'head'=>[307,153,382,153,382,203,307,203,], 'body'=>[292,194,347,194,347,273,292,273,], 'legs'=>[292,263,297,263,342,263,347,263,366,343,255,343,], 'ex'=>0 },
+{ 'x'=>251, 'y'=>155, 'w'=>137, 'h'=>190, 'head'=>[314,157,385,157,385,207,314,207,], 'body'=>[292,200,347,200,347,277,292,277,], 'legs'=>[292,267,297,267,342,267,347,267,367,345,254,345,], 'ex'=>0 },
+{ 'x'=>254, 'y'=> 42, 'w'=>117, 'h'=>299, 'head'=>[293, 42,321, 42,321, 92,293, 92,], 'body'=>[276, 88,331, 88,331,220,276,220,], 'legs'=>[267,209,272,209,317,209,322,209,367,341,257,341,], 'ex'=>0 },
+{ 'x'=>250, 'y'=> 59, 'w'=>119, 'h'=>283, 'head'=>[292, 59,321, 59,321,109,292,109,], 'body'=>[276,107,331,107,331,231,276,231,], 'legs'=>[263,218,268,218,313,218,318,218,365,342,256,342,], 'ex'=>0 },
+{ 'x'=>245, 'y'=> 74, 'w'=>125, 'h'=>269, 'head'=>[291, 74,320, 74,320,124,291,124,], 'body'=>[271,120,326,120,326,237,271,237,], 'legs'=>[262,226,267,226,312,226,317,226,366,343,255,343,], 'ex'=>0 },
+{ 'x'=>243, 'y'=> 85, 'w'=>127, 'h'=>259, 'head'=>[291, 85,319, 85,319,135,291,135,], 'body'=>[276,132,331,132,331,244,276,244,], 'legs'=>[262,232,267,232,312,232,317,232,366,344,254,344,], 'ex'=>0 },
+{ 'x'=>239, 'y'=> 99, 'w'=>128, 'h'=>245, 'head'=>[291, 99,320, 99,320,149,291,149,], 'body'=>[268,148,323,148,323,253,268,253,], 'legs'=>[257,239,262,239,307,239,312,239,363,344,252,344,], 'ex'=>0 },
+{ 'x'=>239, 'y'=>107, 'w'=>128, 'h'=>237, 'head'=>[289,107,321,107,321,157,289,157,], 'body'=>[268,156,323,156,323,257,268,257,], 'legs'=>[255,243,260,243,305,243,310,243,363,344,249,344,], 'ex'=>0 },
+{ 'x'=>263, 'y'=> 35, 'w'=>114, 'h'=>307, 'head'=>[296, 35,323, 35,323, 85,296, 85,], 'body'=>[278, 80,333, 80,333,216,278,216,], 'legs'=>[278,206,283,206,328,206,333,206,373,342,266,342,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 33, 'w'=>113, 'h'=>309, 'head'=>[297, 33,321, 33,321, 83,297, 83,], 'body'=>[278, 78,333, 78,333,215,278,215,], 'legs'=>[278,205,283,205,328,205,333,205,372,342,266,342,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 33, 'w'=>116, 'h'=>307, 'head'=>[298, 33,322, 33,322, 83,298, 83,], 'body'=>[276, 78,331, 78,331,214,276,214,], 'legs'=>[276,204,281,204,326,204,331,204,374,340,267,340,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 35, 'w'=>138, 'h'=>307, 'head'=>[299, 35,323, 35,323, 85,299, 85,], 'body'=>[274, 80,329, 80,329,216,274,216,], 'legs'=>[274,206,279,206,324,206,329,206,373,342,266,342,], 'ex'=>1 },
+{ 'x'=>235, 'y'=> 34, 'w'=>162, 'h'=>308, 'head'=>[298, 34,321, 34,321, 84,298, 84,], 'body'=>[271, 79,326, 79,326,215,271,215,], 'legs'=>[271,205,276,205,321,205,326,205,374,342,266,342,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 34, 'w'=>158, 'h'=>307, 'head'=>[290, 34,313, 34,313, 84,290, 84,], 'body'=>[268, 79,323, 79,323,215,268,215,], 'legs'=>[268,205,273,205,318,205,323,205,372,341,267,341,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 34, 'w'=>153, 'h'=>306, 'head'=>[301, 34,324, 34,324, 84,301, 84,], 'body'=>[270, 79,325, 79,325,214,270,214,], 'legs'=>[270,204,275,204,320,204,325,204,371,340,266,340,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 34, 'w'=>155, 'h'=>308, 'head'=>[293, 34,316, 34,316, 84,293, 84,], 'body'=>[270, 79,325, 79,325,215,270,215,], 'legs'=>[270,205,275,205,320,205,325,205,372,342,266,342,], 'ex'=>1 },
+{ 'x'=>240, 'y'=> 32, 'w'=>154, 'h'=>308, 'head'=>[303, 32,325, 32,325, 82,303, 82,], 'body'=>[267, 77,322, 77,322,213,267,213,], 'legs'=>[267,203,272,203,317,203,322,203,370,340,266,340,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 37, 'w'=>154, 'h'=>305, 'head'=>[303, 37,326, 37,326, 87,303, 87,], 'body'=>[269, 82,324, 82,324,217,269,217,], 'legs'=>[269,207,274,207,319,207,324,207,374,342,267,342,], 'ex'=>1 },
+{ 'x'=>243, 'y'=> 35, 'w'=>153, 'h'=>308, 'head'=>[304, 35,327, 35,327, 85,304, 85,], 'body'=>[269, 80,324, 80,324,216,269,216,], 'legs'=>[269,206,274,206,319,206,324,206,376,343,268,343,], 'ex'=>1 },
+{ 'x'=>244, 'y'=> 35, 'w'=>157, 'h'=>310, 'head'=>[304, 35,326, 35,326, 85,304, 85,], 'body'=>[272, 80,327, 80,327,217,272,217,], 'legs'=>[272,207,277,207,322,207,327,207,374,345,269,345,], 'ex'=>1 },
+{ 'x'=>247, 'y'=> 34, 'w'=>158, 'h'=>311, 'head'=>[304, 34,327, 34,327, 84,304, 84,], 'body'=>[277, 79,332, 79,332,217,277,217,], 'legs'=>[277,207,282,207,327,207,332,207,376,345,270,345,], 'ex'=>1 },
+{ 'x'=>247, 'y'=> 35, 'w'=>146, 'h'=>309, 'head'=>[303, 35,326, 35,326, 85,303, 85,], 'body'=>[277, 80,332, 80,332,217,277,217,], 'legs'=>[277,207,282,207,327,207,332,207,376,344,270,344,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 35, 'w'=>134, 'h'=>308, 'head'=>[304, 35,326, 35,326, 85,304, 85,], 'body'=>[280, 80,335, 80,335,216,280,216,], 'legs'=>[280,206,285,206,330,206,335,206,377,343,271,343,], 'ex'=>1 },
+{ 'x'=>239, 'y'=> 35, 'w'=>156, 'h'=>307, 'head'=>[304, 35,326, 35,326, 85,304, 85,], 'body'=>[280, 80,335, 80,335,216,280,216,], 'legs'=>[280,206,285,206,330,206,335,206,378,342,273,342,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 29, 'w'=>134, 'h'=>310, 'head'=>[305, 29,326, 29,326, 79,305, 79,], 'body'=>[281, 74,336, 74,336,211,281,211,], 'legs'=>[281,201,286,201,331,201,336,201,376,339,271,339,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 29, 'w'=>143, 'h'=>308, 'head'=>[307, 29,328, 29,328, 79,307, 79,], 'body'=>[281, 74,336, 74,336,210,281,210,], 'legs'=>[281,200,286,200,331,200,336,200,378,337,272,337,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 28, 'w'=>170, 'h'=>308, 'head'=>[302, 28,324, 28,324, 78,302, 78,], 'body'=>[278, 73,333, 73,333,209,278,209,], 'legs'=>[278,199,283,199,328,199,333,199,374,336,270,336,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 30, 'w'=>189, 'h'=>305, 'head'=>[284, 30,308, 30,308, 80,284, 80,], 'body'=>[272, 75,327, 75,327,210,272,210,], 'legs'=>[272,200,277,200,322,200,327,200,375,335,270,335,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 30, 'w'=>167, 'h'=>305, 'head'=>[305, 30,328, 30,328, 80,305, 80,], 'body'=>[280, 75,335, 75,335,210,280,210,], 'legs'=>[280,200,285,200,330,200,335,200,374,335,268,335,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 32, 'w'=>149, 'h'=>302, 'head'=>[308, 32,331, 32,331, 82,308, 82,], 'body'=>[278, 77,333, 77,333,210,278,210,], 'legs'=>[278,200,283,200,328,200,333,200,374,334,268,334,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 30, 'w'=>146, 'h'=>304, 'head'=>[318, 30,342, 30,342, 80,318, 80,], 'body'=>[280, 75,335, 75,335,209,280,209,], 'legs'=>[280,199,285,199,330,199,335,199,375,334,269,334,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 26, 'w'=>145, 'h'=>308, 'head'=>[329, 26,352, 26,352, 76,329, 76,], 'body'=>[295, 71,350, 71,350,207,295,207,], 'legs'=>[295,197,300,197,345,197,350,197,373,334,269,334,], 'ex'=>1 },
+{ 'x'=>268, 'y'=> 26, 'w'=>143, 'h'=>306, 'head'=>[332, 26,355, 26,355, 76,332, 76,], 'body'=>[299, 71,354, 71,354,206,299,206,], 'legs'=>[299,196,304,196,349,196,354,196,372,332,271,332,], 'ex'=>1 },
+{ 'x'=>274, 'y'=> 24, 'w'=>137, 'h'=>308, 'head'=>[335, 24,358, 24,358, 74,335, 74,], 'body'=>[304, 69,359, 69,359,205,304,205,], 'legs'=>[304,195,309,195,354,195,359,195,372,332,277,332,], 'ex'=>1 },
+{ 'x'=>253, 'y'=> 35, 'w'=>127, 'h'=>305, 'head'=>[294, 35,323, 35,323, 85,294, 85,], 'body'=>[273, 80,328, 80,328,215,273,215,], 'legs'=>[273,205,278,205,323,205,328,205,358,340,256,340,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 35, 'w'=>128, 'h'=>304, 'head'=>[292, 35,321, 35,321, 85,292, 85,], 'body'=>[279, 80,334, 80,334,214,279,214,], 'legs'=>[279,204,284,204,329,204,334,204,358,339,257,339,], 'ex'=>1 },
+{ 'x'=>253, 'y'=> 36, 'w'=>120, 'h'=>303, 'head'=>[292, 36,331, 36,331, 86,292, 86,], 'body'=>[281, 81,336, 81,336,215,281,215,], 'legs'=>[281,205,286,205,331,205,336,205,356,339,256,339,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 32, 'w'=>112, 'h'=>307, 'head'=>[296, 32,327, 32,327, 82,296, 82,], 'body'=>[284, 77,339, 77,339,213,284,213,], 'legs'=>[284,203,289,203,334,203,339,203,360,339,257,339,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 42, 'w'=>107, 'h'=>305, 'head'=>[301, 42,331, 42,331, 92,301, 92,], 'body'=>[275, 87,330, 87,330,222,275,222,], 'legs'=>[275,212,280,212,325,212,330,212,360,347,262,347,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 70, 'w'=>116, 'h'=>278, 'head'=>[309, 70,339, 70,339,120,309,120,], 'body'=>[279,115,334,115,334,236,279,236,], 'legs'=>[279,226,284,226,329,226,334,226,360,348,262,348,], 'ex'=>1 },
+{ 'x'=>257, 'y'=>102, 'w'=>127, 'h'=>246, 'head'=>[314,102,345,102,345,152,314,152,], 'body'=>[283,147,338,147,338,252,283,252,], 'legs'=>[283,242,288,242,333,242,338,242,360,348,260,348,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>127, 'w'=>131, 'h'=>221, 'head'=>[317,127,350,127,350,177,317,177,], 'body'=>[287,172,342,172,342,265,287,265,], 'legs'=>[287,255,292,255,337,255,342,255,360,348,262,348,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>157, 'w'=>124, 'h'=>193, 'head'=>[314,157,347,157,347,207,314,207,], 'body'=>[283,202,338,202,338,281,283,281,], 'legs'=>[283,271,288,271,333,271,338,271,359,350,262,350,], 'ex'=>1 },
+{ 'x'=>257, 'y'=>158, 'w'=>120, 'h'=>192, 'head'=>[317,158,352,158,352,208,317,208,], 'body'=>[283,203,338,203,338,281,283,281,], 'legs'=>[283,271,288,271,333,271,338,271,356,350,260,350,], 'ex'=>1 },
+{ 'x'=>257, 'y'=>162, 'w'=>142, 'h'=>189, 'head'=>[321,162,358,162,358,212,321,212,], 'body'=>[284,207,339,207,339,284,284,284,], 'legs'=>[284,274,289,274,334,274,339,274,356,351,260,351,], 'ex'=>1 },
+{ 'x'=>257, 'y'=>164, 'w'=>177, 'h'=>185, 'head'=>[320,164,360,164,360,214,320,214,], 'body'=>[282,209,337,209,337,284,282,284,], 'legs'=>[282,274,287,274,332,274,337,274,356,349,260,349,], 'ex'=>1 },
+{ 'x'=>258, 'y'=>168, 'w'=>177, 'h'=>184, 'head'=>[323,167,364,167,364,217,323,217,], 'body'=>[282,212,337,212,337,286,282,286,], 'legs'=>[282,276,287,276,332,276,337,276,356,351,260,351,], 'ex'=>0, 'hit'=>[367,227,430,248,428,271,356,269,] },
+{ 'x'=>267, 'y'=>165, 'w'=>116, 'h'=>187, 'head'=>[289,165,317,165,317,215,289,215,], 'body'=>[273,210,328,210,328,286,273,286,], 'legs'=>[273,276,278,276,323,276,373,271,379,352,289,352,], 'ex'=>0 },
+{ 'x'=>246, 'y'=>167, 'w'=>145, 'h'=>188, 'head'=>[268,167,296,167,296,217,268,217,], 'body'=>[254,212,309,212,309,288,254,288,], 'legs'=>[254,278,259,278,304,278,371,259,406,343,287,355,], 'ex'=>0 },
+{ 'x'=>245, 'y'=>185, 'w'=>181, 'h'=>168, 'head'=>[271,185,309,185,309,235,271,235,], 'body'=>[251,230,306,230,306,296,251,296,], 'legs'=>[251,286,256,286,364,252,426,318,312,353,287,353,], 'ex'=>0 },
+{ 'x'=>243, 'y'=>171, 'w'=>215, 'h'=>182, 'head'=>[268,171,299,171,299,221,268,221,], 'body'=>[250,216,305,216,305,289,250,289,], 'legs'=>[250,279,255,279,372,258,456,304,312,353,284,353,], 'ex'=>0 },
+{ 'x'=>244, 'y'=>176, 'w'=>219, 'h'=>177, 'head'=>[271,176,303,176,303,226,271,226,], 'body'=>[250,221,305,221,305,292,250,292,], 'legs'=>[250,282,255,282,371,253,463,288,311,353,283,353,], 'ex'=>0, 'hit'=>[352,254,470,283,451,309,340,304,] },
+{ 'x'=>263, 'y'=> 29, 'w'=>108, 'h'=>320, 'head'=>[294, 29,324, 29,324, 79,294, 79,], 'body'=>[271, 74,326, 74,326,216,271,216,], 'legs'=>[271,206,276,206,321,206,326,206,357,349,266,349,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 27, 'w'=> 98, 'h'=>321, 'head'=>[295, 27,320, 27,320, 77,295, 77,], 'body'=>[272, 72,327, 72,327,215,272,215,], 'legs'=>[272,205,277,205,322,205,327,205,357,348,266,348,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 26, 'w'=> 98, 'h'=>322, 'head'=>[297, 26,321, 26,321, 76,297, 76,], 'body'=>[275, 71,330, 71,330,214,275,214,], 'legs'=>[275,204,280,204,325,204,330,204,357,348,266,348,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 26, 'w'=> 98, 'h'=>321, 'head'=>[299, 26,320, 26,320, 76,299, 76,], 'body'=>[278, 71,333, 71,333,214,278,214,], 'legs'=>[278,204,283,204,328,204,333,204,357,347,266,347,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 27, 'w'=> 98, 'h'=>319, 'head'=>[297, 27,320, 27,320, 77,297, 77,], 'body'=>[277, 72,332, 72,332,214,277,214,], 'legs'=>[277,204,282,204,327,204,332,204,357,346,266,346,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 26, 'w'=> 98, 'h'=>320, 'head'=>[297, 26,321, 26,321, 76,297, 76,], 'body'=>[280, 71,335, 71,335,213,280,213,], 'legs'=>[280,203,285,203,330,203,335,203,358,346,267,346,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 26, 'w'=> 98, 'h'=>320, 'head'=>[299, 26,320, 26,320, 76,299, 76,], 'body'=>[280, 71,335, 71,335,213,280,213,], 'legs'=>[280,203,285,203,330,203,335,203,357,346,266,346,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 30, 'w'=>124, 'h'=>316, 'head'=>[293, 30,324, 30,324, 80,293, 80,], 'body'=>[271, 75,326, 75,326,215,271,215,], 'legs'=>[271,205,276,205,321,205,326,205,363,346,264,346,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 32, 'w'=>156, 'h'=>314, 'head'=>[297, 32,327, 32,327, 82,297, 82,], 'body'=>[275, 77,330, 77,330,216,275,216,], 'legs'=>[275,206,280,206,325,206,330,206,364,346,265,346,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 37, 'w'=>138, 'h'=>308, 'head'=>[301, 37,335, 37,335, 87,301, 87,], 'body'=>[277, 82,332, 82,332,218,277,218,], 'legs'=>[277,208,282,208,327,208,332,208,363,345,264,345,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 41, 'w'=>140, 'h'=>305, 'head'=>[307, 41,344, 41,344, 91,307, 91,], 'body'=>[283, 86,338, 86,338,221,283,221,], 'legs'=>[283,211,288,211,333,211,338,211,363,346,265,346,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 35, 'w'=>128, 'h'=>311, 'head'=>[307, 35,339, 35,339, 85,307, 85,], 'body'=>[282, 80,337, 80,337,218,282,218,], 'legs'=>[282,208,287,208,332,208,337,208,362,346,263,346,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 34, 'w'=>119, 'h'=>311, 'head'=>[304, 34,336, 34,336, 84,304, 84,], 'body'=>[281, 79,336, 79,336,217,281,217,], 'legs'=>[281,207,286,207,331,207,336,207,365,345,264,345,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 32, 'w'=>110, 'h'=>314, 'head'=>[297, 32,328, 32,328, 82,297, 82,], 'body'=>[276, 77,331, 77,331,216,276,216,], 'legs'=>[276,206,281,206,326,206,331,206,360,346,257,346,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 35, 'w'=>110, 'h'=>311, 'head'=>[304, 35,335, 35,335, 85,304, 85,], 'body'=>[282, 80,337, 80,337,218,282,218,], 'legs'=>[282,208,287,208,332,208,337,208,360,346,257,346,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 37, 'w'=>129, 'h'=>309, 'head'=>[311, 37,346, 37,346, 87,311, 87,], 'body'=>[288, 82,343, 82,343,219,288,219,], 'legs'=>[288,209,293,209,338,209,343,209,358,346,258,346,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 43, 'w'=>191, 'h'=>304, 'head'=>[324, 43,366, 43,366, 93,324, 93,], 'body'=>[292, 88,347, 88,347,222,292,222,], 'legs'=>[292,212,297,212,342,212,347,212,359,347,257,347,], 'ex'=>0, 'hit'=>[383, 78,439, 68,441, 88,388,101,] },
+{ 'x'=>260, 'y'=> 31, 'w'=>113, 'h'=>316, 'head'=>[293, 31,323, 31,323, 81,293, 81,], 'body'=>[273, 76,328, 76,328,216,273,216,], 'legs'=>[273,206,278,206,323,206,328,206,369,347,263,347,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 35, 'w'=>112, 'h'=>311, 'head'=>[309, 35,339, 35,339, 85,309, 85,], 'body'=>[277, 80,332, 80,332,218,277,218,], 'legs'=>[277,208,282,208,327,208,332,208,368,346,263,346,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 39, 'w'=>111, 'h'=>306, 'head'=>[322, 39,352, 39,352, 89,322, 89,], 'body'=>[285, 84,340, 84,340,219,285,219,], 'legs'=>[285,209,290,209,335,209,340,209,367,345,263,345,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 56, 'w'=>152, 'h'=>291, 'head'=>[337, 56,376, 56,376,106,337,106,], 'body'=>[301,101,356,101,356,229,301,229,], 'legs'=>[301,219,306,219,351,219,356,219,368,347,260,347,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 59, 'w'=>200, 'h'=>289, 'head'=>[338, 59,376, 59,376,109,338,109,], 'body'=>[334, 89,385,106,353,231,298,231,], 'legs'=>[298,221,303,221,348,221,353,221,369,348,263,348,], 'ex'=>0, 'hit'=>[397,115,457,126,450,141,403,135,] },
+{ 'x'=>263, 'y'=> 36, 'w'=>106, 'h'=>311, 'head'=>[299, 36,330, 36,330, 86,299, 86,], 'body'=>[283, 81,338, 81,338,219,283,219,], 'legs'=>[283,209,288,209,333,209,338,209,365,347,266,347,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 38, 'w'=> 93, 'h'=>297, 'head'=>[305, 38,335, 38,335, 88,305, 88,], 'body'=>[296, 83,351, 83,351,214,296,214,], 'legs'=>[296,204,301,204,346,204,351,204,364,335,278,335,], 'ex'=>1 },
+{ 'x'=>292, 'y'=> 38, 'w'=>101, 'h'=>297, 'head'=>[311, 38,340, 38,340, 88,311, 88,], 'body'=>[298, 83,353, 83,353,214,298,214,], 'legs'=>[298,204,303,204,348,204,353,204,359,335,314,335,], 'ex'=>1 },
+{ 'x'=>291, 'y'=> 40, 'w'=>113, 'h'=>294, 'head'=>[314, 40,344, 40,344, 90,314, 90,], 'body'=>[299, 85,354, 85,354,214,299,214,], 'legs'=>[299,204,304,204,349,204,354,204,368,334,329,334,], 'ex'=>1 },
+{ 'x'=>290, 'y'=> 49, 'w'=>162, 'h'=>285, 'head'=>[314, 49,344, 49,344, 99,314, 99,], 'body'=>[299, 94,354, 94,354,219,299,219,], 'legs'=>[299,209,304,209,349,209,354,209,366,334,330,334,], 'ex'=>1 },
+{ 'x'=>290, 'y'=> 54, 'w'=>186, 'h'=>280, 'head'=>[316, 54,344, 54,344,104,316,104,], 'body'=>[308, 99,363, 99,363,221,308,221,], 'legs'=>[308,211,313,211,358,211,363,211,368,334,333,334,], 'ex'=>0, 'hit'=>[405,142,465,107,471,151,403,166,] },
+{ 'x'=>257, 'y'=> 35, 'w'=>119, 'h'=>306, 'head'=>[302, 35,332, 35,332, 85,302, 85,], 'body'=>[282, 80,337, 80,337,215,282,215,], 'legs'=>[282,205,287,205,332,205,337,205,372,341,260,341,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 40, 'w'=>116, 'h'=>300, 'head'=>[317, 40,348, 40,348, 90,317, 90,], 'body'=>[303, 85,358, 85,358,217,303,217,], 'legs'=>[303,207,308,207,353,207,358,207,369,340,261,340,], 'ex'=>1 },
+{ 'x'=>301, 'y'=> 40, 'w'=> 94, 'h'=>299, 'head'=>[328, 40,359, 40,359, 90,328, 90,], 'body'=>[312, 85,367, 85,367,217,312,217,], 'legs'=>[312,207,317,207,362,207,367,207,366,339,339,339,], 'ex'=>1 },
+{ 'x'=>306, 'y'=> 38, 'w'=>114, 'h'=>300, 'head'=>[331, 38,360, 38,360, 88,331, 88,], 'body'=>[313, 83,368, 83,368,215,313,215,], 'legs'=>[313,205,318,205,363,205,368,205,364,338,339,338,], 'ex'=>1 },
+{ 'x'=>306, 'y'=> 43, 'w'=>190, 'h'=>296, 'head'=>[333, 43,364, 43,364, 93,333, 93,], 'body'=>[315, 88,370, 88,370,218,315,218,], 'legs'=>[315,208,320,208,365,208,370,208,368,339,339,339,], 'ex'=>1 },
+{ 'x'=>305, 'y'=> 47, 'w'=>199, 'h'=>292, 'head'=>[336, 47,369, 47,369, 97,336, 97,], 'body'=>[320, 92,375, 92,375,220,320,220,], 'legs'=>[320,210,325,210,370,210,375,210,368,339,341,339,], 'ex'=>0, 'hit'=>[431,185,501,199,485,228,423,210,] },
+{ 'x'=>257, 'y'=> 33, 'w'=>112, 'h'=>316, 'head'=>[316, 33,346, 33,346, 83,316, 83,], 'body'=>[276, 78,331, 78,331,218,276,218,], 'legs'=>[276,208,281,208,326,208,331,208,361,349,260,349,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 39, 'w'=>114, 'h'=>308, 'head'=>[318, 39,350, 39,350, 89,318, 89,], 'body'=>[286, 84,341, 84,341,220,286,220,], 'legs'=>[286,210,291,210,336,210,341,210,362,347,258,347,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 45, 'w'=>111, 'h'=>305, 'head'=>[319, 45,350, 45,350, 95,319, 95,], 'body'=>[296, 90,351, 90,351,225,296,225,], 'legs'=>[296,215,301,215,346,215,351,215,363,350,270,350,], 'ex'=>1 },
+{ 'x'=>276, 'y'=> 47, 'w'=>124, 'h'=>319, 'head'=>[316, 47,344, 47,344, 97,316, 97,], 'body'=>[300, 92,355, 92,355,234,300,234,], 'legs'=>[300,224,305,224,350,224,355,224,365,366,323,366,], 'ex'=>1 },
+{ 'x'=>289, 'y'=> 51, 'w'=>160, 'h'=>293, 'head'=>[313, 51,341, 51,341,101,313,101,], 'body'=>[298, 96,353, 96,353,225,298,225,], 'legs'=>[298,215,303,215,348,215,353,215,445,344,335,344,], 'ex'=>1 },
+{ 'x'=>286, 'y'=> 55, 'w'=>200, 'h'=>291, 'head'=>[306, 55,335, 55,335,105,306,105,], 'body'=>[301,100,356,100,356,228,301,228,], 'legs'=>[301,218,306,218,351,218,356,218,367,342,334,346,], 'ex'=>0, 'hit'=>[434,243,485,284,473,305,426,265,] },
+{ 'x'=>283, 'y'=> 61, 'w'=>155, 'h'=>285, 'head'=>[297, 61,332, 61,332,111,297,111,], 'body'=>[301,106,356,106,356,231,301,231,], 'legs'=>[301,221,306,221,351,221,356,221,360,346,330,346,], 'ex'=>1 },
+{ 'x'=>278, 'y'=> 54, 'w'=>108, 'h'=>290, 'head'=>[284, 54,325, 54,325,104,284,104,], 'body'=>[296, 99,351, 99,351,226,296,226,], 'legs'=>[296,216,301,216,346,216,351,216,360,344,329,344,], 'ex'=>1 },
+{ 'x'=>245, 'y'=> 35, 'w'=>131, 'h'=>308, 'head'=>[273, 35,303, 35,303, 85,273, 85,], 'body'=>[281, 80,336, 80,336,216,281,216,], 'legs'=>[281,206,286,206,331,206,336,206,372,343,248,343,], 'ex'=>1 },
+{ 'x'=>233, 'y'=> 34, 'w'=>145, 'h'=>307, 'head'=>[268, 34,296, 34,296, 84,268, 84,], 'body'=>[264, 79,319, 79,319,215,264,215,], 'legs'=>[264,205,269,205,314,205,319,205,374,341,236,341,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 42, 'w'=>132, 'h'=>295, 'head'=>[270, 42,294, 42,294, 92,270, 92,], 'body'=>[247, 87,302, 87,302,217,247,217,], 'legs'=>[247,207,252,207,297,207,302,207,358,337,235,337,], 'ex'=>1 },
+{ 'x'=>232, 'y'=> 38, 'w'=>129, 'h'=>299, 'head'=>[279, 38,307, 38,307, 88,279, 88,], 'body'=>[254, 83,309, 83,309,215,254,215,], 'legs'=>[254,205,259,205,304,205,309,205,357,337,235,337,], 'ex'=>1 },
+{ 'x'=>231, 'y'=> 39, 'w'=>131, 'h'=>298, 'head'=>[298, 39,327, 39,327, 89,298, 89,], 'body'=>[274, 84,329, 84,329,215,274,215,], 'legs'=>[274,205,279,205,324,205,329,205,358,337,234,337,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 29, 'w'=>111, 'h'=>305, 'head'=>[306, 29,334, 29,334, 79,306, 79,], 'body'=>[284, 74,339, 74,339,209,284,209,], 'legs'=>[284,199,289,199,334,199,339,199,356,334,254,334,], 'ex'=>1 },
+{ 'x'=>243, 'y'=> 46, 'w'=>117, 'h'=>296, 'head'=>[294, 46,323, 46,323, 96,294, 96,], 'body'=>[283, 91,338, 91,338,221,283,221,], 'legs'=>[283,211,288,211,333,211,338,211,356,342,246,342,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 43, 'w'=> 94, 'h'=>290, 'head'=>[308, 43,338, 43,338, 93,308, 93,], 'body'=>[294, 88,349, 88,349,215,294,215,], 'legs'=>[294,205,299,205,344,205,349,205,354,333,283,333,], 'ex'=>1 },
+{ 'x'=>289, 'y'=> 42, 'w'=>101, 'h'=>292, 'head'=>[311, 42,340, 42,340, 92,311, 92,], 'body'=>[298, 87,353, 87,353,215,298,215,], 'legs'=>[298,205,303,205,348,205,353,205,351,334,323,334,], 'ex'=>1 },
+{ 'x'=>289, 'y'=> 41, 'w'=>115, 'h'=>294, 'head'=>[312, 41,340, 41,340, 91,312, 91,], 'body'=>[300, 86,355, 86,355,215,300,215,], 'legs'=>[300,205,305,205,350,205,355,205,356,335,324,335,], 'ex'=>1 },
+{ 'x'=>287, 'y'=> 44, 'w'=>168, 'h'=>291, 'head'=>[309, 44,340, 44,340, 94,309, 94,], 'body'=>[299, 89,354, 89,354,217,299,217,], 'legs'=>[299,207,304,207,349,207,354,207,352,335,323,335,], 'ex'=>1 },
+{ 'x'=>286, 'y'=> 47, 'w'=>203, 'h'=>287, 'head'=>[311, 47,340, 47,340, 97,311, 97,], 'body'=>[300, 92,355, 92,355,218,300,218,], 'legs'=>[300,208,305,208,350,208,355,208,352,334,324,334,], 'ex'=>0, 'hit'=>[413,171,480,171,474,201,409,202,] },
+{ 'x'=>248, 'y'=> 37, 'w'=>120, 'h'=>309, 'head'=>[303, 37,333, 37,333, 87,303, 87,], 'body'=>[286, 82,341, 82,341,219,286,219,], 'legs'=>[286,209,291,209,336,209,341,209,364,346,251,346,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 40, 'w'=>116, 'h'=>302, 'head'=>[308, 40,338, 40,338, 90,308, 90,], 'body'=>[297, 85,352, 85,352,218,297,218,], 'legs'=>[297,208,302,208,347,208,352,208,362,342,255,342,], 'ex'=>1 },
+{ 'x'=>289, 'y'=> 40, 'w'=> 92, 'h'=>294, 'head'=>[315, 40,344, 40,344, 90,315, 90,], 'body'=>[303, 85,358, 85,358,214,303,214,], 'legs'=>[303,204,308,204,353,204,358,204,363,334,292,334,], 'ex'=>1 },
+{ 'x'=>287, 'y'=> 41, 'w'=>128, 'h'=>292, 'head'=>[317, 41,348, 41,348, 91,317, 91,], 'body'=>[302, 86,357, 86,357,214,302,214,], 'legs'=>[302,204,307,204,352,204,357,204,362,333,332,333,], 'ex'=>1 },
+{ 'x'=>299, 'y'=> 36, 'w'=>122, 'h'=>298, 'head'=>[325, 36,354, 36,354, 86,325, 86,], 'body'=>[310, 81,365, 81,365,212,310,212,], 'legs'=>[310,202,315,202,360,202,365,202,366,334,333,334,], 'ex'=>0, 'hit'=>[383,163,415,167,388,255,365,244,] },
+{ 'x'=>290, 'y'=> 41, 'w'=>133, 'h'=>293, 'head'=>[321, 41,351, 41,351, 91,321, 91,], 'body'=>[307, 86,362, 86,362,215,307,215,], 'legs'=>[307,205,312,205,357,205,362,205,363,334,332,334,], 'ex'=>0, 'hit'=>[390,150,419,148,415,245,381,236,] },
+{ 'x'=>257, 'y'=> 43, 'w'=>121, 'h'=>299, 'head'=>[305, 43,335, 43,335, 93,305, 93,], 'body'=>[286, 88,341, 88,341,220,286,220,], 'legs'=>[286,210,291,210,336,210,341,210,374,342,260,342,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 44, 'w'=>116, 'h'=>298, 'head'=>[312, 44,340, 44,340, 94,312, 94,], 'body'=>[300, 89,355, 89,355,220,300,220,], 'legs'=>[300,210,305,210,350,210,355,210,369,342,260,342,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 42, 'w'=>149, 'h'=>299, 'head'=>[316, 42,350, 42,350, 92,316, 92,], 'body'=>[308, 87,363, 87,363,219,308,219,], 'legs'=>[308,209,313,209,358,209,363,209,374,341,259,341,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 44, 'w'=>156, 'h'=>298, 'head'=>[320, 44,356, 44,356, 94,320, 94,], 'body'=>[309, 89,364, 89,364,220,309,220,], 'legs'=>[309,210,314,210,359,210,364,210,369,342,257,342,], 'ex'=>0, 'hit'=>[379, 82,404, 78,403, 99,380,110,] },
+{ 'x'=>251, 'y'=> 46, 'w'=>169, 'h'=>297, 'head'=>[328, 46,361, 46,361, 96,328, 96,], 'body'=>[316, 91,371, 91,371,222,316,222,], 'legs'=>[316,212,321,212,366,212,371,212,366,343,254,343,], 'ex'=>0, 'hit'=>[382, 86,414, 88,411,106,382,117,] },
+{ 'x'=>259, 'y'=> 38, 'w'=>113, 'h'=>308, 'head'=>[290, 38,318, 38,318, 88,290, 88,], 'body'=>[275, 83,330, 83,330,219,275,219,], 'legs'=>[275,209,280,209,325,209,330,209,368,346,262,346,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 36, 'w'=>113, 'h'=>308, 'head'=>[290, 36,318, 36,318, 86,290, 86,], 'body'=>[276, 81,331, 81,331,217,276,217,], 'legs'=>[276,207,281,207,326,207,331,207,368,344,262,344,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 37, 'w'=>111, 'h'=>308, 'head'=>[292, 37,321, 37,321, 87,292, 87,], 'body'=>[277, 82,332, 82,332,218,277,218,], 'legs'=>[277,208,282,208,327,208,332,208,367,345,263,345,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 38, 'w'=>111, 'h'=>306, 'head'=>[297, 38,325, 38,325, 88,297, 88,], 'body'=>[281, 83,336, 83,336,218,281,218,], 'legs'=>[281,208,286,208,331,208,336,208,367,344,263,344,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 41, 'w'=>112, 'h'=>304, 'head'=>[302, 41,331, 41,331, 91,302, 91,], 'body'=>[284, 86,339, 86,339,220,284,220,], 'legs'=>[284,210,289,210,334,210,339,210,368,345,263,345,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 43, 'w'=>173, 'h'=>302, 'head'=>[304, 43,333, 43,333, 93,304, 93,], 'body'=>[286, 88,341, 88,341,221,286,221,], 'legs'=>[286,211,291,211,336,211,341,211,368,345,263,345,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 45, 'w'=>178, 'h'=>299, 'head'=>[308, 45,339, 45,339, 95,308, 95,], 'body'=>[289, 90,344, 90,344,222,289,222,], 'legs'=>[289,212,294,212,339,212,344,212,367,344,263,344,], 'ex'=>0, 'hit'=>[427, 97,437, 97,445,112,427,107,] },
+{ 'x'=>257, 'y'=> 40, 'w'=>119, 'h'=>305, 'head'=>[289, 40,317, 40,317, 90,289, 90,], 'body'=>[270, 85,325, 85,325,220,270,220,], 'legs'=>[270,210,275,210,320,210,325,210,372,345,262,345,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 44, 'w'=>124, 'h'=>300, 'head'=>[293, 44,324, 44,324, 94,293, 94,], 'body'=>[272, 89,327, 89,327,221,272,221,], 'legs'=>[272,211,277,211,322,211,327,211,377,344,261,344,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 46, 'w'=>126, 'h'=>299, 'head'=>[302, 46,332, 46,332, 96,302, 96,], 'body'=>[276, 91,331, 91,331,223,276,223,], 'legs'=>[276,213,281,213,326,213,331,213,380,345,261,345,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 52, 'w'=>125, 'h'=>291, 'head'=>[313, 52,345, 52,345,102,313,102,], 'body'=>[283, 97,338, 97,338,225,283,225,], 'legs'=>[283,215,288,215,333,215,338,215,379,343,261,343,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 53, 'w'=>125, 'h'=>291, 'head'=>[322, 53,353, 53,353,103,322,103,], 'body'=>[300, 98,355, 98,355,226,300,226,], 'legs'=>[300,216,305,216,350,216,355,216,379,344,261,344,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 50, 'w'=>173, 'h'=>293, 'head'=>[327, 50,358, 50,358,100,327,100,], 'body'=>[313, 95,368, 95,368,224,313,224,], 'legs'=>[313,214,318,214,363,214,368,214,379,343,264,343,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 50, 'w'=>179, 'h'=>293, 'head'=>[330, 50,360, 50,360,100,330,100,], 'body'=>[318, 95,373, 95,373,224,318,224,], 'legs'=>[318,214,323,214,368,214,373,214,380,343,266,343,], 'ex'=>0, 'hit'=>[421, 73,445, 71,428,134,390,137,] },
+{ 'x'=>263, 'y'=> 44, 'w'=>170, 'h'=>298, 'head'=>[343, 44,371, 44,371, 94,343, 94,], 'body'=>[324, 89,379, 89,379,220,324,220,], 'legs'=>[324,210,329,210,374,210,379,210,380,342,266,342,], 'ex'=>0, 'hit'=>[416, 47,432, 46,428,111,397,111,] },
+{ 'x'=>252, 'y'=> 38, 'w'=>118, 'h'=>307, 'head'=>[300, 38,330, 38,330, 88,300, 88,], 'body'=>[275, 83,330, 83,330,219,275,219,], 'legs'=>[275,209,280,209,325,209,330,209,366,345,255,345,], 'ex'=>1 },
+{ 'x'=>253, 'y'=> 49, 'w'=>125, 'h'=>295, 'head'=>[326, 49,358, 49,358, 99,326, 99,], 'body'=>[285, 94,340, 94,340,224,285,224,], 'legs'=>[285,214,290,214,335,214,340,214,372,344,256,344,], 'ex'=>1 },
+{ 'x'=>253, 'y'=> 83, 'w'=>159, 'h'=>260, 'head'=>[343, 83,388, 83,388,133,343,133,], 'body'=>[292,128,347,128,347,240,292,240,], 'legs'=>[292,230,297,230,342,230,347,230,370,343,256,343,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>107, 'w'=>170, 'h'=>236, 'head'=>[334,107,399,107,399,157,334,157,], 'body'=>[292,152,347,152,347,252,292,252,], 'legs'=>[292,242,297,242,342,242,347,242,372,343,256,343,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>148, 'w'=>188, 'h'=>194, 'head'=>[310,148,402,148,402,198,310,198,], 'body'=>[301,193,356,193,356,272,301,272,], 'legs'=>[301,262,306,262,351,262,356,262,370,342,254,342,], 'ex'=>1 },
+{ 'x'=>248, 'y'=>134, 'w'=>198, 'h'=>208, 'head'=>[320,134,396,134,396,184,320,184,], 'body'=>[299,179,354,179,354,265,299,265,], 'legs'=>[299,255,304,255,349,255,354,255,370,342,251,342,], 'ex'=>1 },
+{ 'x'=>248, 'y'=>115, 'w'=>192, 'h'=>227, 'head'=>[328,115,393,115,393,165,328,165,], 'body'=>[292,160,347,160,347,256,292,256,], 'legs'=>[292,246,297,246,342,246,347,246,371,342,251,342,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 87, 'w'=>187, 'h'=>254, 'head'=>[337, 87,381, 87,381,137,337,137,], 'body'=>[293,132,348,132,348,241,293,241,], 'legs'=>[293,231,298,231,343,231,348,231,370,341,251,341,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 63, 'w'=>188, 'h'=>280, 'head'=>[327, 63,371, 63,371,113,327,113,], 'body'=>[295,108,350,108,350,230,295,230,], 'legs'=>[295,220,300,220,345,220,350,220,369,343,251,343,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 42, 'w'=>173, 'h'=>300, 'head'=>[307, 42,351, 42,351, 92,307, 92,], 'body'=>[295, 87,350, 87,350,219,295,219,], 'legs'=>[295,209,300,209,345,209,350,209,370,342,251,342,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 20, 'w'=>143, 'h'=>320, 'head'=>[290, 20,323, 20,323, 70,290, 70,], 'body'=>[290, 65,345, 65,345,207,290,207,], 'legs'=>[290,197,295,197,340,197,345,197,368,340,251,340,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 11, 'w'=>132, 'h'=>329, 'head'=>[283, 11,303, 11,303, 61,283, 61,], 'body'=>[284, 56,339, 56,339,203,284,203,], 'legs'=>[284,193,289,193,334,193,339,193,369,340,251,340,], 'ex'=>1 },
+{ 'x'=>231, 'y'=> 32, 'w'=>152, 'h'=>309, 'head'=>[263, 32,293, 32,293, 82,263, 82,], 'body'=>[277, 77,332, 77,332,214,277,214,], 'legs'=>[277,204,282,204,327,204,332,204,368,341,248,341,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 64, 'w'=>175, 'h'=>276, 'head'=>[234, 64,282, 64,282,114,234,114,], 'body'=>[274,109,329,109,329,229,274,229,], 'legs'=>[274,219,279,219,324,219,329,219,369,340,247,340,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 83, 'w'=>187, 'h'=>257, 'head'=>[224, 83,268, 83,268,133,224,133,], 'body'=>[255,128,310,128,310,239,255,239,], 'legs'=>[255,229,260,229,305,229,310,229,368,340,248,340,], 'ex'=>1 },
+{ 'x'=>187, 'y'=>103, 'w'=>185, 'h'=>236, 'head'=>[216,103,275,103,275,153,216,153,], 'body'=>[258,148,313,148,313,248,258,248,], 'legs'=>[258,238,263,238,308,238,313,238,368,339,247,339,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>126, 'w'=>187, 'h'=>212, 'head'=>[206,126,286,126,286,176,206,176,], 'body'=>[239,171,294,171,294,259,239,259,], 'legs'=>[239,249,244,249,289,249,294,249,368,338,245,338,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>105, 'w'=>179, 'h'=>236, 'head'=>[202,105,264,105,264,155,202,155,], 'body'=>[239,150,294,150,294,250,239,250,], 'legs'=>[239,240,244,240,289,240,294,240,369,341,243,341,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 83, 'w'=>168, 'h'=>257, 'head'=>[216, 83,258, 83,258,133,216,133,], 'body'=>[245,128,300,128,300,239,245,239,], 'legs'=>[245,229,250,229,295,229,300,229,369,340,242,340,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 62, 'w'=>151, 'h'=>279, 'head'=>[231, 62,261, 62,261,112,231,112,], 'body'=>[244,107,299,107,299,229,244,229,], 'legs'=>[244,219,249,219,294,219,299,219,369,341,243,341,], 'ex'=>1 },
+{ 'x'=>233, 'y'=> 46, 'w'=>139, 'h'=>294, 'head'=>[249, 46,272, 46,272, 96,249, 96,], 'body'=>[247, 91,302, 91,302,220,247,220,], 'legs'=>[247,210,252,210,297,210,302,210,368,340,244,340,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 36, 'w'=>131, 'h'=>304, 'head'=>[266, 36,294, 36,294, 86,266, 86,], 'body'=>[257, 81,312, 81,312,215,257,215,], 'legs'=>[257,205,262,205,307,205,312,205,368,340,244,340,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 35, 'w'=>146, 'h'=>305, 'head'=>[296, 35,327, 35,327, 85,296, 85,], 'body'=>[282, 80,337, 80,337,215,282,215,], 'legs'=>[282,205,287,205,332,205,337,205,371,340,245,340,], 'ex'=>1 },
+{ 'x'=>243, 'y'=> 34, 'w'=>155, 'h'=>305, 'head'=>[308, 34,338, 34,338, 84,308, 84,], 'body'=>[293, 79,348, 79,348,214,293,214,], 'legs'=>[293,204,298,204,343,204,348,204,371,339,246,339,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 35, 'w'=>123, 'h'=>307, 'head'=>[287, 35,316, 35,316, 85,287, 85,], 'body'=>[278, 80,333, 80,333,216,278,216,], 'legs'=>[278,206,283,206,328,206,333,206,377,342,261,342,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 35, 'w'=>125, 'h'=>308, 'head'=>[290, 35,321, 35,321, 85,290, 85,], 'body'=>[279, 80,334, 80,334,216,279,216,], 'legs'=>[279,206,284,206,329,206,334,206,378,343,260,343,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 37, 'w'=>125, 'h'=>305, 'head'=>[298, 37,330, 37,330, 87,298, 87,], 'body'=>[281, 82,336, 82,336,217,281,217,], 'legs'=>[281,207,286,207,331,207,336,207,378,342,260,342,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 38, 'w'=>125, 'h'=>303, 'head'=>[315, 38,346, 38,346, 88,315, 88,], 'body'=>[285, 83,340, 83,340,217,285,217,], 'legs'=>[285,207,290,207,335,207,340,207,377,341,261,341,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 44, 'w'=>132, 'h'=>298, 'head'=>[324, 44,356, 44,356, 94,324, 94,], 'body'=>[287, 89,342, 89,342,220,287,220,], 'legs'=>[287,210,292,210,337,210,342,210,376,342,261,342,], 'ex'=>0, 'hit'=>[371, 78,381, 78,386, 91,371, 88,] },
+{ 'x'=>245, 'y'=> 36, 'w'=>133, 'h'=>305, 'head'=>[299, 36,327, 36,327, 86,299, 86,], 'body'=>[278, 81,333, 81,333,216,278,216,], 'legs'=>[278,206,283,206,328,206,333,206,355,341,248,341,], 'ex'=>1 },
+{ 'x'=>245, 'y'=> 35, 'w'=>132, 'h'=>308, 'head'=>[294, 35,320, 35,320, 85,294, 85,], 'body'=>[278, 80,333, 80,333,216,278,216,], 'legs'=>[278,206,283,206,328,206,333,206,355,343,248,343,], 'ex'=>1 },
+{ 'x'=>245, 'y'=> 39, 'w'=>128, 'h'=>303, 'head'=>[274, 39,304, 39,304, 89,274, 89,], 'body'=>[277, 84,332, 84,332,218,277,218,], 'legs'=>[277,208,282,208,327,208,332,208,356,342,248,342,], 'ex'=>1 },
+{ 'x'=>246, 'y'=> 53, 'w'=>122, 'h'=>288, 'head'=>[260, 53,297, 53,297,103,260,103,], 'body'=>[277, 98,332, 98,332,224,277,224,], 'legs'=>[277,214,282,214,327,214,332,214,356,341,249,341,], 'ex'=>1 },
+{ 'x'=>238, 'y'=> 62, 'w'=>123, 'h'=>281, 'head'=>[246, 62,291, 62,291,112,246,112,], 'body'=>[275,107,330,107,330,230,275,230,], 'legs'=>[275,220,280,220,325,220,330,220,357,343,248,343,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 34, 'w'=>147, 'h'=>304, 'head'=>[301, 34,328, 34,328, 84,301, 84,], 'body'=>[281, 79,336, 79,336,213,281,213,], 'legs'=>[281,203,286,203,331,203,336,203,344,338,240,338,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 35, 'w'=>107, 'h'=>305, 'head'=>[289, 35,322, 35,322, 85,289, 85,], 'body'=>[260, 80,315, 80,315,215,260,215,], 'legs'=>[260,205,265,205,310,205,315,205,344,340,244,340,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 62, 'w'=>123, 'h'=>278, 'head'=>[274, 62,318, 62,318,112,274,112,], 'body'=>[238,107,293,107,293,228,238,228,], 'legs'=>[238,218,243,218,288,218,293,218,343,340,241,340,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 92, 'w'=>126, 'h'=>248, 'head'=>[239, 92,317, 92,317,142,239,142,], 'body'=>[238,137,293,137,293,243,238,243,], 'legs'=>[238,233,243,233,288,233,293,233,341,340,237,340,], 'ex'=>1 },
+{ 'x'=>212, 'y'=>107, 'w'=>128, 'h'=>233, 'head'=>[223,107,304,107,304,157,223,157,], 'body'=>[230,152,285,152,285,251,230,251,], 'legs'=>[230,241,235,241,280,241,285,241,336,340,233,340,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 35, 'w'=>121, 'h'=>310, 'head'=>[301, 35,331, 35,331, 85,301, 85,], 'body'=>[282, 80,337, 80,337,217,282,217,], 'legs'=>[282,207,287,207,332,207,337,207,359,345,258,345,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 36, 'w'=>110, 'h'=>308, 'head'=>[308, 36,338, 36,338, 86,308, 86,], 'body'=>[280, 81,335, 81,335,217,280,217,], 'legs'=>[280,207,285,207,330,207,335,207,359,344,257,344,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 53, 'w'=>116, 'h'=>291, 'head'=>[321, 53,353, 53,353,103,321,103,], 'body'=>[276, 98,331, 98,331,226,276,226,], 'legs'=>[276,216,281,216,326,216,331,216,357,344,258,344,], 'ex'=>1 },
+{ 'x'=>254, 'y'=>100, 'w'=>122, 'h'=>244, 'head'=>[303,100,358,100,358,150,303,150,], 'body'=>[269,145,324,145,324,249,269,249,], 'legs'=>[269,239,274,239,319,239,324,239,357,344,257,344,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>134, 'w'=>128, 'h'=>212, 'head'=>[272,134,353,134,353,184,272,184,], 'body'=>[263,179,318,179,318,267,263,267,], 'legs'=>[263,257,268,257,313,257,318,257,357,346,257,346,], 'ex'=>1 },
+{ 'x'=>254, 'y'=>144, 'w'=>125, 'h'=>201, 'head'=>[269,144,351,144,351,194,269,194,], 'body'=>[270,189,325,189,325,272,270,272,], 'legs'=>[270,262,275,262,320,262,325,262,358,345,257,345,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>140, 'w'=>123, 'h'=>206, 'head'=>[274,140,351,140,351,190,274,190,], 'body'=>[273,185,328,185,328,270,273,270,], 'legs'=>[273,260,278,260,323,260,328,260,356,346,258,346,], 'ex'=>1 },
+{ 'x'=>254, 'y'=>141, 'w'=>128, 'h'=>202, 'head'=>[284,141,361,141,361,191,284,191,], 'body'=>[285,186,340,186,340,269,285,269,], 'legs'=>[285,259,290,259,335,259,340,259,357,343,257,343,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>143, 'w'=>127, 'h'=>200, 'head'=>[293,143,361,143,361,193,293,193,], 'body'=>[288,188,343,188,343,270,288,270,], 'legs'=>[288,260,293,260,338,260,343,260,358,343,258,343,], 'ex'=>1 },
+{ 'x'=>254, 'y'=>152, 'w'=>124, 'h'=>191, 'head'=>[289,152,357,152,357,202,289,202,], 'body'=>[290,197,345,197,345,275,290,275,], 'legs'=>[290,265,295,265,340,265,345,265,358,343,257,343,], 'ex'=>1 },
+{ 'x'=>254, 'y'=>151, 'w'=>125, 'h'=>193, 'head'=>[287,151,355,151,355,201,287,201,], 'body'=>[290,196,345,196,345,275,290,275,], 'legs'=>[290,265,295,265,340,265,345,265,356,344,257,344,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>148, 'w'=>127, 'h'=>196, 'head'=>[284,148,355,148,355,198,284,198,], 'body'=>[285,193,340,193,340,273,285,273,], 'legs'=>[285,263,290,263,335,263,340,263,358,344,256,344,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>140, 'w'=>128, 'h'=>203, 'head'=>[284,140,358,140,358,190,284,190,], 'body'=>[282,185,337,185,337,269,282,269,], 'legs'=>[282,259,287,259,332,259,337,259,357,343,256,343,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>129, 'w'=>128, 'h'=>214, 'head'=>[283,129,361,129,361,179,283,179,], 'body'=>[279,174,334,174,334,263,279,263,], 'legs'=>[279,253,284,253,329,253,334,253,358,343,256,343,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>103, 'w'=>125, 'h'=>240, 'head'=>[310,103,358,103,358,153,310,153,], 'body'=>[274,148,329,148,329,250,274,250,], 'legs'=>[274,240,279,240,324,240,329,240,358,343,254,343,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 84, 'w'=>122, 'h'=>259, 'head'=>[307, 84,354, 84,354,134,307,134,], 'body'=>[271,129,326,129,326,241,271,241,], 'legs'=>[271,231,276,231,321,231,326,231,358,343,254,343,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 66, 'w'=>116, 'h'=>278, 'head'=>[313, 66,349, 66,349,116,313,116,], 'body'=>[272,111,327,111,327,232,272,232,], 'legs'=>[272,222,277,222,322,222,327,222,358,344,255,344,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>158, 'w'=>141, 'h'=>197, 'head'=>[313,158,347,158,347,208,313,208,], 'body'=>[281,203,336,203,336,284,281,284,], 'legs'=>[281,274,286,274,331,274,336,274,353,355,258,355,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>152, 'w'=>139, 'h'=>203, 'head'=>[307,152,336,152,336,202,307,202,], 'body'=>[284,197,339,197,339,281,284,281,], 'legs'=>[284,271,289,271,334,271,339,271,355,355,258,355,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>156, 'w'=>136, 'h'=>199, 'head'=>[288,156,320,156,320,206,288,206,], 'body'=>[284,201,339,201,339,283,284,283,], 'legs'=>[284,273,289,273,334,273,339,273,356,355,258,355,], 'ex'=>1 },
+{ 'x'=>256, 'y'=>161, 'w'=>129, 'h'=>194, 'head'=>[270,161,310,161,310,211,270,211,], 'body'=>[284,206,339,206,339,285,284,285,], 'legs'=>[284,275,289,275,334,275,339,275,359,355,259,355,], 'ex'=>1 },
+{ 'x'=>258, 'y'=>159, 'w'=>137, 'h'=>189, 'head'=>[309,159,347,159,347,209,309,209,], 'body'=>[279,204,334,204,334,281,279,281,], 'legs'=>[279,271,284,271,329,271,334,271,360,348,261,348,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>161, 'w'=>137, 'h'=>188, 'head'=>[298,161,343,161,343,211,298,211,], 'body'=>[275,206,330,206,330,282,275,282,], 'legs'=>[275,272,280,272,325,272,330,272,361,349,262,349,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>164, 'w'=>126, 'h'=>183, 'head'=>[277,164,334,164,334,214,277,214,], 'body'=>[269,209,324,209,324,283,269,283,], 'legs'=>[269,273,274,273,319,273,324,273,361,347,262,347,], 'ex'=>1 },
+{ 'x'=>254, 'y'=>157, 'w'=>117, 'h'=>189, 'head'=>[273,157,328,157,328,207,273,207,], 'body'=>[258,202,313,202,313,279,258,279,], 'legs'=>[258,269,263,269,308,269,313,269,361,346,259,346,], 'ex'=>1 },
+{ 'x'=>234, 'y'=>147, 'w'=>130, 'h'=>199, 'head'=>[276,147,318,147,318,197,276,197,], 'body'=>[245,192,300,192,300,274,245,274,], 'legs'=>[245,264,250,264,295,264,300,264,360,346,254,346,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 33, 'w'=>118, 'h'=>307, 'head'=>[307, 33,336, 33,336, 83,307, 83,], 'body'=>[276, 78,331, 78,331,214,276,214,], 'legs'=>[276,204,281,204,326,204,331,204,348,340,251,340,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 41, 'w'=>138, 'h'=>297, 'head'=>[336, 41,366, 41,366, 91,336, 91,], 'body'=>[288, 86,343, 86,343,217,288,217,], 'legs'=>[288,207,293,207,338,207,343,207,347,338,252,338,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 51, 'w'=>155, 'h'=>287, 'head'=>[340, 51,381, 51,381,101,340,101,], 'body'=>[291, 96,346, 96,346,222,291,222,], 'legs'=>[291,212,296,212,341,212,346,212,346,338,251,338,], 'ex'=>1 },
+{ 'x'=>240, 'y'=> 59, 'w'=>177, 'h'=>280, 'head'=>[350, 59,393, 59,393,109,350,109,], 'body'=>[292,104,347,104,347,226,292,226,], 'legs'=>[292,216,297,216,342,216,347,216,347,339,243,339,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 74, 'w'=>208, 'h'=>264, 'head'=>[346, 74,403, 74,403,124,346,124,], 'body'=>[293,119,348,119,348,233,293,233,], 'legs'=>[293,223,298,223,343,223,348,223,347,338,229,338,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 88, 'w'=>218, 'h'=>250, 'head'=>[331, 88,410, 88,410,138,331,138,], 'body'=>[290,133,345,133,345,240,290,240,], 'legs'=>[290,230,295,230,340,230,345,230,346,338,231,338,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 90, 'w'=>242, 'h'=>245, 'head'=>[339, 90,412, 90,412,140,339,140,], 'body'=>[289,135,344,135,344,240,289,240,], 'legs'=>[289,230,294,230,339,230,344,230,348,335,325,335,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 31, 'w'=>128, 'h'=>317, 'head'=>[298, 31,327, 31,327, 81,298, 81,], 'body'=>[280, 76,335, 76,335,217,280,217,], 'legs'=>[280,207,285,207,330,207,335,207,367,348,263,348,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 31, 'w'=>127, 'h'=>317, 'head'=>[298, 31,327, 31,327, 81,298, 81,], 'body'=>[280, 76,335, 76,335,217,280,217,], 'legs'=>[280,207,285,207,330,207,335,207,367,348,264,348,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 32, 'w'=>110, 'h'=>317, 'head'=>[297, 32,326, 32,326, 82,297, 82,], 'body'=>[279, 77,334, 77,334,218,279,218,], 'legs'=>[279,208,284,208,329,208,334,208,366,349,263,349,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 32, 'w'=>110, 'h'=>317, 'head'=>[298, 32,328, 32,328, 82,298, 82,], 'body'=>[280, 77,335, 77,335,218,280,218,], 'legs'=>[280,208,285,208,330,208,335,208,366,349,263,349,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 31, 'w'=>110, 'h'=>317, 'head'=>[296, 31,325, 31,325, 81,296, 81,], 'body'=>[278, 76,333, 76,333,217,278,217,], 'legs'=>[278,207,283,207,328,207,333,207,366,348,263,348,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 32, 'w'=>140, 'h'=>317, 'head'=>[294, 32,324, 32,324, 82,294, 82,], 'body'=>[277, 77,332, 77,332,218,277,218,], 'legs'=>[277,208,282,208,327,208,332,208,366,349,263,349,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 31, 'w'=>170, 'h'=>317, 'head'=>[292, 31,321, 31,321, 81,292, 81,], 'body'=>[275, 76,330, 76,330,217,275,217,], 'legs'=>[275,207,280,207,325,207,330,207,366,348,263,348,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 32, 'w'=>152, 'h'=>316, 'head'=>[289, 32,317, 32,317, 82,289, 82,], 'body'=>[274, 77,329, 77,329,217,274,217,], 'legs'=>[274,207,279,207,324,207,329,207,365,348,262,348,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 31, 'w'=>111, 'h'=>317, 'head'=>[287, 31,316, 31,316, 81,287, 81,], 'body'=>[275, 76,330, 76,330,217,275,217,], 'legs'=>[275,207,280,207,325,207,330,207,366,348,262,348,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 32, 'w'=>110, 'h'=>316, 'head'=>[282, 32,315, 32,315, 82,282, 82,], 'body'=>[275, 77,330, 77,330,217,275,217,], 'legs'=>[275,207,280,207,325,207,330,207,366,348,263,348,], 'ex'=>1 },
+{ 'x'=>232, 'y'=> 34, 'w'=>137, 'h'=>314, 'head'=>[282, 34,313, 34,313, 84,282, 84,], 'body'=>[275, 79,330, 79,330,218,275,218,], 'legs'=>[275,208,280,208,325,208,330,208,365,348,263,348,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 37, 'w'=>139, 'h'=>311, 'head'=>[290, 37,320, 37,320, 87,290, 87,], 'body'=>[283, 82,338, 82,338,220,283,220,], 'legs'=>[283,210,288,210,333,210,338,210,365,348,262,348,], 'ex'=>1 },
+{ 'x'=>235, 'y'=> 38, 'w'=>134, 'h'=>308, 'head'=>[300, 38,331, 38,331, 88,300, 88,], 'body'=>[291, 83,346, 83,346,219,291,219,], 'legs'=>[291,209,296,209,341,209,346,209,365,346,264,346,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 36, 'w'=>139, 'h'=>311, 'head'=>[307, 36,337, 36,337, 86,307, 86,], 'body'=>[298, 81,353, 81,353,219,298,219,], 'legs'=>[298,209,303,209,348,209,353,209,366,347,263,347,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 38, 'w'=>187, 'h'=>308, 'head'=>[311, 38,344, 38,344, 88,311, 88,], 'body'=>[303, 83,358, 83,358,219,303,219,], 'legs'=>[303,209,308,209,353,209,358,209,366,346,264,346,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 38, 'w'=>215, 'h'=>309, 'head'=>[315, 38,348, 38,348, 88,315, 88,], 'body'=>[305, 83,360, 83,360,220,305,220,], 'legs'=>[305,210,310,210,355,210,360,210,367,347,264,347,], 'ex'=>0, 'hit'=>[446,111,486,110,487,129,446,121,] },
+{ 'x'=>261, 'y'=> 37, 'w'=>185, 'h'=>310, 'head'=>[318, 37,352, 37,352, 87,318, 87,], 'body'=>[306, 82,361, 82,361,219,306,219,], 'legs'=>[306,209,311,209,356,209,361,209,366,347,264,347,], 'ex'=>0, 'hit'=>[437,110,478,111,478,127,437,120,] },
+{ 'x'=>262, 'y'=> 35, 'w'=>235, 'h'=>312, 'head'=>[320, 35,353, 35,353, 85,320, 85,], 'body'=>[309, 80,364, 80,364,218,309,218,], 'legs'=>[309,208,314,208,359,208,364,208,365,347,265,347,], 'ex'=>0, 'hit'=>[445,108,507,110,505,127,442,122,] },
+{ 'x'=>261, 'y'=> 34, 'w'=>241, 'h'=>313, 'head'=>[319, 34,351, 34,351, 84,319, 84,], 'body'=>[307, 79,362, 79,362,218,307,218,], 'legs'=>[307,208,312,208,357,208,362,208,366,347,264,347,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 31, 'w'=>182, 'h'=>317, 'head'=>[313, 31,343, 31,343, 81,313, 81,], 'body'=>[299, 76,354, 76,354,217,299,217,], 'legs'=>[299,207,304,207,349,207,354,207,366,348,263,348,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 29, 'w'=>209, 'h'=>317, 'head'=>[311, 29,341, 29,341, 79,311, 79,], 'body'=>[298, 74,353, 74,353,215,298,215,], 'legs'=>[298,205,303,205,348,205,353,205,366,346,263,346,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 29, 'w'=>173, 'h'=>319, 'head'=>[309, 29,339, 29,339, 79,309, 79,], 'body'=>[294, 74,349, 74,349,216,294,216,], 'legs'=>[294,206,299,206,344,206,349,206,366,348,263,348,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 28, 'w'=>145, 'h'=>320, 'head'=>[308, 28,336, 28,336, 78,308, 78,], 'body'=>[291, 73,346, 73,346,215,291,215,], 'legs'=>[291,205,296,205,341,205,346,205,366,348,263,348,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 29, 'w'=>129, 'h'=>319, 'head'=>[305, 29,334, 29,334, 79,305, 79,], 'body'=>[287, 74,342, 74,342,216,287,216,], 'legs'=>[287,206,292,206,337,206,342,206,366,348,262,348,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 30, 'w'=>122, 'h'=>317, 'head'=>[305, 30,329, 30,329, 80,305, 80,], 'body'=>[284, 75,339, 75,339,216,284,216,], 'legs'=>[284,206,289,206,334,206,339,206,366,347,263,347,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 29, 'w'=>122, 'h'=>318, 'head'=>[300, 29,326, 29,326, 79,300, 79,], 'body'=>[281, 74,336, 74,336,215,281,215,], 'legs'=>[281,205,286,205,331,205,336,205,365,347,262,347,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 29, 'w'=>111, 'h'=>317, 'head'=>[293, 29,317, 29,317, 79,293, 79,], 'body'=>[276, 74,331, 74,331,215,276,215,], 'legs'=>[276,205,281,205,326,205,331,205,365,346,261,346,], 'ex'=>1 },
diff --git a/data/characters/DESCANTDATA.DAT.pl b/data/characters/DESCANTDATA.DAT.pl
new file mode 100644
index 0000000..7441dec
--- /dev/null
+++ b/data/characters/DESCANTDATA.DAT.pl
@@ -0,0 +1,334 @@
+{ 'x'=>206, 'y'=>165, 'w'=>125, 'h'=>348, 'head'=>[254,165,284,165,284,215,254,215,], 'body'=>[235,210,290,210,290,366,235,366,], 'legs'=>[235,356,240,356,285,356,290,356,318,513,209,513,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>172, 'w'=>127, 'h'=>342, 'head'=>[249,172,280,172,280,222,249,222,], 'body'=>[229,217,284,217,284,370,229,370,], 'legs'=>[229,360,234,360,279,360,284,360,318,514,209,514,], 'ex'=>1 },
+{ 'x'=>198, 'y'=>168, 'w'=>126, 'h'=>348, 'head'=>[240,168,273,168,273,218,240,218,], 'body'=>[222,213,277,213,277,369,222,369,], 'legs'=>[222,359,227,359,272,359,277,359,318,516,207,516,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>161, 'w'=>130, 'h'=>355, 'head'=>[239,161,274,161,274,211,239,211,], 'body'=>[218,206,273,206,273,366,218,366,], 'legs'=>[218,356,223,356,268,356,273,356,331,516,209,516,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>163, 'w'=>138, 'h'=>352, 'head'=>[244,163,280,163,280,213,244,213,], 'body'=>[230,208,285,208,285,366,230,366,], 'legs'=>[230,356,235,356,280,356,285,356,341,515,210,515,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>166, 'w'=>139, 'h'=>348, 'head'=>[251,166,286,166,286,216,251,216,], 'body'=>[240,211,295,211,295,367,240,367,], 'legs'=>[240,357,245,357,290,357,295,357,341,514,209,514,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>169, 'w'=>137, 'h'=>346, 'head'=>[259,169,295,169,295,219,259,219,], 'body'=>[249,214,304,214,304,369,249,369,], 'legs'=>[249,359,254,359,299,359,304,359,339,515,209,515,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>171, 'w'=>164, 'h'=>339, 'head'=>[278,171,312,171,312,221,278,221,], 'body'=>[266,216,321,216,321,368,266,368,], 'legs'=>[266,358,271,358,316,358,321,358,340,510,212,510,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>168, 'w'=>174, 'h'=>329, 'head'=>[286,168,317,168,317,218,286,218,], 'body'=>[268,213,323,213,323,360,268,360,], 'legs'=>[268,350,273,350,318,350,323,350,342,497,213,497,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>172, 'w'=>221, 'h'=>321, 'head'=>[294,172,326,172,326,222,294,222,], 'body'=>[275,217,330,217,330,360,275,360,], 'legs'=>[275,350,280,350,325,350,330,350,343,493,222,493,], 'ex'=>1 },
+{ 'x'=>227, 'y'=>172, 'w'=>191, 'h'=>321, 'head'=>[296,172,329,172,329,222,296,222,], 'body'=>[280,217,335,217,335,360,280,360,], 'legs'=>[280,350,285,350,330,350,335,350,345,493,230,493,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>171, 'w'=>143, 'h'=>319, 'head'=>[290,171,323,171,323,221,290,221,], 'body'=>[272,216,327,216,327,358,272,358,], 'legs'=>[272,348,277,348,322,348,327,348,344,490,227,490,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>181, 'w'=>131, 'h'=>311, 'head'=>[278,181,315,181,315,231,278,231,], 'body'=>[257,226,312,226,312,364,257,364,], 'legs'=>[257,354,262,354,307,354,312,354,342,492,224,492,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>187, 'w'=>130, 'h'=>304, 'head'=>[267,187,306,187,306,237,267,237,], 'body'=>[249,232,304,232,304,366,249,366,], 'legs'=>[249,356,254,356,299,356,304,356,349,491,226,491,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>188, 'w'=>131, 'h'=>302, 'head'=>[270,188,307,188,307,238,270,238,], 'body'=>[251,233,306,233,306,366,251,366,], 'legs'=>[251,356,256,356,301,356,306,356,350,490,226,490,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>182, 'w'=>130, 'h'=>308, 'head'=>[270,182,309,182,309,232,270,232,], 'body'=>[253,227,308,227,308,363,253,363,], 'legs'=>[253,353,258,353,303,353,308,353,350,490,227,490,], 'ex'=>1 },
+{ 'x'=>225, 'y'=>181, 'w'=>130, 'h'=>310, 'head'=>[267,181,307,181,307,231,267,231,], 'body'=>[253,226,308,226,308,363,253,363,], 'legs'=>[253,353,258,353,303,353,308,353,351,491,228,491,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>181, 'w'=>130, 'h'=>314, 'head'=>[262,181,299,181,299,231,262,231,], 'body'=>[248,226,303,226,303,365,248,365,], 'legs'=>[248,355,253,355,298,355,303,355,349,495,226,495,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>179, 'w'=>140, 'h'=>314, 'head'=>[266,179,305,179,305,229,266,229,], 'body'=>[253,224,308,224,308,363,253,363,], 'legs'=>[253,353,258,353,303,353,308,353,359,493,226,493,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>181, 'w'=>158, 'h'=>313, 'head'=>[274,181,313,181,313,231,274,231,], 'body'=>[260,226,315,226,315,365,260,365,], 'legs'=>[260,355,265,355,310,355,315,355,378,494,227,494,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>182, 'w'=>182, 'h'=>312, 'head'=>[283,182,322,182,322,232,283,232,], 'body'=>[269,227,324,227,324,365,269,365,], 'legs'=>[269,355,274,355,319,355,324,355,401,494,226,494,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>185, 'w'=>187, 'h'=>311, 'head'=>[295,185,335,185,335,235,295,235,], 'body'=>[282,230,337,230,337,368,282,368,], 'legs'=>[282,358,287,358,332,358,337,358,405,496,225,496,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>183, 'w'=>190, 'h'=>311, 'head'=>[309,183,350,183,350,233,309,233,], 'body'=>[297,228,352,228,352,366,297,366,], 'legs'=>[297,356,302,356,347,356,352,356,408,494,225,494,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>180, 'w'=>183, 'h'=>307, 'head'=>[322,180,364,180,364,230,322,230,], 'body'=>[310,225,365,225,365,361,310,361,], 'legs'=>[310,351,315,351,360,351,365,351,409,487,233,487,], 'ex'=>1 },
+{ 'x'=>258, 'y'=>178, 'w'=>168, 'h'=>309, 'head'=>[339,178,381,178,381,228,339,228,], 'body'=>[326,223,381,223,381,360,326,360,], 'legs'=>[326,350,331,350,376,350,381,350,415,487,261,487,], 'ex'=>1 },
+{ 'x'=>290, 'y'=>177, 'w'=>149, 'h'=>308, 'head'=>[353,177,394,177,394,227,353,227,], 'body'=>[338,222,393,222,393,358,338,358,], 'legs'=>[338,348,343,348,388,348,393,348,423,485,293,485,], 'ex'=>1 },
+{ 'x'=>311, 'y'=>178, 'w'=>136, 'h'=>309, 'head'=>[362,178,401,178,401,228,362,228,], 'body'=>[347,223,402,223,402,360,347,360,], 'legs'=>[347,350,352,350,397,350,402,350,429,487,314,487,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>184, 'w'=>139, 'h'=>307, 'head'=>[275,184,308,184,308,234,275,234,], 'body'=>[257,229,312,229,312,365,257,365,], 'legs'=>[257,355,262,355,307,355,312,355,327,491,216,491,], 'ex'=>1 },
+{ 'x'=>212, 'y'=>183, 'w'=>145, 'h'=>308, 'head'=>[279,183,306,183,306,233,279,233,], 'body'=>[258,228,313,228,313,364,258,364,], 'legs'=>[258,354,263,354,308,354,313,354,327,491,215,491,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>182, 'w'=>145, 'h'=>308, 'head'=>[278,182,304,182,304,232,278,232,], 'body'=>[258,227,313,227,313,363,258,363,], 'legs'=>[258,353,263,353,308,353,313,353,327,490,216,490,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>180, 'w'=>148, 'h'=>305, 'head'=>[270,180,302,180,302,230,270,230,], 'body'=>[250,225,305,225,305,360,250,360,], 'legs'=>[250,350,255,350,300,350,305,350,322,485,202,485,], 'ex'=>1 },
+{ 'x'=>188, 'y'=>178, 'w'=>146, 'h'=>305, 'head'=>[259,178,289,178,289,228,259,228,], 'body'=>[246,223,301,223,301,358,246,358,], 'legs'=>[246,348,251,348,296,348,301,348,318,483,191,483,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>177, 'w'=>145, 'h'=>306, 'head'=>[250,177,282,177,282,227,250,227,], 'body'=>[242,222,297,222,297,357,242,357,], 'legs'=>[242,347,247,347,292,347,297,347,318,483,185,483,], 'ex'=>1 },
+{ 'x'=>181, 'y'=>177, 'w'=>140, 'h'=>307, 'head'=>[242,177,275,177,275,227,242,227,], 'body'=>[237,222,292,222,292,358,237,358,], 'legs'=>[237,348,242,348,287,348,292,348,317,484,184,484,], 'ex'=>1 },
+{ 'x'=>180, 'y'=>179, 'w'=>142, 'h'=>304, 'head'=>[234,179,267,179,267,229,234,229,], 'body'=>[231,224,286,224,286,358,231,358,], 'legs'=>[231,348,236,348,281,348,286,348,318,483,183,483,], 'ex'=>1 },
+{ 'x'=>176, 'y'=>188, 'w'=>145, 'h'=>296, 'head'=>[225,188,258,188,258,238,225,238,], 'body'=>[223,233,278,233,278,363,223,363,], 'legs'=>[223,353,228,353,273,353,278,353,317,484,182,484,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>193, 'w'=>130, 'h'=>298, 'head'=>[261,193,299,193,299,243,261,243,], 'body'=>[244,238,299,238,299,369,244,369,], 'legs'=>[244,359,249,359,294,359,299,359,337,491,214,491,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>198, 'w'=>120, 'h'=>282, 'head'=>[255,198,294,198,294,248,255,248,], 'body'=>[240,243,295,243,295,366,240,366,], 'legs'=>[240,356,245,356,290,356,295,356,340,480,227,480,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>201, 'w'=>123, 'h'=>270, 'head'=>[241,201,273,201,273,251,241,251,], 'body'=>[229,246,284,246,284,363,229,363,], 'legs'=>[229,353,234,353,279,353,284,353,339,471,244,471,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>216, 'w'=>140, 'h'=>257, 'head'=>[214,216,247,216,247,266,214,266,], 'body'=>[209,261,264,261,264,372,209,372,], 'legs'=>[209,362,214,362,259,362,264,362,333,473,255,473,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>240, 'w'=>163, 'h'=>233, 'head'=>[182,240,220,240,220,290,182,290,], 'body'=>[184,285,239,285,239,384,184,384,], 'legs'=>[184,374,189,374,234,374,239,374,325,473,235,473,], 'ex'=>1 },
+{ 'x'=>142, 'y'=>265, 'w'=>182, 'h'=>212, 'head'=>[172,265,206,265,206,315,172,315,], 'body'=>[155,310,210,310,210,398,155,398,], 'legs'=>[155,388,160,388,205,388,210,388,320,477,211,477,], 'ex'=>1 },
+{ 'x'=>118, 'y'=>311, 'w'=>212, 'h'=>191, 'head'=>[151,311,180,311,180,361,151,361,], 'body'=>[125,356,180,356,180,434,125,434,], 'legs'=>[125,424,130,424,175,424,180,424,296,502,199,502,], 'ex'=>1 },
+{ 'x'=> 89, 'y'=>360, 'w'=>234, 'h'=>144, 'head'=>[121,360,158,360,158,410,121,410,], 'body'=>[114,405,169,405,169,459,114,459,], 'legs'=>[114,449,119,449,164,449,169,449,245,504,108,504,], 'ex'=>1 },
+{ 'x'=> 49, 'y'=>379, 'w'=>241, 'h'=>123, 'head'=>[190,379,246,379,246,429,190,429,], 'body'=>[ 57,424,112,424,112,468, 57,468,], 'legs'=>[ 57,458, 62,458,107,458,112,458,151,502, 70,502,], 'ex'=>1 },
+{ 'x'=> 15, 'y'=>354, 'w'=>223, 'h'=>138, 'head'=>[155,354,190,354,190,404,155,404,], 'body'=>[ 56,399,111,399,111,450, 56,450,], 'legs'=>[ 56,440, 61,440,106,440,111,440,159,492, 38,492,], 'ex'=>1 },
+{ 'x'=> 7, 'y'=>292, 'w'=>246, 'h'=>200, 'head'=>[168,292,183,292,183,342,168,342,], 'body'=>[124,337,179,337,179,419,124,419,], 'legs'=>[124,409,129,409,174,409,179,409,160,492, 11,492,], 'ex'=>1 },
+{ 'x'=> 7, 'y'=>279, 'w'=>231, 'h'=>213, 'head'=>[133,279,151,279,151,329,133,329,], 'body'=>[113,324,168,324,168,413,113,413,], 'legs'=>[113,403,118,403,163,403,168,403,154,492, 11,492,], 'ex'=>1 },
+{ 'x'=> 14, 'y'=>269, 'w'=>206, 'h'=>222, 'head'=>[ 93,269,119,269,119,319, 93,319,], 'body'=>[ 96,314,151,314,151,407, 96,407,], 'legs'=>[ 96,397,101,397,146,397,151,397,148,491, 18,491,], 'ex'=>1 },
+{ 'x'=> 12, 'y'=>267, 'w'=>212, 'h'=>224, 'head'=>[124,267,143,267,143,317,124,317,], 'body'=>[110,312,165,312,165,406,110,406,], 'legs'=>[110,396,115,396,160,396,165,396,150,491, 18,491,], 'ex'=>1 },
+{ 'x'=> 17, 'y'=>301, 'w'=>236, 'h'=>190, 'head'=>[176,301,193,301,193,351,176,351,], 'body'=>[109,346,164,346,164,423,109,423,], 'legs'=>[109,413,114,413,159,413,164,413,160,491, 42,491,], 'ex'=>1 },
+{ 'x'=> 26, 'y'=>357, 'w'=>266, 'h'=>135, 'head'=>[179,357,228,357,228,407,179,407,], 'body'=>[ 47,402,102,402,102,452, 47,452,], 'legs'=>[ 47,442, 52,442, 97,442,102,442,115,492, 51,492,], 'ex'=>1 },
+{ 'x'=> 43, 'y'=>391, 'w'=>263, 'h'=>102, 'head'=>[ 55,391,149,391,149,441, 55,441,], 'body'=>[ 60,436,115,436,115,469, 60,469,], 'legs'=>[ 60,459, 65,459,110,459,115,459,125,493, 67,493,], 'ex'=>1 },
+{ 'x'=> 54, 'y'=>386, 'w'=>250, 'h'=>109, 'head'=>[ 61,386,143,386,143,436, 61,436,], 'body'=>[ 64,431,119,431,119,468, 64,468,], 'legs'=>[ 64,458, 69,458,114,458,119,458,125,495, 81,495,], 'ex'=>1 },
+{ 'x'=> 80, 'y'=>377, 'w'=>227, 'h'=>128, 'head'=>[ 92,377,155,377,155,427, 92,427,], 'body'=>[ 87,422,142,422,142,468, 87,468,], 'legs'=>[ 87,458, 92,458,137,458,142,458,287,505,108,505,], 'ex'=>1 },
+{ 'x'=>103, 'y'=>370, 'w'=>210, 'h'=>134, 'head'=>[122,370,167,370,167,420,122,420,], 'body'=>[109,415,164,415,164,464,109,464,], 'legs'=>[109,454,114,454,159,454,164,454,167,504,124,504,], 'ex'=>1 },
+{ 'x'=>135, 'y'=>364, 'w'=>186, 'h'=>140, 'head'=>[158,364,204,364,204,414,158,414,], 'body'=>[140,409,195,409,195,461,140,461,], 'legs'=>[140,451,145,451,190,451,195,451,220,504,139,504,], 'ex'=>1 },
+{ 'x'=>146, 'y'=>363, 'w'=>183, 'h'=>139, 'head'=>[188,363,245,363,245,413,188,413,], 'body'=>[160,408,215,408,215,460,160,460,], 'legs'=>[160,450,165,450,210,450,215,450,232,502,162,502,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>358, 'w'=>164, 'h'=>148, 'head'=>[228,358,281,358,281,408,228,408,], 'body'=>[187,403,242,403,242,459,187,459,], 'legs'=>[187,449,192,449,237,449,242,449,342,506,193,506,], 'ex'=>1 },
+{ 'x'=>198, 'y'=>342, 'w'=>158, 'h'=>163, 'head'=>[239,342,299,342,299,392,239,392,], 'body'=>[211,387,266,387,266,451,211,451,], 'legs'=>[211,441,216,441,261,441,266,441,273,505,202,505,], 'ex'=>1 },
+{ 'x'=>168, 'y'=>314, 'w'=>197, 'h'=>187, 'head'=>[241,314,283,314,283,364,241,364,], 'body'=>[216,359,271,359,271,435,216,435,], 'legs'=>[216,425,221,425,266,425,271,425,264,501,199,501,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>289, 'w'=>136, 'h'=>208, 'head'=>[283,289,326,289,326,339,283,339,], 'body'=>[244,334,299,334,299,420,244,420,], 'legs'=>[244,410,249,410,294,410,299,410,283,497,233,497,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>274, 'w'=>150, 'h'=>211, 'head'=>[299,274,336,274,336,324,299,324,], 'body'=>[256,319,311,319,311,407,256,407,], 'legs'=>[256,397,261,397,306,397,311,397,352,485,222,485,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>251, 'w'=>157, 'h'=>239, 'head'=>[275,251,308,251,308,301,275,301,], 'body'=>[245,296,300,296,300,398,245,398,], 'legs'=>[245,388,250,388,295,388,300,388,338,490,213,490,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>235, 'w'=>165, 'h'=>240, 'head'=>[282,235,316,235,316,285,282,285,], 'body'=>[253,280,308,280,308,382,253,382,], 'legs'=>[253,372,258,372,303,372,308,372,338,475,212,475,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>206, 'w'=>158, 'h'=>266, 'head'=>[282,206,320,206,320,256,282,256,], 'body'=>[256,251,311,251,311,366,256,366,], 'legs'=>[256,356,261,356,306,356,311,356,337,472,210,472,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>180, 'w'=>145, 'h'=>297, 'head'=>[276,180,312,180,312,230,276,230,], 'body'=>[251,225,306,225,306,356,251,356,], 'legs'=>[251,346,256,346,301,346,306,346,335,477,205,477,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>166, 'w'=>144, 'h'=>313, 'head'=>[263,166,299,166,299,216,263,216,], 'body'=>[239,211,294,211,294,350,239,350,], 'legs'=>[239,340,244,340,289,340,294,340,334,479,197,479,], 'ex'=>1 },
+{ 'x'=>231, 'y'=>178, 'w'=>119, 'h'=>324, 'head'=>[277,178,305,178,305,228,277,228,], 'body'=>[260,223,315,223,315,367,260,367,], 'legs'=>[260,357,265,357,310,357,315,357,328,502,234,502,], 'ex'=>1 },
+{ 'x'=>237, 'y'=>175, 'w'=>132, 'h'=>322, 'head'=>[285,175,310,175,310,225,285,225,], 'body'=>[260,220,315,220,315,363,260,363,], 'legs'=>[260,353,265,353,310,353,315,353,331,497,240,497,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>175, 'w'=>117, 'h'=>327, 'head'=>[282,175,307,175,307,225,282,225,], 'body'=>[260,220,315,220,315,366,260,366,], 'legs'=>[260,356,265,356,310,356,315,356,327,502,239,502,], 'ex'=>1 },
+{ 'x'=>238, 'y'=>175, 'w'=> 99, 'h'=>331, 'head'=>[277,175,303,175,303,225,277,225,], 'body'=>[256,220,311,220,311,368,256,368,], 'legs'=>[256,358,261,358,306,358,311,358,331,506,241,506,], 'ex'=>1 },
+{ 'x'=>236, 'y'=>170, 'w'=> 99, 'h'=>334, 'head'=>[263,170,290,170,290,220,263,220,], 'body'=>[246,215,301,215,301,364,246,364,], 'legs'=>[246,354,251,354,296,354,301,354,331,504,240,504,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>168, 'w'=>103, 'h'=>335, 'head'=>[248,168,275,168,275,218,248,218,], 'body'=>[235,213,290,213,290,363,235,363,], 'legs'=>[235,353,240,353,285,353,290,353,322,503,237,503,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>166, 'w'=> 99, 'h'=>339, 'head'=>[242,166,268,166,268,216,242,216,], 'body'=>[233,211,288,211,288,363,233,363,], 'legs'=>[233,353,238,353,283,353,288,353,315,505,236,505,], 'ex'=>1 },
+{ 'x'=>239, 'y'=>191, 'w'=>116, 'h'=>308, 'head'=>[268,191,297,191,297,241,268,241,], 'body'=>[252,236,307,236,307,372,252,372,], 'legs'=>[252,362,257,362,302,362,307,362,348,499,242,499,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>199, 'w'=>128, 'h'=>311, 'head'=>[255,199,285,199,285,249,255,249,], 'body'=>[245,244,300,244,300,382,245,382,], 'legs'=>[245,372,250,372,295,372,300,372,356,510,239,510,], 'ex'=>1 },
+{ 'x'=>231, 'y'=>205, 'w'=>125, 'h'=>318, 'head'=>[263,205,296,205,296,255,263,255,], 'body'=>[246,250,301,250,301,391,246,391,], 'legs'=>[246,381,251,381,296,381,301,381,352,523,239,523,], 'ex'=>1 },
+{ 'x'=>237, 'y'=>186, 'w'=> 92, 'h'=>317, 'head'=>[287,186,309,186,309,236,287,236,], 'body'=>[251,231,306,231,306,372,251,372,], 'legs'=>[251,362,256,362,301,362,306,362,318,503,240,503,], 'ex'=>1 },
+{ 'x'=>231, 'y'=>184, 'w'=>109, 'h'=>322, 'head'=>[282,184,304,184,304,234,282,234,], 'body'=>[263,229,318,229,318,372,263,372,], 'legs'=>[263,362,268,362,313,362,318,362,337,506,238,506,], 'ex'=>1 },
+{ 'x'=>238, 'y'=>188, 'w'=>132, 'h'=>306, 'head'=>[303,188,332,188,332,238,303,238,], 'body'=>[285,233,340,233,340,368,285,368,], 'legs'=>[285,358,290,358,335,358,340,358,366,494,241,494,], 'ex'=>1 },
+{ 'x'=>258, 'y'=>197, 'w'=>136, 'h'=>288, 'head'=>[336,197,362,197,362,247,336,247,], 'body'=>[308,242,363,242,363,368,308,368,], 'legs'=>[308,358,313,358,358,358,363,358,386,485,261,485,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>200, 'w'=>167, 'h'=>284, 'head'=>[351,200,380,200,380,250,351,250,], 'body'=>[318,245,373,245,373,369,318,369,], 'legs'=>[318,359,323,359,368,359,373,359,388,484,265,484,], 'ex'=>1 },
+{ 'x'=>266, 'y'=>188, 'w'=>180, 'h'=>296, 'head'=>[357,188,393,188,393,238,357,238,], 'body'=>[329,233,384,233,384,363,329,363,], 'legs'=>[329,353,334,353,379,353,384,353,445,484,269,484,], 'ex'=>1 },
+{ 'x'=>267, 'y'=>196, 'w'=>164, 'h'=>285, 'head'=>[349,196,384,196,384,246,349,246,], 'body'=>[325,241,380,241,380,366,325,366,], 'legs'=>[325,356,330,356,375,356,380,356,395,481,270,481,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>176, 'w'=>142, 'h'=>315, 'head'=>[263,176,302,176,302,226,263,226,], 'body'=>[244,221,299,221,299,361,244,361,], 'legs'=>[244,351,249,351,294,351,299,351,342,491,211,491,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>175, 'w'=>145, 'h'=>315, 'head'=>[264,175,304,175,304,225,264,225,], 'body'=>[246,220,301,220,301,360,246,360,], 'legs'=>[246,350,251,350,296,350,301,350,342,490,210,490,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>177, 'w'=>139, 'h'=>317, 'head'=>[269,177,308,177,308,227,269,227,], 'body'=>[260,222,315,222,315,363,260,363,], 'legs'=>[260,353,265,353,310,353,315,353,342,494,210,494,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>179, 'w'=>142, 'h'=>317, 'head'=>[280,179,313,179,313,229,280,229,], 'body'=>[270,224,325,224,325,365,270,365,], 'legs'=>[270,355,275,355,320,355,325,355,341,496,210,496,], 'ex'=>1 },
+{ 'x'=>204, 'y'=>182, 'w'=>201, 'h'=>310, 'head'=>[291,182,321,182,321,232,291,232,], 'body'=>[271,227,326,227,326,364,271,364,], 'legs'=>[271,354,276,354,321,354,326,354,342,492,207,492,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>189, 'w'=>217, 'h'=>304, 'head'=>[295,189,327,189,327,239,295,239,], 'body'=>[274,234,329,234,329,368,274,368,], 'legs'=>[274,358,279,358,324,358,329,358,342,493,209,493,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>187, 'w'=>173, 'h'=>304, 'head'=>[304,187,335,187,335,237,304,237,], 'body'=>[282,232,337,232,337,366,282,366,], 'legs'=>[282,356,287,356,332,356,337,356,344,491,217,491,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>180, 'w'=>159, 'h'=>311, 'head'=>[302,180,334,180,334,230,302,230,], 'body'=>[282,225,337,225,337,363,282,363,], 'legs'=>[282,353,287,353,332,353,337,353,345,491,219,491,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>177, 'w'=>152, 'h'=>316, 'head'=>[296,177,327,177,327,227,296,227,], 'body'=>[268,222,323,222,323,362,268,362,], 'legs'=>[268,352,273,352,318,352,323,352,345,493,219,493,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>173, 'w'=>137, 'h'=>318, 'head'=>[283,173,314,173,314,223,283,223,], 'body'=>[255,218,310,218,310,359,255,359,], 'legs'=>[255,349,260,349,305,349,310,349,344,491,218,491,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>170, 'w'=>136, 'h'=>320, 'head'=>[264,170,294,170,294,220,264,220,], 'body'=>[241,215,296,215,296,357,241,357,], 'legs'=>[241,347,246,347,291,347,296,347,342,490,217,490,], 'ex'=>1 },
+{ 'x'=>190, 'y'=>166, 'w'=>151, 'h'=>324, 'head'=>[240,166,267,166,267,216,240,216,], 'body'=>[222,211,277,211,277,355,222,355,], 'legs'=>[222,345,227,345,272,345,277,345,337,490,211,490,], 'ex'=>1 },
+{ 'x'=>168, 'y'=>164, 'w'=>162, 'h'=>326, 'head'=>[221,164,249,164,249,214,221,214,], 'body'=>[207,209,262,209,262,354,207,354,], 'legs'=>[207,344,212,344,257,344,262,344,326,490,206,490,], 'ex'=>1 },
+{ 'x'=>171, 'y'=>163, 'w'=>148, 'h'=>330, 'head'=>[219,163,248,163,248,213,219,213,], 'body'=>[211,208,266,208,266,355,211,355,], 'legs'=>[211,345,216,345,261,345,266,345,315,493,206,493,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>167, 'w'=>130, 'h'=>339, 'head'=>[235,167,263,167,263,217,235,217,], 'body'=>[215,212,270,212,270,364,215,364,], 'legs'=>[215,354,220,354,265,354,270,354,318,506,210,506,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>170, 'w'=>130, 'h'=>339, 'head'=>[253,170,282,170,282,220,253,220,], 'body'=>[232,215,287,215,287,367,232,367,], 'legs'=>[232,357,237,357,282,357,287,357,320,509,211,509,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>150, 'w'=>127, 'h'=>360, 'head'=>[235,150,252,150,252,200,235,200,], 'body'=>[250,195,305,195,305,357,250,357,], 'legs'=>[250,347,255,347,300,347,305,347,323,510,213,510,], 'ex'=>1 },
+{ 'x'=>212, 'y'=>169, 'w'=>125, 'h'=>343, 'head'=>[285,169,315,169,315,219,285,219,], 'body'=>[254,214,309,214,309,368,254,368,], 'legs'=>[254,358,259,358,304,358,309,358,324,512,215,512,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>169, 'w'=>120, 'h'=>342, 'head'=>[268,169,297,169,297,219,268,219,], 'body'=>[244,214,299,214,299,367,244,367,], 'legs'=>[244,357,249,357,294,357,299,357,325,511,216,511,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>172, 'w'=>125, 'h'=>339, 'head'=>[244,172,272,172,272,222,244,222,], 'body'=>[224,217,279,217,279,369,224,369,], 'legs'=>[224,359,229,359,274,359,279,359,321,511,212,511,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>179, 'w'=>130, 'h'=>312, 'head'=>[254,179,286,179,286,229,254,229,], 'body'=>[240,224,295,224,295,362,240,362,], 'legs'=>[240,352,245,352,290,352,295,352,342,491,219,491,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>178, 'w'=>131, 'h'=>311, 'head'=>[260,178,296,178,296,228,260,228,], 'body'=>[247,223,302,223,302,361,247,361,], 'legs'=>[247,351,252,351,297,351,302,351,342,489,218,489,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>179, 'w'=>130, 'h'=>307, 'head'=>[271,179,307,179,307,229,271,229,], 'body'=>[254,224,309,224,309,360,254,360,], 'legs'=>[254,350,259,350,304,350,309,350,342,486,219,486,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>172, 'w'=>136, 'h'=>315, 'head'=>[285,172,319,172,319,222,285,222,], 'body'=>[261,217,316,217,316,357,261,357,], 'legs'=>[261,347,266,347,311,347,316,347,342,487,218,487,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>177, 'w'=>142, 'h'=>309, 'head'=>[294,177,331,177,331,227,294,227,], 'body'=>[267,222,322,222,322,359,267,359,], 'legs'=>[267,349,272,349,317,349,322,349,344,486,220,486,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>220, 'w'=>133, 'h'=>271, 'head'=>[277,220,317,220,317,270,277,270,], 'body'=>[254,265,309,265,309,383,254,383,], 'legs'=>[254,373,259,373,304,373,309,373,345,491,231,491,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>238, 'w'=>137, 'h'=>255, 'head'=>[282,238,324,238,324,288,282,288,], 'body'=>[255,283,310,283,310,393,255,393,], 'legs'=>[255,383,260,383,305,383,310,383,346,493,231,493,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>254, 'w'=>139, 'h'=>237, 'head'=>[283,254,326,254,326,304,283,304,], 'body'=>[255,299,310,299,310,400,255,400,], 'legs'=>[255,390,260,390,305,390,310,390,345,491,231,491,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>270, 'w'=>137, 'h'=>224, 'head'=>[285,270,329,270,329,320,285,320,], 'body'=>[256,315,311,315,311,409,256,409,], 'legs'=>[256,399,261,399,306,399,311,399,347,494,233,494,], 'ex'=>1 },
+{ 'x'=>233, 'y'=>289, 'w'=>122, 'h'=>202, 'head'=>[272,289,307,289,307,339,272,339,], 'body'=>[245,334,300,334,300,417,245,417,], 'legs'=>[245,407,250,407,295,407,300,407,350,491,236,491,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>291, 'w'=>122, 'h'=>201, 'head'=>[274,291,309,291,309,341,274,341,], 'body'=>[246,336,301,336,301,419,246,419,], 'legs'=>[246,409,251,409,296,409,301,409,349,492,235,492,], 'ex'=>1 },
+{ 'x'=>233, 'y'=>295, 'w'=>122, 'h'=>197, 'head'=>[279,295,314,295,314,345,279,345,], 'body'=>[249,340,304,340,304,421,249,421,], 'legs'=>[249,411,254,411,299,411,304,411,351,492,236,492,], 'ex'=>1 },
+{ 'x'=>233, 'y'=>295, 'w'=>122, 'h'=>196, 'head'=>[282,295,322,295,322,345,282,345,], 'body'=>[251,340,306,340,306,420,251,420,], 'legs'=>[251,410,256,410,301,410,306,410,350,491,236,491,], 'ex'=>1 },
+{ 'x'=>233, 'y'=>292, 'w'=>124, 'h'=>199, 'head'=>[274,292,311,292,311,342,274,342,], 'body'=>[248,337,303,337,303,419,248,419,], 'legs'=>[248,409,253,409,298,409,303,409,352,491,236,491,], 'ex'=>1 },
+{ 'x'=>235, 'y'=>291, 'w'=>126, 'h'=>199, 'head'=>[294,291,329,291,329,341,294,341,], 'body'=>[261,336,316,336,316,418,261,418,], 'legs'=>[261,408,266,408,311,408,316,408,353,490,238,490,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>295, 'w'=>134, 'h'=>201, 'head'=>[302,295,336,295,336,345,302,345,], 'body'=>[266,340,321,340,321,423,266,423,], 'legs'=>[266,413,271,413,316,413,321,413,352,496,235,496,], 'ex'=>1 },
+{ 'x'=>234, 'y'=>300, 'w'=>182, 'h'=>193, 'head'=>[301,300,343,300,343,350,301,350,], 'body'=>[266,345,321,345,321,424,266,424,], 'legs'=>[266,414,271,414,316,414,321,414,354,493,237,493,], 'ex'=>1 },
+{ 'x'=>237, 'y'=>304, 'w'=>201, 'h'=>190, 'head'=>[304,304,345,304,345,354,304,354,], 'body'=>[268,349,323,349,323,426,268,426,], 'legs'=>[268,416,273,416,318,416,323,416,354,494,240,494,], 'ex'=>0, 'hit'=>[367,361,440,391,437,406,360,379,] },
+{ 'x'=>235, 'y'=>307, 'w'=>121, 'h'=>184, 'head'=>[275,307,308,307,308,357,275,357,], 'body'=>[251,352,306,352,306,426,251,426,], 'legs'=>[251,416,256,416,301,416,306,416,352,491,239,491,], 'ex'=>1 },
+{ 'x'=>233, 'y'=>305, 'w'=>122, 'h'=>185, 'head'=>[262,305,304,305,304,355,262,355,], 'body'=>[252,350,307,350,307,425,252,425,], 'legs'=>[252,415,257,415,302,415,307,415,351,490,238,490,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>278, 'w'=>171, 'h'=>223, 'head'=>[229,278,259,278,259,328,229,328,], 'body'=>[229,323,284,323,284,417,229,417,], 'legs'=>[229,407,234,407,279,407,284,407,345,501,231,501,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>282, 'w'=>189, 'h'=>218, 'head'=>[229,282,259,282,259,332,229,332,], 'body'=>[229,327,284,327,284,418,229,418,], 'legs'=>[229,408,234,408,279,408,284,408,381,500,233,500,], 'ex'=>1 },
+{ 'x'=>202, 'y'=>289, 'w'=>224, 'h'=>223, 'head'=>[236,306,263,306,263,356,236,356,], 'body'=>[227,334,282,334,282,428,227,428,], 'legs'=>[227,418,232,418,298,388,417,488,414,512,233,512,], 'ex'=>0, 'hit'=>[323,409,415,481,415,504,299,430,] },
+{ 'x'=>221, 'y'=>182, 'w'=>117, 'h'=>309, 'head'=>[267,182,302,182,302,232,267,232,], 'body'=>[255,227,310,227,310,364,255,364,], 'legs'=>[255,354,260,354,305,354,310,354,334,491,224,491,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>180, 'w'=>122, 'h'=>310, 'head'=>[281,180,313,180,313,230,281,230,], 'body'=>[268,225,323,225,323,362,268,362,], 'legs'=>[268,352,273,352,318,352,323,352,334,490,224,490,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>178, 'w'=>129, 'h'=>312, 'head'=>[299,178,330,178,330,228,299,228,], 'body'=>[280,223,335,223,335,361,280,361,], 'legs'=>[280,351,285,351,330,351,335,351,332,490,229,490,], 'ex'=>1 },
+{ 'x'=>256, 'y'=>176, 'w'=>119, 'h'=>317, 'head'=>[313,176,342,176,342,226,313,226,], 'body'=>[290,221,345,221,345,362,290,362,], 'legs'=>[290,352,295,352,340,352,345,352,344,493,259,493,], 'ex'=>1 },
+{ 'x'=>267, 'y'=>175, 'w'=>113, 'h'=>325, 'head'=>[312,175,339,175,339,225,312,225,], 'body'=>[291,220,346,220,346,365,291,365,], 'legs'=>[291,355,296,355,341,355,346,355,347,500,270,500,], 'ex'=>1 },
+{ 'x'=>269, 'y'=>174, 'w'=>103, 'h'=>333, 'head'=>[303,174,329,174,329,224,303,224,], 'body'=>[286,219,341,219,341,368,286,368,], 'legs'=>[286,358,291,358,336,358,341,358,347,507,272,507,], 'ex'=>1 },
+{ 'x'=>267, 'y'=>174, 'w'=> 98, 'h'=>335, 'head'=>[291,174,317,174,317,224,291,224,], 'body'=>[278,219,333,219,333,369,278,369,], 'legs'=>[278,359,283,359,328,359,333,359,346,509,271,509,], 'ex'=>1 },
+{ 'x'=>249, 'y'=>167, 'w'=>100, 'h'=>343, 'head'=>[272,167,299,167,299,217,272,217,], 'body'=>[264,212,319,212,319,366,264,366,], 'legs'=>[264,356,269,356,314,356,319,356,342,510,267,510,], 'ex'=>1 },
+{ 'x'=>241, 'y'=>166, 'w'=>103, 'h'=>341, 'head'=>[267,166,297,166,297,216,267,216,], 'body'=>[259,211,314,211,314,364,259,364,], 'legs'=>[259,354,264,354,309,354,314,354,340,507,263,507,], 'ex'=>1 },
+{ 'x'=>248, 'y'=>166, 'w'=>117, 'h'=>339, 'head'=>[276,166,311,166,311,216,276,216,], 'body'=>[261,211,316,211,316,363,261,363,], 'legs'=>[261,353,266,353,311,353,316,353,361,505,265,505,], 'ex'=>1 },
+{ 'x'=>227, 'y'=>169, 'w'=>138, 'h'=>341, 'head'=>[275,169,310,169,310,219,275,219,], 'body'=>[260,214,315,214,315,367,260,367,], 'legs'=>[260,357,265,357,310,357,315,357,361,510,251,510,], 'ex'=>1 },
+{ 'x'=>243, 'y'=>173, 'w'=>124, 'h'=>335, 'head'=>[289,173,322,173,322,223,289,223,], 'body'=>[267,218,322,218,322,368,267,368,], 'legs'=>[267,358,272,358,317,358,322,358,357,508,246,508,], 'ex'=>1 },
+{ 'x'=>227, 'y'=>184, 'w'=>132, 'h'=>320, 'head'=>[286,184,327,184,327,234,286,234,], 'body'=>[263,229,318,229,318,371,263,371,], 'legs'=>[263,361,268,361,313,361,318,361,342,504,230,504,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>186, 'w'=>128, 'h'=>305, 'head'=>[261,186,298,186,298,236,261,236,], 'body'=>[244,231,299,231,299,366,244,366,], 'legs'=>[244,356,249,356,294,356,299,356,342,491,224,491,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>187, 'w'=>125, 'h'=>303, 'head'=>[267,187,304,187,304,237,267,237,], 'body'=>[254,232,309,232,309,366,254,366,], 'legs'=>[254,356,259,356,304,356,309,356,343,490,225,490,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>187, 'w'=>125, 'h'=>302, 'head'=>[279,187,310,187,310,237,279,237,], 'body'=>[266,232,321,232,321,365,266,365,], 'legs'=>[266,355,271,355,316,355,321,355,343,489,225,489,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>190, 'w'=>133, 'h'=>300, 'head'=>[286,190,325,190,325,240,286,240,], 'body'=>[273,235,328,235,328,367,273,367,], 'legs'=>[273,357,278,357,323,357,328,357,345,490,226,490,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>184, 'w'=>180, 'h'=>306, 'head'=>[313,184,337,184,337,234,313,234,], 'body'=>[271,229,326,229,326,364,271,364,], 'legs'=>[271,354,276,354,321,354,326,354,344,490,222,490,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>201, 'w'=>229, 'h'=>288, 'head'=>[287,201,331,201,331,251,287,251,], 'body'=>[271,246,326,246,326,372,271,372,], 'legs'=>[271,362,276,362,321,362,326,362,339,489,224,489,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>200, 'w'=>221, 'h'=>289, 'head'=>[291,200,326,200,326,250,291,250,], 'body'=>[280,245,335,245,335,372,280,372,], 'legs'=>[280,362,285,362,330,362,335,362,345,489,226,489,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>186, 'w'=>136, 'h'=>305, 'head'=>[258,186,290,186,290,236,258,236,], 'body'=>[241,231,296,231,296,366,241,366,], 'legs'=>[241,356,246,356,291,356,296,356,346,491,217,491,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>189, 'w'=>141, 'h'=>303, 'head'=>[279,189,311,189,311,239,279,239,], 'body'=>[259,234,314,234,314,368,259,368,], 'legs'=>[259,358,264,358,309,358,314,358,351,492,217,492,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>191, 'w'=>141, 'h'=>301, 'head'=>[288,191,321,191,321,241,288,241,], 'body'=>[271,236,326,236,326,369,271,369,], 'legs'=>[271,359,276,359,321,359,326,359,351,492,217,492,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>195, 'w'=>152, 'h'=>296, 'head'=>[296,195,331,195,331,245,296,245,], 'body'=>[282,240,337,240,337,370,282,370,], 'legs'=>[282,360,287,360,332,360,337,360,351,491,217,491,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>202, 'w'=>227, 'h'=>291, 'head'=>[301,202,358,202,358,252,301,252,], 'body'=>[283,247,338,247,338,375,283,375,], 'legs'=>[283,365,288,365,333,365,338,365,350,493,212,493,], 'ex'=>0, 'hit'=>[396,233,435,232,432,254,396,243,] },
+{ 'x'=>232, 'y'=>183, 'w'=>113, 'h'=>318, 'head'=>[265,183,300,183,300,233,265,233,], 'body'=>[248,228,303,228,303,369,248,369,], 'legs'=>[248,359,253,359,298,359,303,359,341,501,235,501,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>191, 'w'=>112, 'h'=>308, 'head'=>[267,191,304,191,304,241,267,241,], 'body'=>[249,236,304,236,304,372,249,372,], 'legs'=>[249,362,254,362,299,362,304,362,340,499,235,499,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>188, 'w'=>113, 'h'=>315, 'head'=>[264,188,300,188,300,238,264,238,], 'body'=>[246,233,301,233,301,373,246,373,], 'legs'=>[246,363,251,363,296,363,301,363,339,503,233,503,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>183, 'w'=>112, 'h'=>318, 'head'=>[270,183,304,183,304,233,270,233,], 'body'=>[247,228,302,228,302,369,247,369,], 'legs'=>[247,359,252,359,297,359,302,359,338,501,233,501,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>185, 'w'=>133, 'h'=>315, 'head'=>[279,185,312,185,312,235,279,235,], 'body'=>[247,230,302,230,302,370,247,370,], 'legs'=>[247,360,252,360,297,360,302,360,338,500,233,500,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>193, 'w'=>179, 'h'=>308, 'head'=>[286,193,319,193,319,243,286,243,], 'body'=>[247,238,302,238,302,374,247,374,], 'legs'=>[247,364,252,364,297,364,302,364,339,501,235,501,], 'ex'=>0, 'hit'=>[372,282,407,297,403,309,368,297,] },
+{ 'x'=>216, 'y'=>189, 'w'=>140, 'h'=>309, 'head'=>[268,189,302,189,302,239,268,239,], 'body'=>[252,234,307,234,307,371,252,371,], 'legs'=>[252,361,257,361,302,361,307,361,352,498,219,498,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>185, 'w'=>135, 'h'=>307, 'head'=>[282,185,315,185,315,235,282,235,], 'body'=>[276,230,331,230,331,366,276,366,], 'legs'=>[276,356,281,356,326,356,331,356,355,492,227,492,], 'ex'=>1 },
+{ 'x'=>267, 'y'=>179, 'w'=>104, 'h'=>299, 'head'=>[302,179,337,179,337,229,302,229,], 'body'=>[292,224,347,224,347,356,292,356,], 'legs'=>[292,346,297,346,342,346,347,346,367,478,270,478,], 'ex'=>1 },
+{ 'x'=>289, 'y'=>180, 'w'=>116, 'h'=>299, 'head'=>[313,180,350,180,350,230,313,230,], 'body'=>[299,225,354,225,354,357,299,357,], 'legs'=>[299,347,304,347,349,347,354,347,372,479,331,479,], 'ex'=>1 },
+{ 'x'=>292, 'y'=>181, 'w'=>127, 'h'=>298, 'head'=>[319,181,353,181,353,231,319,231,], 'body'=>[302,226,357,226,357,357,302,357,], 'legs'=>[302,347,307,347,352,347,357,347,373,479,333,479,], 'ex'=>1 },
+{ 'x'=>288, 'y'=>185, 'w'=>190, 'h'=>293, 'head'=>[317,185,354,185,354,235,317,235,], 'body'=>[305,230,360,230,360,359,305,359,], 'legs'=>[305,349,310,349,355,349,360,349,373,478,332,478,], 'ex'=>1 },
+{ 'x'=>282, 'y'=>186, 'w'=>222, 'h'=>294, 'head'=>[312,186,347,186,347,236,312,236,], 'body'=>[303,231,358,231,358,360,303,360,], 'legs'=>[303,350,308,350,353,350,358,350,503,480,330,480,], 'ex'=>0, 'hit'=>[444,316,499,287,495,341,427,348,] },
+{ 'x'=>206, 'y'=>178, 'w'=>136, 'h'=>313, 'head'=>[252,178,285,178,285,228,252,228,], 'body'=>[244,223,299,223,299,362,244,362,], 'legs'=>[244,352,249,352,294,352,299,352,338,491,209,491,], 'ex'=>1 },
+{ 'x'=>225, 'y'=>170, 'w'=>119, 'h'=>302, 'head'=>[268,170,300,170,300,220,268,220,], 'body'=>[266,215,321,215,321,348,266,348,], 'legs'=>[266,338,271,338,316,338,321,338,340,472,228,472,], 'ex'=>1 },
+{ 'x'=>269, 'y'=>170, 'w'=>101, 'h'=>301, 'head'=>[287,170,317,170,317,220,287,220,], 'body'=>[279,215,334,215,334,348,279,348,], 'legs'=>[279,338,284,338,329,338,334,338,353,471,283,471,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>178, 'w'=>114, 'h'=>295, 'head'=>[292,178,326,178,326,228,292,228,], 'body'=>[281,223,336,223,336,353,281,353,], 'legs'=>[281,343,286,343,331,343,336,343,355,473,315,473,], 'ex'=>1 },
+{ 'x'=>271, 'y'=>184, 'w'=>148, 'h'=>290, 'head'=>[293,184,327,184,327,234,293,234,], 'body'=>[280,229,335,229,335,356,280,356,], 'legs'=>[280,346,285,346,330,346,335,346,356,474,315,474,], 'ex'=>1 },
+{ 'x'=>261, 'y'=>185, 'w'=>197, 'h'=>288, 'head'=>[285,185,318,185,318,235,285,235,], 'body'=>[276,230,331,230,331,356,276,356,], 'legs'=>[276,346,281,346,326,346,331,346,354,467,313,473,], 'ex'=>0, 'hit'=>[409,383,464,383,454,426,402,401,] },
+{ 'x'=>216, 'y'=>194, 'w'=>128, 'h'=>297, 'head'=>[260,194,292,194,292,244,260,244,], 'body'=>[244,239,299,239,299,370,244,370,], 'legs'=>[244,360,249,360,294,360,299,360,340,491,219,491,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>191, 'w'=>125, 'h'=>300, 'head'=>[272,191,302,191,302,241,272,241,], 'body'=>[265,236,320,236,320,368,265,368,], 'legs'=>[265,358,270,358,315,358,320,358,338,491,220,491,], 'ex'=>1 },
+{ 'x'=>273, 'y'=>189, 'w'=> 89, 'h'=>293, 'head'=>[297,189,326,189,326,239,297,239,], 'body'=>[285,234,340,234,340,363,285,363,], 'legs'=>[285,353,290,353,335,353,340,353,353,482,279,482,], 'ex'=>1 },
+{ 'x'=>276, 'y'=>191, 'w'=>118, 'h'=>290, 'head'=>[301,191,331,191,331,241,301,241,], 'body'=>[289,236,344,236,344,363,289,363,], 'legs'=>[289,353,294,353,339,353,344,353,390,481,322,481,], 'ex'=>1 },
+{ 'x'=>276, 'y'=>193, 'w'=>144, 'h'=>287, 'head'=>[301,193,331,193,331,243,301,243,], 'body'=>[290,238,345,238,345,364,290,364,], 'legs'=>[290,354,295,354,340,354,345,354,416,480,323,480,], 'ex'=>1 },
+{ 'x'=>269, 'y'=>196, 'w'=>162, 'h'=>283, 'head'=>[296,196,329,196,329,246,296,246,], 'body'=>[286,241,341,241,341,365,286,365,], 'legs'=>[286,355,291,355,336,355,341,355,427,479,319,479,], 'ex'=>1 },
+{ 'x'=>261, 'y'=>205, 'w'=>176, 'h'=>285, 'head'=>[288,205,313,205,313,255,288,255,], 'body'=>[285,250,340,250,340,375,285,375,], 'legs'=>[285,365,290,365,335,365,340,365,433,490,315,490,], 'ex'=>0, 'hit'=>[377,430,397,421,438,494,409,480,] },
+{ 'x'=>274, 'y'=>203, 'w'=>104, 'h'=>274, 'head'=>[287,203,316,203,316,253,287,253,], 'body'=>[285,248,340,248,340,367,285,367,], 'legs'=>[285,357,290,357,335,357,340,357,358,477,315,477,], 'ex'=>1 },
+{ 'x'=>236, 'y'=>195, 'w'=>113, 'h'=>283, 'head'=>[274,195,302,195,302,245,274,245,], 'body'=>[271,240,326,240,326,364,271,364,], 'legs'=>[271,354,276,354,321,354,326,354,340,478,239,478,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>195, 'w'=>123, 'h'=>287, 'head'=>[266,195,297,195,297,245,266,245,], 'body'=>[262,240,317,240,317,366,262,366,], 'legs'=>[262,356,267,356,312,356,317,356,336,482,220,482,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>198, 'w'=>132, 'h'=>288, 'head'=>[255,198,286,198,286,248,255,248,], 'body'=>[236,243,291,243,291,369,236,369,], 'legs'=>[236,359,241,359,286,359,291,359,333,486,208,486,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>184, 'w'=>128, 'h'=>293, 'head'=>[265,184,297,184,297,234,265,234,], 'body'=>[261,229,316,229,316,358,261,358,], 'legs'=>[261,348,266,348,311,348,316,348,345,477,224,477,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>184, 'w'=>119, 'h'=>294, 'head'=>[271,184,303,184,303,234,271,234,], 'body'=>[271,229,326,229,326,358,271,358,], 'legs'=>[271,348,276,348,321,348,326,348,347,478,235,478,], 'ex'=>1 },
+{ 'x'=>273, 'y'=>186, 'w'=>102, 'h'=>290, 'head'=>[288,186,321,186,321,236,288,236,], 'body'=>[285,231,340,231,340,358,285,358,], 'legs'=>[285,348,290,348,335,348,340,348,358,476,282,476,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>190, 'w'=>122, 'h'=>287, 'head'=>[293,190,327,190,327,240,293,240,], 'body'=>[285,235,340,235,340,361,285,361,], 'legs'=>[285,351,290,351,335,351,340,351,358,477,319,477,], 'ex'=>1 },
+{ 'x'=>273, 'y'=>192, 'w'=>195, 'h'=>284, 'head'=>[295,192,333,192,333,242,295,242,], 'body'=>[300,237,355,237,355,361,300,361,], 'legs'=>[300,351,305,351,350,351,355,351,359,476,320,476,], 'ex'=>1 },
+{ 'x'=>249, 'y'=>190, 'w'=>239, 'h'=>296, 'head'=>[288,190,321,190,321,240,288,240,], 'body'=>[291,235,346,235,346,365,291,365,], 'legs'=>[291,355,296,355,341,355,346,355,352,486,311,486,], 'ex'=>0, 'hit'=>[400,323,490,329,458,367,398,346,] },
+{ 'x'=>203, 'y'=>194, 'w'=>146, 'h'=>288, 'head'=>[262,194,299,194,299,244,262,244,], 'body'=>[251,239,306,239,306,365,251,365,], 'legs'=>[251,355,256,355,301,355,306,355,345,482,206,482,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>190, 'w'=>148, 'h'=>290, 'head'=>[268,190,302,190,302,240,268,240,], 'body'=>[263,235,318,235,318,362,263,362,], 'legs'=>[263,352,268,352,313,352,318,352,347,480,206,480,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>189, 'w'=>134, 'h'=>289, 'head'=>[276,189,307,189,307,239,276,239,], 'body'=>[275,234,330,234,330,361,275,361,], 'legs'=>[275,351,280,351,325,351,330,351,350,478,224,478,], 'ex'=>1 },
+{ 'x'=>276, 'y'=>190, 'w'=>102, 'h'=>287, 'head'=>[298,190,329,190,329,240,298,240,], 'body'=>[291,235,346,235,346,361,291,361,], 'legs'=>[291,351,296,351,341,351,346,351,367,477,286,477,], 'ex'=>1 },
+{ 'x'=>283, 'y'=>193, 'w'=>122, 'h'=>285, 'head'=>[305,193,338,193,338,243,305,243,], 'body'=>[294,238,349,238,349,363,294,363,], 'legs'=>[294,353,299,353,344,353,349,353,367,478,328,478,], 'ex'=>0, 'hit'=>[386,319,403,320,396,377,363,355,] },
+{ 'x'=>289, 'y'=>191, 'w'=>159, 'h'=>286, 'head'=>[312,191,345,191,345,241,312,241,], 'body'=>[306,236,361,236,361,361,306,361,], 'legs'=>[306,351,311,351,356,351,361,351,370,477,332,477,], 'ex'=>0, 'hit'=>[386,265,407,271,427,327,391,337,] },
+{ 'x'=>213, 'y'=>196, 'w'=>136, 'h'=>295, 'head'=>[257,196,288,196,288,246,257,246,], 'body'=>[243,241,298,241,298,371,243,371,], 'legs'=>[243,361,248,361,293,361,298,361,345,491,216,491,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>197, 'w'=>136, 'h'=>294, 'head'=>[266,197,296,197,296,247,266,247,], 'body'=>[253,242,308,242,308,371,253,371,], 'legs'=>[253,361,258,361,303,361,308,361,345,491,216,491,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>197, 'w'=>137, 'h'=>294, 'head'=>[273,197,302,197,302,247,273,247,], 'body'=>[268,242,323,242,323,371,268,371,], 'legs'=>[268,361,273,361,318,361,323,361,346,491,216,491,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>199, 'w'=>159, 'h'=>290, 'head'=>[275,199,316,199,316,249,275,249,], 'body'=>[269,244,324,244,324,371,269,371,], 'legs'=>[269,361,274,361,319,361,324,361,344,489,213,489,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>200, 'w'=>158, 'h'=>289, 'head'=>[285,200,322,200,322,250,285,250,], 'body'=>[275,245,330,245,330,372,275,372,], 'legs'=>[275,362,280,362,325,362,330,362,343,489,210,489,], 'ex'=>0, 'hit'=>[326,228,378,227,369,247,332,250,] },
+{ 'x'=>221, 'y'=>180, 'w'=>126, 'h'=>306, 'head'=>[264,180,296,180,296,230,264,230,], 'body'=>[244,225,299,225,299,360,244,360,], 'legs'=>[244,350,249,350,294,350,299,350,343,486,224,486,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>177, 'w'=>126, 'h'=>308, 'head'=>[259,177,292,177,292,227,259,227,], 'body'=>[237,222,292,222,292,358,237,358,], 'legs'=>[237,348,242,348,287,348,292,348,341,485,222,485,], 'ex'=>1 },
+{ 'x'=>202, 'y'=>175, 'w'=>140, 'h'=>312, 'head'=>[254,175,286,175,286,225,254,225,], 'body'=>[225,220,280,220,280,358,225,358,], 'legs'=>[225,348,230,348,275,348,280,348,338,487,218,487,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>171, 'w'=>141, 'h'=>315, 'head'=>[253,171,287,171,287,221,253,221,], 'body'=>[226,216,281,216,281,356,226,356,], 'legs'=>[226,346,231,346,276,346,281,346,336,486,218,486,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>175, 'w'=>141, 'h'=>312, 'head'=>[272,175,312,175,312,225,272,225,], 'body'=>[249,220,304,220,304,358,249,358,], 'legs'=>[249,348,254,348,299,348,304,348,340,487,221,487,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>175, 'w'=>144, 'h'=>312, 'head'=>[284,175,321,175,321,225,284,225,], 'body'=>[261,220,316,220,316,358,261,358,], 'legs'=>[261,348,266,348,311,348,316,348,341,487,223,487,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>174, 'w'=>145, 'h'=>311, 'head'=>[293,174,322,174,322,224,293,224,], 'body'=>[283,219,338,219,338,357,283,357,], 'legs'=>[283,347,288,347,333,347,338,347,341,485,223,485,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>176, 'w'=>203, 'h'=>310, 'head'=>[293,176,325,176,325,226,293,226,], 'body'=>[282,221,337,221,337,358,282,358,], 'legs'=>[282,348,287,348,332,348,337,348,341,486,221,486,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>176, 'w'=>225, 'h'=>309, 'head'=>[294,176,327,176,327,226,294,226,], 'body'=>[283,221,338,221,338,358,283,358,], 'legs'=>[283,348,288,348,333,348,338,348,340,485,221,485,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>173, 'w'=>242, 'h'=>313, 'head'=>[297,173,330,173,330,223,297,223,], 'body'=>[283,218,338,218,338,357,283,357,], 'legs'=>[283,347,288,347,333,347,338,347,340,486,222,486,], 'ex'=>0, 'hit'=>[451,218,461,218,463,229,451,228,] },
+{ 'x'=>212, 'y'=>189, 'w'=>136, 'h'=>302, 'head'=>[267,189,302,189,302,239,267,239,], 'body'=>[243,234,298,234,298,367,243,367,], 'legs'=>[243,357,248,357,293,357,298,357,344,491,215,491,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>193, 'w'=>145, 'h'=>299, 'head'=>[273,193,307,193,307,243,273,243,], 'body'=>[248,238,303,238,303,370,248,370,], 'legs'=>[248,360,253,360,298,360,303,360,341,492,214,492,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>195, 'w'=>137, 'h'=>296, 'head'=>[278,195,313,195,313,245,278,245,], 'body'=>[260,240,315,240,315,370,260,370,], 'legs'=>[260,360,265,360,310,360,315,360,342,491,213,491,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>192, 'w'=>135, 'h'=>299, 'head'=>[279,192,311,192,311,242,279,242,], 'body'=>[271,237,326,237,326,369,271,369,], 'legs'=>[271,359,276,359,321,359,326,359,341,491,213,491,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>192, 'w'=>198, 'h'=>303, 'head'=>[279,192,310,192,310,242,279,242,], 'body'=>[270,237,325,237,325,371,270,371,], 'legs'=>[270,361,275,361,320,361,325,361,340,495,212,495,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>181, 'w'=>160, 'h'=>312, 'head'=>[284,181,318,181,318,231,284,231,], 'body'=>[274,226,329,226,329,364,274,364,], 'legs'=>[274,354,279,354,324,354,329,354,340,493,208,493,], 'ex'=>0, 'hit'=>[320,179,369,187,385,238,349,239,] },
+{ 'x'=>211, 'y'=>188, 'w'=>141, 'h'=>306, 'head'=>[280,188,326,188,326,238,280,238,], 'body'=>[277,233,332,233,332,368,277,368,], 'legs'=>[277,358,282,358,327,358,332,358,341,494,214,494,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>186, 'w'=>133, 'h'=>305, 'head'=>[261,186,293,186,293,236,261,236,], 'body'=>[239,231,294,231,294,366,239,366,], 'legs'=>[239,356,244,356,289,356,294,356,350,491,224,491,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>184, 'w'=>134, 'h'=>306, 'head'=>[264,184,296,184,296,234,264,234,], 'body'=>[240,229,295,229,295,364,240,364,], 'legs'=>[240,354,245,354,290,354,295,354,350,490,223,490,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>182, 'w'=>138, 'h'=>309, 'head'=>[270,182,304,182,304,232,270,232,], 'body'=>[247,227,302,227,302,364,247,364,], 'legs'=>[247,354,252,354,297,354,302,354,351,491,223,491,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>181, 'w'=>159, 'h'=>309, 'head'=>[277,181,311,181,311,231,277,231,], 'body'=>[259,226,314,226,314,363,259,363,], 'legs'=>[259,353,264,353,309,353,314,353,346,490,223,490,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>181, 'w'=>196, 'h'=>312, 'head'=>[284,181,316,181,316,231,284,231,], 'body'=>[274,226,329,226,329,364,274,364,], 'legs'=>[274,354,279,354,324,354,329,354,344,493,222,493,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>181, 'w'=>217, 'h'=>312, 'head'=>[292,181,339,181,339,231,292,231,], 'body'=>[291,226,346,226,346,364,291,364,], 'legs'=>[291,354,296,354,341,354,346,354,344,493,222,493,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>177, 'w'=>226, 'h'=>312, 'head'=>[316,177,353,177,353,227,316,227,], 'body'=>[306,222,361,222,361,360,306,360,], 'legs'=>[306,350,311,350,356,350,361,350,352,489,254,489,], 'ex'=>1 },
+{ 'x'=>314, 'y'=>169, 'w'=>178, 'h'=>320, 'head'=>[345,169,378,169,378,219,345,219,], 'body'=>[326,214,381,214,381,356,326,356,], 'legs'=>[326,346,331,346,376,346,381,346,373,489,317,489,], 'ex'=>1 },
+{ 'x'=>337, 'y'=>171, 'w'=>135, 'h'=>319, 'head'=>[353,171,385,171,385,221,353,221,], 'body'=>[344,216,399,216,399,358,344,358,], 'legs'=>[344,348,349,348,394,348,399,348,415,490,344,490,], 'ex'=>1 },
+{ 'x'=>337, 'y'=>172, 'w'=>125, 'h'=>314, 'head'=>[360,172,393,172,393,222,360,222,], 'body'=>[354,217,409,217,409,356,354,356,], 'legs'=>[354,346,359,346,404,346,409,346,458,486,344,486,], 'ex'=>1 },
+{ 'x'=>345, 'y'=>182, 'w'=>130, 'h'=>303, 'head'=>[368,182,414,182,414,232,368,232,], 'body'=>[372,227,427,227,427,361,372,361,], 'legs'=>[372,351,377,351,422,351,427,351,471,485,349,485,], 'ex'=>1 },
+{ 'x'=>347, 'y'=>195, 'w'=>131, 'h'=>291, 'head'=>[377,195,417,195,417,245,377,245,], 'body'=>[387,240,442,240,442,368,387,368,], 'legs'=>[387,358,392,358,437,358,442,358,474,486,350,486,], 'ex'=>1 },
+{ 'x'=>362, 'y'=>214, 'w'=>120, 'h'=>276, 'head'=>[374,214,419,214,419,264,374,264,], 'body'=>[395,259,450,259,450,379,395,379,], 'legs'=>[395,369,400,369,445,369,450,369,478,490,369,490,], 'ex'=>1 },
+{ 'x'=>330, 'y'=>258, 'w'=>144, 'h'=>243, 'head'=>[376,258,437,258,437,308,376,308,], 'body'=>[394,303,449,303,449,407,394,407,], 'legs'=>[394,397,399,397,444,397,449,397,470,501,358,501,], 'ex'=>1 },
+{ 'x'=>365, 'y'=>273, 'w'=>123, 'h'=>232, 'head'=>[403,273,463,273,463,323,403,323,], 'body'=>[412,318,467,318,467,416,412,416,], 'legs'=>[412,406,417,406,462,406,467,406,482,505,368,505,], 'ex'=>1 },
+{ 'x'=>366, 'y'=>281, 'w'=>121, 'h'=>225, 'head'=>[406,281,465,281,465,331,406,331,], 'body'=>[406,326,461,326,461,421,406,421,], 'legs'=>[406,411,411,411,456,411,461,411,482,506,369,506,], 'ex'=>1 },
+{ 'x'=>365, 'y'=>263, 'w'=>124, 'h'=>244, 'head'=>[391,263,451,263,451,313,391,313,], 'body'=>[416,308,471,308,471,412,416,412,], 'legs'=>[416,402,421,402,466,402,471,402,482,507,368,507,], 'ex'=>1 },
+{ 'x'=>360, 'y'=>213, 'w'=>126, 'h'=>294, 'head'=>[386,213,421,213,421,263,386,263,], 'body'=>[409,258,464,258,464,387,409,387,], 'legs'=>[409,377,414,377,459,377,464,377,482,507,367,507,], 'ex'=>1 },
+{ 'x'=>368, 'y'=>196, 'w'=>120, 'h'=>313, 'head'=>[386,196,416,196,416,246,386,246,], 'body'=>[399,241,454,241,454,380,399,380,], 'legs'=>[399,370,404,370,449,370,454,370,484,509,378,509,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>187, 'w'=>107, 'h'=>325, 'head'=>[378,187,406,187,406,237,378,237,], 'body'=>[372,232,427,232,427,377,372,377,], 'legs'=>[372,367,377,367,422,367,427,367,459,512,375,512,], 'ex'=>1 },
+{ 'x'=>313, 'y'=>181, 'w'=>120, 'h'=>332, 'head'=>[358,181,393,181,393,231,358,231,], 'body'=>[340,226,395,226,395,374,340,374,], 'legs'=>[340,364,345,364,390,364,395,364,393,513,345,513,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>176, 'w'=>167, 'h'=>333, 'head'=>[320,176,354,176,354,226,320,226,], 'body'=>[304,221,359,221,359,370,304,370,], 'legs'=>[304,360,309,360,354,360,359,360,374,509,245,509,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>191, 'w'=>138, 'h'=>324, 'head'=>[290,191,324,191,324,241,290,241,], 'body'=>[270,236,325,236,325,380,270,380,], 'legs'=>[270,370,275,370,320,370,325,370,364,515,233,515,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>186, 'w'=>135, 'h'=>305, 'head'=>[258,186,290,186,290,236,258,236,], 'body'=>[244,231,299,231,299,366,244,366,], 'legs'=>[244,356,249,356,294,356,299,356,345,491,217,491,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>181, 'w'=>135, 'h'=>312, 'head'=>[228,181,256,181,256,231,228,231,], 'body'=>[238,226,293,226,293,364,238,364,], 'legs'=>[238,354,243,354,288,354,293,354,345,493,217,493,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>199, 'w'=>156, 'h'=>294, 'head'=>[190,199,237,199,237,249,190,249,], 'body'=>[230,244,285,244,285,373,230,373,], 'legs'=>[230,363,235,363,280,363,285,363,337,493,210,493,], 'ex'=>1 },
+{ 'x'=>171, 'y'=>208, 'w'=>166, 'h'=>283, 'head'=>[177,208,235,208,235,258,177,258,], 'body'=>[226,253,281,253,281,377,226,377,], 'legs'=>[226,367,231,367,276,367,281,367,333,491,206,491,], 'ex'=>1 },
+{ 'x'=>165, 'y'=>209, 'w'=>170, 'h'=>283, 'head'=>[170,209,227,209,227,259,170,259,], 'body'=>[215,254,270,254,270,378,215,378,], 'legs'=>[215,368,220,368,265,368,270,368,331,492,204,492,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>200, 'w'=>138, 'h'=>291, 'head'=>[282,200,314,200,314,250,282,250,], 'body'=>[251,245,306,245,306,373,251,373,], 'legs'=>[251,363,256,363,301,363,306,363,345,491,214,491,], 'ex'=>1 },
+{ 'x'=>212, 'y'=>214, 'w'=>135, 'h'=>277, 'head'=>[290,214,326,214,326,264,290,264,], 'body'=>[249,259,304,259,304,380,249,380,], 'legs'=>[249,370,254,370,299,370,304,370,343,491,215,491,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>237, 'w'=>140, 'h'=>254, 'head'=>[285,237,334,237,334,287,285,287,], 'body'=>[243,282,298,282,298,391,243,391,], 'legs'=>[243,381,248,381,293,381,298,381,343,491,217,491,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>252, 'w'=>141, 'h'=>239, 'head'=>[270,252,331,252,331,302,270,302,], 'body'=>[239,297,294,297,294,399,239,399,], 'legs'=>[239,389,244,389,289,389,294,389,344,491,214,491,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>263, 'w'=>135, 'h'=>228, 'head'=>[236,263,309,263,309,313,236,313,], 'body'=>[231,308,286,308,286,404,231,404,], 'legs'=>[231,394,236,394,281,394,286,394,342,491,214,491,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>256, 'w'=>139, 'h'=>235, 'head'=>[238,256,300,256,300,306,238,306,], 'body'=>[229,301,284,301,284,401,229,401,], 'legs'=>[229,391,234,391,279,391,284,391,343,491,213,491,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>193, 'w'=>115, 'h'=>298, 'head'=>[265,193,297,193,297,243,265,243,], 'body'=>[247,238,302,238,302,369,247,369,], 'legs'=>[247,359,252,359,297,359,302,359,339,491,231,491,], 'ex'=>1 },
+{ 'x'=>229, 'y'=>200, 'w'=>115, 'h'=>292, 'head'=>[267,200,300,200,300,250,267,250,], 'body'=>[243,245,298,245,298,373,243,373,], 'legs'=>[243,363,248,363,293,363,298,363,340,492,232,492,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>208, 'w'=>116, 'h'=>285, 'head'=>[267,208,301,208,301,258,267,258,], 'body'=>[242,253,297,253,297,378,242,378,], 'legs'=>[242,368,247,368,292,368,297,368,340,493,231,493,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>224, 'w'=>117, 'h'=>269, 'head'=>[262,224,304,224,304,274,262,274,], 'body'=>[245,269,300,269,300,386,245,386,], 'legs'=>[245,376,250,376,295,376,300,376,341,493,231,493,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>243, 'w'=>116, 'h'=>248, 'head'=>[250,243,302,243,302,293,250,293,], 'body'=>[246,288,301,288,301,394,246,394,], 'legs'=>[246,384,251,384,296,384,301,384,340,491,231,491,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>258, 'w'=>116, 'h'=>235, 'head'=>[246,258,300,258,300,308,246,308,], 'body'=>[246,303,301,303,301,403,246,403,], 'legs'=>[246,393,251,393,296,393,301,393,340,493,231,493,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>274, 'w'=>117, 'h'=>219, 'head'=>[238,274,295,274,295,324,238,324,], 'body'=>[244,319,299,319,299,411,244,411,], 'legs'=>[244,401,249,401,294,401,299,401,341,493,231,493,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>282, 'w'=>115, 'h'=>212, 'head'=>[237,282,288,282,288,332,237,332,], 'body'=>[246,327,301,327,301,415,246,415,], 'legs'=>[246,405,251,405,296,405,301,405,339,494,231,494,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>297, 'w'=>121, 'h'=>196, 'head'=>[235,297,283,297,283,347,235,347,], 'body'=>[239,342,294,342,294,422,239,422,], 'legs'=>[239,412,244,412,289,412,294,412,338,493,228,493,], 'ex'=>1 },
+{ 'x'=>245, 'y'=>296, 'w'=>113, 'h'=>195, 'head'=>[276,296,311,296,311,346,276,346,], 'body'=>[253,341,308,341,308,421,253,421,], 'legs'=>[253,411,258,411,303,411,308,411,350,491,250,491,], 'ex'=>1 },
+{ 'x'=>235, 'y'=>300, 'w'=>123, 'h'=>186, 'head'=>[260,300,295,300,295,350,260,350,], 'body'=>[243,345,298,345,298,420,243,420,], 'legs'=>[243,410,248,410,293,410,298,410,344,486,248,486,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>301, 'w'=>135, 'h'=>187, 'head'=>[243,301,271,301,271,351,243,351,], 'body'=>[235,346,290,346,290,422,235,422,], 'legs'=>[235,412,240,412,285,412,290,412,339,488,245,488,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>306, 'w'=>148, 'h'=>181, 'head'=>[214,306,252,306,252,356,214,356,], 'body'=>[225,351,280,351,280,424,225,424,], 'legs'=>[225,414,230,414,275,414,280,414,337,487,242,487,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>312, 'w'=>161, 'h'=>174, 'head'=>[193,312,239,312,239,362,193,362,], 'body'=>[212,357,267,357,267,426,212,426,], 'legs'=>[212,416,217,416,262,416,267,416,331,486,234,486,], 'ex'=>1 },
+{ 'x'=>239, 'y'=>303, 'w'=>114, 'h'=>181, 'head'=>[276,303,318,303,318,353,276,353,], 'body'=>[248,348,303,348,303,421,248,421,], 'legs'=>[248,411,253,411,298,411,303,411,349,484,246,484,], 'ex'=>1 },
+{ 'x'=>238, 'y'=>305, 'w'=>115, 'h'=>178, 'head'=>[269,305,310,305,310,355,269,355,], 'body'=>[245,350,300,350,300,421,245,421,], 'legs'=>[245,411,250,411,295,411,300,411,348,483,245,483,], 'ex'=>1 },
+{ 'x'=>238, 'y'=>301, 'w'=>114, 'h'=>182, 'head'=>[266,301,306,301,306,351,266,351,], 'body'=>[242,346,297,346,297,419,242,419,], 'legs'=>[242,409,247,409,292,409,297,409,348,483,245,483,], 'ex'=>1 },
+{ 'x'=>233, 'y'=>298, 'w'=>119, 'h'=>185, 'head'=>[260,298,297,298,297,348,260,348,], 'body'=>[238,343,293,343,293,418,238,418,], 'legs'=>[238,408,243,408,288,408,293,408,348,483,244,483,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>305, 'w'=>120, 'h'=>180, 'head'=>[252,305,286,305,286,355,252,355,], 'body'=>[236,350,291,350,291,422,236,422,], 'legs'=>[236,412,241,412,286,412,291,412,346,485,243,485,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>182, 'w'=>133, 'h'=>309, 'head'=>[278,182,313,182,313,232,278,232,], 'body'=>[250,227,305,227,305,364,250,364,], 'legs'=>[250,354,255,354,300,354,305,354,345,491,219,491,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>189, 'w'=>134, 'h'=>301, 'head'=>[287,189,327,189,327,239,287,239,], 'body'=>[252,234,307,234,307,367,252,367,], 'legs'=>[252,357,257,357,302,357,307,357,345,490,218,490,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>205, 'w'=>153, 'h'=>286, 'head'=>[296,205,345,205,345,255,296,255,], 'body'=>[254,250,309,250,309,375,254,375,], 'legs'=>[254,365,259,365,304,365,309,365,345,491,217,491,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>214, 'w'=>162, 'h'=>276, 'head'=>[300,214,353,214,353,264,300,264,], 'body'=>[255,259,310,259,310,379,255,379,], 'legs'=>[255,369,260,369,305,369,310,369,346,490,217,490,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>229, 'w'=>173, 'h'=>261, 'head'=>[289,229,352,229,352,279,289,279,], 'body'=>[250,274,305,274,305,387,250,387,], 'legs'=>[250,377,255,377,300,377,305,377,344,490,216,490,], 'ex'=>1 },
+{ 'x'=>212, 'y'=>237, 'w'=>182, 'h'=>253, 'head'=>[279,237,348,237,348,287,279,287,], 'body'=>[254,282,309,282,309,391,254,391,], 'legs'=>[254,381,259,381,304,381,309,381,343,490,215,490,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>244, 'w'=>185, 'h'=>247, 'head'=>[274,244,348,244,348,294,274,294,], 'body'=>[261,289,316,289,316,395,261,395,], 'legs'=>[261,385,266,385,311,385,316,385,344,491,216,491,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>249, 'w'=>192, 'h'=>239, 'head'=>[277,249,350,249,350,299,277,299,], 'body'=>[269,294,324,294,324,396,269,396,], 'legs'=>[269,386,274,386,319,386,324,386,368,488,216,488,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>183, 'w'=>126, 'h'=>308, 'head'=>[269,183,302,183,302,233,269,233,], 'body'=>[243,228,298,228,298,364,243,364,], 'legs'=>[243,354,248,354,293,354,298,354,350,491,231,491,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>188, 'w'=>125, 'h'=>305, 'head'=>[271,188,305,188,305,238,271,238,], 'body'=>[237,233,292,233,292,368,237,368,], 'legs'=>[237,358,242,358,287,358,292,358,347,493,229,493,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>204, 'w'=>126, 'h'=>285, 'head'=>[279,204,315,204,315,254,279,254,], 'body'=>[238,249,293,249,293,374,238,374,], 'legs'=>[238,364,243,364,288,364,293,364,348,489,229,489,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>241, 'w'=>126, 'h'=>249, 'head'=>[283,241,326,241,326,291,283,291,], 'body'=>[243,286,298,286,298,393,243,393,], 'legs'=>[243,383,248,383,293,383,298,383,348,490,229,490,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>279, 'w'=>129, 'h'=>212, 'head'=>[285,279,330,279,330,329,285,329,], 'body'=>[248,324,303,324,303,412,248,412,], 'legs'=>[248,402,253,402,298,402,303,402,349,491,229,491,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>295, 'w'=>133, 'h'=>196, 'head'=>[290,295,334,295,334,345,290,345,], 'body'=>[253,340,308,340,308,420,253,420,], 'legs'=>[253,410,258,410,303,410,308,410,350,491,235,491,], 'ex'=>1 },
+{ 'x'=>231, 'y'=>278, 'w'=>147, 'h'=>212, 'head'=>[302,278,334,278,334,328,302,328,], 'body'=>[263,323,318,323,318,411,263,411,], 'legs'=>[263,401,268,401,313,401,318,401,348,490,234,490,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>263, 'w'=>142, 'h'=>228, 'head'=>[300,263,334,263,334,313,300,313,], 'body'=>[265,308,320,308,320,404,265,404,], 'legs'=>[265,394,270,394,315,394,320,394,348,491,233,491,], 'ex'=>1 },
+{ 'x'=>225, 'y'=>241, 'w'=>151, 'h'=>250, 'head'=>[295,241,329,241,329,291,295,291,], 'body'=>[268,286,323,286,323,393,268,393,], 'legs'=>[268,383,273,383,318,383,323,383,371,491,228,491,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>223, 'w'=>224, 'h'=>268, 'head'=>[286,223,322,223,322,273,286,273,], 'body'=>[274,268,329,268,329,384,274,384,], 'legs'=>[274,374,279,374,324,374,329,374,344,491,218,491,], 'ex'=>0, 'hit'=>[418,300,438,300,436,321,421,316,] },
+{ 'x'=>217, 'y'=>188, 'w'=>160, 'h'=>304, 'head'=>[309,188,335,188,335,238,309,238,], 'body'=>[276,233,331,233,331,367,276,367,], 'legs'=>[276,357,281,357,326,357,331,357,345,492,220,492,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>193, 'w'=>142, 'h'=>300, 'head'=>[279,193,329,193,329,243,279,243,], 'body'=>[275,238,330,238,330,370,275,370,], 'legs'=>[275,360,280,360,325,360,330,360,345,493,221,493,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>180, 'w'=>156, 'h'=>311, 'head'=>[290,180,324,180,324,230,290,230,], 'body'=>[281,225,336,225,336,363,281,363,], 'legs'=>[281,353,286,353,331,353,336,353,344,491,221,491,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>179, 'w'=>158, 'h'=>313, 'head'=>[296,179,329,179,329,229,296,229,], 'body'=>[279,224,334,224,334,363,279,363,], 'legs'=>[279,353,284,353,329,353,334,353,348,492,221,492,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>176, 'w'=>151, 'h'=>311, 'head'=>[301,176,334,176,334,226,301,226,], 'body'=>[273,221,328,221,328,359,273,359,], 'legs'=>[273,349,278,349,323,349,328,349,348,487,221,487,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>175, 'w'=>153, 'h'=>304, 'head'=>[287,175,319,175,319,225,287,225,], 'body'=>[259,220,314,220,314,354,259,354,], 'legs'=>[259,344,264,344,309,344,314,344,343,479,203,479,], 'ex'=>1 },
+{ 'x'=>196, 'y'=>181, 'w'=>149, 'h'=>305, 'head'=>[265,181,298,181,298,231,265,231,], 'body'=>[239,226,294,226,294,361,239,361,], 'legs'=>[239,351,244,351,289,351,294,351,341,486,199,486,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>175, 'w'=>133, 'h'=>316, 'head'=>[259,175,292,175,292,225,259,225,], 'body'=>[243,220,298,220,298,360,243,360,], 'legs'=>[243,350,248,350,293,350,298,350,344,491,218,491,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>173, 'w'=>135, 'h'=>315, 'head'=>[257,173,289,173,289,223,257,223,], 'body'=>[237,218,292,218,292,358,237,358,], 'legs'=>[237,348,242,348,287,348,292,348,345,488,217,488,], 'ex'=>1 },
+{ 'x'=>195, 'y'=>171, 'w'=>149, 'h'=>318, 'head'=>[249,171,280,171,280,221,249,221,], 'body'=>[226,216,281,216,281,357,226,357,], 'legs'=>[226,347,231,347,276,347,281,347,340,489,213,489,], 'ex'=>1 },
+{ 'x'=>174, 'y'=>169, 'w'=>164, 'h'=>321, 'head'=>[236,169,267,169,267,219,236,219,], 'body'=>[214,214,269,214,269,357,214,357,], 'legs'=>[214,347,219,347,264,347,269,347,334,490,207,490,], 'ex'=>1 },
+{ 'x'=>163, 'y'=>168, 'w'=>173, 'h'=>322, 'head'=>[231,168,264,168,264,218,231,218,], 'body'=>[215,213,270,213,270,356,215,356,], 'legs'=>[215,346,220,346,265,346,270,346,332,490,204,490,], 'ex'=>1 },
+{ 'x'=>186, 'y'=>168, 'w'=>161, 'h'=>321, 'head'=>[251,168,283,168,283,218,251,218,], 'body'=>[237,213,292,213,292,356,237,356,], 'legs'=>[237,346,242,346,287,346,292,346,338,489,210,489,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>171, 'w'=>145, 'h'=>320, 'head'=>[271,171,304,171,304,221,271,221,], 'body'=>[255,216,310,216,310,358,255,358,], 'legs'=>[255,348,260,348,305,348,310,348,345,491,218,491,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>177, 'w'=>145, 'h'=>312, 'head'=>[280,177,314,177,314,227,280,227,], 'body'=>[267,222,322,222,322,360,267,360,], 'legs'=>[267,350,272,350,317,350,322,350,346,489,216,489,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>189, 'w'=>193, 'h'=>298, 'head'=>[290,189,322,189,322,239,290,239,], 'body'=>[268,234,323,234,323,365,268,365,], 'legs'=>[268,355,273,355,318,355,323,355,344,487,214,487,], 'ex'=>0, 'hit'=>[379,213,410,214,417,245,394,248,] },
+{ 'x'=>208, 'y'=>201, 'w'=>190, 'h'=>290, 'head'=>[289,201,328,201,328,251,289,251,], 'body'=>[267,246,322,246,322,373,267,373,], 'legs'=>[267,363,272,363,317,363,322,363,343,491,211,491,], 'ex'=>0, 'hit'=>[387,259,417,286,397,334,379,327,] },
+{ 'x'=>208, 'y'=>204, 'w'=>168, 'h'=>286, 'head'=>[291,204,331,204,331,254,291,254,], 'body'=>[268,249,323,249,323,374,268,374,], 'legs'=>[268,364,273,364,318,364,323,364,343,490,211,490,], 'ex'=>1 },
+{ 'x'=>212, 'y'=>190, 'w'=>140, 'h'=>299, 'head'=>[301,190,333,190,333,240,301,240,], 'body'=>[274,235,329,235,329,367,274,367,], 'legs'=>[274,357,279,357,324,357,329,357,344,489,215,489,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>174, 'w'=>139, 'h'=>312, 'head'=>[290,174,323,174,323,224,290,224,], 'body'=>[268,219,323,219,323,357,268,357,], 'legs'=>[268,347,273,347,318,347,323,347,346,486,220,486,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>176, 'w'=>135, 'h'=>309, 'head'=>[270,176,308,176,308,226,270,226,], 'body'=>[247,221,302,221,302,358,247,358,], 'legs'=>[247,348,252,348,297,348,302,348,344,485,216,485,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>166, 'w'=>142, 'h'=>316, 'head'=>[257,166,290,166,290,216,257,216,], 'body'=>[227,211,282,211,282,351,227,351,], 'legs'=>[227,341,232,341,277,341,282,341,341,482,214,482,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>161, 'w'=>155, 'h'=>324, 'head'=>[249,161,282,161,282,211,249,211,], 'body'=>[224,206,279,206,279,350,224,350,], 'legs'=>[224,340,229,340,274,340,279,340,336,485,211,485,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>169, 'w'=>134, 'h'=>318, 'head'=>[283,169,314,169,314,219,283,219,], 'body'=>[252,214,307,214,307,355,252,355,], 'legs'=>[252,345,257,345,302,345,307,345,345,487,218,487,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>170, 'w'=>132, 'h'=>316, 'head'=>[278,170,311,170,311,220,278,220,], 'body'=>[245,215,300,215,300,355,245,355,], 'legs'=>[245,345,250,345,295,345,300,345,346,486,221,486,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>178, 'w'=>133, 'h'=>306, 'head'=>[267,178,298,178,298,228,267,228,], 'body'=>[239,223,294,223,294,358,239,358,], 'legs'=>[239,348,244,348,289,348,294,348,346,484,220,484,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>172, 'w'=>136, 'h'=>319, 'head'=>[260,172,292,172,292,222,260,222,], 'body'=>[235,217,290,217,290,359,235,359,], 'legs'=>[235,349,240,349,285,349,290,349,347,491,222,491,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>177, 'w'=>145, 'h'=>316, 'head'=>[257,177,289,177,289,227,257,227,], 'body'=>[231,222,286,222,286,362,231,362,], 'legs'=>[231,352,236,352,281,352,286,352,344,493,219,493,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>175, 'w'=>140, 'h'=>319, 'head'=>[264,175,295,175,295,225,264,225,], 'body'=>[234,220,289,220,289,362,234,362,], 'legs'=>[234,352,239,352,284,352,289,352,344,494,219,494,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>178, 'w'=>132, 'h'=>314, 'head'=>[266,178,298,178,298,228,266,228,], 'body'=>[240,223,295,223,295,362,240,362,], 'legs'=>[240,352,245,352,290,352,295,352,347,492,222,492,], 'ex'=>1 },
+{ 'x'=>198, 'y'=>171, 'w'=>147, 'h'=>321, 'head'=>[257,171,288,171,288,221,257,221,], 'body'=>[230,216,285,216,285,359,230,359,], 'legs'=>[230,349,235,349,280,349,285,349,341,492,215,492,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>173, 'w'=>133, 'h'=>319, 'head'=>[261,173,294,173,294,223,261,223,], 'body'=>[242,218,297,218,297,360,242,360,], 'legs'=>[242,350,247,350,292,350,297,350,345,492,219,492,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>174, 'w'=>148, 'h'=>316, 'head'=>[265,174,300,174,300,224,265,224,], 'body'=>[264,219,319,219,319,359,264,359,], 'legs'=>[264,349,269,349,314,349,319,349,344,490,217,490,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>177, 'w'=>190, 'h'=>314, 'head'=>[267,177,300,177,300,227,267,227,], 'body'=>[270,222,325,222,325,361,270,361,], 'legs'=>[270,351,275,351,320,351,325,351,346,491,220,491,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>180, 'w'=>203, 'h'=>314, 'head'=>[269,180,300,180,300,230,269,230,], 'body'=>[274,225,329,225,329,364,274,364,], 'legs'=>[274,354,279,354,324,354,329,354,343,494,220,494,], 'ex'=>0, 'hit'=>[425,282,435,282,437,294,425,292,] },
+{ 'x'=>221, 'y'=>182, 'w'=>123, 'h'=>309, 'head'=>[263,182,302,182,302,232,263,232,], 'body'=>[244,227,299,227,299,364,244,364,], 'legs'=>[244,354,249,354,294,354,299,354,340,491,224,491,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>183, 'w'=>129, 'h'=>310, 'head'=>[276,183,315,183,315,233,276,233,], 'body'=>[258,228,313,228,313,365,258,365,], 'legs'=>[258,355,263,355,308,355,313,355,344,493,226,493,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>177, 'w'=>126, 'h'=>317, 'head'=>[286,177,320,177,320,227,286,227,], 'body'=>[258,222,313,222,313,363,258,363,], 'legs'=>[258,353,263,353,308,353,313,353,345,494,227,494,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>187, 'w'=>128, 'h'=>309, 'head'=>[270,187,299,187,299,237,270,237,], 'body'=>[248,232,303,232,303,369,248,369,], 'legs'=>[248,359,253,359,298,359,303,359,344,496,227,496,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>184, 'w'=>125, 'h'=>312, 'head'=>[261,184,288,184,288,234,261,234,], 'body'=>[240,229,295,229,295,367,240,367,], 'legs'=>[240,357,245,357,290,357,295,357,345,496,227,496,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>179, 'w'=>129, 'h'=>316, 'head'=>[249,179,277,179,277,229,249,229,], 'body'=>[230,224,285,224,285,364,230,364,], 'legs'=>[230,354,235,354,280,354,285,354,343,495,224,495,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>178, 'w'=>126, 'h'=>317, 'head'=>[254,178,279,178,279,228,254,228,], 'body'=>[235,223,290,223,290,364,235,364,], 'legs'=>[235,354,240,354,285,354,290,354,344,495,225,495,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>178, 'w'=>125, 'h'=>316, 'head'=>[261,178,288,178,288,228,261,228,], 'body'=>[241,223,296,223,296,363,241,363,], 'legs'=>[241,353,246,353,291,353,296,353,342,494,224,494,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>177, 'w'=>126, 'h'=>314, 'head'=>[268,177,294,177,294,227,268,227,], 'body'=>[245,222,300,222,300,361,245,361,], 'legs'=>[245,351,250,351,295,351,300,351,342,491,223,491,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>176, 'w'=>127, 'h'=>315, 'head'=>[268,176,294,176,294,226,268,226,], 'body'=>[245,221,300,221,300,361,245,361,], 'legs'=>[245,351,250,351,295,351,300,351,342,491,222,491,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>175, 'w'=>127, 'h'=>316, 'head'=>[267,175,293,175,293,225,267,225,], 'body'=>[244,220,299,220,299,360,244,360,], 'legs'=>[244,350,249,350,294,350,299,350,342,491,222,491,], 'ex'=>1 },
diff --git a/data/characters/GRIZLIDATA.DAT.pl b/data/characters/GRIZLIDATA.DAT.pl
new file mode 100644
index 0000000..aed1e24
--- /dev/null
+++ b/data/characters/GRIZLIDATA.DAT.pl
@@ -0,0 +1,379 @@
+{ 'x'=>196, 'y'=> 75, 'w'=> 99, 'h'=>309, 'head'=>[232, 75,260, 75,260,125,232,125,], 'body'=>[204,120,269,120,269,256,204,256,], 'legs'=>[204,246,209,246,264,246,269,246,275,383,201,383,], 'ex'=>1 },
+{ 'x'=>196, 'y'=> 75, 'w'=> 99, 'h'=>309, 'head'=>[231, 75,259, 75,259,125,231,125,], 'body'=>[205,120,270,120,270,257,205,257,], 'legs'=>[205,247,210,247,265,247,270,247,276,384,201,384,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 76, 'w'=> 96, 'h'=>309, 'head'=>[229, 76,258, 76,258,126,229,126,], 'body'=>[208,121,273,121,273,258,208,258,], 'legs'=>[208,248,213,248,268,248,273,248,275,385,201,385,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 75, 'w'=> 93, 'h'=>309, 'head'=>[227, 75,256, 75,256,125,227,125,], 'body'=>[207,120,272,120,272,257,207,257,], 'legs'=>[207,247,212,247,267,247,272,247,275,384,201,384,], 'ex'=>1 },
+{ 'x'=>196, 'y'=> 74, 'w'=> 88, 'h'=>309, 'head'=>[222, 74,252, 74,252,124,222,124,], 'body'=>[205,119,270,119,270,256,205,256,], 'legs'=>[205,246,210,246,265,246,270,246,275,383,201,383,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 73, 'w'=> 91, 'h'=>311, 'head'=>[219, 73,246, 73,246,123,219,123,], 'body'=>[201,118,266,118,266,256,201,256,], 'legs'=>[201,246,206,246,261,246,266,246,277,384,202,384,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 73, 'w'=> 94, 'h'=>312, 'head'=>[216, 73,244, 73,244,123,216,123,], 'body'=>[199,118,264,118,264,256,199,256,], 'legs'=>[199,246,204,246,259,246,264,246,276,385,202,385,], 'ex'=>1 },
+{ 'x'=>180, 'y'=> 73, 'w'=>100, 'h'=>312, 'head'=>[213, 73,241, 73,241,123,213,123,], 'body'=>[192,118,257,118,257,256,192,256,], 'legs'=>[192,246,197,246,252,246,257,246,275,385,203,385,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 72, 'w'=>103, 'h'=>312, 'head'=>[209, 72,237, 72,237,122,209,122,], 'body'=>[190,117,255,117,255,255,190,255,], 'legs'=>[190,245,195,245,250,245,255,245,277,384,202,384,], 'ex'=>1 },
+{ 'x'=>168, 'y'=> 72, 'w'=>115, 'h'=>313, 'head'=>[202, 72,230, 72,230,122,202,122,], 'body'=>[191,117,256,117,256,256,191,256,], 'legs'=>[191,246,196,246,251,246,256,246,278,385,203,385,], 'ex'=>1 },
+{ 'x'=>170, 'y'=> 73, 'w'=>115, 'h'=>314, 'head'=>[201, 73,229, 73,229,123,201,123,], 'body'=>[187,118,252,118,252,257,187,257,], 'legs'=>[187,247,192,247,247,247,252,247,280,387,204,387,], 'ex'=>1 },
+{ 'x'=>168, 'y'=> 74, 'w'=>115, 'h'=>313, 'head'=>[202, 74,231, 74,231,124,202,124,], 'body'=>[187,119,252,119,252,258,187,258,], 'legs'=>[187,248,192,248,247,248,252,248,278,387,203,387,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 79, 'w'=>119, 'h'=>309, 'head'=>[207, 79,239, 79,239,129,207,129,], 'body'=>[189,124,254,124,254,261,189,261,], 'legs'=>[189,251,194,251,249,251,254,251,285,388,204,388,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 77, 'w'=>119, 'h'=>311, 'head'=>[219, 77,249, 77,249,127,219,127,], 'body'=>[198,122,263,122,263,260,198,260,], 'legs'=>[198,250,203,250,258,250,263,250,282,388,204,388,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 80, 'w'=>115, 'h'=>307, 'head'=>[230, 80,261, 80,261,130,230,130,], 'body'=>[211,125,276,125,276,261,211,261,], 'legs'=>[211,251,216,251,271,251,276,251,285,387,205,387,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 76, 'w'=> 99, 'h'=>307, 'head'=>[239, 76,268, 76,268,126,239,126,], 'body'=>[215,121,280,121,280,257,215,257,], 'legs'=>[215,247,220,247,275,247,280,247,284,383,207,383,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 81, 'w'=> 98, 'h'=>305, 'head'=>[242, 81,274, 81,274,131,242,131,], 'body'=>[217,126,282,126,282,261,217,261,], 'legs'=>[217,251,222,251,277,251,282,251,286,386,208,386,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 75, 'w'=>115, 'h'=>312, 'head'=>[240, 75,270, 75,270,125,240,125,], 'body'=>[213,120,278,120,278,258,213,258,], 'legs'=>[213,248,218,248,273,248,278,248,287,387,209,387,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 82, 'w'=>132, 'h'=>309, 'head'=>[231, 82,263, 82,263,132,231,132,], 'body'=>[205,127,270,127,270,264,205,264,], 'legs'=>[205,254,210,254,265,254,270,254,285,391,209,391,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 73, 'w'=>126, 'h'=>317, 'head'=>[224, 73,255, 73,255,123,224,123,], 'body'=>[202,118,267,118,267,259,202,259,], 'legs'=>[202,249,207,249,262,249,267,249,291,390,208,390,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 81, 'w'=>126, 'h'=>317, 'head'=>[229, 81,261, 81,261,131,229,131,], 'body'=>[206,126,271,126,271,267,206,267,], 'legs'=>[206,257,211,257,266,257,271,257,303,398,197,398,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 84, 'w'=>145, 'h'=>315, 'head'=>[239, 84,271, 84,271,134,239,134,], 'body'=>[217,129,282,129,282,269,217,269,], 'legs'=>[217,259,222,259,277,259,282,259,318,399,198,399,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 89, 'w'=>159, 'h'=>310, 'head'=>[249, 89,280, 89,280,139,249,139,], 'body'=>[228,134,293,134,293,271,228,271,], 'legs'=>[228,261,233,261,288,261,293,261,318,399,197,399,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 88, 'w'=>165, 'h'=>309, 'head'=>[258, 88,288, 88,288,138,258,138,], 'body'=>[239,133,304,133,304,270,239,270,], 'legs'=>[239,260,244,260,299,260,304,260,316,397,200,397,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 85, 'w'=>155, 'h'=>305, 'head'=>[266, 85,295, 85,295,135,266,135,], 'body'=>[246,130,311,130,311,265,246,265,], 'legs'=>[246,255,251,255,306,255,311,255,315,390,215,390,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 82, 'w'=>134, 'h'=>308, 'head'=>[275, 82,305, 82,305,132,275,132,], 'body'=>[253,127,318,127,318,263,253,263,], 'legs'=>[253,253,258,253,313,253,318,253,315,390,239,390,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 82, 'w'=>123, 'h'=>309, 'head'=>[280, 82,310, 82,310,132,280,132,], 'body'=>[256,127,321,127,321,264,256,264,], 'legs'=>[256,254,261,254,316,254,321,254,314,391,256,391,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 84, 'w'=>121, 'h'=>307, 'head'=>[285, 84,315, 84,315,134,285,134,], 'body'=>[259,129,324,129,324,265,259,265,], 'legs'=>[259,255,264,255,319,255,324,255,316,391,263,391,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 83, 'w'=>113, 'h'=>309, 'head'=>[288, 83,318, 83,318,133,288,133,], 'body'=>[263,128,328,128,328,265,263,265,], 'legs'=>[263,255,268,255,323,255,328,255,315,392,267,392,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 82, 'w'=>110, 'h'=>315, 'head'=>[290, 82,321, 82,321,132,290,132,], 'body'=>[265,127,330,127,330,267,265,267,], 'legs'=>[265,257,270,257,325,257,330,257,316,397,266,397,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 83, 'w'=>116, 'h'=>315, 'head'=>[290, 83,322, 83,322,133,290,133,], 'body'=>[265,128,330,128,330,268,265,268,], 'legs'=>[265,258,270,258,325,258,330,258,320,398,265,398,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 86, 'w'=>123, 'h'=>314, 'head'=>[290, 86,321, 86,321,136,290,136,], 'body'=>[265,131,330,131,330,270,265,270,], 'legs'=>[265,260,270,260,325,260,330,260,326,400,265,400,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 83, 'w'=>126, 'h'=>316, 'head'=>[294, 83,325, 83,325,133,294,133,], 'body'=>[268,128,333,128,333,268,268,268,], 'legs'=>[268,258,273,258,328,258,333,258,333,399,266,399,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 83, 'w'=>126, 'h'=>315, 'head'=>[292, 83,326, 83,326,133,292,133,], 'body'=>[270,128,335,128,335,268,270,268,], 'legs'=>[270,258,275,258,330,258,335,258,348,398,264,398,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 83, 'w'=>128, 'h'=>315, 'head'=>[297, 83,329, 83,329,133,297,133,], 'body'=>[275,128,340,128,340,268,275,268,], 'legs'=>[275,258,280,258,335,258,340,258,389,398,265,398,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 84, 'w'=>139, 'h'=>302, 'head'=>[230, 84,262, 84,262,134,230,134,], 'body'=>[211,129,276,129,276,262,211,262,], 'legs'=>[211,252,216,252,271,252,276,252,288,386,190,386,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 80, 'w'=>120, 'h'=>307, 'head'=>[224, 80,252, 80,252,130,224,130,], 'body'=>[206,125,271,125,271,261,206,261,], 'legs'=>[206,251,211,251,266,251,271,251,290,387,190,387,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 78, 'w'=>114, 'h'=>310, 'head'=>[225, 78,253, 78,253,128,225,128,], 'body'=>[207,123,272,123,272,260,207,260,], 'legs'=>[207,250,212,250,267,250,272,250,291,388,187,388,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 80, 'w'=>119, 'h'=>316, 'head'=>[225, 80,259, 80,259,130,225,130,], 'body'=>[210,125,275,125,275,265,210,265,], 'legs'=>[210,255,215,255,270,255,275,255,291,396,188,396,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 81, 'w'=>121, 'h'=>320, 'head'=>[226, 81,263, 81,263,131,226,131,], 'body'=>[213,126,278,126,278,268,213,268,], 'legs'=>[213,258,218,258,273,258,278,258,290,401,188,401,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 82, 'w'=>129, 'h'=>320, 'head'=>[230, 82,267, 82,267,132,230,132,], 'body'=>[224,127,289,127,289,269,224,269,], 'legs'=>[224,259,229,259,284,259,289,259,292,402,191,402,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 84, 'w'=>134, 'h'=>319, 'head'=>[235, 84,271, 84,271,134,235,134,], 'body'=>[231,129,296,129,296,271,231,271,], 'legs'=>[231,261,236,261,291,261,296,261,293,403,194,403,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 77, 'w'=>144, 'h'=>325, 'head'=>[242, 77,273, 77,273,127,242,127,], 'body'=>[231,122,296,122,296,267,231,267,], 'legs'=>[231,257,236,257,291,257,296,257,294,402,216,402,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 80, 'w'=>139, 'h'=>322, 'head'=>[241, 80,271, 80,271,130,241,130,], 'body'=>[233,125,298,125,298,268,233,268,], 'legs'=>[233,258,238,258,293,258,298,258,295,402,221,402,], 'ex'=>1 },
+{ 'x'=>183, 'y'=> 92, 'w'=>131, 'h'=>295, 'head'=>[223, 92,254, 92,254,142,223,142,], 'body'=>[200,137,265,137,265,267,200,267,], 'legs'=>[200,257,205,257,260,257,265,257,313,387,187,387,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>103, 'w'=>169, 'h'=>281, 'head'=>[248,103,279,103,279,153,248,153,], 'body'=>[236,148,301,148,301,271,236,271,], 'legs'=>[236,261,241,261,296,261,301,261,348,384,188,384,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>116, 'w'=>173, 'h'=>270, 'head'=>[261,116,292,116,292,166,261,166,], 'body'=>[247,161,312,161,312,278,247,278,], 'legs'=>[247,268,252,268,307,268,312,268,350,386,206,386,], 'ex'=>1 },
+{ 'x'=>249, 'y'=>131, 'w'=>145, 'h'=>256, 'head'=>[277,131,311,131,311,181,277,181,], 'body'=>[257,176,322,176,322,286,257,286,], 'legs'=>[257,276,262,276,317,276,322,276,393,387,254,387,], 'ex'=>1 },
+{ 'x'=>240, 'y'=>140, 'w'=>161, 'h'=>250, 'head'=>[280,140,303,140,303,190,280,190,], 'body'=>[261,185,326,185,326,292,261,292,], 'legs'=>[261,282,266,282,321,282,326,282,350,390,274,390,], 'ex'=>1 },
+{ 'x'=>233, 'y'=>167, 'w'=>165, 'h'=>224, 'head'=>[284,167,317,167,317,217,284,217,], 'body'=>[260,212,325,212,325,306,260,306,], 'legs'=>[260,296,265,296,320,296,325,296,353,391,279,391,], 'ex'=>1 },
+{ 'x'=>247, 'y'=>189, 'w'=>134, 'h'=>198, 'head'=>[282,189,319,189,319,239,282,239,], 'body'=>[256,234,321,234,321,315,256,315,], 'legs'=>[256,305,261,305,316,305,321,305,351,387,271,387,], 'ex'=>1 },
+{ 'x'=>243, 'y'=>211, 'w'=>120, 'h'=>189, 'head'=>[271,211,312,211,312,261,271,261,], 'body'=>[252,256,317,256,317,333,252,333,], 'legs'=>[252,323,257,323,312,323,317,323,351,400,263,400,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>232, 'w'=>126, 'h'=>168, 'head'=>[253,232,294,232,294,282,253,282,], 'body'=>[236,277,301,277,301,343,236,343,], 'legs'=>[236,333,241,333,296,333,301,333,352,400,253,400,], 'ex'=>1 },
+{ 'x'=>204, 'y'=>254, 'w'=>152, 'h'=>142, 'head'=>[221,254,273,254,273,304,221,304,], 'body'=>[211,299,276,299,276,352,211,352,], 'legs'=>[211,342,216,342,271,342,276,342,351,396,212,396,], 'ex'=>1 },
+{ 'x'=>174, 'y'=>273, 'w'=>184, 'h'=>120, 'head'=>[194,273,259,273,259,323,194,323,], 'body'=>[183,318,248,318,248,360,183,360,], 'legs'=>[183,350,188,350,243,350,248,350,312,393,198,393,], 'ex'=>1 },
+{ 'x'=>139, 'y'=>272, 'w'=>217, 'h'=>119, 'head'=>[192,272,242,272,242,322,192,322,], 'body'=>[149,317,214,317,214,359,149,359,], 'legs'=>[149,349,154,349,209,349,214,349,312,391,177,391,], 'ex'=>1 },
+{ 'x'=>109, 'y'=>268, 'w'=>240, 'h'=>119, 'head'=>[219,268,268,268,268,318,219,318,], 'body'=>[131,313,196,313,196,355,131,355,], 'legs'=>[131,345,136,345,191,345,196,345,302,387,124,387,], 'ex'=>1 },
+{ 'x'=> 85, 'y'=>260, 'w'=>253, 'h'=>126, 'head'=>[206,260,255,260,255,310,206,310,], 'body'=>[135,305,200,305,200,350,135,350,], 'legs'=>[135,340,140,340,195,340,200,340,303,386, 88,386,], 'ex'=>1 },
+{ 'x'=> 85, 'y'=>253, 'w'=>253, 'h'=>136, 'head'=>[194,253,214,253,214,303,194,303,], 'body'=>[146,298,211,298,211,348,146,348,], 'legs'=>[146,338,151,338,206,338,211,338,300,389, 90,389,], 'ex'=>1 },
+{ 'x'=> 84, 'y'=>251, 'w'=>252, 'h'=>140, 'head'=>[174,251,186,251,186,301,174,301,], 'body'=>[157,296,222,296,222,348,157,348,], 'legs'=>[157,338,162,338,217,338,222,338,304,391, 90,391,], 'ex'=>1 },
+{ 'x'=> 86, 'y'=>239, 'w'=>266, 'h'=>149, 'head'=>[189,239,203,239,203,289,189,289,], 'body'=>[155,284,220,284,220,341,155,341,], 'legs'=>[155,331,160,331,215,331,220,331,322,388, 89,388,], 'ex'=>1 },
+{ 'x'=>106, 'y'=>263, 'w'=>267, 'h'=>128, 'head'=>[183,263,235,263,235,313,183,313,], 'body'=>[123,308,188,308,188,354,123,354,], 'legs'=>[123,344,128,344,183,344,188,344,268,391,162,391,], 'ex'=>1 },
+{ 'x'=>131, 'y'=>268, 'w'=>250, 'h'=>125, 'head'=>[149,268,225,268,225,318,149,318,], 'body'=>[152,313,217,313,217,358,152,358,], 'legs'=>[152,348,157,348,212,348,217,348,246,393,175,393,], 'ex'=>1 },
+{ 'x'=>155, 'y'=>258, 'w'=>229, 'h'=>150, 'head'=>[189,258,236,258,236,308,189,308,], 'body'=>[178,303,243,303,243,360,178,360,], 'legs'=>[178,350,183,350,238,350,243,350,235,408,186,408,], 'ex'=>1 },
+{ 'x'=>174, 'y'=>266, 'w'=>209, 'h'=>145, 'head'=>[226,266,280,266,280,316,226,316,], 'body'=>[210,311,275,311,275,366,210,366,], 'legs'=>[210,356,215,356,270,356,275,356,232,411,211,411,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>261, 'w'=>181, 'h'=>150, 'head'=>[239,261,283,261,283,311,239,311,], 'body'=>[228,306,293,306,293,363,228,363,], 'legs'=>[228,353,233,353,288,353,293,353,308,411,212,411,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>263, 'w'=>184, 'h'=>152, 'head'=>[282,263,344,263,344,313,282,313,], 'body'=>[251,308,316,308,316,366,251,366,], 'legs'=>[251,356,256,356,311,356,316,356,314,415,212,415,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>247, 'w'=>202, 'h'=>162, 'head'=>[288,247,356,247,356,297,288,297,], 'body'=>[274,292,339,292,339,355,274,355,], 'legs'=>[274,345,279,345,334,345,339,345,323,409,218,409,], 'ex'=>1 },
+{ 'x'=>256, 'y'=>198, 'w'=>184, 'h'=>202, 'head'=>[310,198,338,198,338,248,310,248,], 'body'=>[284,243,349,243,349,326,284,326,], 'legs'=>[284,316,289,316,344,316,349,316,381,400,260,400,], 'ex'=>1 },
+{ 'x'=>286, 'y'=>175, 'w'=>154, 'h'=>227, 'head'=>[336,175,372,175,372,225,336,225,], 'body'=>[297,220,362,220,362,316,297,316,], 'legs'=>[297,306,302,306,357,306,362,306,384,402,297,402,], 'ex'=>1 },
+{ 'x'=>289, 'y'=>149, 'w'=>152, 'h'=>253, 'head'=>[346,149,385,149,385,199,346,199,], 'body'=>[307,194,372,194,372,303,307,303,], 'legs'=>[307,293,312,293,367,293,372,293,388,402,300,402,], 'ex'=>1 },
+{ 'x'=>279, 'y'=>125, 'w'=>161, 'h'=>276, 'head'=>[343,125,380,125,380,175,343,175,], 'body'=>[301,170,366,170,366,290,301,290,], 'legs'=>[301,280,306,280,361,280,366,280,385,401,284,401,], 'ex'=>1 },
+{ 'x'=>239, 'y'=>106, 'w'=>201, 'h'=>299, 'head'=>[318,106,355,106,355,156,318,156,], 'body'=>[280,151,345,151,345,283,280,283,], 'legs'=>[280,273,285,273,340,273,345,273,384,405,247,405,], 'ex'=>1 },
+{ 'x'=>236, 'y'=>101, 'w'=>190, 'h'=>305, 'head'=>[296,101,330,101,330,151,296,151,], 'body'=>[256,146,321,146,321,281,256,281,], 'legs'=>[256,271,261,271,316,271,321,271,387,406,243,406,], 'ex'=>1 },
+{ 'x'=>223, 'y'=> 80, 'w'=>189, 'h'=>325, 'head'=>[281, 80,313, 80,313,130,281,130,], 'body'=>[249,125,314,125,314,270,249,270,], 'legs'=>[249,260,254,260,309,260,314,260,348,405,242,405,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 78, 'w'=>182, 'h'=>328, 'head'=>[277, 78,312, 78,312,128,277,128,], 'body'=>[254,123,319,123,319,269,254,269,], 'legs'=>[254,259,259,259,314,259,319,259,324,406,241,406,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 76, 'w'=>138, 'h'=>315, 'head'=>[227, 76,256, 76,256,126,227,126,], 'body'=>[202,121,267,121,267,261,202,261,], 'legs'=>[202,251,207,251,262,251,267,251,309,391,206,391,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 79, 'w'=>141, 'h'=>312, 'head'=>[218, 79,249, 79,249,129,218,129,], 'body'=>[198,124,263,124,263,262,198,262,], 'legs'=>[198,252,203,252,258,252,263,252,309,391,206,391,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 85, 'w'=>142, 'h'=>305, 'head'=>[214, 85,244, 85,244,135,214,135,], 'body'=>[195,130,260,130,260,265,195,265,], 'legs'=>[195,255,200,255,255,255,260,255,307,390,207,390,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 96, 'w'=>139, 'h'=>295, 'head'=>[214, 96,246, 96,246,146,214,146,], 'body'=>[194,141,259,141,259,271,194,271,], 'legs'=>[194,261,199,261,254,261,259,261,309,391,208,391,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>109, 'w'=>132, 'h'=>281, 'head'=>[212,109,249,109,249,159,212,159,], 'body'=>[194,154,259,154,259,277,194,277,], 'legs'=>[194,267,199,267,254,267,259,267,308,390,207,390,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>115, 'w'=>126, 'h'=>275, 'head'=>[213,115,249,115,249,165,213,165,], 'body'=>[198,160,263,160,263,280,198,280,], 'legs'=>[198,270,203,270,258,270,263,270,303,390,206,390,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>113, 'w'=>129, 'h'=>278, 'head'=>[214,113,250,113,250,163,214,163,], 'body'=>[198,158,263,158,263,279,198,279,], 'legs'=>[198,269,203,269,258,269,263,269,298,391,206,391,], 'ex'=>1 },
+{ 'x'=>187, 'y'=>110, 'w'=>129, 'h'=>280, 'head'=>[218,110,254,110,254,160,218,160,], 'body'=>[199,155,264,155,264,277,199,277,], 'legs'=>[199,267,204,267,259,267,264,267,291,390,206,390,], 'ex'=>1 },
+{ 'x'=>189, 'y'=>109, 'w'=>129, 'h'=>280, 'head'=>[219,109,253,109,253,159,219,159,], 'body'=>[201,154,266,154,266,276,201,276,], 'legs'=>[201,266,206,266,261,266,266,266,290,389,205,389,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 87, 'w'=>144, 'h'=>309, 'head'=>[221, 87,256, 87,256,137,221,137,], 'body'=>[197,132,262,132,262,269,197,269,], 'legs'=>[197,259,202,259,257,259,262,259,315,396,202,396,], 'ex'=>1 },
+{ 'x'=>180, 'y'=>106, 'w'=>167, 'h'=>288, 'head'=>[227,106,262,106,262,156,227,156,], 'body'=>[201,151,266,151,266,277,201,277,], 'legs'=>[201,267,206,267,261,267,266,267,313,394,194,394,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>134, 'w'=>176, 'h'=>262, 'head'=>[235,134,269,134,269,184,235,184,], 'body'=>[205,179,270,179,270,292,205,292,], 'legs'=>[205,282,210,282,265,282,270,282,315,396,194,396,], 'ex'=>1 },
+{ 'x'=>188, 'y'=>150, 'w'=>174, 'h'=>247, 'head'=>[237,150,271,150,271,200,237,200,], 'body'=>[204,195,269,195,269,301,204,301,], 'legs'=>[204,291,209,291,264,291,269,291,316,397,197,397,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>165, 'w'=>152, 'h'=>224, 'head'=>[248,165,280,165,280,215,248,215,], 'body'=>[215,210,280,210,280,304,215,304,], 'legs'=>[215,294,220,294,275,294,280,294,322,389,206,389,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>159, 'w'=>148, 'h'=>240, 'head'=>[246,159,278,159,278,209,246,209,], 'body'=>[214,204,279,204,279,306,214,306,], 'legs'=>[214,296,219,296,274,296,279,296,320,399,206,399,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>162, 'w'=>147, 'h'=>236, 'head'=>[243,162,278,162,278,212,243,212,], 'body'=>[212,207,277,207,277,307,212,307,], 'legs'=>[212,297,217,297,272,297,277,297,321,398,207,398,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>168, 'w'=>154, 'h'=>230, 'head'=>[243,168,274,168,274,218,243,218,], 'body'=>[216,213,281,213,281,310,216,310,], 'legs'=>[216,300,221,300,276,300,281,300,320,398,205,398,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>172, 'w'=>133, 'h'=>228, 'head'=>[238,172,271,172,271,222,238,222,], 'body'=>[213,217,278,217,278,313,213,313,], 'legs'=>[213,303,218,303,273,303,278,303,318,400,209,400,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>173, 'w'=>132, 'h'=>225, 'head'=>[239,173,272,173,272,223,239,223,], 'body'=>[218,218,283,218,283,313,218,313,], 'legs'=>[218,303,223,303,278,303,283,303,319,398,209,398,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>163, 'w'=>130, 'h'=>236, 'head'=>[255,163,282,163,282,213,255,213,], 'body'=>[231,208,296,208,296,308,231,308,], 'legs'=>[231,298,236,298,291,298,296,298,321,399,212,399,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>172, 'w'=>131, 'h'=>226, 'head'=>[259,172,303,172,303,222,259,222,], 'body'=>[229,217,294,217,294,312,229,312,], 'legs'=>[229,302,234,302,289,302,294,302,318,398,212,398,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>175, 'w'=>200, 'h'=>223, 'head'=>[264,175,304,175,304,225,264,225,], 'body'=>[228,220,293,220,293,314,228,314,], 'legs'=>[228,304,233,304,288,304,293,304,319,398,212,398,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>181, 'w'=>183, 'h'=>217, 'head'=>[268,181,308,181,308,231,268,231,], 'body'=>[224,226,289,226,289,317,224,317,], 'legs'=>[224,307,229,307,284,307,289,307,319,398,212,398,], 'ex'=>0, 'hit'=>[322,263,346,242,412,333,381,341,] },
+{ 'x'=>191, 'y'=>178, 'w'=>134, 'h'=>204, 'head'=>[216,178,249,178,249,228,216,228,], 'body'=>[200,223,265,223,265,307,200,307,], 'legs'=>[200,297,205,297,260,297,265,297,317,382,219,382,], 'ex'=>1 },
+{ 'x'=>168, 'y'=>175, 'w'=>174, 'h'=>209, 'head'=>[210,175,244,175,244,225,210,225,], 'body'=>[189,220,254,220,254,307,189,307,], 'legs'=>[189,297,194,297,249,297,254,297,338,384,221,384,], 'ex'=>1 },
+{ 'x'=>157, 'y'=>172, 'w'=>219, 'h'=>212, 'head'=>[209,172,242,172,242,222,209,222,], 'body'=>[185,217,250,217,250,305,185,305,], 'legs'=>[185,295,190,295,245,295,313,276,370,362,221,384,], 'ex'=>0 },
+{ 'x'=>151, 'y'=>172, 'w'=>249, 'h'=>212, 'head'=>[209,172,243,172,243,222,209,222,], 'body'=>[184,217,249,217,249,305,184,305,], 'legs'=>[184,295,189,295,244,295,295,281,402,361,219,384,], 'ex'=>0 },
+{ 'x'=>148, 'y'=>172, 'w'=>253, 'h'=>217, 'head'=>[218,173,251,173,251,223,218,223,], 'body'=>[199,217,264,217,264,308,199,308,], 'legs'=>[185,298,190,298,245,298,268,286,391,366,217,389,], 'ex'=>0, 'hit'=>[287,294,402,356,392,376,263,331,] },
+{ 'x'=>174, 'y'=> 75, 'w'=>171, 'h'=>321, 'head'=>[245, 75,276, 75,276,125,245,125,], 'body'=>[225,120,290,120,290,263,225,263,], 'legs'=>[225,253,230,253,285,253,290,253,280,396,177,396,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 75, 'w'=>168, 'h'=>321, 'head'=>[247, 75,278, 75,278,125,247,125,], 'body'=>[223,120,288,120,288,263,223,263,], 'legs'=>[223,253,228,253,283,253,288,253,281,396,177,396,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 74, 'w'=>139, 'h'=>321, 'head'=>[241, 74,272, 74,272,124,241,124,], 'body'=>[212,119,277,119,277,262,212,262,], 'legs'=>[212,252,217,252,272,252,277,252,281,395,177,395,], 'ex'=>1 },
+{ 'x'=>172, 'y'=> 73, 'w'=>126, 'h'=>324, 'head'=>[222, 73,252, 73,252,123,222,123,], 'body'=>[194,118,259,118,259,262,194,262,], 'legs'=>[194,252,199,252,254,252,259,252,282,397,175,397,], 'ex'=>1 },
+{ 'x'=>153, 'y'=> 72, 'w'=>133, 'h'=>327, 'head'=>[202, 72,231, 72,231,122,202,122,], 'body'=>[173,117,238,117,238,263,173,263,], 'legs'=>[173,253,178,253,233,253,238,253,281,399,176,399,], 'ex'=>1 },
+{ 'x'=>144, 'y'=> 68, 'w'=>138, 'h'=>332, 'head'=>[187, 68,216, 68,216,118,187,118,], 'body'=>[163,113,228,113,228,261,163,261,], 'legs'=>[163,251,168,251,223,251,228,251,277,400,176,400,], 'ex'=>1 },
+{ 'x'=>145, 'y'=> 69, 'w'=>141, 'h'=>331, 'head'=>[182, 69,210, 69,210,119,182,119,], 'body'=>[162,114,227,114,227,262,162,262,], 'legs'=>[162,252,167,252,222,252,227,252,264,400,176,400,], 'ex'=>1 },
+{ 'x'=>152, 'y'=> 70, 'w'=>128, 'h'=>330, 'head'=>[193, 70,220, 70,220,120,193,120,], 'body'=>[172,115,237,115,237,262,172,262,], 'legs'=>[172,252,177,252,232,252,237,252,265,400,178,400,], 'ex'=>1 },
+{ 'x'=>167, 'y'=> 74, 'w'=>126, 'h'=>325, 'head'=>[206, 74,232, 74,232,124,206,124,], 'body'=>[185,119,250,119,250,264,185,264,], 'legs'=>[185,254,190,254,245,254,250,254,265,399,178,399,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 80, 'w'=>132, 'h'=>315, 'head'=>[242, 80,274, 80,274,130,242,130,], 'body'=>[223,125,288,125,288,265,223,265,], 'legs'=>[223,255,228,255,283,255,288,255,287,395,207,395,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 81, 'w'=>104, 'h'=>318, 'head'=>[241, 81,274, 81,274,131,241,131,], 'body'=>[225,126,290,126,290,267,225,267,], 'legs'=>[225,257,230,257,285,257,290,257,291,399,207,399,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 79, 'w'=>119, 'h'=>321, 'head'=>[248, 79,284, 79,284,129,248,129,], 'body'=>[229,124,294,124,294,267,229,267,], 'legs'=>[229,257,234,257,289,257,294,257,310,400,205,400,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 79, 'w'=>176, 'h'=>319, 'head'=>[254, 79,290, 79,290,129,254,129,], 'body'=>[232,124,297,124,297,266,232,266,], 'legs'=>[232,256,237,256,292,256,297,256,320,398,205,398,], 'ex'=>0, 'hit'=>[312,138,384, 83,391,125,327,165,] },
+{ 'x'=>203, 'y'=> 84, 'w'=>192, 'h'=>315, 'head'=>[264, 84,301, 84,301,134,264,134,], 'body'=>[236,129,301,129,301,269,236,269,], 'legs'=>[236,259,241,259,296,259,301,259,321,399,206,399,], 'ex'=>0, 'hit'=>[330,144,390,182,393,213,311,158,] },
+{ 'x'=>202, 'y'=> 86, 'w'=>163, 'h'=>312, 'head'=>[275, 86,309, 86,309,136,275,136,], 'body'=>[243,131,308,131,308,269,243,269,], 'legs'=>[243,259,248,259,303,259,308,259,321,398,205,398,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 80, 'w'=>142, 'h'=>312, 'head'=>[284, 80,314, 80,314,130,284,130,], 'body'=>[252,125,317,125,317,263,252,263,], 'legs'=>[252,253,257,253,312,253,317,253,321,392,210,392,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 81, 'w'=>161, 'h'=>314, 'head'=>[275, 81,306, 81,306,131,275,131,], 'body'=>[252,126,317,126,317,265,252,265,], 'legs'=>[252,255,257,255,312,255,317,255,321,395,211,395,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 78, 'w'=>160, 'h'=>315, 'head'=>[263, 78,294, 78,294,128,263,128,], 'body'=>[245,123,310,123,310,263,245,263,], 'legs'=>[245,253,250,253,305,253,310,253,321,393,212,393,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 80, 'w'=>152, 'h'=>307, 'head'=>[227, 80,259, 80,259,130,227,130,], 'body'=>[205,125,270,125,270,261,205,261,], 'legs'=>[205,251,210,251,265,251,270,251,295,387,196,387,], 'ex'=>1 },
+{ 'x'=>171, 'y'=> 82, 'w'=>165, 'h'=>304, 'head'=>[232, 82,266, 82,266,132,232,132,], 'body'=>[215,127,280,127,280,261,215,261,], 'legs'=>[215,251,220,251,275,251,280,251,332,386,196,386,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 85, 'w'=>149, 'h'=>300, 'head'=>[239, 85,276, 85,276,135,239,135,], 'body'=>[227,130,292,130,292,262,227,262,], 'legs'=>[227,252,232,252,287,252,292,252,335,385,197,385,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 87, 'w'=>150, 'h'=>297, 'head'=>[249, 87,283, 87,283,137,249,137,], 'body'=>[245,132,310,132,310,263,245,263,], 'legs'=>[245,253,250,253,305,253,310,253,334,384,196,384,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 92, 'w'=>207, 'h'=>292, 'head'=>[257, 92,290, 92,290,142,257,142,], 'body'=>[254,137,319,137,319,265,254,265,], 'legs'=>[254,255,259,255,314,255,319,255,335,384,198,384,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 96, 'w'=>223, 'h'=>290, 'head'=>[272, 96,303, 96,303,146,272,146,], 'body'=>[266,141,331,141,331,268,266,268,], 'legs'=>[266,258,271,258,326,258,331,258,335,386,198,386,], 'ex'=>0, 'hit'=>[333,184,413,175,409,197,330,209,] },
+{ 'x'=>167, 'y'=> 74, 'w'=>146, 'h'=>312, 'head'=>[213, 74,245, 74,245,124,213,124,], 'body'=>[210,119,275,119,275,257,210,257,], 'legs'=>[210,247,215,247,270,247,275,247,309,386,211,386,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 75, 'w'=>155, 'h'=>315, 'head'=>[205, 75,237, 75,237,125,205,125,], 'body'=>[201,120,266,120,266,260,201,260,], 'legs'=>[201,250,206,250,261,250,266,250,309,390,210,390,], 'ex'=>1 },
+{ 'x'=>156, 'y'=> 77, 'w'=>172, 'h'=>313, 'head'=>[198, 77,239, 77,239,127,198,127,], 'body'=>[196,122,261,122,261,261,196,261,], 'legs'=>[196,251,201,251,256,251,261,251,310,390,210,390,], 'ex'=>1 },
+{ 'x'=>159, 'y'=> 80, 'w'=>172, 'h'=>310, 'head'=>[196, 80,238, 80,238,130,196,130,], 'body'=>[191,125,256,125,256,262,191,262,], 'legs'=>[191,252,196,252,251,252,256,252,237,390,211,390,], 'ex'=>1 },
+{ 'x'=>165, 'y'=> 80, 'w'=>223, 'h'=>310, 'head'=>[197, 80,241, 80,241,130,197,130,], 'body'=>[189,125,254,125,254,262,189,262,], 'legs'=>[189,252,194,252,249,252,254,252,240,390,212,390,], 'ex'=>1 },
+{ 'x'=>167, 'y'=> 80, 'w'=>244, 'h'=>311, 'head'=>[198, 80,231, 80,231,130,198,130,], 'body'=>[187,125,252,125,252,263,187,263,], 'legs'=>[187,253,192,253,247,253,252,253,239,391,211,391,], 'ex'=>0, 'hit'=>[279,191,409,196,387,224,262,236,] },
+{ 'x'=>175, 'y'=> 81, 'w'=>151, 'h'=>312, 'head'=>[224, 81,257, 81,257,131,224,131,], 'body'=>[205,126,270,126,270,264,205,264,], 'legs'=>[205,254,210,254,265,254,270,254,304,393,196,393,], 'ex'=>1 },
+{ 'x'=>161, 'y'=> 83, 'w'=>147, 'h'=>313, 'head'=>[213, 83,246, 83,246,133,213,133,], 'body'=>[200,128,265,128,265,267,200,267,], 'legs'=>[200,257,205,257,260,257,265,257,303,396,195,396,], 'ex'=>1 },
+{ 'x'=>151, 'y'=> 88, 'w'=>165, 'h'=>307, 'head'=>[204, 88,240, 88,240,138,204,138,], 'body'=>[193,133,258,133,258,269,193,269,], 'legs'=>[193,259,198,259,253,259,258,259,310,395,195,395,], 'ex'=>1 },
+{ 'x'=>144, 'y'=>100, 'w'=>186, 'h'=>296, 'head'=>[194,100,245,100,245,150,194,150,], 'body'=>[189,145,254,145,254,275,189,275,], 'legs'=>[189,265,194,265,249,265,254,265,222,396,195,396,], 'ex'=>1 },
+{ 'x'=>132, 'y'=>107, 'w'=>250, 'h'=>291, 'head'=>[194,107,238,107,238,157,194,157,], 'body'=>[179,152,244,152,244,280,179,280,], 'legs'=>[179,270,184,270,239,270,244,270,220,398,194,398,], 'ex'=>1 },
+{ 'x'=>139, 'y'=>103, 'w'=>262, 'h'=>294, 'head'=>[187,103,225,103,225,153,187,153,], 'body'=>[181,148,246,148,246,277,181,277,], 'legs'=>[181,267,186,267,241,267,246,267,219,397,194,397,], 'ex'=>0, 'hit'=>[281,230,399,294,389,318,278,263,] },
+{ 'x'=>192, 'y'=> 80, 'w'=>138, 'h'=>315, 'head'=>[231, 80,263, 80,263,130,231,130,], 'body'=>[208,125,273,125,273,265,208,265,], 'legs'=>[208,255,213,255,268,255,273,255,309,395,197,395,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 84, 'w'=>165, 'h'=>312, 'head'=>[244, 84,278, 84,278,134,244,134,], 'body'=>[219,129,284,129,284,267,219,267,], 'legs'=>[219,257,224,257,279,257,284,257,355,396,197,396,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 96, 'w'=>174, 'h'=>299, 'head'=>[257, 96,310, 96,310,146,257,146,], 'body'=>[254,141,319,141,319,273,254,273,], 'legs'=>[254,263,259,263,314,263,319,263,363,395,198,395,], 'ex'=>1 },
+{ 'x'=>257, 'y'=>124, 'w'=>139, 'h'=>263, 'head'=>[296,124,351,124,351,174,296,174,], 'body'=>[273,169,338,169,338,283,273,283,], 'legs'=>[273,273,278,273,333,273,338,273,363,387,268,387,], 'ex'=>1 },
+{ 'x'=>266, 'y'=>169, 'w'=>133, 'h'=>221, 'head'=>[333,169,374,169,374,219,333,219,], 'body'=>[282,214,347,214,347,307,282,307,], 'legs'=>[282,297,287,297,342,297,347,297,364,390,309,390,], 'ex'=>1 },
+{ 'x'=>284, 'y'=>209, 'w'=>133, 'h'=>186, 'head'=>[350,216,403,216,403,266,350,266,], 'body'=>[310,254,375,254,375,329,310,329,], 'legs'=>[294,319,299,319,354,319,359,319,351,389,315,395,], 'ex'=>0, 'hit'=>[377,339,422,350,424,392,385,391,] },
+{ 'x'=>289, 'y'=>174, 'w'=>142, 'h'=>221, 'head'=>[342,174,377,174,377,224,342,224,], 'body'=>[302,219,367,219,367,312,302,312,], 'legs'=>[302,302,307,302,362,302,367,302,368,395,315,395,], 'ex'=>1 },
+{ 'x'=>292, 'y'=>147, 'w'=>155, 'h'=>248, 'head'=>[335,147,368,147,368,197,335,197,], 'body'=>[304,192,369,192,369,298,304,298,], 'legs'=>[304,288,309,288,364,288,369,288,371,395,315,395,], 'ex'=>1 },
+{ 'x'=>297, 'y'=>121, 'w'=>145, 'h'=>274, 'head'=>[326,121,385,121,385,171,326,171,], 'body'=>[307,166,372,166,372,285,307,285,], 'legs'=>[307,275,312,275,367,275,372,275,368,395,315,395,], 'ex'=>1 },
+{ 'x'=>302, 'y'=> 43, 'w'=> 82, 'h'=>351, 'head'=>[332, 43,354, 43,354, 93,332, 93,], 'body'=>[312, 88,377, 88,377,246,312,246,], 'legs'=>[312,236,317,236,372,236,377,236,365,394,313,394,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 69, 'w'=> 93, 'h'=>324, 'head'=>[310, 69,340, 69,340,119,310,119,], 'body'=>[303,114,368,114,368,258,303,258,], 'legs'=>[303,248,308,248,363,248,368,248,364,393,313,393,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 74, 'w'=>100, 'h'=>319, 'head'=>[311, 74,343, 74,343,124,311,124,], 'body'=>[294,119,359,119,359,261,294,261,], 'legs'=>[294,251,299,251,354,251,359,251,358,393,309,393,], 'ex'=>1 },
+{ 'x'=>274, 'y'=> 74, 'w'=>115, 'h'=>320, 'head'=>[305, 74,336, 74,336,124,305,124,], 'body'=>[284,119,349,119,349,261,284,261,], 'legs'=>[284,251,289,251,344,251,349,251,345,394,294,394,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 81, 'w'=>129, 'h'=>308, 'head'=>[295, 81,325, 81,325,131,295,131,], 'body'=>[269,126,334,126,334,262,269,262,], 'legs'=>[269,252,274,252,329,252,334,252,341,389,283,389,], 'ex'=>1 },
+{ 'x'=>228, 'y'=> 77, 'w'=>155, 'h'=>302, 'head'=>[279, 77,309, 77,309,127,279,127,], 'body'=>[255,122,320,122,320,255,255,255,], 'legs'=>[255,245,260,245,315,245,320,245,316,379,231,379,], 'ex'=>1 },
+{ 'x'=>189, 'y'=> 80, 'w'=>132, 'h'=>306, 'head'=>[229, 80,259, 80,259,130,229,130,], 'body'=>[204,125,269,125,269,260,204,260,], 'legs'=>[204,250,209,250,264,250,269,250,283,386,209,386,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 77, 'w'=>131, 'h'=>323, 'head'=>[217, 77,248, 77,248,127,217,127,], 'body'=>[199,122,264,122,264,266,199,266,], 'legs'=>[199,256,204,256,259,256,264,256,277,400,214,400,], 'ex'=>1 },
+{ 'x'=>162, 'y'=> 71, 'w'=>136, 'h'=>327, 'head'=>[203, 71,232, 71,232,121,203,121,], 'body'=>[184,116,249,116,249,262,184,262,], 'legs'=>[184,252,189,252,244,252,249,252,267,398,208,398,], 'ex'=>1 },
+{ 'x'=>155, 'y'=> 75, 'w'=>157, 'h'=>326, 'head'=>[194, 75,226, 75,226,125,194,125,], 'body'=>[183,120,248,120,248,265,183,265,], 'legs'=>[183,255,188,255,243,255,248,255,264,401,212,401,], 'ex'=>1 },
+{ 'x'=>154, 'y'=> 77, 'w'=>168, 'h'=>324, 'head'=>[193, 77,226, 77,226,127,193,127,], 'body'=>[184,122,249,122,249,266,184,266,], 'legs'=>[184,256,189,256,244,256,249,256,238,401,215,401,], 'ex'=>1 },
+{ 'x'=>155, 'y'=> 79, 'w'=>191, 'h'=>323, 'head'=>[192, 79,225, 79,225,129,192,129,], 'body'=>[181,124,246,124,246,268,181,268,], 'legs'=>[181,258,186,258,241,258,246,258,240,402,217,402,], 'ex'=>1 },
+{ 'x'=>161, 'y'=> 80, 'w'=>243, 'h'=>320, 'head'=>[193, 80,225, 80,225,130,193,130,], 'body'=>[181,125,246,125,246,267,181,267,], 'legs'=>[181,257,186,257,241,257,246,257,241,400,218,400,], 'ex'=>0, 'hit'=>[283,188,393,208,377,231,272,230,] },
+{ 'x'=>193, 'y'=> 77, 'w'=>136, 'h'=>309, 'head'=>[226, 77,258, 77,258,127,226,127,], 'body'=>[204,122,269,122,269,259,204,259,], 'legs'=>[204,249,209,249,264,249,269,249,306,386,208,386,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 79, 'w'=>137, 'h'=>309, 'head'=>[234, 79,265, 79,265,129,234,129,], 'body'=>[219,124,284,124,284,261,219,261,], 'legs'=>[219,251,224,251,279,251,284,251,333,388,207,388,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 82, 'w'=>155, 'h'=>306, 'head'=>[250, 82,282, 82,282,132,250,132,], 'body'=>[242,127,307,127,307,262,242,262,], 'legs'=>[242,252,247,252,302,252,307,252,337,388,207,388,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 79, 'w'=>156, 'h'=>302, 'head'=>[283, 79,339, 79,339,129,283,129,], 'body'=>[263,124,328,124,328,257,263,257,], 'legs'=>[263,247,268,247,323,247,328,247,337,381,229,381,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 75, 'w'=>129, 'h'=>305, 'head'=>[295, 75,352, 75,352,125,295,125,], 'body'=>[268,120,333,120,333,255,268,255,], 'legs'=>[268,245,273,245,328,245,333,245,335,380,271,380,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 84, 'w'=>127, 'h'=>296, 'head'=>[277, 84,312, 84,312,134,277,134,], 'body'=>[273,129,338,129,338,259,273,259,], 'legs'=>[273,249,278,249,333,249,338,249,336,380,299,380,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 98, 'w'=>141, 'h'=>282, 'head'=>[299, 98,331, 98,331,148,299,148,], 'body'=>[278,143,343,143,343,266,278,266,], 'legs'=>[278,256,283,256,338,256,343,256,338,380,301,380,], 'ex'=>1 },
+{ 'x'=>273, 'y'=> 99, 'w'=>131, 'h'=>283, 'head'=>[303, 99,340, 99,340,149,303,149,], 'body'=>[281,144,346,144,346,268,281,268,], 'legs'=>[281,258,286,258,341,258,346,258,338,382,301,382,], 'ex'=>0, 'hit'=>[360,192,395,186,408,305,369,287,] },
+{ 'x'=>189, 'y'=> 70, 'w'=>156, 'h'=>317, 'head'=>[227, 70,261, 70,261,120,227,120,], 'body'=>[210,115,275,115,275,256,210,256,], 'legs'=>[210,246,215,246,270,246,275,246,291,387,192,387,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 77, 'w'=>170, 'h'=>310, 'head'=>[211, 77,246, 77,246,127,211,127,], 'body'=>[206,122,271,122,271,259,206,259,], 'legs'=>[206,249,211,249,266,249,271,249,293,387,191,387,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 79, 'w'=>170, 'h'=>311, 'head'=>[204, 79,240, 79,240,129,204,129,], 'body'=>[212,124,277,124,277,262,212,262,], 'legs'=>[212,252,217,252,272,252,277,252,318,390,193,390,], 'ex'=>1 },
+{ 'x'=>189, 'y'=> 87, 'w'=>181, 'h'=>304, 'head'=>[215, 87,266, 87,266,137,215,137,], 'body'=>[232,132,297,132,297,266,232,266,], 'legs'=>[232,256,237,256,292,256,297,256,334,391,192,391,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 83, 'w'=>170, 'h'=>308, 'head'=>[243, 83,307, 83,307,133,243,133,], 'body'=>[246,128,311,128,311,264,246,264,], 'legs'=>[246,254,251,254,306,254,311,254,334,391,193,391,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 70, 'w'=>184, 'h'=>320, 'head'=>[288, 70,346, 70,346,120,288,120,], 'body'=>[263,115,328,115,328,257,263,257,], 'legs'=>[263,247,268,247,323,247,328,247,334,390,194,390,], 'ex'=>1 },
+{ 'x'=>191, 'y'=>101, 'w'=>255, 'h'=>286, 'head'=>[346,131,393,131,393,181,346,181,], 'body'=>[260,146,325,146,325,271,260,271,], 'legs'=>[260,261,265,261,320,261,325,261,333,387,194,387,], 'ex'=>0, 'hit'=>[358,108,440,132,429,179,339,186,] },
+{ 'x'=>191, 'y'=>139, 'w'=>200, 'h'=>244, 'head'=>[295,137,370,137,370,187,295,187,], 'body'=>[253,184,318,184,318,288,253,288,], 'legs'=>[253,278,258,278,313,278,318,278,332,383,194,383,], 'ex'=>0, 'hit'=>[350,138,383,164,368,219,344,205,] },
+{ 'x'=>199, 'y'=>104, 'w'=>186, 'h'=>279, 'head'=>[313,104,359,104,359,154,313,154,], 'body'=>[265,149,330,149,330,271,265,271,], 'legs'=>[265,261,270,261,325,261,330,261,333,383,202,383,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 61, 'w'=>181, 'h'=>320, 'head'=>[306, 61,367, 61,367,111,306,111,], 'body'=>[279,106,344,106,344,248,279,248,], 'legs'=>[279,238,284,238,339,238,344,238,333,381,217,381,], 'ex'=>1 },
+{ 'x'=>220, 'y'=> 55, 'w'=>156, 'h'=>336, 'head'=>[237, 55,297, 55,297,105,237,105,], 'body'=>[262,100,327,100,327,250,262,250,], 'legs'=>[262,240,267,240,322,240,327,240,334,391,248,391,], 'ex'=>1 },
+{ 'x'=>246, 'y'=> 74, 'w'=>125, 'h'=>325, 'head'=>[266, 74,302, 74,302,124,266,124,], 'body'=>[253,119,318,119,318,264,253,264,], 'legs'=>[253,254,258,254,313,254,318,254,334,399,254,399,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 83, 'w'=>135, 'h'=>308, 'head'=>[220, 83,252, 83,252,133,220,133,], 'body'=>[199,128,264,128,264,264,199,264,], 'legs'=>[199,254,204,254,259,254,264,254,303,391,195,391,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 82, 'w'=>124, 'h'=>310, 'head'=>[228, 82,261, 82,261,132,228,132,], 'body'=>[206,127,271,127,271,264,206,264,], 'legs'=>[206,254,211,254,266,254,271,254,294,392,195,392,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 86, 'w'=>127, 'h'=>315, 'head'=>[249, 86,282, 86,282,136,249,136,], 'body'=>[225,131,290,131,290,271,225,271,], 'legs'=>[225,261,230,261,285,261,290,261,294,401,196,401,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 87, 'w'=>119, 'h'=>315, 'head'=>[251, 87,287, 87,287,137,251,137,], 'body'=>[239,132,304,132,304,272,239,272,], 'legs'=>[239,262,244,262,299,262,304,262,297,402,219,402,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 83, 'w'=> 86, 'h'=>321, 'head'=>[251, 83,282, 83,282,133,251,133,], 'body'=>[252,128,317,128,317,271,252,271,], 'legs'=>[252,261,257,261,312,261,317,261,310,404,272,404,], 'ex'=>1 },
+{ 'x'=>231, 'y'=> 93, 'w'=> 99, 'h'=>300, 'head'=>[251, 93,281, 93,281,143,251,143,], 'body'=>[257,138,322,138,322,270,257,270,], 'legs'=>[257,260,262,260,317,260,322,260,326,393,258,393,], 'ex'=>1 },
+{ 'x'=>225, 'y'=> 89, 'w'=>104, 'h'=>299, 'head'=>[252, 89,282, 89,282,139,252,139,], 'body'=>[249,134,314,134,314,266,249,266,], 'legs'=>[249,256,254,256,309,256,314,256,325,388,247,388,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 98, 'w'=>125, 'h'=>299, 'head'=>[243, 98,279, 98,279,148,243,148,], 'body'=>[238,143,303,143,303,275,238,275,], 'legs'=>[238,265,243,265,298,265,303,265,320,397,251,397,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 95, 'w'=>122, 'h'=>302, 'head'=>[246, 95,281, 95,281,145,246,145,], 'body'=>[236,140,301,140,301,273,236,273,], 'legs'=>[236,263,241,263,296,263,301,263,323,397,251,397,], 'ex'=>1 },
+{ 'x'=>234, 'y'=> 83, 'w'=> 93, 'h'=>330, 'head'=>[249, 83,284, 83,284,133,249,133,], 'body'=>[244,128,309,128,309,275,244,275,], 'legs'=>[244,265,249,265,304,265,309,265,302,413,244,413,], 'ex'=>1 },
+{ 'x'=>225, 'y'=> 82, 'w'=>139, 'h'=>330, 'head'=>[249, 82,284, 82,284,132,249,132,], 'body'=>[237,127,302,127,302,274,237,274,], 'legs'=>[237,264,242,264,297,264,302,264,299,412,256,412,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 84, 'w'=>174, 'h'=>328, 'head'=>[250, 84,284, 84,284,134,250,134,], 'body'=>[235,129,300,129,300,275,235,275,], 'legs'=>[235,265,240,265,295,265,300,265,298,412,255,412,], 'ex'=>1 },
+{ 'x'=>217, 'y'=> 84, 'w'=>233, 'h'=>326, 'head'=>[251, 84,285, 84,285,134,251,134,], 'body'=>[233,129,298,129,298,274,233,274,], 'legs'=>[233,264,238,264,293,264,298,264,298,410,256,410,], 'ex'=>0, 'hit'=>[324,209,437,202,428,243,324,244,] },
+{ 'x'=>207, 'y'=> 86, 'w'=>194, 'h'=>324, 'head'=>[246, 86,281, 86,281,136,246,136,], 'body'=>[227,131,292,131,292,275,227,275,], 'legs'=>[227,265,232,265,287,265,292,265,297,410,255,410,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 80, 'w'=>165, 'h'=>331, 'head'=>[243, 80,277, 80,277,130,243,130,], 'body'=>[228,125,293,125,293,273,228,273,], 'legs'=>[228,263,233,263,288,263,293,263,318,411,255,411,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 77, 'w'=>144, 'h'=>333, 'head'=>[247, 77,282, 77,282,127,247,127,], 'body'=>[234,122,299,122,299,271,234,271,], 'legs'=>[234,261,239,261,294,261,299,261,298,410,256,410,], 'ex'=>1 },
+{ 'x'=>223, 'y'=> 85, 'w'=>143, 'h'=>309, 'head'=>[264, 85,296, 85,296,135,264,135,], 'body'=>[235,130,300,130,300,267,235,267,], 'legs'=>[235,257,240,257,295,257,300,257,301,394,231,394,], 'ex'=>1 },
+{ 'x'=>173, 'y'=> 65, 'w'=>156, 'h'=>322, 'head'=>[241, 65,274, 65,274,115,241,115,], 'body'=>[214,110,279,110,279,253,214,253,], 'legs'=>[214,243,219,243,274,243,279,243,290,387,176,387,], 'ex'=>1 },
+{ 'x'=>162, 'y'=> 69, 'w'=>154, 'h'=>319, 'head'=>[226, 69,258, 69,258,119,226,119,], 'body'=>[201,114,266,114,266,256,201,256,], 'legs'=>[201,246,206,246,261,246,266,246,290,388,165,388,], 'ex'=>1 },
+{ 'x'=>155, 'y'=> 68, 'w'=>135, 'h'=>319, 'head'=>[198, 68,230, 68,230,118,198,118,], 'body'=>[172,113,237,113,237,255,172,255,], 'legs'=>[172,245,177,245,232,245,237,245,286,387,163,387,], 'ex'=>1 },
+{ 'x'=>153, 'y'=> 70, 'w'=>139, 'h'=>318, 'head'=>[187, 70,221, 70,221,120,187,120,], 'body'=>[168,115,233,115,233,256,168,256,], 'legs'=>[168,246,173,246,228,246,233,246,288,388,163,388,], 'ex'=>1 },
+{ 'x'=>157, 'y'=> 70, 'w'=>136, 'h'=>318, 'head'=>[181, 70,215, 70,215,120,181,120,], 'body'=>[168,115,233,115,233,256,168,256,], 'legs'=>[168,246,173,246,228,246,233,246,289,388,163,388,], 'ex'=>1 },
+{ 'x'=>156, 'y'=> 71, 'w'=>138, 'h'=>316, 'head'=>[176, 71,211, 71,211,121,176,121,], 'body'=>[167,116,232,116,232,256,167,256,], 'legs'=>[167,246,172,246,227,246,232,246,290,387,163,387,], 'ex'=>1 },
+{ 'x'=>156, 'y'=> 72, 'w'=>139, 'h'=>315, 'head'=>[175, 72,209, 72,209,122,175,122,], 'body'=>[167,117,232,117,232,257,167,257,], 'legs'=>[167,247,172,247,227,247,232,247,291,387,162,387,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 74, 'w'=>155, 'h'=>313, 'head'=>[177, 74,212, 74,212,124,177,124,], 'body'=>[169,119,234,119,234,258,169,258,], 'legs'=>[169,248,174,248,229,248,234,248,294,387,163,387,], 'ex'=>0, 'hit'=>[293,148,303,148,310,163,293,158,] },
+{ 'x'=>160, 'y'=> 75, 'w'=>160, 'h'=>312, 'head'=>[181, 75,216, 75,216,125,181,125,], 'body'=>[175,120,240,120,240,258,175,258,], 'legs'=>[175,248,180,248,235,248,240,248,294,387,163,387,], 'ex'=>1 },
+{ 'x'=>160, 'y'=> 77, 'w'=>142, 'h'=>309, 'head'=>[187, 77,221, 77,221,127,187,127,], 'body'=>[182,122,247,122,247,259,182,259,], 'legs'=>[182,249,187,249,242,249,247,249,292,386,163,386,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 75, 'w'=>144, 'h'=>312, 'head'=>[229, 75,262, 75,262,125,229,125,], 'body'=>[202,120,267,120,267,258,202,258,], 'legs'=>[202,248,207,248,262,248,267,248,313,387,194,387,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 72, 'w'=>149, 'h'=>315, 'head'=>[218, 72,251, 72,251,122,218,122,], 'body'=>[195,117,260,117,260,257,195,257,], 'legs'=>[195,247,200,247,255,247,260,247,319,387,193,387,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 76, 'w'=>150, 'h'=>311, 'head'=>[225, 76,259, 76,259,126,225,126,], 'body'=>[210,121,275,121,275,259,210,259,], 'legs'=>[210,249,215,249,270,249,275,249,336,387,193,387,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 80, 'w'=>158, 'h'=>308, 'head'=>[240, 80,271, 80,271,130,240,130,], 'body'=>[232,125,297,125,297,261,232,261,], 'legs'=>[232,251,237,251,292,251,297,251,338,388,193,388,], 'ex'=>1 },
+{ 'x'=>196, 'y'=> 47, 'w'=>155, 'h'=>339, 'head'=>[273, 47,304, 47,304, 97,273, 97,], 'body'=>[250, 92,315, 92,315,244,250,244,], 'legs'=>[250,234,255,234,310,234,315,234,336,386,199,386,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 75, 'w'=>172, 'h'=>312, 'head'=>[244, 75,287, 75,287,125,244,125,], 'body'=>[263,120,328,120,328,258,263,258,], 'legs'=>[263,248,268,248,323,248,328,248,336,387,202,387,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 90, 'w'=>174, 'h'=>295, 'head'=>[286, 90,330, 90,330,140,286,140,], 'body'=>[263,135,328,135,328,265,263,265,], 'legs'=>[263,255,268,255,323,255,328,255,338,385,199,385,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>110, 'w'=>171, 'h'=>276, 'head'=>[302,110,341,110,341,160,302,160,], 'body'=>[264,155,329,155,329,275,264,275,], 'legs'=>[264,265,269,265,324,265,329,265,337,386,197,386,], 'ex'=>1 },
+{ 'x'=>191, 'y'=>128, 'w'=>181, 'h'=>259, 'head'=>[311,128,347,128,347,178,311,178,], 'body'=>[269,173,334,173,334,285,269,285,], 'legs'=>[269,275,274,275,329,275,334,275,336,387,194,387,], 'ex'=>1 },
+{ 'x'=>190, 'y'=>136, 'w'=>259, 'h'=>250, 'head'=>[302,136,347,136,347,186,302,186,], 'body'=>[277,181,342,181,342,288,277,288,], 'legs'=>[277,278,282,278,337,278,342,278,338,386,193,386,], 'ex'=>1 },
+{ 'x'=>190, 'y'=>109, 'w'=>227, 'h'=>277, 'head'=>[341,133,362,133,362,183,341,183,], 'body'=>[274,154,339,154,339,275,274,275,], 'legs'=>[274,265,279,265,334,265,339,265,337,386,193,386,], 'ex'=>0, 'hit'=>[405,111,424,117,392,194,374,187,] },
+{ 'x'=>202, 'y'=> 60, 'w'=>187, 'h'=>324, 'head'=>[338,100,363,100,363,150,338,150,], 'body'=>[285,138,352,139,335,249,292,249,], 'legs'=>[292,239,297,239,352,239,357,239,337,384,205,384,], 'ex'=>0, 'hit'=>[335, 65,399,100,381,128,335, 75,] },
+{ 'x'=>254, 'y'=> 40, 'w'=>130, 'h'=>349, 'head'=>[316, 40,346, 40,346, 90,316, 90,], 'body'=>[298, 85,363, 85,363,242,298,242,], 'legs'=>[298,232,303,232,358,232,363,232,336,389,257,389,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 47, 'w'=> 86, 'h'=>358, 'head'=>[287, 47,316, 47,316, 97,287, 97,], 'body'=>[296, 92,361, 92,361,253,296,253,], 'legs'=>[296,243,301,243,356,243,361,243,338,405,296,405,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 59, 'w'=>112, 'h'=>350, 'head'=>[273, 59,306, 59,306,109,273,109,], 'body'=>[285,104,350,104,350,261,285,261,], 'legs'=>[285,251,290,251,345,251,350,251,350,409,294,409,], 'ex'=>1 },
+{ 'x'=>243, 'y'=> 70, 'w'=>158, 'h'=>329, 'head'=>[286, 70,321, 70,321,120,286,120,], 'body'=>[273,115,338,115,338,262,273,262,], 'legs'=>[273,252,278,252,333,252,338,252,337,399,279,399,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 69, 'w'=>168, 'h'=>315, 'head'=>[285, 69,317, 69,317,119,285,119,], 'body'=>[263,114,328,114,328,254,263,254,], 'legs'=>[263,244,268,244,323,244,328,244,336,384,233,384,], 'ex'=>1 },
+{ 'x'=>157, 'y'=> 79, 'w'=>178, 'h'=>302, 'head'=>[228, 79,259, 79,259,129,228,129,], 'body'=>[210,124,275,124,275,257,210,257,], 'legs'=>[210,247,215,247,270,247,275,247,287,381,160,381,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 75, 'w'=>118, 'h'=>325, 'head'=>[256, 75,289, 75,289,125,256,125,], 'body'=>[234,120,299,120,299,265,234,265,], 'legs'=>[234,255,239,255,294,255,299,255,279,400,249,400,], 'ex'=>1 },
+{ 'x'=>240, 'y'=> 94, 'w'=>128, 'h'=>314, 'head'=>[283, 94,318, 94,318,144,283,144,], 'body'=>[253,139,318,139,318,278,253,278,], 'legs'=>[253,268,258,268,313,268,318,268,300,408,265,408,], 'ex'=>1 },
+{ 'x'=>231, 'y'=>119, 'w'=>164, 'h'=>290, 'head'=>[291,119,319,119,319,169,291,169,], 'body'=>[263,164,328,164,328,291,263,291,], 'legs'=>[263,281,268,281,323,281,328,281,360,409,265,409,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>150, 'w'=>192, 'h'=>265, 'head'=>[289,150,321,150,321,200,289,200,], 'body'=>[270,195,335,195,335,310,270,310,], 'legs'=>[270,300,275,300,330,300,335,300,359,415,264,415,], 'ex'=>1 },
+{ 'x'=>256, 'y'=>155, 'w'=>156, 'h'=>255, 'head'=>[305,155,353,155,353,205,305,205,], 'body'=>[273,200,338,200,338,310,273,310,], 'legs'=>[273,300,278,300,333,300,338,300,359,410,264,410,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>142, 'w'=>152, 'h'=>266, 'head'=>[310,142,362,142,362,192,310,192,], 'body'=>[277,187,342,187,342,302,277,302,], 'legs'=>[277,292,282,292,337,292,342,292,359,408,264,408,], 'ex'=>1 },
+{ 'x'=>250, 'y'=>105, 'w'=>146, 'h'=>305, 'head'=>[300,105,338,105,338,155,300,155,], 'body'=>[285,150,350,150,350,285,285,285,], 'legs'=>[285,275,290,275,345,275,350,275,395,410,263,410,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 81, 'w'=>165, 'h'=>322, 'head'=>[294, 81,325, 81,325,131,294,131,], 'body'=>[287,126,352,126,352,269,287,269,], 'legs'=>[287,259,292,259,347,259,352,259,423,403,262,403,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 77, 'w'=>192, 'h'=>326, 'head'=>[261, 77,285, 77,285,127,261,127,], 'body'=>[285,122,350,122,350,267,285,267,], 'legs'=>[285,257,290,257,345,257,350,257,421,403,263,403,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 85, 'w'=>174, 'h'=>312, 'head'=>[282, 85,325, 85,325,135,282,135,], 'body'=>[281,130,346,130,346,268,281,268,], 'legs'=>[281,258,286,258,341,258,346,258,359,397,263,397,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 86, 'w'=>129, 'h'=>310, 'head'=>[276, 86,333, 86,333,136,276,136,], 'body'=>[272,131,337,131,337,268,272,268,], 'legs'=>[272,258,277,258,332,258,337,258,358,396,262,396,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 84, 'w'=>133, 'h'=>313, 'head'=>[269, 84,324, 84,324,134,269,134,], 'body'=>[272,129,337,129,337,268,272,268,], 'legs'=>[272,258,277,258,332,258,337,258,358,397,261,397,], 'ex'=>1 },
+{ 'x'=>238, 'y'=> 89, 'w'=>134, 'h'=>309, 'head'=>[272, 89,305, 89,305,139,272,139,], 'body'=>[263,134,328,134,328,271,263,271,], 'legs'=>[263,261,268,261,323,261,328,261,358,398,262,398,], 'ex'=>1 },
+{ 'x'=>227, 'y'=>119, 'w'=>139, 'h'=>277, 'head'=>[235,119,290,119,290,169,235,169,], 'body'=>[263,164,328,164,328,285,263,285,], 'legs'=>[263,275,268,275,323,275,328,275,357,396,261,396,], 'ex'=>1 },
+{ 'x'=>216, 'y'=> 97, 'w'=>140, 'h'=>296, 'head'=>[227, 97,273, 97,273,147,227,147,], 'body'=>[240,142,305,142,305,272,240,272,], 'legs'=>[240,262,245,262,300,262,305,262,352,393,262,393,], 'ex'=>1 },
+{ 'x'=>220, 'y'=> 75, 'w'=>122, 'h'=>319, 'head'=>[242, 75,274, 75,274,125,242,125,], 'body'=>[240,120,305,120,305,262,240,262,], 'legs'=>[240,252,245,252,300,252,305,252,283,394,248,394,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 79, 'w'=>137, 'h'=>312, 'head'=>[249, 79,281, 79,281,129,249,129,], 'body'=>[231,124,296,124,296,262,231,262,], 'legs'=>[231,252,236,252,291,252,296,252,277,391,245,391,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 77, 'w'=>161, 'h'=>294, 'head'=>[246, 77,281, 77,281,127,246,127,], 'body'=>[222,122,287,122,287,251,222,251,], 'legs'=>[222,241,227,241,282,241,287,241,279,371,191,371,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 77, 'w'=>151, 'h'=>309, 'head'=>[228, 77,258, 77,258,127,228,127,], 'body'=>[210,122,275,122,275,259,210,259,], 'legs'=>[210,249,215,249,270,249,275,249,292,386,181,386,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 80, 'w'=>145, 'h'=>307, 'head'=>[221, 80,250, 80,250,130,221,130,], 'body'=>[208,125,273,125,273,261,208,261,], 'legs'=>[208,251,213,251,268,251,273,251,291,387,181,387,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 93, 'w'=>138, 'h'=>292, 'head'=>[221, 93,260, 93,260,143,221,143,], 'body'=>[201,138,266,138,266,266,201,266,], 'legs'=>[201,256,206,256,261,256,266,256,290,385,181,385,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 93, 'w'=>127, 'h'=>294, 'head'=>[231, 93,267, 93,267,143,231,143,], 'body'=>[195,138,260,138,260,267,195,267,], 'legs'=>[195,257,200,257,255,257,260,257,291,387,181,387,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 89, 'w'=>118, 'h'=>298, 'head'=>[227, 89,272, 89,272,139,227,139,], 'body'=>[191,134,256,134,256,265,191,265,], 'legs'=>[191,255,196,255,251,255,256,255,292,387,181,387,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 77, 'w'=>118, 'h'=>309, 'head'=>[238, 77,276, 77,276,127,238,127,], 'body'=>[191,122,256,122,256,259,191,259,], 'legs'=>[191,249,196,249,251,249,256,249,292,386,181,386,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 70, 'w'=>121, 'h'=>315, 'head'=>[238, 70,275, 70,275,120,238,120,], 'body'=>[195,115,260,115,260,255,195,255,], 'legs'=>[195,245,200,245,255,245,260,245,292,385,181,385,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 95, 'w'=>130, 'h'=>292, 'head'=>[191, 95,243, 95,243,145,191,145,], 'body'=>[193,140,258,140,258,268,193,268,], 'legs'=>[193,258,198,258,253,258,258,258,291,387,181,387,], 'ex'=>1 },
+{ 'x'=>164, 'y'=> 77, 'w'=>148, 'h'=>309, 'head'=>[174, 77,228, 77,228,127,174,127,], 'body'=>[193,122,258,122,258,259,193,259,], 'legs'=>[193,249,198,249,253,249,258,249,293,386,182,386,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 60, 'w'=>135, 'h'=>326, 'head'=>[215, 60,249, 60,249,110,215,110,], 'body'=>[195,105,260,105,260,250,195,250,], 'legs'=>[195,240,200,240,255,240,260,240,292,386,181,386,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 78, 'w'=>140, 'h'=>308, 'head'=>[222, 78,256, 78,256,128,222,128,], 'body'=>[193,123,258,123,258,259,193,259,], 'legs'=>[193,249,198,249,253,249,258,249,293,386,181,386,], 'ex'=>1 },
+{ 'x'=>173, 'y'=> 81, 'w'=>177, 'h'=>305, 'head'=>[228, 81,263, 81,263,131,228,131,], 'body'=>[205,126,270,126,270,261,205,261,], 'legs'=>[205,251,210,251,265,251,270,251,296,386,176,386,], 'ex'=>1 },
+{ 'x'=>171, 'y'=> 96, 'w'=>181, 'h'=>291, 'head'=>[227, 96,265, 96,265,146,227,146,], 'body'=>[200,141,265,141,265,269,200,269,], 'legs'=>[200,259,205,259,260,259,265,259,294,387,174,387,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>127, 'w'=>178, 'h'=>260, 'head'=>[226,127,265,127,265,177,226,177,], 'body'=>[196,172,261,172,261,284,196,284,], 'legs'=>[196,274,201,274,256,274,261,274,294,387,173,387,], 'ex'=>1 },
+{ 'x'=>165, 'y'=>162, 'w'=>169, 'h'=>224, 'head'=>[223,162,268,162,268,212,223,212,], 'body'=>[196,207,261,207,261,301,196,301,], 'legs'=>[196,291,201,291,256,291,261,291,295,386,173,386,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>192, 'w'=>159, 'h'=>195, 'head'=>[210,192,270,192,270,242,210,242,], 'body'=>[198,237,263,237,263,317,198,317,], 'legs'=>[198,307,203,307,258,307,263,307,293,387,174,387,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>202, 'w'=>158, 'h'=>184, 'head'=>[202,202,266,202,266,252,202,252,], 'body'=>[194,247,259,247,259,321,194,321,], 'legs'=>[194,311,199,311,254,311,259,311,295,386,174,386,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 74, 'w'=>148, 'h'=>313, 'head'=>[227, 74,263, 74,263,124,227,124,], 'body'=>[208,119,273,119,273,258,208,258,], 'legs'=>[208,248,213,248,268,248,273,248,308,387,198,387,], 'ex'=>1 },
+{ 'x'=>196, 'y'=> 80, 'w'=>154, 'h'=>307, 'head'=>[234, 80,268, 80,268,130,234,130,], 'body'=>[217,125,282,125,282,261,217,261,], 'legs'=>[217,251,222,251,277,251,282,251,308,387,199,387,], 'ex'=>1 },
+{ 'x'=>196, 'y'=> 90, 'w'=>147, 'h'=>297, 'head'=>[238, 90,271, 90,271,140,238,140,], 'body'=>[221,135,286,135,286,266,221,266,], 'legs'=>[221,256,226,256,281,256,286,256,308,387,199,387,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>105, 'w'=>137, 'h'=>282, 'head'=>[238,105,272,105,272,155,238,155,], 'body'=>[220,150,285,150,285,273,220,273,], 'legs'=>[220,263,225,263,280,263,285,263,307,387,200,387,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>119, 'w'=>129, 'h'=>267, 'head'=>[238,119,271,119,271,169,238,169,], 'body'=>[217,164,282,164,282,280,217,280,], 'legs'=>[217,270,222,270,277,270,282,270,307,386,200,386,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>134, 'w'=>128, 'h'=>252, 'head'=>[235,134,268,134,268,184,235,184,], 'body'=>[213,179,278,179,278,287,213,287,], 'legs'=>[213,277,218,277,273,277,278,277,307,386,200,386,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>142, 'w'=>127, 'h'=>243, 'head'=>[231,142,264,142,264,192,231,192,], 'body'=>[210,187,275,187,275,291,210,291,], 'legs'=>[210,281,215,281,270,281,275,281,307,385,200,385,], 'ex'=>1 },
+{ 'x'=>196, 'y'=>145, 'w'=>129, 'h'=>238, 'head'=>[229,145,262,145,262,195,229,195,], 'body'=>[208,190,273,190,273,291,208,291,], 'legs'=>[208,281,213,281,268,281,273,281,306,383,199,383,], 'ex'=>1 },
+{ 'x'=>178, 'y'=>181, 'w'=>184, 'h'=>210, 'head'=>[231,181,265,181,265,231,231,231,], 'body'=>[205,226,270,226,270,313,205,313,], 'legs'=>[205,303,210,303,265,303,270,303,327,391,183,391,], 'ex'=>1 },
+{ 'x'=>129, 'y'=>193, 'w'=>236, 'h'=>198, 'head'=>[216,193,253,193,253,243,216,243,], 'body'=>[200,238,265,238,265,319,200,319,], 'legs'=>[200,309,205,309,260,309,265,309,327,391,132,391,], 'ex'=>1 },
+{ 'x'=>139, 'y'=>211, 'w'=>230, 'h'=>180, 'head'=>[198,211,248,211,248,261,198,261,], 'body'=>[192,256,257,256,257,328,192,328,], 'legs'=>[192,318,197,318,252,318,257,318,325,391,142,391,], 'ex'=>1 },
+{ 'x'=>137, 'y'=>215, 'w'=>220, 'h'=>175, 'head'=>[180,215,247,215,247,265,180,265,], 'body'=>[177,260,242,260,242,330,177,330,], 'legs'=>[177,320,182,320,237,320,242,320,324,390,140,390,], 'ex'=>1 },
+{ 'x'=>136, 'y'=>226, 'w'=>191, 'h'=>162, 'head'=>[168,226,257,226,257,276,168,276,], 'body'=>[175,271,240,271,240,334,175,334,], 'legs'=>[175,324,180,324,235,324,240,324,323,388,139,388,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>194, 'w'=>169, 'h'=>196, 'head'=>[225,194,265,194,265,244,225,244,], 'body'=>[206,239,271,239,271,319,206,319,], 'legs'=>[206,309,211,309,266,309,271,309,322,390,197,390,], 'ex'=>1 },
+{ 'x'=>183, 'y'=>211, 'w'=>173, 'h'=>178, 'head'=>[225,211,270,211,270,261,225,261,], 'body'=>[202,256,267,256,267,327,202,327,], 'legs'=>[202,317,207,317,262,317,267,317,321,389,204,389,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>233, 'w'=>171, 'h'=>159, 'head'=>[219,233,289,233,289,283,219,283,], 'body'=>[195,278,260,278,260,340,195,340,], 'legs'=>[195,330,200,330,255,330,260,330,321,392,213,392,], 'ex'=>1 },
+{ 'x'=>190, 'y'=>248, 'w'=>170, 'h'=>142, 'head'=>[217,248,295,248,295,298,217,298,], 'body'=>[198,293,263,293,263,346,198,346,], 'legs'=>[198,336,203,336,258,336,263,336,321,390,213,390,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 69, 'w'=>126, 'h'=>325, 'head'=>[224, 69,259, 69,259,119,224,119,], 'body'=>[207,114,272,114,272,259,207,259,], 'legs'=>[207,249,212,249,267,249,272,249,300,394,197,394,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 68, 'w'=>132, 'h'=>327, 'head'=>[227, 68,263, 68,263,118,227,118,], 'body'=>[209,113,274,113,274,259,209,259,], 'legs'=>[209,249,214,249,269,249,274,249,312,395,199,395,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 67, 'w'=>152, 'h'=>327, 'head'=>[233, 67,274, 67,274,117,233,117,], 'body'=>[220,112,285,112,285,258,220,258,], 'legs'=>[220,248,225,248,280,248,285,248,325,394,198,394,], 'ex'=>1 },
+{ 'x'=>168, 'y'=> 70, 'w'=>170, 'h'=>325, 'head'=>[246, 70,291, 70,291,120,246,120,], 'body'=>[229,115,294,115,294,260,229,260,], 'legs'=>[229,250,234,250,289,250,294,250,334,395,199,395,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 76, 'w'=>176, 'h'=>318, 'head'=>[262, 76,310, 76,310,126,262,126,], 'body'=>[239,121,304,121,304,262,239,262,], 'legs'=>[239,252,244,252,299,252,304,252,337,394,198,394,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 50, 'w'=>188, 'h'=>341, 'head'=>[247, 50,263, 50,263,100,247,100,], 'body'=>[257, 95,322, 95,322,248,257,248,], 'legs'=>[257,238,262,238,317,238,322,238,334,391,194,391,], 'ex'=>1 },
+{ 'x'=>175, 'y'=> 54, 'w'=>256, 'h'=>327, 'head'=>[327, 54,342, 54,342,104,327,104,], 'body'=>[272, 99,337, 99,337,245,272,245,], 'legs'=>[272,235,277,235,332,235,337,235,335,381,178,381,], 'ex'=>1 },
+{ 'x'=>155, 'y'=>116, 'w'=>278, 'h'=>263, 'head'=>[306,116,368,116,368,166,306,166,], 'body'=>[246,161,311,161,311,275,246,275,], 'legs'=>[246,265,251,265,306,265,311,265,334,379,158,379,], 'ex'=>1 },
+{ 'x'=>137, 'y'=>129, 'w'=>268, 'h'=>250, 'head'=>[309,129,373,129,373,179,309,179,], 'body'=>[229,174,294,174,294,281,229,281,], 'legs'=>[229,271,234,271,289,271,294,271,334,379,299,379,], 'ex'=>1 },
+{ 'x'=>129, 'y'=>139, 'w'=>299, 'h'=>246, 'head'=>[302,139,367,139,367,189,302,189,], 'body'=>[229,184,294,184,294,289,229,289,], 'legs'=>[229,279,234,279,289,279,294,279,334,385,298,385,], 'ex'=>1 },
+{ 'x'=>126, 'y'=>151, 'w'=>303, 'h'=>235, 'head'=>[294,151,378,151,378,201,294,201,], 'body'=>[239,196,304,196,304,296,239,296,], 'legs'=>[239,286,244,286,299,286,304,286,334,386,298,386,], 'ex'=>1 },
+{ 'x'=>129, 'y'=>137, 'w'=>310, 'h'=>250, 'head'=>[280,137,323,137,323,187,280,187,], 'body'=>[242,182,307,182,307,289,242,289,], 'legs'=>[242,279,247,279,302,279,307,279,335,387,297,387,], 'ex'=>1 },
+{ 'x'=>132, 'y'=> 99, 'w'=>319, 'h'=>289, 'head'=>[348, 99,371, 99,371,149,348,149,], 'body'=>[266,144,331,144,331,271,266,271,], 'legs'=>[266,261,271,261,326,261,331,261,338,388,300,388,], 'ex'=>1 },
+{ 'x'=>141, 'y'=>128, 'w'=>332, 'h'=>254, 'head'=>[348,128,409,128,409,178,348,178,], 'body'=>[247,173,312,173,312,282,247,282,], 'legs'=>[247,272,252,272,307,272,312,272,337,382,300,382,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 70, 'w'=>160, 'h'=>321, 'head'=>[211, 70,247, 70,247,120,211,120,], 'body'=>[200,115,265,115,265,258,200,258,], 'legs'=>[200,248,205,248,260,248,265,248,341,391,211,391,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 75, 'w'=>165, 'h'=>316, 'head'=>[232, 75,269, 75,269,125,232,125,], 'body'=>[217,120,282,120,282,260,217,260,], 'legs'=>[217,250,222,250,277,250,282,250,362,391,211,391,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 84, 'w'=>170, 'h'=>309, 'head'=>[257, 84,294, 84,294,134,257,134,], 'body'=>[243,129,308,129,308,266,243,266,], 'legs'=>[243,256,248,256,303,256,308,256,363,393,212,393,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 90, 'w'=>214, 'h'=>299, 'head'=>[277, 90,319, 90,319,140,277,140,], 'body'=>[255,135,320,135,320,267,255,267,], 'legs'=>[255,257,260,257,315,257,320,257,364,389,211,389,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>100, 'w'=>246, 'h'=>289, 'head'=>[302,100,362,100,362,150,302,150,], 'body'=>[270,145,335,145,335,272,270,272,], 'legs'=>[270,262,275,262,330,262,335,262,365,389,212,389,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>106, 'w'=>254, 'h'=>282, 'head'=>[291,112,350,112,350,162,291,162,], 'body'=>[278,151,343,151,343,274,278,274,], 'legs'=>[278,264,283,264,338,264,343,264,372,388,213,388,], 'ex'=>0, 'hit'=>[365,136,458,121,449,140,366,163,] },
+{ 'x'=>181, 'y'=> 81, 'w'=>132, 'h'=>311, 'head'=>[231, 81,262, 81,262,131,231,131,], 'body'=>[205,126,270,126,270,264,205,264,], 'legs'=>[205,254,210,254,265,254,270,254,281,392,184,392,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 80, 'w'=>138, 'h'=>313, 'head'=>[223, 80,255, 80,255,130,223,130,], 'body'=>[194,125,259,125,259,264,194,264,], 'legs'=>[194,254,199,254,254,254,259,254,280,393,183,393,], 'ex'=>1 },
+{ 'x'=>139, 'y'=> 77, 'w'=>151, 'h'=>317, 'head'=>[184, 77,219, 77,219,127,184,127,], 'body'=>[175,122,240,122,240,263,175,263,], 'legs'=>[175,253,180,253,235,253,240,253,286,394,180,394,], 'ex'=>1 },
+{ 'x'=>154, 'y'=> 79, 'w'=>143, 'h'=>314, 'head'=>[202, 79,236, 79,236,129,202,129,], 'body'=>[188,124,253,124,253,263,188,263,], 'legs'=>[188,253,193,253,248,253,253,253,286,393,180,393,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 80, 'w'=>127, 'h'=>312, 'head'=>[222, 80,258, 80,258,130,222,130,], 'body'=>[212,125,277,125,277,263,212,263,], 'legs'=>[212,253,217,253,272,253,277,253,284,392,179,392,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 83, 'w'=>126, 'h'=>309, 'head'=>[233, 83,266, 83,266,133,233,133,], 'body'=>[222,128,287,128,287,265,222,265,], 'legs'=>[222,255,227,255,282,255,287,255,285,392,181,392,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 87, 'w'=>165, 'h'=>304, 'head'=>[242, 87,275, 87,275,137,242,137,], 'body'=>[227,132,292,132,292,266,227,266,], 'legs'=>[227,256,232,256,287,256,292,256,285,391,181,391,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 90, 'w'=>195, 'h'=>301, 'head'=>[247, 90,278, 90,278,140,247,140,], 'body'=>[231,135,296,135,296,268,231,268,], 'legs'=>[231,258,236,258,291,258,296,258,285,391,181,391,], 'ex'=>0, 'hit'=>[390,138,411,143,368,195,349,187,] },
+{ 'x'=>178, 'y'=> 90, 'w'=>208, 'h'=>300, 'head'=>[250, 90,282, 90,282,140,250,140,], 'body'=>[231,135,296,135,296,267,231,267,], 'legs'=>[231,257,236,257,291,257,296,257,280,390,181,390,], 'ex'=>0, 'hit'=>[356,209,446,220,430,255,355,225,] },
+{ 'x'=>177, 'y'=> 90, 'w'=>170, 'h'=>301, 'head'=>[253, 90,285, 90,285,140,253,140,], 'body'=>[232,135,297,135,297,268,232,268,], 'legs'=>[232,258,237,258,292,258,297,258,285,391,180,391,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 86, 'w'=>158, 'h'=>305, 'head'=>[254, 86,284, 86,284,136,254,136,], 'body'=>[231,131,296,131,296,266,231,266,], 'legs'=>[231,256,236,256,291,256,296,256,282,391,179,391,], 'ex'=>1 },
+{ 'x'=>175, 'y'=> 81, 'w'=>181, 'h'=>309, 'head'=>[245, 81,277, 81,277,131,245,131,], 'body'=>[225,126,290,126,290,263,225,263,], 'legs'=>[225,253,230,253,285,253,290,253,282,390,178,390,], 'ex'=>1 },
+{ 'x'=>173, 'y'=> 79, 'w'=>135, 'h'=>312, 'head'=>[239, 79,270, 79,270,129,239,129,], 'body'=>[217,124,282,124,282,262,217,262,], 'legs'=>[217,252,222,252,277,252,282,252,281,391,176,391,], 'ex'=>1 },
+{ 'x'=>172, 'y'=> 76, 'w'=>126, 'h'=>314, 'head'=>[232, 76,263, 76,263,126,232,126,], 'body'=>[203,121,268,121,268,260,203,260,], 'legs'=>[203,250,208,250,263,250,268,250,281,390,175,390,], 'ex'=>1 },
+{ 'x'=>147, 'y'=> 76, 'w'=>145, 'h'=>315, 'head'=>[224, 76,256, 76,256,126,224,126,], 'body'=>[200,121,265,121,265,261,200,261,], 'legs'=>[200,251,205,251,260,251,265,251,280,391,174,391,], 'ex'=>1 },
+{ 'x'=>161, 'y'=>107, 'w'=>124, 'h'=>285, 'head'=>[219,107,255,107,255,157,219,157,], 'body'=>[185,152,250,152,250,277,185,277,], 'legs'=>[185,267,190,267,245,267,250,267,260,392,165,392,], 'ex'=>1 },
+{ 'x'=>158, 'y'=>130, 'w'=>129, 'h'=>263, 'head'=>[222,130,260,130,260,180,222,180,], 'body'=>[187,175,252,175,252,289,187,289,], 'legs'=>[187,279,192,279,247,279,252,279,262,393,166,393,], 'ex'=>1 },
+{ 'x'=>162, 'y'=>138, 'w'=>131, 'h'=>256, 'head'=>[227,138,262,138,262,188,227,188,], 'body'=>[194,183,259,183,259,293,194,293,], 'legs'=>[194,283,199,283,254,283,259,283,261,394,165,394,], 'ex'=>1 },
+{ 'x'=>162, 'y'=>129, 'w'=>164, 'h'=>266, 'head'=>[230,129,261,129,261,179,230,179,], 'body'=>[199,174,264,174,264,289,199,289,], 'legs'=>[199,279,204,279,259,279,264,279,264,395,165,395,], 'ex'=>1 },
+{ 'x'=>178, 'y'=>103, 'w'=>189, 'h'=>279, 'head'=>[242,103,273,103,273,153,242,153,], 'body'=>[218,148,283,148,283,270,218,270,], 'legs'=>[218,260,223,260,278,260,283,260,282,382,181,382,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 89, 'w'=>161, 'h'=>292, 'head'=>[247, 89,290, 89,290,139,247,139,], 'body'=>[222,134,287,134,287,262,222,262,], 'legs'=>[222,252,227,252,282,252,287,252,289,381,223,381,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 73, 'w'=>168, 'h'=>280, 'head'=>[278, 73,336, 73,336,123,278,123,], 'body'=>[226,118,291,118,291,240,226,240,], 'legs'=>[226,230,231,230,286,230,291,230,320,353,227,353,], 'ex'=>1 },
+{ 'x'=>216, 'y'=> 51, 'w'=>149, 'h'=>302, 'head'=>[258, 51,285, 51,285,101,258,101,], 'body'=>[231, 96,296, 96,296,229,231,229,], 'legs'=>[231,219,236,219,291,219,296,219,360,353,220,353,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 48, 'w'=>179, 'h'=>302, 'head'=>[242, 48,259, 48,259, 98,242, 98,], 'body'=>[236, 93,301, 93,301,226,236,226,], 'legs'=>[236,216,241,216,296,216,301,216,386,350,227,350,], 'ex'=>1 },
+{ 'x'=>187, 'y'=>108, 'w'=>175, 'h'=>269, 'head'=>[211,108,247,108,247,158,211,158,], 'body'=>[232,153,297,153,297,270,232,270,], 'legs'=>[232,260,237,260,292,260,297,260,361,377,238,377,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>157, 'w'=>148, 'h'=>243, 'head'=>[241,157,289,157,289,207,241,207,], 'body'=>[240,202,305,202,305,306,240,306,], 'legs'=>[240,296,245,296,300,296,305,296,355,400,246,400,], 'ex'=>1 },
+{ 'x'=>176, 'y'=>194, 'w'=>185, 'h'=>207, 'head'=>[241,194,287,194,287,244,241,244,], 'body'=>[239,239,304,239,304,325,239,325,], 'legs'=>[239,315,244,315,299,315,304,315,356,401,179,401,], 'ex'=>1 },
+{ 'x'=>191, 'y'=>231, 'w'=>174, 'h'=>166, 'head'=>[243,231,299,231,299,281,243,281,], 'body'=>[231,276,296,276,296,341,231,341,], 'legs'=>[231,331,236,331,291,331,296,331,355,397,194,397,], 'ex'=>1 },
+{ 'x'=>190, 'y'=>206, 'w'=>197, 'h'=>191, 'head'=>[257,206,315,206,315,256,257,256,], 'body'=>[230,251,295,251,295,329,230,329,], 'legs'=>[230,319,235,319,290,319,295,319,355,397,193,397,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>178, 'w'=>139, 'h'=>221, 'head'=>[259,178,301,178,301,228,259,228,], 'body'=>[237,223,302,223,302,316,237,316,], 'legs'=>[237,306,242,306,297,306,302,306,343,399,233,399,], 'ex'=>1 },
+{ 'x'=>229, 'y'=>152, 'w'=>174, 'h'=>247, 'head'=>[289,152,320,152,320,202,289,202,], 'body'=>[261,197,326,197,326,303,261,303,], 'legs'=>[261,293,266,293,321,293,326,293,343,399,245,399,], 'ex'=>1 },
+{ 'x'=>243, 'y'=>116, 'w'=>147, 'h'=>282, 'head'=>[298,116,335,116,335,166,298,166,], 'body'=>[260,161,325,161,325,284,260,284,], 'legs'=>[260,274,265,274,320,274,325,274,340,398,247,398,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 90, 'w'=>150, 'h'=>307, 'head'=>[278, 90,315, 90,315,140,278,140,], 'body'=>[244,135,309,135,309,271,244,271,], 'legs'=>[244,261,249,261,304,261,309,261,340,397,208,397,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 76, 'w'=>152, 'h'=>318, 'head'=>[248, 76,284, 76,284,126,248,126,], 'body'=>[224,121,289,121,289,262,224,262,], 'legs'=>[224,252,229,252,284,252,289,252,340,394,196,394,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 71, 'w'=>150, 'h'=>313, 'head'=>[230, 71,262, 71,262,121,230,121,], 'body'=>[208,116,273,116,273,255,208,255,], 'legs'=>[208,245,213,245,268,245,273,245,331,384,196,384,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 64, 'w'=>115, 'h'=>328, 'head'=>[224, 64,255, 64,255,114,224,114,], 'body'=>[199,109,264,109,264,255,199,255,], 'legs'=>[199,245,204,245,259,245,264,245,287,392,203,392,], 'ex'=>1 },
+{ 'x'=>173, 'y'=> 61, 'w'=>119, 'h'=>329, 'head'=>[210, 61,241, 61,241,111,210,111,], 'body'=>[191,106,256,106,256,253,191,253,], 'legs'=>[191,243,196,243,251,243,256,243,288,390,204,390,], 'ex'=>1 },
+{ 'x'=>142, 'y'=> 62, 'w'=>168, 'h'=>328, 'head'=>[202, 62,234, 62,234,112,202,112,], 'body'=>[190,107,255,107,255,253,190,253,], 'legs'=>[190,243,195,243,250,243,255,243,287,390,203,390,], 'ex'=>1 },
+{ 'x'=>159, 'y'=> 64, 'w'=>150, 'h'=>326, 'head'=>[202, 64,234, 64,234,114,202,114,], 'body'=>[189,109,254,109,254,254,189,254,], 'legs'=>[189,244,194,244,249,244,254,244,287,390,203,390,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 65, 'w'=>114, 'h'=>325, 'head'=>[202, 65,233, 65,233,115,202,115,], 'body'=>[190,110,255,110,255,255,190,255,], 'legs'=>[190,245,195,245,250,245,255,245,287,390,204,390,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 67, 'w'=>112, 'h'=>322, 'head'=>[201, 67,233, 67,233,117,201,117,], 'body'=>[191,112,256,112,256,255,191,255,], 'legs'=>[191,245,196,245,251,245,256,245,287,389,203,389,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 67, 'w'=>106, 'h'=>323, 'head'=>[198, 67,231, 67,231,117,198,117,], 'body'=>[192,112,257,112,257,256,192,256,], 'legs'=>[192,246,197,246,252,246,257,246,286,390,204,390,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 67, 'w'=>109, 'h'=>322, 'head'=>[195, 67,227, 67,227,117,195,117,], 'body'=>[190,112,255,112,255,255,190,255,], 'legs'=>[190,245,195,245,250,245,255,245,286,389,203,389,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 68, 'w'=>110, 'h'=>320, 'head'=>[194, 68,227, 68,227,118,194,118,], 'body'=>[189,113,254,113,254,255,189,255,], 'legs'=>[189,245,194,245,249,245,254,245,285,388,203,388,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 66, 'w'=>112, 'h'=>323, 'head'=>[191, 66,224, 66,224,116,191,116,], 'body'=>[187,111,252,111,252,255,187,255,], 'legs'=>[187,245,192,245,247,245,252,245,285,389,201,389,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 64, 'w'=>116, 'h'=>324, 'head'=>[191, 64,223, 64,223,114,191,114,], 'body'=>[186,109,251,109,251,253,186,253,], 'legs'=>[186,243,191,243,246,243,251,243,286,388,201,388,], 'ex'=>1 },
+{ 'x'=>165, 'y'=> 64, 'w'=>124, 'h'=>324, 'head'=>[193, 64,226, 64,226,114,193,114,], 'body'=>[180,109,245,109,245,253,180,253,], 'legs'=>[180,243,185,243,240,243,245,243,284,388,202,388,], 'ex'=>1 },
+{ 'x'=>156, 'y'=> 63, 'w'=>139, 'h'=>326, 'head'=>[198, 63,230, 63,230,113,198,113,], 'body'=>[187,108,252,108,252,253,187,253,], 'legs'=>[187,243,192,243,247,243,252,243,284,389,200,389,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 61, 'w'=>145, 'h'=>327, 'head'=>[205, 61,235, 61,235,111,205,111,], 'body'=>[192,106,257,106,257,252,192,252,], 'legs'=>[192,242,197,242,252,242,257,242,283,388,199,388,], 'ex'=>1 },
+{ 'x'=>172, 'y'=> 61, 'w'=>132, 'h'=>329, 'head'=>[220, 61,246, 61,246,111,220,111,], 'body'=>[200,106,265,106,265,253,200,253,], 'legs'=>[200,243,205,243,260,243,265,243,285,390,200,390,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 64, 'w'=>134, 'h'=>327, 'head'=>[231, 64,258, 64,258,114,231,114,], 'body'=>[209,109,274,109,274,255,209,255,], 'legs'=>[209,245,214,245,269,245,274,245,284,391,201,391,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 80, 'w'=>115, 'h'=>316, 'head'=>[228, 80,259, 80,259,130,228,130,], 'body'=>[210,125,275,125,275,265,210,265,], 'legs'=>[210,255,215,255,270,255,275,255,288,396,202,396,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 82, 'w'=>100, 'h'=>315, 'head'=>[222, 82,253, 82,253,132,222,132,], 'body'=>[205,127,270,127,270,267,205,267,], 'legs'=>[205,257,210,257,265,257,270,257,288,397,202,397,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 82, 'w'=>104, 'h'=>315, 'head'=>[214, 82,249, 82,249,132,214,132,], 'body'=>[201,127,266,127,266,267,201,267,], 'legs'=>[201,257,206,257,261,257,266,257,288,397,201,397,], 'ex'=>1 },
+{ 'x'=>189, 'y'=> 81, 'w'=>108, 'h'=>315, 'head'=>[214, 81,246, 81,246,131,214,131,], 'body'=>[201,126,266,126,266,266,201,266,], 'legs'=>[201,256,206,256,261,256,266,256,288,396,203,396,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 80, 'w'=>145, 'h'=>316, 'head'=>[215, 80,248, 80,248,130,215,130,], 'body'=>[202,125,267,125,267,265,202,265,], 'legs'=>[202,255,207,255,262,255,267,255,289,396,202,396,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 80, 'w'=>168, 'h'=>316, 'head'=>[222, 80,256, 80,256,130,222,130,], 'body'=>[205,125,270,125,270,265,205,265,], 'legs'=>[205,255,210,255,265,255,270,255,288,396,201,396,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 79, 'w'=>166, 'h'=>319, 'head'=>[235, 79,270, 79,270,129,235,129,], 'body'=>[214,124,279,124,279,266,214,266,], 'legs'=>[214,256,219,256,274,256,279,256,286,398,202,398,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 78, 'w'=>162, 'h'=>318, 'head'=>[247, 78,282, 78,282,128,247,128,], 'body'=>[218,123,283,123,283,264,218,264,], 'legs'=>[218,254,223,254,278,254,283,254,287,396,202,396,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 80, 'w'=>171, 'h'=>310, 'head'=>[250, 80,284, 80,284,130,250,130,], 'body'=>[222,125,287,125,287,262,222,262,], 'legs'=>[222,252,227,252,282,252,287,252,287,390,203,390,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 77, 'w'=>168, 'h'=>319, 'head'=>[237, 77,267, 77,267,127,237,127,], 'body'=>[215,122,280,122,280,264,215,264,], 'legs'=>[215,254,220,254,275,254,280,254,287,396,203,396,], 'ex'=>1 },
+{ 'x'=>172, 'y'=> 78, 'w'=>161, 'h'=>319, 'head'=>[221, 78,252, 78,252,128,221,128,], 'body'=>[205,123,270,123,270,265,205,265,], 'legs'=>[205,255,210,255,265,255,270,255,288,397,202,397,], 'ex'=>1 },
+{ 'x'=>168, 'y'=> 78, 'w'=>148, 'h'=>319, 'head'=>[204, 78,235, 78,235,128,204,128,], 'body'=>[190,123,255,123,255,265,190,265,], 'legs'=>[190,255,195,255,250,255,255,255,289,397,203,397,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 79, 'w'=>148, 'h'=>319, 'head'=>[227, 79,257, 79,257,129,227,129,], 'body'=>[208,124,273,124,273,266,208,266,], 'legs'=>[208,256,213,256,268,256,273,256,290,398,191,398,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 81, 'w'=>139, 'h'=>316, 'head'=>[228, 81,260, 81,260,131,228,131,], 'body'=>[212,126,277,126,277,266,212,266,], 'legs'=>[212,256,217,256,272,256,277,256,290,397,187,397,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 78, 'w'=>113, 'h'=>320, 'head'=>[218, 78,249, 78,249,128,218,128,], 'body'=>[203,123,268,123,268,265,203,265,], 'legs'=>[203,255,208,255,263,255,268,255,291,398,187,398,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 76, 'w'=>114, 'h'=>320, 'head'=>[208, 76,239, 76,239,126,208,126,], 'body'=>[192,121,257,121,257,263,192,263,], 'legs'=>[192,253,197,253,252,253,257,253,290,396,188,396,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 74, 'w'=>118, 'h'=>322, 'head'=>[198, 74,230, 74,230,124,198,124,], 'body'=>[185,119,250,119,250,262,185,262,], 'legs'=>[185,252,190,252,245,252,250,252,288,396,187,396,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 74, 'w'=>109, 'h'=>321, 'head'=>[193, 74,224, 74,224,124,193,124,], 'body'=>[183,119,248,119,248,262,183,262,], 'legs'=>[183,252,188,252,243,252,248,252,281,395,187,395,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 75, 'w'=>123, 'h'=>320, 'head'=>[234, 75,266, 75,266,125,234,125,], 'body'=>[212,120,277,120,277,262,212,262,], 'legs'=>[212,252,217,252,272,252,277,252,286,395,184,395,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 79, 'w'=>138, 'h'=>317, 'head'=>[218, 79,255, 79,255,129,218,129,], 'body'=>[198,124,263,124,263,265,198,265,], 'legs'=>[198,255,203,255,258,255,263,255,296,396,184,396,], 'ex'=>1 },
+{ 'x'=>165, 'y'=>116, 'w'=>155, 'h'=>280, 'head'=>[187,116,267,116,267,166,187,166,], 'body'=>[195,161,260,161,260,283,195,283,], 'legs'=>[195,273,200,273,255,273,260,273,209,396,183,396,], 'ex'=>1 },
+{ 'x'=>162, 'y'=>145, 'w'=>145, 'h'=>253, 'head'=>[192,145,266,145,266,195,192,195,], 'body'=>[192,190,257,190,257,299,192,299,], 'legs'=>[192,289,197,289,252,289,257,289,277,398,184,398,], 'ex'=>1 },
+{ 'x'=>178, 'y'=>171, 'w'=>122, 'h'=>227, 'head'=>[197,171,265,171,265,221,197,221,], 'body'=>[200,216,265,216,265,312,200,312,], 'legs'=>[200,302,205,302,260,302,265,302,295,398,183,398,], 'ex'=>0, 'hit'=>[227,334,406,334,407,399,233,394,] },
+{ 'x'=>181, 'y'=>180, 'w'=>122, 'h'=>217, 'head'=>[202,180,264,180,264,230,202,230,], 'body'=>[203,225,268,225,268,316,203,316,], 'legs'=>[203,306,208,306,263,306,268,306,298,397,184,397,], 'ex'=>0, 'hit'=>[276,345,452,346,437,399,268,391,] },
+{ 'x'=>181, 'y'=>158, 'w'=>126, 'h'=>240, 'head'=>[209,158,260,158,260,208,209,208,], 'body'=>[196,203,261,203,261,305,196,305,], 'legs'=>[196,295,201,295,256,295,261,295,299,398,184,398,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>109, 'w'=>126, 'h'=>289, 'head'=>[224,109,254,109,254,159,224,159,], 'body'=>[194,154,259,154,259,281,194,281,], 'legs'=>[194,271,199,271,254,271,259,271,299,398,185,398,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 35, 'w'=>133, 'h'=>362, 'head'=>[194, 35,220, 35,220, 85,194, 85,], 'body'=>[194, 80,259, 80,259,243,194,243,], 'legs'=>[194,233,199,233,254,233,259,233,299,397,186,397,], 'ex'=>1 },
+{ 'x'=>167, 'y'=> 80, 'w'=>150, 'h'=>317, 'head'=>[184, 80,233, 80,233,130,184,130,], 'body'=>[196,125,261,125,261,266,196,266,], 'legs'=>[196,256,201,256,256,256,261,256,301,397,188,397,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 73, 'w'=>126, 'h'=>323, 'head'=>[203, 73,237, 73,237,123,203,123,], 'body'=>[194,118,259,118,259,262,194,262,], 'legs'=>[194,252,199,252,254,252,259,252,299,396,187,396,], 'ex'=>1 },
diff --git a/data/characters/MACIDATA.DAT.pl b/data/characters/MACIDATA.DAT.pl
new file mode 100644
index 0000000..afe8648
--- /dev/null
+++ b/data/characters/MACIDATA.DAT.pl
@@ -0,0 +1,329 @@
+{ 'x'=>254, 'y'=> 67, 'w'=> 99, 'h'=>294, 'head'=>[287, 67,314, 67,314,117,287,117,], 'body'=>[268,112,323,112,323,241,268,241,], 'legs'=>[268,231,273,231,318,231,323,231,349,361,268,361,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 71, 'w'=> 95, 'h'=>289, 'head'=>[290, 71,318, 71,318,121,290,121,], 'body'=>[268,116,323,116,323,243,268,243,], 'legs'=>[268,233,273,233,318,233,323,233,349,360,269,360,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 72, 'w'=> 88, 'h'=>290, 'head'=>[293, 72,319, 72,319,122,293,122,], 'body'=>[274,117,329,117,329,244,274,244,], 'legs'=>[274,234,279,234,324,234,329,234,349,362,270,362,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 71, 'w'=> 89, 'h'=>290, 'head'=>[295, 71,322, 71,322,121,295,121,], 'body'=>[280,116,335,116,335,243,280,243,], 'legs'=>[280,233,285,233,330,233,335,233,350,361,269,361,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 72, 'w'=> 92, 'h'=>289, 'head'=>[298, 72,327, 72,327,122,298,122,], 'body'=>[286,117,341,117,341,244,286,244,], 'legs'=>[286,234,291,234,336,234,341,234,349,361,270,361,], 'ex'=>1 },
+{ 'x'=>269, 'y'=> 71, 'w'=>101, 'h'=>291, 'head'=>[308, 71,337, 71,337,121,308,121,], 'body'=>[298,116,353,116,353,244,298,244,], 'legs'=>[298,234,303,234,348,234,353,234,354,362,272,362,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 72, 'w'=>108, 'h'=>289, 'head'=>[315, 72,343, 72,343,122,315,122,], 'body'=>[304,117,359,117,359,244,304,244,], 'legs'=>[304,234,309,234,354,234,359,234,351,361,270,361,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 74, 'w'=>103, 'h'=>287, 'head'=>[312, 74,340, 74,340,124,312,124,], 'body'=>[300,119,355,119,355,245,300,245,], 'legs'=>[300,235,305,235,350,235,355,235,351,361,270,361,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 73, 'w'=> 92, 'h'=>287, 'head'=>[302, 73,330, 73,330,123,302,123,], 'body'=>[288,118,343,118,343,244,288,244,], 'legs'=>[288,234,293,234,338,234,343,234,348,360,270,360,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 73, 'w'=> 86, 'h'=>282, 'head'=>[291, 73,318, 73,318,123,291,123,], 'body'=>[278,118,333,118,333,241,278,241,], 'legs'=>[278,231,283,231,328,231,333,231,349,355,270,355,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 71, 'w'=> 87, 'h'=>290, 'head'=>[285, 71,311, 71,311,121,285,121,], 'body'=>[273,116,328,116,328,243,273,243,], 'legs'=>[273,233,278,233,323,233,328,233,348,361,269,361,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 69, 'w'=> 86, 'h'=>292, 'head'=>[286, 69,312, 69,312,119,286,119,], 'body'=>[274,114,329,114,329,242,274,242,], 'legs'=>[274,232,279,232,324,232,329,232,347,361,268,361,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 69, 'w'=> 86, 'h'=>292, 'head'=>[287, 69,313, 69,313,119,287,119,], 'body'=>[275,114,330,114,330,242,275,242,], 'legs'=>[275,232,280,232,325,232,330,232,347,361,268,361,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 71, 'w'=> 86, 'h'=>292, 'head'=>[289, 71,316, 71,316,121,289,121,], 'body'=>[276,116,331,116,331,244,276,244,], 'legs'=>[276,234,281,234,326,234,331,234,347,363,268,363,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 69, 'w'=> 91, 'h'=>294, 'head'=>[293, 69,320, 69,320,119,293,119,], 'body'=>[278,114,333,114,333,243,278,243,], 'legs'=>[278,233,283,233,328,233,333,233,346,363,268,363,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 69, 'w'=> 93, 'h'=>293, 'head'=>[296, 69,323, 69,323,119,296,119,], 'body'=>[281,114,336,114,336,243,281,243,], 'legs'=>[281,233,286,233,331,233,336,233,347,362,269,362,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 70, 'w'=>104, 'h'=>293, 'head'=>[302, 70,328, 70,328,120,302,120,], 'body'=>[288,115,343,115,343,244,288,244,], 'legs'=>[288,234,293,234,338,234,343,234,346,363,268,363,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 72, 'w'=> 98, 'h'=>308, 'head'=>[287, 72,314, 72,314,122,287,122,], 'body'=>[266,117,321,117,321,253,266,253,], 'legs'=>[266,243,271,243,316,243,321,243,352,380,266,380,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 76, 'w'=>101, 'h'=>307, 'head'=>[283, 76,314, 76,314,126,283,126,], 'body'=>[264,121,319,121,319,257,264,257,], 'legs'=>[264,247,269,247,314,247,319,247,352,383,266,383,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 76, 'w'=>114, 'h'=>307, 'head'=>[283, 76,316, 76,316,126,283,126,], 'body'=>[268,121,323,121,323,257,268,257,], 'legs'=>[268,247,273,247,318,247,323,247,364,383,267,383,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 77, 'w'=> 96, 'h'=>306, 'head'=>[293, 77,329, 77,329,127,293,127,], 'body'=>[279,122,334,122,334,257,279,257,], 'legs'=>[279,247,284,247,329,247,334,247,358,383,267,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 84, 'w'=>111, 'h'=>297, 'head'=>[305, 84,337, 84,337,134,305,134,], 'body'=>[288,129,343,129,343,260,288,260,], 'legs'=>[288,250,293,250,338,250,343,250,365,381,268,381,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 87, 'w'=>107, 'h'=>299, 'head'=>[292, 87,326, 87,326,137,292,137,], 'body'=>[277,132,332,132,332,264,277,264,], 'legs'=>[277,254,282,254,327,254,332,254,364,386,266,386,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 83, 'w'=>106, 'h'=>301, 'head'=>[289, 83,323, 83,323,133,289,133,], 'body'=>[277,128,332,128,332,261,277,261,], 'legs'=>[277,251,282,251,327,251,332,251,365,384,266,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 78, 'w'=>106, 'h'=>305, 'head'=>[291, 78,326, 78,326,128,291,128,], 'body'=>[279,123,334,123,334,258,279,258,], 'legs'=>[279,248,284,248,329,248,334,248,365,383,266,383,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 76, 'w'=>113, 'h'=>308, 'head'=>[294, 76,329, 76,329,126,294,126,], 'body'=>[283,121,338,121,338,257,283,257,], 'legs'=>[283,247,288,247,333,247,338,247,364,384,265,384,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 78, 'w'=>117, 'h'=>304, 'head'=>[302, 78,337, 78,337,128,302,128,], 'body'=>[290,123,345,123,345,257,290,257,], 'legs'=>[290,247,295,247,340,247,345,247,366,382,267,382,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 84, 'w'=>120, 'h'=>297, 'head'=>[308, 84,341, 84,341,134,308,134,], 'body'=>[295,129,350,129,350,260,295,260,], 'legs'=>[295,250,300,250,345,250,350,250,365,381,270,381,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 77, 'w'=>115, 'h'=>308, 'head'=>[308, 77,343, 77,343,127,308,127,], 'body'=>[294,122,349,122,349,258,294,258,], 'legs'=>[294,248,299,248,344,248,349,248,363,385,270,385,], 'ex'=>1 },
+{ 'x'=>272, 'y'=> 83, 'w'=>128, 'h'=>303, 'head'=>[326, 83,361, 83,361,133,326,133,], 'body'=>[312,128,367,128,367,262,312,262,], 'legs'=>[312,252,317,252,362,252,367,252,364,386,275,386,], 'ex'=>1 },
+{ 'x'=>281, 'y'=> 84, 'w'=>125, 'h'=>293, 'head'=>[335, 84,368, 84,368,134,335,134,], 'body'=>[318,129,373,129,373,258,318,258,], 'legs'=>[318,248,323,248,368,248,373,248,367,377,284,377,], 'ex'=>1 },
+{ 'x'=>299, 'y'=> 82, 'w'=>113, 'h'=>292, 'head'=>[341, 82,375, 82,375,132,341,132,], 'body'=>[323,127,378,127,378,255,323,255,], 'legs'=>[323,245,328,245,373,245,378,245,365,374,302,374,], 'ex'=>1 },
+{ 'x'=>318, 'y'=> 77, 'w'=> 97, 'h'=>301, 'head'=>[348, 77,380, 77,380,127,348,127,], 'body'=>[327,122,382,122,382,255,327,255,], 'legs'=>[327,245,332,245,377,245,382,245,364,378,326,378,], 'ex'=>1 },
+{ 'x'=>323, 'y'=> 79, 'w'=> 93, 'h'=>308, 'head'=>[351, 79,385, 79,385,129,351,129,], 'body'=>[331,124,386,124,386,260,331,260,], 'legs'=>[331,250,336,250,381,250,386,250,363,387,333,387,], 'ex'=>1 },
+{ 'x'=>330, 'y'=> 82, 'w'=> 88, 'h'=>308, 'head'=>[356, 82,389, 82,389,132,356,132,], 'body'=>[336,127,391,127,391,263,336,263,], 'legs'=>[336,253,341,253,386,253,391,253,368,390,333,390,], 'ex'=>1 },
+{ 'x'=>335, 'y'=> 88, 'w'=> 88, 'h'=>303, 'head'=>[359, 88,393, 88,393,138,359,138,], 'body'=>[341,133,396,133,396,267,341,267,], 'legs'=>[341,257,346,257,391,257,396,257,388,391,339,391,], 'ex'=>1 },
+{ 'x'=>336, 'y'=> 89, 'w'=> 97, 'h'=>301, 'head'=>[364, 89,398, 89,398,139,364,139,], 'body'=>[346,134,401,134,401,267,346,267,], 'legs'=>[346,257,351,257,396,257,401,257,402,390,339,390,], 'ex'=>1 },
+{ 'x'=>337, 'y'=> 82, 'w'=>106, 'h'=>309, 'head'=>[372, 82,406, 82,406,132,372,132,], 'body'=>[354,127,409,127,409,264,354,264,], 'legs'=>[354,254,359,254,404,254,409,254,423,391,340,391,], 'ex'=>1 },
+{ 'x'=>338, 'y'=> 81, 'w'=>120, 'h'=>310, 'head'=>[381, 81,415, 81,415,131,381,131,], 'body'=>[364,126,419,126,419,263,364,263,], 'legs'=>[364,253,369,253,414,253,419,253,454,391,341,391,], 'ex'=>1 },
+{ 'x'=>338, 'y'=> 87, 'w'=>133, 'h'=>303, 'head'=>[391, 87,426, 87,426,137,391,137,], 'body'=>[375,132,430,132,430,266,375,266,], 'legs'=>[375,256,380,256,425,256,430,256,459,390,341,390,], 'ex'=>1 },
+{ 'x'=>339, 'y'=> 96, 'w'=>147, 'h'=>294, 'head'=>[403, 96,436, 96,436,146,403,146,], 'body'=>[385,141,440,141,440,270,385,270,], 'legs'=>[385,260,390,260,435,260,440,260,457,390,342,390,], 'ex'=>1 },
+{ 'x'=>344, 'y'=> 99, 'w'=>149, 'h'=>287, 'head'=>[411, 99,443, 99,443,149,411,149,], 'body'=>[392,144,447,144,447,270,392,270,], 'legs'=>[392,260,397,260,442,260,447,260,457,386,347,386,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 94, 'w'=>129, 'h'=>284, 'head'=>[304, 94,339, 94,339,144,304,144,], 'body'=>[287,139,342,139,342,263,287,263,], 'legs'=>[287,253,292,253,337,253,342,253,360,378,259,378,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>101, 'w'=>147, 'h'=>276, 'head'=>[318,101,348,101,348,151,318,151,], 'body'=>[292,146,347,146,347,266,292,266,], 'legs'=>[292,256,297,256,342,256,347,256,360,377,262,377,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 91, 'w'=>141, 'h'=>286, 'head'=>[316, 91,346, 91,346,141,316,141,], 'body'=>[288,136,343,136,343,261,288,261,], 'legs'=>[288,251,293,251,338,251,343,251,360,377,262,377,], 'ex'=>1 },
+{ 'x'=>250, 'y'=> 84, 'w'=>120, 'h'=>293, 'head'=>[307, 84,338, 84,338,134,307,134,], 'body'=>[289,129,344,129,344,258,289,258,], 'legs'=>[289,248,294,248,339,248,344,248,360,377,254,377,], 'ex'=>1 },
+{ 'x'=>246, 'y'=> 82, 'w'=>122, 'h'=>294, 'head'=>[297, 82,334, 82,334,132,297,132,], 'body'=>[286,127,341,127,341,256,286,256,], 'legs'=>[286,246,291,246,336,246,341,246,360,376,254,376,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 87, 'w'=>133, 'h'=>288, 'head'=>[289, 87,334, 87,334,137,289,137,], 'body'=>[280,132,335,132,335,258,280,258,], 'legs'=>[280,248,285,248,330,248,335,248,361,375,255,375,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 94, 'w'=>131, 'h'=>281, 'head'=>[280, 94,326, 94,326,144,280,144,], 'body'=>[278,139,333,139,333,262,278,262,], 'legs'=>[278,252,283,252,328,252,333,252,360,375,255,375,], 'ex'=>1 },
+{ 'x'=>239, 'y'=> 94, 'w'=>128, 'h'=>283, 'head'=>[277, 94,313, 94,313,144,277,144,], 'body'=>[278,139,333,139,333,263,278,263,], 'legs'=>[278,253,283,253,328,253,333,253,363,377,257,377,], 'ex'=>1 },
+{ 'x'=>239, 'y'=> 86, 'w'=>131, 'h'=>282, 'head'=>[277, 86,309, 86,309,136,277,136,], 'body'=>[278,131,333,131,333,254,278,254,], 'legs'=>[278,244,283,244,328,244,333,244,366,368,254,368,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 96, 'w'=>113, 'h'=>281, 'head'=>[318, 96,349, 96,349,146,318,146,], 'body'=>[286,141,341,141,341,264,286,264,], 'legs'=>[286,254,291,254,336,254,341,254,358,377,257,377,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>116, 'w'=>105, 'h'=>261, 'head'=>[315,116,346,116,346,166,315,166,], 'body'=>[275,161,330,161,330,274,275,274,], 'legs'=>[275,264,280,264,325,264,330,264,350,377,267,377,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>124, 'w'=>120, 'h'=>254, 'head'=>[299,124,334,124,334,174,299,174,], 'body'=>[266,169,321,169,321,278,266,278,], 'legs'=>[266,268,271,268,316,268,321,268,356,378,278,378,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>131, 'w'=>139, 'h'=>247, 'head'=>[277,131,316,131,316,181,277,181,], 'body'=>[253,176,308,176,308,282,253,282,], 'legs'=>[253,272,258,272,303,272,308,272,359,378,281,378,], 'ex'=>1 },
+{ 'x'=>227, 'y'=>148, 'w'=>155, 'h'=>241, 'head'=>[253,148,295,148,295,198,253,198,], 'body'=>[237,193,292,193,292,296,237,296,], 'legs'=>[237,286,242,286,287,286,292,286,378,389,278,389,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>171, 'w'=>176, 'h'=>209, 'head'=>[234,171,274,171,274,221,234,221,], 'body'=>[219,216,274,216,274,303,219,303,], 'legs'=>[219,293,224,293,269,293,274,293,379,380,238,380,], 'ex'=>1 },
+{ 'x'=>189, 'y'=>192, 'w'=>185, 'h'=>193, 'head'=>[232,192,259,192,259,242,232,242,], 'body'=>[205,237,260,237,260,316,205,316,], 'legs'=>[205,306,210,306,255,306,260,306,364,385,205,385,], 'ex'=>1 },
+{ 'x'=>169, 'y'=>218, 'w'=>197, 'h'=>185, 'head'=>[218,218,239,218,239,268,218,268,], 'body'=>[177,263,232,263,232,338,177,338,], 'legs'=>[177,328,182,328,227,328,232,328,309,403,178,403,], 'ex'=>1 },
+{ 'x'=>123, 'y'=>236, 'w'=>237, 'h'=>166, 'head'=>[161,236,189,236,189,286,161,286,], 'body'=>[140,281,195,281,195,346,140,346,], 'legs'=>[140,336,145,336,190,336,195,336,239,402,158,402,], 'ex'=>1 },
+{ 'x'=> 86, 'y'=>240, 'w'=>262, 'h'=>160, 'head'=>[164,240,176,240,176,290,164,290,], 'body'=>[126,285,181,285,181,347,126,347,], 'legs'=>[126,337,131,337,176,337,181,337,236,400,137,400,], 'ex'=>1 },
+{ 'x'=> 52, 'y'=>256, 'w'=>292, 'h'=>141, 'head'=>[149,256,161,256,161,306,149,306,], 'body'=>[127,301,182,301,182,354,127,354,], 'legs'=>[127,344,132,344,177,344,182,344,223,397,109,397,], 'ex'=>1 },
+{ 'x'=> 27, 'y'=>266, 'w'=>300, 'h'=>133, 'head'=>[176,266,209,266,209,316,176,316,], 'body'=>[ 99,311,154,311,154,360, 99,360,], 'legs'=>[ 99,350,104,350,149,350,154,350,318,399, 43,399,], 'ex'=>1 },
+{ 'x'=> 27, 'y'=>283, 'w'=>318, 'h'=>122, 'head'=>[177,283,207,283,207,333,177,333,], 'body'=>[ 85,328,140,328,140,371, 85,371,], 'legs'=>[ 85,361, 90,361,135,361,140,361,336,405,139,405,], 'ex'=>1 },
+{ 'x'=> 33, 'y'=>287, 'w'=>310, 'h'=>112, 'head'=>[181,287,218,287,218,337,181,337,], 'body'=>[ 57,332,112,332,112,370, 57,370,], 'legs'=>[ 57,360, 62,360,107,360,112,360,339,399, 46,399,], 'ex'=>1 },
+{ 'x'=> 61, 'y'=>287, 'w'=>282, 'h'=>108, 'head'=>[122,287,167,287,167,337,122,337,], 'body'=>[ 83,332,138,332,138,368, 83,368,], 'legs'=>[ 83,358, 88,358,133,358,138,358,339,395,128,395,], 'ex'=>1 },
+{ 'x'=> 89, 'y'=>272, 'w'=>255, 'h'=>124, 'head'=>[103,272,155,272,155,322,103,322,], 'body'=>[105,317,160,317,160,361,105,361,], 'legs'=>[105,351,110,351,155,351,160,351,340,396,130,396,], 'ex'=>1 },
+{ 'x'=>118, 'y'=>257, 'w'=>199, 'h'=>141, 'head'=>[131,257,173,257,173,307,131,307,], 'body'=>[145,302,200,302,200,355,145,355,], 'legs'=>[145,345,150,345,195,345,200,345,316,398,137,398,], 'ex'=>1 },
+{ 'x'=>139, 'y'=>247, 'w'=>181, 'h'=>153, 'head'=>[156,247,190,247,190,297,156,297,], 'body'=>[163,292,218,292,218,351,163,351,], 'legs'=>[163,341,168,341,213,341,218,341,316,400,168,400,], 'ex'=>1 },
+{ 'x'=>157, 'y'=>245, 'w'=>171, 'h'=>156, 'head'=>[178,245,213,245,213,295,178,295,], 'body'=>[176,290,231,290,231,350,176,350,], 'legs'=>[176,340,181,340,226,340,231,340,283,401,184,401,], 'ex'=>1 },
+{ 'x'=>176, 'y'=>246, 'w'=>157, 'h'=>155, 'head'=>[201,246,239,246,239,296,201,296,], 'body'=>[180,291,235,291,235,351,180,351,], 'legs'=>[180,341,185,341,230,341,235,341,273,401,186,401,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>250, 'w'=>145, 'h'=>152, 'head'=>[229,250,266,250,266,300,229,300,], 'body'=>[201,295,256,295,256,353,201,353,], 'legs'=>[201,343,206,343,251,343,256,343,274,402,187,402,], 'ex'=>1 },
+{ 'x'=>183, 'y'=>257, 'w'=>152, 'h'=>145, 'head'=>[248,257,292,257,292,307,248,307,], 'body'=>[217,302,272,302,272,357,217,357,], 'legs'=>[217,347,222,347,267,347,272,347,276,402,186,402,], 'ex'=>1 },
+{ 'x'=>187, 'y'=>241, 'w'=>150, 'h'=>160, 'head'=>[271,241,310,241,310,291,271,291,], 'body'=>[234,286,289,286,289,348,234,348,], 'legs'=>[234,338,239,338,284,338,289,338,287,401,190,401,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>222, 'w'=>130, 'h'=>172, 'head'=>[284,222,322,222,322,272,284,272,], 'body'=>[245,267,300,267,300,335,245,335,], 'legs'=>[245,325,250,325,295,325,300,325,320,394,213,394,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>196, 'w'=>112, 'h'=>197, 'head'=>[298,196,335,196,335,246,298,246,], 'body'=>[256,241,311,241,311,322,256,322,], 'legs'=>[256,312,261,312,306,312,311,312,321,393,247,393,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>168, 'w'=>107, 'h'=>226, 'head'=>[307,168,342,168,342,218,307,218,], 'body'=>[267,213,322,213,322,308,267,308,], 'legs'=>[267,298,272,298,317,298,322,298,330,394,256,394,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>140, 'w'=>111, 'h'=>251, 'head'=>[313,140,346,140,346,190,313,190,], 'body'=>[274,185,329,185,329,293,274,293,], 'legs'=>[274,283,279,283,324,283,329,283,329,391,258,391,], 'ex'=>1 },
+{ 'x'=>256, 'y'=>116, 'w'=>108, 'h'=>271, 'head'=>[314,116,346,116,346,166,314,166,], 'body'=>[276,161,331,161,331,279,276,279,], 'legs'=>[276,269,281,269,326,269,331,269,332,387,259,387,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 98, 'w'=>100, 'h'=>290, 'head'=>[314, 98,346, 98,346,148,314,148,], 'body'=>[280,143,335,143,335,270,280,270,], 'legs'=>[280,260,285,260,330,260,335,260,330,388,266,388,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 87, 'w'=> 92, 'h'=>309, 'head'=>[309, 87,342, 87,342,137,309,137,], 'body'=>[282,132,337,132,337,269,282,269,], 'legs'=>[282,259,287,259,332,259,337,259,328,396,273,396,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 90, 'w'=>109, 'h'=>308, 'head'=>[306, 90,340, 90,340,140,306,140,], 'body'=>[287,135,342,135,342,271,287,271,], 'legs'=>[287,261,292,261,337,261,342,261,349,398,273,398,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 87, 'w'=>125, 'h'=>296, 'head'=>[305, 87,336, 87,336,137,305,137,], 'body'=>[285,132,340,132,340,262,285,262,], 'legs'=>[285,252,290,252,335,252,340,252,357,383,254,383,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 86, 'w'=>119, 'h'=>297, 'head'=>[301, 86,329, 86,329,136,301,136,], 'body'=>[278,131,333,131,333,262,278,262,], 'legs'=>[278,252,283,252,328,252,333,252,356,383,252,383,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 85, 'w'=>112, 'h'=>298, 'head'=>[296, 85,321, 85,321,135,296,135,], 'body'=>[270,130,325,130,325,261,270,261,], 'legs'=>[270,251,275,251,320,251,325,251,357,383,252,383,], 'ex'=>1 },
+{ 'x'=>244, 'y'=> 88, 'w'=>117, 'h'=>296, 'head'=>[288, 88,313, 88,313,138,288,138,], 'body'=>[263,133,318,133,318,263,263,263,], 'legs'=>[263,253,268,253,313,253,318,253,357,384,251,384,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 89, 'w'=>120, 'h'=>296, 'head'=>[282, 89,308, 89,308,139,282,139,], 'body'=>[259,134,314,134,314,264,259,264,], 'legs'=>[259,254,264,254,309,254,314,254,357,385,251,385,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 87, 'w'=>124, 'h'=>298, 'head'=>[281, 87,306, 87,306,137,281,137,], 'body'=>[259,132,314,132,314,263,259,263,], 'legs'=>[259,253,264,253,309,253,314,253,357,385,251,385,], 'ex'=>1 },
+{ 'x'=>232, 'y'=> 87, 'w'=>129, 'h'=>297, 'head'=>[283, 87,308, 87,308,137,283,137,], 'body'=>[267,132,322,132,322,263,267,263,], 'legs'=>[267,253,272,253,317,253,322,253,357,384,251,384,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 88, 'w'=>135, 'h'=>296, 'head'=>[289, 88,316, 88,316,138,289,138,], 'body'=>[273,133,328,133,328,263,273,263,], 'legs'=>[273,253,278,253,323,253,328,253,356,384,251,384,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 89, 'w'=>126, 'h'=>295, 'head'=>[300, 89,327, 89,327,139,300,139,], 'body'=>[283,134,338,134,338,264,283,264,], 'legs'=>[283,254,288,254,333,254,338,254,356,384,252,384,], 'ex'=>1 },
+{ 'x'=>247, 'y'=> 88, 'w'=>134, 'h'=>295, 'head'=>[309, 88,336, 88,336,138,309,138,], 'body'=>[291,133,346,133,346,263,291,263,], 'legs'=>[291,253,296,253,341,253,346,253,356,383,253,383,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 87, 'w'=>132, 'h'=>290, 'head'=>[312, 87,338, 87,338,137,312,137,], 'body'=>[289,132,344,132,344,259,289,259,], 'legs'=>[289,249,294,249,339,249,344,249,355,377,251,377,], 'ex'=>1 },
+{ 'x'=>244, 'y'=> 88, 'w'=>125, 'h'=>292, 'head'=>[301, 88,329, 88,329,138,301,138,], 'body'=>[275,133,330,133,330,261,275,261,], 'legs'=>[275,251,280,251,325,251,330,251,355,380,247,380,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 89, 'w'=>118, 'h'=>292, 'head'=>[287, 89,316, 89,316,139,287,139,], 'body'=>[260,134,315,134,315,262,260,262,], 'legs'=>[260,252,265,252,310,252,315,252,356,381,245,381,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>107, 'w'=>132, 'h'=>276, 'head'=>[313,107,347,107,347,157,313,157,], 'body'=>[283,152,338,152,338,272,283,272,], 'legs'=>[283,262,288,262,333,262,338,262,363,383,262,383,], 'ex'=>1 },
+{ 'x'=>228, 'y'=>103, 'w'=>163, 'h'=>285, 'head'=>[282,103,315,103,315,153,282,153,], 'body'=>[260,148,315,148,315,273,260,273,], 'legs'=>[260,263,265,263,310,263,315,263,387,388,264,388,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>111, 'w'=>192, 'h'=>279, 'head'=>[263,111,295,111,295,161,263,161,], 'body'=>[250,156,305,156,305,278,250,278,], 'legs'=>[250,268,255,268,300,268,305,268,409,390,261,390,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>127, 'w'=>189, 'h'=>264, 'head'=>[246,127,279,127,279,177,246,177,], 'body'=>[245,172,300,172,300,286,245,286,], 'legs'=>[245,276,250,276,295,276,300,276,396,391,261,391,], 'ex'=>1 },
+{ 'x'=>195, 'y'=>150, 'w'=>194, 'h'=>240, 'head'=>[227,150,267,150,267,200,227,200,], 'body'=>[238,195,293,195,293,297,238,297,], 'legs'=>[238,287,243,287,288,287,293,287,385,390,262,390,], 'ex'=>1 },
+{ 'x'=>196, 'y'=>181, 'w'=>186, 'h'=>210, 'head'=>[211,181,272,181,272,231,211,231,], 'body'=>[239,226,294,226,294,313,239,313,], 'legs'=>[239,303,244,303,289,303,294,303,378,391,204,391,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>217, 'w'=>171, 'h'=>172, 'head'=>[199,217,275,217,275,267,199,267,], 'body'=>[234,262,289,262,289,330,234,330,], 'legs'=>[234,320,239,320,284,320,289,320,359,389,195,389,], 'ex'=>1 },
+{ 'x'=>180, 'y'=>247, 'w'=>176, 'h'=>143, 'head'=>[199,247,293,247,293,297,199,297,], 'body'=>[228,292,283,292,283,346,228,346,], 'legs'=>[228,336,233,336,278,336,283,336,287,390,195,390,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 89, 'w'=>113, 'h'=>294, 'head'=>[321, 89,351, 89,351,139,321,139,], 'body'=>[296,134,351,134,351,263,296,263,], 'legs'=>[296,253,301,253,346,253,351,253,355,383,258,383,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 91, 'w'=>116, 'h'=>293, 'head'=>[320, 91,347, 91,347,141,320,141,], 'body'=>[298,136,353,136,353,265,298,265,], 'legs'=>[298,255,303,255,348,255,353,255,357,384,258,384,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 83, 'w'=>115, 'h'=>293, 'head'=>[310, 83,336, 83,336,133,310,133,], 'body'=>[291,128,346,128,346,257,291,257,], 'legs'=>[291,247,296,247,341,247,346,247,356,376,260,376,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 84, 'w'=>113, 'h'=>295, 'head'=>[294, 84,330, 84,330,134,294,134,], 'body'=>[285,129,340,129,340,259,285,259,], 'legs'=>[285,249,290,249,335,249,340,249,356,379,260,379,], 'ex'=>1 },
+{ 'x'=>269, 'y'=> 90, 'w'=>103, 'h'=>287, 'head'=>[307, 90,332, 90,332,140,307,140,], 'body'=>[298,135,353,135,353,261,298,261,], 'legs'=>[298,251,303,251,348,251,353,251,364,377,272,377,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 92, 'w'=>121, 'h'=>279, 'head'=>[310, 92,342, 92,342,142,310,142,], 'body'=>[311,137,366,137,366,259,311,259,], 'legs'=>[311,249,316,249,361,249,366,249,368,371,273,371,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 89, 'w'=>128, 'h'=>287, 'head'=>[322, 89,348, 89,348,139,322,139,], 'body'=>[313,134,368,134,368,260,313,260,], 'legs'=>[313,250,318,250,363,250,368,250,373,376,273,376,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 82, 'w'=>175, 'h'=>291, 'head'=>[325, 82,352, 82,352,132,325,132,], 'body'=>[314,127,369,127,369,255,314,255,], 'legs'=>[314,245,319,245,364,245,369,245,371,373,275,373,], 'ex'=>1 },
+{ 'x'=>250, 'y'=> 79, 'w'=>150, 'h'=>294, 'head'=>[325, 79,351, 79,351,129,325,129,], 'body'=>[309,124,364,124,364,253,309,253,], 'legs'=>[309,243,314,243,359,243,364,243,369,373,276,373,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 82, 'w'=>123, 'h'=>292, 'head'=>[317, 82,344, 82,344,132,317,132,], 'body'=>[298,127,353,127,353,255,298,255,], 'legs'=>[298,245,303,245,348,245,353,245,367,374,274,374,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 87, 'w'=>113, 'h'=>283, 'head'=>[316, 87,342, 87,342,137,316,137,], 'body'=>[300,132,355,132,355,256,300,256,], 'legs'=>[300,246,305,246,350,246,355,246,364,370,274,370,], 'ex'=>1 },
+{ 'x'=>271, 'y'=> 88, 'w'=>107, 'h'=>282, 'head'=>[321, 88,347, 88,347,138,321,138,], 'body'=>[306,133,361,133,361,256,306,256,], 'legs'=>[306,246,311,246,356,246,361,246,365,370,275,370,], 'ex'=>1 },
+{ 'x'=>250, 'y'=> 87, 'w'=>133, 'h'=>284, 'head'=>[325, 87,351, 87,351,137,325,137,], 'body'=>[308,132,363,132,363,256,308,256,], 'legs'=>[308,246,313,246,358,246,363,246,365,371,277,371,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 83, 'w'=>119, 'h'=>288, 'head'=>[325, 83,351, 83,351,133,325,133,], 'body'=>[306,128,361,128,361,254,306,254,], 'legs'=>[306,244,311,244,356,244,361,244,362,371,278,371,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 83, 'w'=>114, 'h'=>287, 'head'=>[322, 83,350, 83,350,133,322,133,], 'body'=>[305,128,360,128,360,254,305,254,], 'legs'=>[305,244,310,244,355,244,360,244,362,370,276,370,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 84, 'w'=>134, 'h'=>287, 'head'=>[317, 84,345, 84,345,134,317,134,], 'body'=>[298,129,353,129,353,255,298,255,], 'legs'=>[298,245,303,245,348,245,353,245,361,371,276,371,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 88, 'w'=>138, 'h'=>284, 'head'=>[312, 88,339, 88,339,138,312,138,], 'body'=>[292,133,347,133,347,257,292,257,], 'legs'=>[292,247,297,247,342,247,347,247,361,372,276,372,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>104, 'w'=>120, 'h'=>279, 'head'=>[302,104,333,104,333,154,302,154,], 'body'=>[288,149,343,149,343,271,288,271,], 'legs'=>[288,261,293,261,338,261,343,261,359,383,266,383,], 'ex'=>1 },
+{ 'x'=>261, 'y'=>103, 'w'=>127, 'h'=>279, 'head'=>[297,103,329,103,329,153,297,153,], 'body'=>[285,148,340,148,340,270,285,270,], 'legs'=>[285,260,290,260,335,260,340,260,358,382,264,382,], 'ex'=>1 },
+{ 'x'=>260, 'y'=>102, 'w'=>115, 'h'=>283, 'head'=>[288,102,320,102,320,152,288,152,], 'body'=>[281,147,336,147,336,271,281,271,], 'legs'=>[281,261,286,261,331,261,336,261,360,385,263,385,], 'ex'=>1 },
+{ 'x'=>255, 'y'=>110, 'w'=>108, 'h'=>276, 'head'=>[270,110,311,110,311,160,270,160,], 'body'=>[267,155,322,155,322,275,267,275,], 'legs'=>[267,265,272,265,317,265,322,265,358,386,263,386,], 'ex'=>1 },
+{ 'x'=>243, 'y'=>118, 'w'=>120, 'h'=>268, 'head'=>[257,118,301,118,301,168,257,168,], 'body'=>[259,163,314,163,314,279,259,279,], 'legs'=>[259,269,264,269,309,269,314,269,359,386,262,386,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>113, 'w'=>122, 'h'=>271, 'head'=>[299,113,333,113,333,163,299,163,], 'body'=>[280,158,335,158,335,276,280,276,], 'legs'=>[280,266,285,266,330,266,335,266,356,384,266,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>134, 'w'=>119, 'h'=>250, 'head'=>[300,134,335,134,335,184,300,184,], 'body'=>[280,179,335,179,335,286,280,286,], 'legs'=>[280,276,285,276,330,276,335,276,362,384,266,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>158, 'w'=>118, 'h'=>226, 'head'=>[301,158,335,158,335,208,301,208,], 'body'=>[280,203,335,203,335,298,280,298,], 'legs'=>[280,288,285,288,330,288,335,288,365,384,266,384,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>172, 'w'=>121, 'h'=>212, 'head'=>[308,172,340,172,340,222,308,222,], 'body'=>[286,217,341,217,341,305,286,305,], 'legs'=>[286,295,291,295,336,295,341,295,365,384,267,384,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>187, 'w'=>128, 'h'=>197, 'head'=>[309,187,341,187,341,237,309,237,], 'body'=>[281,232,336,232,336,313,281,313,], 'legs'=>[281,303,286,303,331,303,336,303,363,384,265,384,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>186, 'w'=>123, 'h'=>197, 'head'=>[307,186,339,186,339,236,307,236,], 'body'=>[281,231,336,231,336,312,281,312,], 'legs'=>[281,302,286,302,331,302,336,302,366,383,265,383,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>182, 'w'=>124, 'h'=>202, 'head'=>[305,182,336,182,336,232,305,232,], 'body'=>[283,227,338,227,338,310,283,310,], 'legs'=>[283,300,288,300,333,300,338,300,363,384,265,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>189, 'w'=>125, 'h'=>194, 'head'=>[303,189,334,189,334,239,303,239,], 'body'=>[286,234,341,234,341,313,286,313,], 'legs'=>[286,303,291,303,336,303,341,303,367,383,266,383,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>194, 'w'=>115, 'h'=>189, 'head'=>[314,194,348,194,348,244,314,244,], 'body'=>[282,239,337,239,337,316,282,316,], 'legs'=>[282,306,287,306,332,306,337,306,359,383,266,383,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>178, 'w'=>118, 'h'=>207, 'head'=>[323,178,360,178,360,228,323,228,], 'body'=>[290,223,345,223,345,309,290,309,], 'legs'=>[290,299,295,299,340,299,345,299,362,385,265,385,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>171, 'w'=>139, 'h'=>212, 'head'=>[332,171,370,171,370,221,332,221,], 'body'=>[302,216,357,216,357,304,302,304,], 'legs'=>[302,294,307,294,352,294,357,294,373,383,268,383,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>177, 'w'=>197, 'h'=>205, 'head'=>[337,177,373,177,373,227,337,227,], 'body'=>[301,222,356,222,356,307,301,307,], 'legs'=>[301,297,306,297,351,297,356,297,380,382,267,382,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>196, 'w'=>193, 'h'=>186, 'head'=>[344,196,379,196,379,246,344,246,], 'body'=>[296,241,351,241,351,316,296,316,], 'legs'=>[296,306,301,306,346,306,351,306,380,382,267,382,], 'ex'=>0, 'hit'=>[412,272,427,261,459,300,441,306,] },
+{ 'x'=>249, 'y'=>224, 'w'=>130, 'h'=>155, 'head'=>[283,224,318,224,318,274,283,274,], 'body'=>[263,269,318,269,318,329,263,329,], 'legs'=>[263,319,268,319,313,319,318,319,372,379,268,379,], 'ex'=>1 },
+{ 'x'=>247, 'y'=>208, 'w'=>135, 'h'=>175, 'head'=>[277,208,314,208,314,258,277,258,], 'body'=>[270,253,325,253,325,323,270,323,], 'legs'=>[270,313,275,313,320,313,325,313,378,383,271,383,], 'ex'=>1 },
+{ 'x'=>236, 'y'=>192, 'w'=>145, 'h'=>192, 'head'=>[266,192,303,192,303,242,266,242,], 'body'=>[262,237,317,237,317,315,262,315,], 'legs'=>[262,305,267,305,312,305,317,305,377,384,271,384,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>188, 'w'=>165, 'h'=>196, 'head'=>[254,188,293,188,293,238,254,238,], 'body'=>[265,233,320,233,320,313,265,313,], 'legs'=>[265,303,270,303,315,303,320,303,386,384,271,384,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>189, 'w'=>233, 'h'=>194, 'head'=>[230,189,278,189,278,239,230,239,], 'body'=>[260,234,315,234,315,313,260,313,], 'legs'=>[260,303,265,303,310,303,344,266,450,350,271,383,], 'ex'=>0 },
+{ 'x'=>207, 'y'=>187, 'w'=>258, 'h'=>197, 'head'=>[245,187,284,187,284,237,245,237,], 'body'=>[273,232,328,232,328,313,273,313,], 'legs'=>[273,303,278,303,345,263,453,323,469,359,272,384,], 'ex'=>0, 'hit'=>[327,294,355,276,460,334,460,353,] },
+{ 'x'=>262, 'y'=> 87, 'w'=>103, 'h'=>298, 'head'=>[301, 87,330, 87,330,137,301,137,], 'body'=>[280,132,335,132,335,263,280,263,], 'legs'=>[280,253,285,253,330,253,335,253,360,385,265,385,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 87, 'w'=>104, 'h'=>296, 'head'=>[293, 87,321, 87,321,137,293,137,], 'body'=>[273,132,328,132,328,262,273,262,], 'legs'=>[273,252,278,252,323,252,328,252,361,383,264,383,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 91, 'w'=>103, 'h'=>292, 'head'=>[289, 91,316, 91,316,141,289,141,], 'body'=>[273,136,328,136,328,264,273,264,], 'legs'=>[273,254,278,254,323,254,328,254,361,383,265,383,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 92, 'w'=>102, 'h'=>292, 'head'=>[289, 92,317, 92,317,142,289,142,], 'body'=>[276,137,331,137,331,265,276,265,], 'legs'=>[276,255,281,255,326,255,331,255,360,384,265,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 92, 'w'=>102, 'h'=>292, 'head'=>[290, 92,329, 92,329,142,290,142,], 'body'=>[286,137,341,137,341,265,286,265,], 'legs'=>[286,255,291,255,336,255,341,255,361,384,267,384,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 91, 'w'=>112, 'h'=>295, 'head'=>[295, 91,336, 91,336,141,295,141,], 'body'=>[292,136,347,136,347,266,292,266,], 'legs'=>[292,256,297,256,342,256,347,256,362,386,268,386,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 89, 'w'=>121, 'h'=>294, 'head'=>[296, 89,338, 89,338,139,296,139,], 'body'=>[295,134,350,134,350,263,295,263,], 'legs'=>[295,253,300,253,345,253,350,253,361,383,268,383,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 92, 'w'=>119, 'h'=>292, 'head'=>[286, 92,329, 92,329,142,286,142,], 'body'=>[286,137,341,137,341,265,286,265,], 'legs'=>[286,255,291,255,336,255,341,255,362,384,267,384,], 'ex'=>1 },
+{ 'x'=>240, 'y'=> 91, 'w'=>123, 'h'=>290, 'head'=>[274, 91,317, 91,317,141,274,141,], 'body'=>[274,136,329,136,329,263,274,263,], 'legs'=>[274,253,279,253,324,253,329,253,359,381,265,381,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 90, 'w'=>105, 'h'=>291, 'head'=>[296, 90,327, 90,327,140,296,140,], 'body'=>[277,135,332,135,332,263,277,263,], 'legs'=>[277,253,282,253,327,253,332,253,344,381,258,381,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 92, 'w'=>104, 'h'=>291, 'head'=>[308, 92,339, 92,339,142,308,142,], 'body'=>[288,137,343,137,343,265,288,265,], 'legs'=>[288,255,293,255,338,255,343,255,356,383,270,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 96, 'w'=> 99, 'h'=>293, 'head'=>[304, 96,337, 96,337,146,304,146,], 'body'=>[283,141,338,141,338,270,283,270,], 'legs'=>[283,260,288,260,333,260,338,260,360,389,268,389,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 97, 'w'=>110, 'h'=>292, 'head'=>[309, 97,340, 97,340,147,309,147,], 'body'=>[297,142,352,142,352,270,297,270,], 'legs'=>[297,260,302,260,347,260,352,260,360,389,270,389,], 'ex'=>1 },
+{ 'x'=>269, 'y'=> 93, 'w'=>114, 'h'=>292, 'head'=>[306, 93,337, 93,337,143,306,143,], 'body'=>[298,138,353,138,353,266,298,266,], 'legs'=>[298,256,303,256,348,256,353,256,360,385,272,385,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 88, 'w'=>129, 'h'=>298, 'head'=>[292, 88,326, 88,326,138,292,138,], 'body'=>[288,133,343,133,343,264,288,264,], 'legs'=>[288,254,293,254,338,254,343,254,359,386,269,386,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 97, 'w'=>141, 'h'=>292, 'head'=>[279, 97,311, 97,311,147,279,147,], 'body'=>[276,142,331,142,331,270,276,270,], 'legs'=>[276,260,281,260,326,260,331,260,360,389,267,389,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 88, 'w'=>144, 'h'=>300, 'head'=>[265, 88,301, 88,301,138,265,138,], 'body'=>[268,133,323,133,323,265,268,265,], 'legs'=>[268,255,273,255,318,255,323,255,358,388,265,388,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 92, 'w'=>106, 'h'=>291, 'head'=>[301, 92,332, 92,332,142,301,142,], 'body'=>[283,137,338,137,338,265,283,265,], 'legs'=>[283,255,288,255,333,255,338,255,354,383,266,383,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 97, 'w'=>113, 'h'=>287, 'head'=>[296, 97,333, 97,333,147,296,147,], 'body'=>[288,142,343,142,343,268,288,268,], 'legs'=>[288,258,293,258,338,258,343,258,371,384,265,384,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 97, 'w'=>113, 'h'=>287, 'head'=>[303, 97,344, 97,344,147,303,147,], 'body'=>[304,142,359,142,359,268,304,268,], 'legs'=>[304,258,309,258,354,258,359,258,373,384,267,384,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>101, 'w'=>176, 'h'=>282, 'head'=>[333,101,381,101,381,151,333,151,], 'body'=>[311,146,366,146,366,269,311,269,], 'legs'=>[311,259,316,259,361,259,366,259,373,383,268,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>103, 'w'=>181, 'h'=>280, 'head'=>[333,103,379,103,379,153,333,153,], 'body'=>[317,148,372,148,372,270,317,270,], 'legs'=>[317,260,322,260,367,260,372,260,363,383,268,383,], 'ex'=>0, 'hit'=>[418,120,449,122,444,144,410,138,] },
+{ 'x'=>263, 'y'=> 92, 'w'=>102, 'h'=>291, 'head'=>[286, 92,319, 92,319,142,286,142,], 'body'=>[274,137,329,137,329,265,274,265,], 'legs'=>[274,255,279,255,324,255,329,255,352,383,267,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 92, 'w'=>114, 'h'=>292, 'head'=>[295, 92,330, 92,330,142,295,142,], 'body'=>[283,137,338,137,338,265,283,265,], 'legs'=>[283,255,288,255,333,255,338,255,375,384,268,384,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 92, 'w'=>114, 'h'=>288, 'head'=>[308, 92,344, 92,344,142,308,142,], 'body'=>[297,137,352,137,352,263,297,263,], 'legs'=>[297,253,302,253,347,253,352,253,376,380,269,380,], 'ex'=>1 },
+{ 'x'=>268, 'y'=> 97, 'w'=>113, 'h'=>284, 'head'=>[322, 97,358, 97,358,147,322,147,], 'body'=>[312,142,367,142,367,266,312,266,], 'legs'=>[312,256,317,256,362,256,367,256,377,381,271,381,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 99, 'w'=>166, 'h'=>280, 'head'=>[335, 99,364, 99,364,149,335,149,], 'body'=>[321,144,376,144,376,266,321,266,], 'legs'=>[321,256,326,256,371,256,376,256,375,379,273,379,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>111, 'w'=>196, 'h'=>271, 'head'=>[342,111,377,111,377,161,342,161,], 'body'=>[319,156,374,156,374,274,319,274,], 'legs'=>[319,264,324,264,369,264,374,264,377,382,273,382,], 'ex'=>0, 'hit'=>[424,152,460,152,462,177,429,166,] },
+{ 'x'=>263, 'y'=> 93, 'w'=>110, 'h'=>290, 'head'=>[291, 93,324, 93,324,143,291,143,], 'body'=>[280,138,335,138,335,265,280,265,], 'legs'=>[280,255,285,255,330,255,335,255,364,383,266,383,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 97, 'w'=>111, 'h'=>285, 'head'=>[295, 97,332, 97,332,147,295,147,], 'body'=>[293,142,348,142,348,267,293,267,], 'legs'=>[293,257,298,257,343,257,348,257,359,382,265,382,], 'ex'=>1 },
+{ 'x'=>268, 'y'=> 93, 'w'=>138, 'h'=>281, 'head'=>[310, 93,340, 93,340,143,310,143,], 'body'=>[311,138,366,138,366,261,311,261,], 'legs'=>[311,251,316,251,361,251,366,251,365,374,271,374,], 'ex'=>1 },
+{ 'x'=>307, 'y'=> 88, 'w'=> 95, 'h'=>287, 'head'=>[317, 88,345, 88,345,138,317,138,], 'body'=>[315,133,370,133,370,259,315,259,], 'legs'=>[315,249,320,249,365,249,370,249,364,375,318,375,], 'ex'=>1 },
+{ 'x'=>302, 'y'=> 89, 'w'=>134, 'h'=>287, 'head'=>[318, 89,348, 89,348,139,318,139,], 'body'=>[313,134,368,134,368,260,313,260,], 'legs'=>[313,250,318,250,363,250,368,250,360,376,335,376,], 'ex'=>1 },
+{ 'x'=>283, 'y'=> 94, 'w'=>181, 'h'=>281, 'head'=>[320, 94,353, 94,353,144,320,144,], 'body'=>[329,139,384,139,384,262,329,262,], 'legs'=>[329,252,334,252,379,252,384,252,360,375,337,375,], 'ex'=>0, 'hit'=>[458,110,485,111,477,158,449,138,] },
+{ 'x'=>281, 'y'=> 84, 'w'=>189, 'h'=>291, 'head'=>[334, 97,359, 97,359,147,334,147,], 'body'=>[324,129,379,129,379,257,324,257,], 'legs'=>[324,247,329,247,374,247,379,247,362,375,337,375,], 'ex'=>0, 'hit'=>[453, 82,477, 88,450,154,410,134,] },
+{ 'x'=>263, 'y'=> 92, 'w'=>116, 'h'=>291, 'head'=>[302, 92,336, 92,336,142,302,142,], 'body'=>[282,137,337,137,337,265,282,265,], 'legs'=>[282,255,287,255,332,255,337,255,370,383,266,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 90, 'w'=>116, 'h'=>293, 'head'=>[307, 90,344, 90,344,140,307,140,], 'body'=>[298,135,353,135,353,264,298,264,], 'legs'=>[298,254,303,254,348,254,353,254,380,383,268,383,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 95, 'w'=>121, 'h'=>284, 'head'=>[321, 95,352, 95,352,145,321,145,], 'body'=>[320,140,375,140,375,264,320,264,], 'legs'=>[320,254,325,254,370,254,375,254,378,379,273,379,], 'ex'=>1 },
+{ 'x'=>307, 'y'=> 95, 'w'=> 98, 'h'=>277, 'head'=>[330, 95,359, 95,359,145,330,145,], 'body'=>[324,140,379,140,379,261,324,261,], 'legs'=>[324,251,329,251,374,251,379,251,379,372,310,372,], 'ex'=>1 },
+{ 'x'=>303, 'y'=> 95, 'w'=>124, 'h'=>284, 'head'=>[333, 95,361, 95,361,145,333,145,], 'body'=>[319,140,374,140,374,264,319,264,], 'legs'=>[319,254,324,254,369,254,374,254,426,379,353,379,], 'ex'=>1 },
+{ 'x'=>301, 'y'=> 99, 'w'=>208, 'h'=>276, 'head'=>[335, 99,365, 99,365,149,335,149,], 'body'=>[323,144,378,144,378,264,323,264,], 'legs'=>[323,254,328,254,373,254,378,254,388,375,353,375,], 'ex'=>0, 'hit'=>[451,255,513,262,483,287,438,268,] },
+{ 'x'=>263, 'y'=> 92, 'w'=>100, 'h'=>291, 'head'=>[306, 92,337, 92,337,142,306,142,], 'body'=>[283,137,338,137,338,265,283,265,], 'legs'=>[283,255,288,255,333,255,338,255,362,383,266,383,], 'ex'=>1 },
+{ 'x'=>272, 'y'=>103, 'w'=>103, 'h'=>280, 'head'=>[328,103,358,103,358,153,328,153,], 'body'=>[302,148,357,148,357,270,302,270,], 'legs'=>[302,260,307,260,352,260,357,260,370,383,275,383,], 'ex'=>1 },
+{ 'x'=>276, 'y'=>146, 'w'=>150, 'h'=>242, 'head'=>[339,146,369,146,369,196,339,196,], 'body'=>[312,191,367,191,367,294,312,294,], 'legs'=>[312,284,317,284,362,284,367,284,374,388,342,388,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>176, 'w'=>174, 'h'=>224, 'head'=>[339,176,372,176,372,226,339,226,], 'body'=>[315,221,370,221,370,315,315,315,], 'legs'=>[315,305,320,305,365,305,370,305,381,400,344,400,], 'ex'=>1 },
+{ 'x'=>266, 'y'=>203, 'w'=>196, 'h'=>196, 'head'=>[338,203,373,203,373,253,338,253,], 'body'=>[318,248,373,248,373,328,318,328,], 'legs'=>[318,318,323,318,368,318,373,318,384,399,269,399,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>241, 'w'=>212, 'h'=>161, 'head'=>[319,241,387,241,387,291,319,291,], 'body'=>[320,286,375,286,375,349,320,349,], 'legs'=>[320,339,325,339,370,339,375,339,388,402,267,402,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>239, 'w'=>200, 'h'=>165, 'head'=>[336,239,401,239,401,289,336,289,], 'body'=>[313,284,368,284,368,349,313,349,], 'legs'=>[313,339,318,339,363,339,368,339,390,404,267,404,], 'ex'=>1 },
+{ 'x'=>257, 'y'=>230, 'w'=>257, 'h'=>174, 'head'=>[331,230,391,230,391,280,331,280,], 'body'=>[297,275,352,275,352,344,297,344,], 'legs'=>[297,334,302,334,347,334,352,334,388,404,267,404,], 'ex'=>0, 'hit'=>[465,329,512,349,505,375,454,351,] },
+{ 'x'=>263, 'y'=> 91, 'w'=>118, 'h'=>292, 'head'=>[302, 91,333, 91,333,141,302,141,], 'body'=>[283,136,338,136,338,264,283,264,], 'legs'=>[283,254,288,254,333,254,338,254,354,383,266,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 91, 'w'=>150, 'h'=>290, 'head'=>[318, 91,355, 91,355,141,318,141,], 'body'=>[313,136,368,136,368,263,313,263,], 'legs'=>[313,253,318,253,363,253,368,253,411,381,268,381,], 'ex'=>1 },
+{ 'x'=>269, 'y'=>102, 'w'=>148, 'h'=>280, 'head'=>[344,102,374,102,374,152,344,152,], 'body'=>[336,147,391,147,391,269,336,269,], 'legs'=>[336,259,341,259,386,259,391,259,413,382,272,382,], 'ex'=>1 },
+{ 'x'=>299, 'y'=> 95, 'w'=>118, 'h'=>284, 'head'=>[352, 95,380, 95,380,145,352,145,], 'body'=>[349,140,404,140,404,264,349,264,], 'legs'=>[349,254,354,254,399,254,404,254,412,379,302,379,], 'ex'=>1 },
+{ 'x'=>333, 'y'=> 92, 'w'=>118, 'h'=>287, 'head'=>[356, 92,388, 92,388,142,356,142,], 'body'=>[346,137,401,137,401,263,346,263,], 'legs'=>[346,253,351,253,396,253,401,253,412,379,363,379,], 'ex'=>1 },
+{ 'x'=>320, 'y'=> 91, 'w'=>159, 'h'=>288, 'head'=>[356, 91,390, 91,390,141,356,141,], 'body'=>[353,136,408,136,408,262,353,262,], 'legs'=>[353,252,358,252,403,252,408,252,463,379,378,379,], 'ex'=>1 },
+{ 'x'=>297, 'y'=> 97, 'w'=>234, 'h'=>281, 'head'=>[357, 97,393, 97,393,147,357,147,], 'body'=>[355,142,410,142,410,265,355,265,], 'legs'=>[355,255,360,255,405,255,410,255,413,378,379,378,], 'ex'=>0, 'hit'=>[468,232,526,210,525,239,479,250,] },
+{ 'x'=>255, 'y'=> 87, 'w'=>127, 'h'=>288, 'head'=>[310, 87,344, 87,344,137,310,137,], 'body'=>[295,132,350,132,350,258,295,258,], 'legs'=>[295,248,300,248,345,248,350,248,368,375,258,375,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 87, 'w'=>120, 'h'=>291, 'head'=>[288, 87,319, 87,319,137,288,137,], 'body'=>[279,132,334,132,334,260,279,260,], 'legs'=>[279,250,284,250,329,250,334,250,365,378,257,378,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 94, 'w'=>121, 'h'=>281, 'head'=>[275, 94,308, 94,308,144,275,144,], 'body'=>[279,139,334,139,334,262,279,262,], 'legs'=>[279,252,284,252,329,252,334,252,355,375,258,375,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 94, 'w'=>125, 'h'=>289, 'head'=>[313, 94,346, 94,346,144,313,144,], 'body'=>[290,139,345,139,345,266,290,266,], 'legs'=>[290,256,295,256,340,256,345,256,362,383,266,383,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 95, 'w'=>143, 'h'=>287, 'head'=>[323, 95,358, 95,358,145,323,145,], 'body'=>[311,140,366,140,366,266,311,266,], 'legs'=>[311,256,316,256,361,256,366,256,402,382,266,382,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>101, 'w'=>153, 'h'=>280, 'head'=>[342,101,372,101,372,151,342,151,], 'body'=>[338,146,393,146,393,268,338,268,], 'legs'=>[338,258,343,258,388,258,393,258,403,381,273,381,], 'ex'=>1 },
+{ 'x'=>311, 'y'=> 93, 'w'=>123, 'h'=>284, 'head'=>[352, 93,380, 93,380,143,352,143,], 'body'=>[350,138,405,138,405,262,350,262,], 'legs'=>[350,252,355,252,400,252,405,252,406,377,314,377,], 'ex'=>1 },
+{ 'x'=>337, 'y'=> 90, 'w'=>112, 'h'=>287, 'head'=>[353, 90,385, 90,385,140,353,140,], 'body'=>[350,135,405,135,405,261,350,261,], 'legs'=>[350,251,355,251,400,251,405,251,417,377,377,377,], 'ex'=>1 },
+{ 'x'=>316, 'y'=> 93, 'w'=>192, 'h'=>286, 'head'=>[353, 93,388, 93,388,143,353,143,], 'body'=>[357,138,412,138,412,263,357,263,], 'legs'=>[357,253,362,253,407,253,412,253,401,379,373,379,], 'ex'=>0, 'hit'=>[430,180,454,176,506,233,464,240,] },
+{ 'x'=>306, 'y'=> 99, 'w'=>203, 'h'=>281, 'head'=>[356, 99,390, 99,390,149,356,149,], 'body'=>[360,144,415,144,415,267,360,267,], 'legs'=>[360,257,365,257,410,257,415,257,401,380,377,380,], 'ex'=>0, 'hit'=>[415,167,435,152,481,171,462,200,] },
+{ 'x'=>258, 'y'=> 94, 'w'=>113, 'h'=>293, 'head'=>[289, 94,324, 94,324,144,289,144,], 'body'=>[274,139,329,139,329,268,274,268,], 'legs'=>[274,258,279,258,324,258,329,258,343,387,264,387,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 90, 'w'=>119, 'h'=>294, 'head'=>[297, 90,331, 90,331,140,297,140,], 'body'=>[285,135,340,135,340,264,285,264,], 'legs'=>[285,254,290,254,335,254,340,254,378,384,266,384,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>103, 'w'=>124, 'h'=>281, 'head'=>[313,103,350,103,350,153,313,153,], 'body'=>[303,148,358,148,358,271,303,271,], 'legs'=>[303,261,308,261,353,261,358,261,385,384,268,384,], 'ex'=>1 },
+{ 'x'=>267, 'y'=>100, 'w'=>122, 'h'=>285, 'head'=>[328,100,361,100,361,150,328,150,], 'body'=>[323,145,378,145,378,270,323,270,], 'legs'=>[323,260,328,260,373,260,378,260,385,385,270,385,], 'ex'=>1 },
+{ 'x'=>268, 'y'=> 94, 'w'=>151, 'h'=>283, 'head'=>[337, 94,379, 94,379,144,337,144,], 'body'=>[331,139,386,139,386,263,331,263,], 'legs'=>[331,253,336,253,381,253,386,253,384,377,271,377,], 'ex'=>1 },
+{ 'x'=>277, 'y'=> 96, 'w'=>164, 'h'=>289, 'head'=>[344, 96,393, 96,393,146,344,146,], 'body'=>[338,141,393,141,393,268,338,268,], 'legs'=>[338,258,343,258,388,258,393,258,385,385,280,385,], 'ex'=>0, 'hit'=>[407,121,442,118,439,131,405,140,] },
+{ 'x'=>263, 'y'=> 66, 'w'=>119, 'h'=>317, 'head'=>[290, 66,322, 66,322,116,290,116,], 'body'=>[274,111,329,111,329,252,274,252,], 'legs'=>[274,242,279,242,324,242,329,242,367,383,266,383,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 63, 'w'=>123, 'h'=>322, 'head'=>[286, 63,320, 63,320,113,286,113,], 'body'=>[271,108,326,108,326,251,271,251,], 'legs'=>[271,241,276,241,321,241,326,241,349,385,266,385,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 70, 'w'=>143, 'h'=>317, 'head'=>[283, 70,327, 70,327,120,283,120,], 'body'=>[295,115,350,115,350,256,295,256,], 'legs'=>[295,246,300,246,345,246,350,246,353,387,265,387,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 76, 'w'=>153, 'h'=>311, 'head'=>[287, 76,330, 76,330,126,287,126,], 'body'=>[304,121,359,121,359,259,304,259,], 'legs'=>[304,249,309,249,354,249,359,249,354,387,314,387,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 40, 'w'=>214, 'h'=>346, 'head'=>[338, 40,362, 40,362, 90,338, 90,], 'body'=>[306, 85,361, 85,361,240,306,240,], 'legs'=>[306,230,311,230,356,230,361,230,401,386,325,386,], 'ex'=>1 },
+{ 'x'=>247, 'y'=> 68, 'w'=>226, 'h'=>325, 'head'=>[291, 61,351, 61,351,111,291,111,], 'body'=>[321,106,376,106,376,251,321,251,], 'legs'=>[321,241,326,241,371,241,376,241,405,386,322,386,], 'ex'=>0, 'hit'=>[409,135,475,110,459,173,420,165,] },
+{ 'x'=>281, 'y'=> 70, 'w'=>157, 'h'=>317, 'head'=>[313, 70,372, 70,372,120,313,120,], 'body'=>[332,115,387,115,387,256,332,256,], 'legs'=>[332,246,337,246,382,246,387,246,400,387,320,387,], 'ex'=>1 },
+{ 'x'=>312, 'y'=> 71, 'w'=>129, 'h'=>306, 'head'=>[370, 71,408, 71,408,121,370,121,], 'body'=>[355,116,410,116,410,251,355,251,], 'legs'=>[355,241,360,241,405,241,410,241,413,377,315,377,], 'ex'=>1 },
+{ 'x'=>344, 'y'=> 67, 'w'=> 84, 'h'=>312, 'head'=>[375, 67,408, 67,408,117,375,117,], 'body'=>[361,112,416,112,416,250,361,250,], 'legs'=>[361,240,366,240,411,240,416,240,413,379,347,379,], 'ex'=>1 },
+{ 'x'=>318, 'y'=> 71, 'w'=>109, 'h'=>301, 'head'=>[357, 71,388, 71,388,121,357,121,], 'body'=>[333,116,388,116,388,249,333,249,], 'legs'=>[333,239,338,239,383,239,388,239,382,372,352,372,], 'ex'=>1 },
+{ 'x'=>303, 'y'=> 70, 'w'=>119, 'h'=>303, 'head'=>[340, 70,372, 70,372,120,340,120,], 'body'=>[324,115,379,115,379,249,324,249,], 'legs'=>[324,239,329,239,374,239,379,239,378,373,306,373,], 'ex'=>1 },
+{ 'x'=>246, 'y'=> 81, 'w'=>123, 'h'=>303, 'head'=>[288, 81,325, 81,325,131,288,131,], 'body'=>[268,126,323,126,323,260,268,260,], 'legs'=>[268,250,273,250,318,250,323,250,364,384,262,384,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 83, 'w'=>114, 'h'=>300, 'head'=>[296, 83,331, 83,331,133,296,133,], 'body'=>[277,128,332,128,332,260,277,260,], 'legs'=>[277,250,282,250,327,250,332,250,366,383,264,383,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 87, 'w'=>115, 'h'=>294, 'head'=>[293, 87,326, 87,326,137,293,137,], 'body'=>[275,132,330,132,330,261,275,261,], 'legs'=>[275,251,280,251,325,251,330,251,368,381,266,381,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 97, 'w'=>113, 'h'=>285, 'head'=>[283, 97,318, 97,318,147,283,147,], 'body'=>[272,142,327,142,327,267,272,267,], 'legs'=>[272,257,277,257,322,257,327,257,369,382,266,382,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 91, 'w'=>138, 'h'=>291, 'head'=>[285, 91,322, 91,322,141,285,141,], 'body'=>[288,136,343,136,343,264,288,264,], 'legs'=>[288,254,293,254,338,254,343,254,371,382,268,382,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 87, 'w'=>174, 'h'=>292, 'head'=>[289, 87,326, 87,326,137,289,137,], 'body'=>[295,132,350,132,350,260,295,260,], 'legs'=>[295,250,300,250,345,250,350,250,372,379,269,379,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 87, 'w'=>179, 'h'=>295, 'head'=>[292, 87,328, 87,328,137,292,137,], 'body'=>[289,132,344,132,344,262,289,262,], 'legs'=>[289,252,294,252,339,252,344,252,371,382,268,382,], 'ex'=>0, 'hit'=>[423,162,433,162,439,178,423,172,] },
+{ 'x'=>265, 'y'=> 76, 'w'=>160, 'h'=>304, 'head'=>[283, 76,318, 76,318,126,283,126,], 'body'=>[278,121,333,121,333,255,278,255,], 'legs'=>[278,245,283,245,328,245,333,245,373,380,268,380,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 76, 'w'=>135, 'h'=>305, 'head'=>[268, 76,301, 76,301,126,268,126,], 'body'=>[265,121,320,121,320,256,265,256,], 'legs'=>[265,246,270,246,315,246,320,246,374,381,269,381,], 'ex'=>1 },
+{ 'x'=>246, 'y'=> 77, 'w'=>128, 'h'=>304, 'head'=>[270, 77,307, 77,307,127,270,127,], 'body'=>[259,122,314,122,314,256,259,256,], 'legs'=>[259,246,264,246,309,246,314,246,370,381,268,381,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 83, 'w'=>104, 'h'=>300, 'head'=>[288, 83,322, 83,322,133,288,133,], 'body'=>[271,128,326,128,326,260,271,260,], 'legs'=>[271,250,276,250,321,250,326,250,356,383,267,383,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 79, 'w'=>129, 'h'=>305, 'head'=>[288, 79,322, 79,322,129,288,129,], 'body'=>[273,124,328,124,328,259,273,259,], 'legs'=>[273,249,278,249,323,249,328,249,367,384,267,384,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 92, 'w'=>145, 'h'=>291, 'head'=>[296, 92,334, 92,334,142,296,142,], 'body'=>[284,137,339,137,339,265,284,265,], 'legs'=>[284,255,289,255,334,255,339,255,383,383,269,383,], 'ex'=>1 },
+{ 'x'=>258, 'y'=>109, 'w'=>131, 'h'=>276, 'head'=>[304,109,342,109,342,159,304,159,], 'body'=>[294,154,349,154,349,274,294,274,], 'legs'=>[294,264,299,264,344,264,349,264,385,385,270,385,], 'ex'=>1 },
+{ 'x'=>267, 'y'=>113, 'w'=>136, 'h'=>274, 'head'=>[314,113,348,113,348,163,314,163,], 'body'=>[311,158,366,158,366,277,311,277,], 'legs'=>[311,267,316,267,361,267,366,267,385,387,270,387,], 'ex'=>1 },
+{ 'x'=>269, 'y'=>102, 'w'=>162, 'h'=>282, 'head'=>[315,102,350,102,350,152,315,152,], 'body'=>[314,147,369,147,369,270,314,270,], 'legs'=>[314,260,319,260,364,260,369,260,385,384,272,384,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 68, 'w'=>154, 'h'=>313, 'head'=>[349, 68,377, 68,377,118,349,118,], 'body'=>[326,113,381,113,381,252,326,252,], 'legs'=>[326,242,331,242,376,242,381,242,387,381,278,381,], 'ex'=>0, 'hit'=>[407, 77,431, 73,430,129,398,130,] },
+{ 'x'=>274, 'y'=> 37, 'w'=>138, 'h'=>349, 'head'=>[334, 87,366, 86,370,138,334,137,], 'body'=>[324,145,375,138,381,239,326,239,], 'legs'=>[326,229,331,229,376,229,381,229,386,386,277,386,], 'ex'=>0, 'hit'=>[385, 42,395, 42,441,119,386,100,] },
+{ 'x'=>263, 'y'=> 81, 'w'=>106, 'h'=>303, 'head'=>[295, 81,327, 81,327,131,295,131,], 'body'=>[275,126,330,126,330,260,275,260,], 'legs'=>[275,250,280,250,325,250,330,250,365,384,266,384,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 77, 'w'=>127, 'h'=>308, 'head'=>[305, 77,340, 77,340,127,305,127,], 'body'=>[288,122,343,122,343,258,288,258,], 'legs'=>[288,248,293,248,338,248,343,248,375,385,267,385,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 83, 'w'=>126, 'h'=>302, 'head'=>[326, 83,360, 83,360,133,326,133,], 'body'=>[313,128,368,128,368,261,313,261,], 'legs'=>[313,251,318,251,363,251,368,251,375,385,269,385,], 'ex'=>1 },
+{ 'x'=>327, 'y'=> 89, 'w'=> 87, 'h'=>295, 'head'=>[357, 89,390, 89,390,139,357,139,], 'body'=>[339,134,394,134,394,264,339,264,], 'legs'=>[339,254,344,254,389,254,394,254,393,384,341,384,], 'ex'=>1 },
+{ 'x'=>334, 'y'=> 88, 'w'=>126, 'h'=>299, 'head'=>[383, 88,415, 88,415,138,383,138,], 'body'=>[355,133,410,133,410,265,355,265,], 'legs'=>[355,255,360,255,405,255,410,255,441,387,344,387,], 'ex'=>1 },
+{ 'x'=>335, 'y'=>110, 'w'=>142, 'h'=>280, 'head'=>[393,110,430,110,430,160,393,160,], 'body'=>[367,155,422,155,422,277,367,277,], 'legs'=>[367,267,372,267,417,267,422,267,447,390,346,390,], 'ex'=>1 },
+{ 'x'=>323, 'y'=>109, 'w'=>165, 'h'=>281, 'head'=>[390,109,427,109,427,159,390,159,], 'body'=>[364,154,419,154,419,277,364,277,], 'legs'=>[364,267,369,267,414,267,419,267,444,390,326,390,], 'ex'=>1 },
+{ 'x'=>316, 'y'=> 96, 'w'=>186, 'h'=>294, 'head'=>[378, 96,420, 96,420,146,378,146,], 'body'=>[362,141,417,141,417,270,362,270,], 'legs'=>[362,260,367,260,412,260,417,260,501,390,319,390,], 'ex'=>1 },
+{ 'x'=>312, 'y'=> 80, 'w'=>141, 'h'=>310, 'head'=>[360, 80,402, 80,402,130,360,130,], 'body'=>[350,125,405,125,405,262,350,262,], 'legs'=>[350,252,355,252,400,252,405,252,441,390,319,390,], 'ex'=>1 },
+{ 'x'=>307, 'y'=> 70, 'w'=>138, 'h'=>318, 'head'=>[329, 70,373, 70,373,120,329,120,], 'body'=>[344,115,399,115,399,256,344,256,], 'legs'=>[344,246,349,246,394,246,399,246,441,388,320,388,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 77, 'w'=>180, 'h'=>311, 'head'=>[326, 77,362, 77,362,127,326,127,], 'body'=>[327,122,382,122,382,260,327,260,], 'legs'=>[327,250,332,250,377,250,382,250,440,388,320,388,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 79, 'w'=>171, 'h'=>312, 'head'=>[308, 79,345, 79,345,129,308,129,], 'body'=>[318,124,373,124,373,262,318,262,], 'legs'=>[318,252,323,252,368,252,373,252,426,391,320,391,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 65, 'w'=>119, 'h'=>323, 'head'=>[303, 65,339, 65,339,115,303,115,], 'body'=>[307,110,362,110,362,254,307,254,], 'legs'=>[307,244,312,244,357,244,362,244,368,388,319,388,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 62, 'w'=>113, 'h'=>326, 'head'=>[301, 62,337, 62,337,112,301,112,], 'body'=>[300,107,355,107,355,252,300,252,], 'legs'=>[300,242,305,242,350,242,355,242,354,388,296,388,], 'ex'=>1 },
+{ 'x'=>239, 'y'=> 61, 'w'=>118, 'h'=>327, 'head'=>[290, 61,326, 61,326,111,290,111,], 'body'=>[279,106,334,106,334,252,279,252,], 'legs'=>[279,242,284,242,329,242,334,242,353,388,242,388,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 86, 'w'=>106, 'h'=>297, 'head'=>[292, 86,326, 86,326,136,292,136,], 'body'=>[275,131,330,131,330,262,275,262,], 'legs'=>[275,252,280,252,325,252,330,252,359,383,260,383,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 82, 'w'=>108, 'h'=>302, 'head'=>[272, 82,314, 82,314,132,272,132,], 'body'=>[270,127,325,127,325,260,270,260,], 'legs'=>[270,250,275,250,320,250,325,250,358,384,258,384,], 'ex'=>1 },
+{ 'x'=>249, 'y'=> 88, 'w'=>114, 'h'=>297, 'head'=>[256, 88,304, 88,304,138,256,138,], 'body'=>[266,133,321,133,321,264,266,264,], 'legs'=>[266,254,271,254,316,254,321,254,359,385,260,385,], 'ex'=>1 },
+{ 'x'=>231, 'y'=> 92, 'w'=>131, 'h'=>294, 'head'=>[247, 92,286, 92,286,142,247,142,], 'body'=>[256,137,311,137,311,266,256,266,], 'legs'=>[256,256,261,256,306,256,311,256,358,386,259,386,], 'ex'=>1 },
+{ 'x'=>213, 'y'=>102, 'w'=>150, 'h'=>284, 'head'=>[228,102,285,102,285,152,228,152,], 'body'=>[250,147,305,147,305,271,250,271,], 'legs'=>[250,261,255,261,300,261,305,261,359,386,257,386,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 93, 'w'=>137, 'h'=>290, 'head'=>[249, 93,293, 93,293,143,249,143,], 'body'=>[252,138,307,138,307,265,252,265,], 'legs'=>[252,255,257,255,302,255,307,255,359,383,257,383,], 'ex'=>1 },
+{ 'x'=>241, 'y'=> 88, 'w'=>123, 'h'=>298, 'head'=>[266, 88,309, 88,309,138,266,138,], 'body'=>[263,133,318,133,318,264,263,264,], 'legs'=>[263,254,268,254,313,254,318,254,360,386,258,386,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 88, 'w'=>108, 'h'=>296, 'head'=>[289, 88,328, 88,328,138,289,138,], 'body'=>[279,133,334,133,334,263,279,263,], 'legs'=>[279,253,284,253,329,253,334,253,359,384,258,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 80, 'w'=>102, 'h'=>303, 'head'=>[291, 80,327, 80,327,130,291,130,], 'body'=>[276,125,331,125,331,259,276,259,], 'legs'=>[276,249,281,249,326,249,331,249,361,383,266,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 96, 'w'=>103, 'h'=>288, 'head'=>[294, 96,341, 96,341,146,294,146,], 'body'=>[276,141,331,141,331,267,276,267,], 'legs'=>[276,257,281,257,326,257,331,257,363,384,268,384,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>118, 'w'=>107, 'h'=>265, 'head'=>[301,118,354,118,354,168,301,168,], 'body'=>[274,163,329,163,329,278,274,278,], 'legs'=>[274,268,279,268,324,268,329,268,364,383,271,383,], 'ex'=>1 },
+{ 'x'=>258, 'y'=>135, 'w'=>119, 'h'=>251, 'head'=>[311,135,357,135,357,185,311,185,], 'body'=>[269,180,324,180,324,288,269,288,], 'legs'=>[269,278,274,278,319,278,324,278,363,386,271,386,], 'ex'=>1 },
+{ 'x'=>252, 'y'=>142, 'w'=>123, 'h'=>245, 'head'=>[306,142,349,142,349,192,306,192,], 'body'=>[262,187,317,187,317,292,262,292,], 'legs'=>[262,282,267,282,312,282,317,282,362,387,271,387,], 'ex'=>1 },
+{ 'x'=>250, 'y'=>133, 'w'=>125, 'h'=>251, 'head'=>[303,133,344,133,344,183,303,183,], 'body'=>[261,178,316,178,316,286,261,286,], 'legs'=>[261,276,266,276,311,276,316,276,361,384,270,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 82, 'w'=>109, 'h'=>306, 'head'=>[300, 82,332, 82,332,132,300,132,], 'body'=>[292,127,347,127,347,262,292,262,], 'legs'=>[292,252,297,252,342,252,347,252,352,388,266,388,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 75, 'w'=>122, 'h'=>307, 'head'=>[306, 75,336, 75,336,125,306,125,], 'body'=>[294,120,349,120,349,256,294,256,], 'legs'=>[294,246,299,246,344,246,349,246,354,382,260,382,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 75, 'w'=>109, 'h'=>303, 'head'=>[297, 75,326, 75,326,125,297,125,], 'body'=>[282,120,337,120,337,254,282,254,], 'legs'=>[282,244,287,244,332,244,337,244,354,378,259,378,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 75, 'w'=>102, 'h'=>303, 'head'=>[284, 75,314, 75,314,125,284,125,], 'body'=>[270,120,325,120,325,254,270,254,], 'legs'=>[270,244,275,244,320,244,325,244,355,378,260,378,], 'ex'=>1 },
+{ 'x'=>254, 'y'=> 74, 'w'=>107, 'h'=>303, 'head'=>[272, 74,301, 74,301,124,272,124,], 'body'=>[262,119,317,119,317,253,262,253,], 'legs'=>[262,243,267,243,312,243,317,243,357,377,262,377,], 'ex'=>1 },
+{ 'x'=>235, 'y'=> 77, 'w'=>128, 'h'=>302, 'head'=>[259, 77,294, 77,294,127,259,127,], 'body'=>[255,122,310,122,310,255,255,255,], 'legs'=>[255,245,260,245,305,245,310,245,358,379,261,379,], 'ex'=>1 },
+{ 'x'=>244, 'y'=> 75, 'w'=>117, 'h'=>304, 'head'=>[269, 75,304, 75,304,125,269,125,], 'body'=>[261,120,316,120,316,254,261,254,], 'legs'=>[261,244,266,244,311,244,316,244,357,379,263,379,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 74, 'w'=>103, 'h'=>306, 'head'=>[278, 74,311, 74,311,124,278,124,], 'body'=>[266,119,321,119,321,254,266,254,], 'legs'=>[266,244,271,244,316,244,321,244,356,380,263,380,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 73, 'w'=>107, 'h'=>304, 'head'=>[295, 73,326, 73,326,123,295,123,], 'body'=>[280,118,335,118,335,252,280,252,], 'legs'=>[280,242,285,242,330,242,335,242,358,377,263,377,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 76, 'w'=>130, 'h'=>302, 'head'=>[310, 76,342, 76,342,126,310,126,], 'body'=>[295,121,350,121,350,254,295,254,], 'legs'=>[295,244,300,244,345,244,350,244,367,378,263,378,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 75, 'w'=>127, 'h'=>302, 'head'=>[318, 75,349, 75,349,125,318,125,], 'body'=>[302,120,357,120,357,253,302,253,], 'legs'=>[302,243,307,243,352,243,357,243,358,377,269,377,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 76, 'w'=>129, 'h'=>302, 'head'=>[317, 76,349, 76,349,126,317,126,], 'body'=>[305,121,360,121,360,254,305,254,], 'legs'=>[305,244,310,244,355,244,360,244,357,378,273,378,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 76, 'w'=> 97, 'h'=>308, 'head'=>[307, 76,337, 76,337,126,307,126,], 'body'=>[290,121,345,121,345,257,290,257,], 'legs'=>[290,247,295,247,340,247,345,247,358,384,268,384,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 76, 'w'=>101, 'h'=>308, 'head'=>[293, 76,324, 76,324,126,293,126,], 'body'=>[274,121,329,121,329,257,274,257,], 'legs'=>[274,247,279,247,324,247,329,247,361,384,268,384,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>182, 'w'=>110, 'h'=>201, 'head'=>[297,182,334,182,334,232,297,232,], 'body'=>[275,227,330,227,330,310,275,310,], 'legs'=>[275,300,280,300,325,300,330,300,369,383,266,383,], 'ex'=>1 },
+{ 'x'=>260, 'y'=>172, 'w'=>113, 'h'=>209, 'head'=>[280,172,324,172,324,222,280,222,], 'body'=>[270,217,325,217,325,304,270,304,], 'legs'=>[270,294,275,294,320,294,325,294,369,381,266,381,], 'ex'=>1 },
+{ 'x'=>247, 'y'=>170, 'w'=>125, 'h'=>211, 'head'=>[260,170,308,170,308,220,260,220,], 'body'=>[261,215,316,215,316,303,261,303,], 'legs'=>[261,293,266,293,311,293,316,293,368,381,266,381,], 'ex'=>1 },
+{ 'x'=>238, 'y'=>164, 'w'=>135, 'h'=>217, 'head'=>[246,164,282,164,282,214,246,214,], 'body'=>[254,209,309,209,309,300,254,300,], 'legs'=>[254,290,259,290,304,290,309,290,369,381,267,381,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>187, 'w'=>154, 'h'=>196, 'head'=>[225,187,279,187,279,237,225,237,], 'body'=>[249,232,304,232,304,312,249,312,], 'legs'=>[249,302,254,302,299,302,304,302,369,383,266,383,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>192, 'w'=>132, 'h'=>191, 'head'=>[257,192,304,192,304,242,257,242,], 'body'=>[255,237,310,237,310,315,255,315,], 'legs'=>[255,305,260,305,305,305,310,305,370,383,267,383,], 'ex'=>1 },
+{ 'x'=>257, 'y'=>187, 'w'=>124, 'h'=>196, 'head'=>[275,187,317,187,317,237,275,237,], 'body'=>[266,232,321,232,321,312,266,312,], 'legs'=>[266,302,271,302,316,302,321,302,370,383,268,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>184, 'w'=>130, 'h'=>197, 'head'=>[295,184,332,184,332,234,295,234,], 'body'=>[281,229,336,229,336,310,281,310,], 'legs'=>[281,300,286,300,331,300,336,300,371,381,268,381,], 'ex'=>1 },
+{ 'x'=>248, 'y'=>191, 'w'=>134, 'h'=>192, 'head'=>[291,191,325,191,325,241,291,241,], 'body'=>[263,236,318,236,318,314,263,314,], 'legs'=>[263,304,268,304,313,304,318,304,377,383,258,383,], 'ex'=>1 },
+{ 'x'=>230, 'y'=>180, 'w'=>139, 'h'=>203, 'head'=>[276,180,311,180,311,230,276,230,], 'body'=>[256,225,311,225,311,309,256,309,], 'legs'=>[256,299,261,299,306,299,311,299,361,383,236,383,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>176, 'w'=>163, 'h'=>202, 'head'=>[254,176,293,176,293,226,254,226,], 'body'=>[248,221,303,221,303,304,248,304,], 'legs'=>[248,294,253,294,298,294,303,294,367,378,212,378,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>184, 'w'=>181, 'h'=>193, 'head'=>[239,184,278,184,278,234,239,234,], 'body'=>[239,229,294,229,294,308,239,308,], 'legs'=>[239,298,244,298,289,298,294,298,369,377,195,377,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>209, 'w'=>176, 'h'=>169, 'head'=>[224,209,276,209,276,259,224,259,], 'body'=>[230,254,285,254,285,321,230,321,], 'legs'=>[230,311,235,311,280,311,285,311,360,378,188,378,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>234, 'w'=>186, 'h'=>146, 'head'=>[203,234,280,234,280,284,203,284,], 'body'=>[218,279,273,279,273,334,218,334,], 'legs'=>[218,324,223,324,268,324,273,324,367,380,188,380,], 'ex'=>1 },
+{ 'x'=>253, 'y'=> 79, 'w'=>133, 'h'=>304, 'head'=>[301, 79,338, 79,338,129,301,129,], 'body'=>[278,124,333,124,333,258,278,258,], 'legs'=>[278,248,283,248,328,248,333,248,362,383,266,383,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 76, 'w'=>113, 'h'=>308, 'head'=>[305, 76,348, 76,348,126,305,126,], 'body'=>[289,121,344,121,344,257,289,257,], 'legs'=>[289,247,294,247,339,247,344,247,358,384,266,384,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 63, 'w'=>116, 'h'=>320, 'head'=>[313, 63,347, 63,347,113,313,113,], 'body'=>[305,108,360,108,360,250,305,250,], 'legs'=>[305,240,310,240,355,240,360,240,360,383,267,383,], 'ex'=>1 },
+{ 'x'=>265, 'y'=> 61, 'w'=>149, 'h'=>323, 'head'=>[352, 61,393, 61,393,111,352,111,], 'body'=>[317,106,372,106,372,250,317,250,], 'legs'=>[317,240,322,240,367,240,372,240,360,384,268,384,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 73, 'w'=>212, 'h'=>311, 'head'=>[355, 73,387, 73,387,123,355,123,], 'body'=>[325,118,380,118,380,256,325,256,], 'legs'=>[325,246,330,246,375,246,380,246,359,384,270,384,], 'ex'=>1 },
+{ 'x'=>269, 'y'=> 59, 'w'=>174, 'h'=>325, 'head'=>[370, 59,396, 59,396,109,370,109,], 'body'=>[334,104,389,104,389,249,334,249,], 'legs'=>[334,239,339,239,384,239,389,239,360,384,272,384,], 'ex'=>1 },
+{ 'x'=>269, 'y'=> 53, 'w'=>198, 'h'=>330, 'head'=>[420, 53,437, 53,437,103,420,103,], 'body'=>[346, 98,401, 98,401,245,346,245,], 'legs'=>[346,235,351,235,396,235,401,235,360,383,272,383,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 90, 'w'=>255, 'h'=>292, 'head'=>[390, 90,430, 90,430,140,390,140,], 'body'=>[333,135,388,135,388,263,333,263,], 'legs'=>[333,253,338,253,383,253,388,253,360,382,270,382,], 'ex'=>1 },
+{ 'x'=>272, 'y'=> 35, 'w'=>208, 'h'=>345, 'head'=>[346, 35,362, 35,362, 85,346, 85,], 'body'=>[354, 80,409, 80,409,235,354,235,], 'legs'=>[354,225,359,225,404,225,409,225,360,380,275,380,], 'ex'=>1 },
+{ 'x'=>268, 'y'=> 38, 'w'=>217, 'h'=>341, 'head'=>[416, 38,442, 38,442, 88,416, 88,], 'body'=>[379, 83,434, 83,434,236,379,236,], 'legs'=>[379,226,384,226,429,226,434,226,366,379,271,379,], 'ex'=>1 },
+{ 'x'=>260, 'y'=>117, 'w'=>288, 'h'=>250, 'head'=>[441,117,499,117,499,167,441,167,], 'body'=>[343,162,398,162,398,269,343,269,], 'legs'=>[343,259,348,259,393,259,398,259,363,367,263,367,], 'ex'=>1 },
+{ 'x'=>234, 'y'=>145, 'w'=>339, 'h'=>238, 'head'=>[461,163,506,163,506,213,461,213,], 'body'=>[347,190,456,181,476,220,339,241,], 'legs'=>[308,262,335,225,387,225,394,243,362,383,246,321,], 'ex'=>0 },
+{ 'x'=>259, 'y'=> 89, 'w'=>122, 'h'=>294, 'head'=>[315, 89,351, 89,351,139,315,139,], 'body'=>[298,134,353,134,353,263,298,263,], 'legs'=>[298,253,303,253,348,253,353,253,361,383,262,383,], 'ex'=>1 },
+{ 'x'=>291, 'y'=> 88, 'w'=>121, 'h'=>288, 'head'=>[334, 88,369, 88,369,138,334,138,], 'body'=>[309,133,364,133,364,259,309,259,], 'legs'=>[309,249,314,249,359,249,364,249,360,376,294,376,], 'ex'=>1 },
+{ 'x'=>302, 'y'=> 86, 'w'=>133, 'h'=>304, 'head'=>[347, 86,382, 86,382,136,347,136,], 'body'=>[322,131,377,131,377,265,322,265,], 'legs'=>[322,255,327,255,372,255,377,255,384,390,328,390,], 'ex'=>1 },
+{ 'x'=>329, 'y'=>101, 'w'=> 81, 'h'=>298, 'head'=>[355,101,389,101,389,151,355,151,], 'body'=>[338,146,393,146,393,277,338,277,], 'legs'=>[338,267,343,267,388,267,393,267,389,399,343,399,], 'ex'=>1 },
+{ 'x'=>329, 'y'=> 66, 'w'=>121, 'h'=>334, 'head'=>[350, 66,381, 66,381,116,350,116,], 'body'=>[348,111,403,111,403,260,348,260,], 'legs'=>[348,250,353,250,398,250,403,250,391,400,362,400,], 'ex'=>1 },
+{ 'x'=>338, 'y'=> 45, 'w'=>113, 'h'=>329, 'head'=>[344, 45,376, 45,376, 95,344, 95,], 'body'=>[353, 90,408, 90,408,237,353,237,], 'legs'=>[353,227,358,227,403,227,408,227,381,374,354,374,], 'ex'=>1 },
+{ 'x'=>329, 'y'=> 32, 'w'=>127, 'h'=>281, 'head'=>[337, 32,372, 32,372, 82,337, 82,], 'body'=>[347, 77,402, 77,402,200,347,200,], 'legs'=>[347,190,352,190,397,190,402,190,421,313,363,313,], 'ex'=>1 },
+{ 'x'=>323, 'y'=> 32, 'w'=>144, 'h'=>301, 'head'=>[330, 32,374, 32,374, 82,330, 82,], 'body'=>[345, 77,400, 77,400,210,345,210,], 'legs'=>[345,200,350,200,395,200,400,200,404,333,374,333,], 'ex'=>1 },
+{ 'x'=>290, 'y'=> 40, 'w'=>207, 'h'=>319, 'head'=>[320, 40,368, 40,368, 90,320, 90,], 'body'=>[361, 85,416, 85,416,227,361,227,], 'legs'=>[361,217,366,217,411,217,416,217,393,359,370,359,], 'ex'=>0, 'hit'=>[470,122,530,101,526,134,475,152,] },
+{ 'x'=>293, 'y'=> 47, 'w'=>223, 'h'=>325, 'head'=>[317, 47,352, 47,352, 97,317, 97,], 'body'=>[351, 92,406, 92,406,237,351,237,], 'legs'=>[351,227,356,227,401,227,406,227,401,372,371,372,], 'ex'=>1 },
+{ 'x'=>316, 'y'=> 71, 'w'=>149, 'h'=>303, 'head'=>[328, 71,362, 71,362,121,328,121,], 'body'=>[345,116,400,116,400,250,345,250,], 'legs'=>[345,240,350,240,395,240,400,240,407,374,372,374,], 'ex'=>1 },
+{ 'x'=>333, 'y'=> 96, 'w'=>119, 'h'=>278, 'head'=>[342, 96,374, 96,374,146,342,146,], 'body'=>[346,141,401,141,401,262,346,262,], 'legs'=>[346,252,351,252,396,252,401,252,406,374,370,374,], 'ex'=>1 },
+{ 'x'=>332, 'y'=> 87, 'w'=>118, 'h'=>286, 'head'=>[337, 87,370, 87,370,137,337,137,], 'body'=>[343,132,398,132,398,257,343,257,], 'legs'=>[343,247,348,247,393,247,398,247,399,373,370,373,], 'ex'=>1 },
+{ 'x'=>301, 'y'=> 82, 'w'=>116, 'h'=>291, 'head'=>[326, 82,359, 82,359,132,326,132,], 'body'=>[337,127,392,127,392,255,337,255,], 'legs'=>[337,245,342,245,387,245,392,245,388,373,304,373,], 'ex'=>1 },
+{ 'x'=>270, 'y'=> 87, 'w'=>125, 'h'=>291, 'head'=>[311, 87,343, 87,343,137,311,137,], 'body'=>[313,132,368,132,368,260,313,260,], 'legs'=>[313,250,318,250,363,250,368,250,388,378,273,378,], 'ex'=>1 },
diff --git a/data/characters/Makefile.am b/data/characters/Makefile.am
new file mode 100644
index 0000000..05726a3
--- /dev/null
+++ b/data/characters/Makefile.am
@@ -0,0 +1,11 @@
+## Process this file with automake to produce Makefile.in
+
+charactersdatadir = $(pkgdatadir)/characters
+charactersdata_DATA = BENCEDATA.DAT DESCANTDATA.DAT.pl STAFF.DAT ZOLIDATA.DAT \
+BENCEDATA.DAT.pl MACIDATA.DAT ULMARDATA.DAT ZOLIDATA.DAT.pl \
+CUMIDATA.DAT MACIDATA.DAT.pl ULMARDATA.DAT.pl \
+CUMIDATA.DAT.pl SIRPIDATA.DAT UPIDATA.DAT \
+DESCANTDATA.DAT SIRPIDATA.DAT.pl UPIDATA.DAT.pl \
+GRIZLIDATA.DAT GRIZLIDATA.DAT.pl
+
+EXTRA_DIST = $(charactersdata_DATA)
diff --git a/data/characters/Makefile.in b/data/characters/Makefile.in
new file mode 100644
index 0000000..5fcd31e
--- /dev/null
+++ b/data/characters/Makefile.in
@@ -0,0 +1,209 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+charactersdatadir = $(pkgdatadir)/characters
+charactersdata_DATA = BENCEDATA.DAT DESCANTDATA.DAT.pl STAFF.DAT ZOLIDATA.DAT BENCEDATA.DAT.pl MACIDATA.DAT ULMARDATA.DAT ZOLIDATA.DAT.pl CUMIDATA.DAT MACIDATA.DAT.pl ULMARDATA.DAT.pl CUMIDATA.DAT.pl SIRPIDATA.DAT UPIDATA.DAT DESCANTDATA.DAT SIRPIDATA.DAT.pl UPIDATA.DAT.pl GRIZLIDATA.DAT GRIZLIDATA.DAT.pl
+
+
+EXTRA_DIST = $(charactersdata_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(charactersdata_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps data/characters/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-charactersdataDATA: $(charactersdata_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(charactersdatadir)
+ @list='$(charactersdata_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(charactersdatadir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(charactersdatadir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(charactersdatadir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(charactersdatadir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-charactersdataDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(charactersdata_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(charactersdatadir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data/characters
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-charactersdataDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-charactersdataDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(charactersdatadir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-charactersdataDATA install-charactersdataDATA tags \
+distdir info-am info dvi-am dvi check check-am installcheck-am \
+installcheck install-exec-am install-exec install-data-am install-data \
+install-am install uninstall-am uninstall all-redirect all-am all \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/characters/SIRPIDATA.DAT.pl b/data/characters/SIRPIDATA.DAT.pl
new file mode 100644
index 0000000..b25a9ec
--- /dev/null
+++ b/data/characters/SIRPIDATA.DAT.pl
@@ -0,0 +1,331 @@
+{ 'x'=>204, 'y'=> 86, 'w'=>119, 'h'=>314, 'head'=>[253, 86,279, 86,279,136,253,136,], 'body'=>[234,131,289,131,289,270,234,270,], 'legs'=>[234,260,239,260,284,260,289,260,316,400,207,400,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 86, 'w'=>120, 'h'=>315, 'head'=>[260, 86,285, 86,285,136,260,136,], 'body'=>[239,131,294,131,294,271,239,271,], 'legs'=>[239,261,244,261,289,261,294,261,316,401,207,401,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 86, 'w'=>120, 'h'=>314, 'head'=>[260, 86,285, 86,285,136,260,136,], 'body'=>[240,131,295,131,295,270,240,270,], 'legs'=>[240,260,245,260,290,260,295,260,316,400,207,400,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 88, 'w'=>118, 'h'=>314, 'head'=>[250, 88,277, 88,277,138,250,138,], 'body'=>[234,133,289,133,289,272,234,272,], 'legs'=>[234,262,239,262,284,262,289,262,315,402,204,402,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 90, 'w'=>119, 'h'=>311, 'head'=>[239, 90,266, 90,266,140,239,140,], 'body'=>[224,135,279,135,279,273,224,273,], 'legs'=>[224,263,229,263,274,263,279,263,316,401,204,401,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 87, 'w'=>117, 'h'=>307, 'head'=>[236, 87,259, 87,259,137,236,137,], 'body'=>[218,132,273,132,273,268,218,268,], 'legs'=>[218,258,223,258,268,258,273,258,313,394,203,394,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 93, 'w'=>116, 'h'=>307, 'head'=>[238, 93,263, 93,263,143,238,143,], 'body'=>[222,138,277,138,277,274,222,274,], 'legs'=>[222,264,227,264,272,264,277,264,313,400,204,400,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 92, 'w'=>117, 'h'=>308, 'head'=>[238, 92,263, 92,263,142,238,142,], 'body'=>[226,137,281,137,281,273,226,273,], 'legs'=>[226,263,231,263,276,263,281,263,314,400,204,400,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 89, 'w'=>117, 'h'=>310, 'head'=>[240, 89,263, 89,263,139,240,139,], 'body'=>[228,134,283,134,283,271,228,271,], 'legs'=>[228,261,233,261,278,261,283,261,314,399,204,399,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 92, 'w'=>116, 'h'=>308, 'head'=>[241, 92,267, 92,267,142,241,142,], 'body'=>[231,137,286,137,286,273,231,273,], 'legs'=>[231,263,236,263,281,263,286,263,314,400,205,400,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 92, 'w'=>115, 'h'=>308, 'head'=>[246, 92,271, 92,271,142,246,142,], 'body'=>[233,137,288,137,288,273,233,273,], 'legs'=>[233,263,238,263,283,263,288,263,314,400,206,400,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 91, 'w'=>116, 'h'=>309, 'head'=>[247, 91,271, 91,271,141,247,141,], 'body'=>[233,136,288,136,288,273,233,273,], 'legs'=>[233,263,238,263,283,263,288,263,315,400,206,400,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 89, 'w'=>116, 'h'=>311, 'head'=>[251, 89,275, 89,275,139,251,139,], 'body'=>[233,134,288,134,288,272,233,272,], 'legs'=>[233,262,238,262,283,262,288,262,315,400,206,400,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 91, 'w'=>114, 'h'=>310, 'head'=>[257, 91,282, 91,282,141,257,141,], 'body'=>[235,136,290,136,290,273,235,273,], 'legs'=>[235,263,240,263,285,263,290,263,315,401,208,401,], 'ex'=>1 },
+{ 'x'=>196, 'y'=> 91, 'w'=>123, 'h'=>311, 'head'=>[252, 91,276, 91,276,141,252,141,], 'body'=>[230,136,285,136,285,274,230,274,], 'legs'=>[230,264,235,264,280,264,285,264,315,402,199,402,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 96, 'w'=>128, 'h'=>306, 'head'=>[235, 96,260, 96,260,146,235,146,], 'body'=>[214,141,269,141,269,276,214,276,], 'legs'=>[214,266,219,266,264,266,269,266,316,402,195,402,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 93, 'w'=>128, 'h'=>307, 'head'=>[222, 93,248, 93,248,143,222,143,], 'body'=>[202,138,257,138,257,274,202,274,], 'legs'=>[202,264,207,264,252,264,257,264,312,400,195,400,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 94, 'w'=>110, 'h'=>305, 'head'=>[219, 94,247, 94,247,144,219,144,], 'body'=>[201,139,256,139,256,274,201,274,], 'legs'=>[201,264,206,264,251,264,256,264,297,399,195,399,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 96, 'w'=>125, 'h'=>304, 'head'=>[229, 96,259, 96,259,146,229,146,], 'body'=>[210,141,265,141,265,275,210,275,], 'legs'=>[210,265,215,265,260,265,265,265,299,400,196,400,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 98, 'w'=>148, 'h'=>298, 'head'=>[235, 98,263, 98,263,148,235,148,], 'body'=>[218,143,273,143,273,274,218,274,], 'legs'=>[218,264,223,264,268,264,273,264,299,396,188,396,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 95, 'w'=>144, 'h'=>301, 'head'=>[236, 95,262, 95,262,145,236,145,], 'body'=>[215,140,270,140,270,273,215,273,], 'legs'=>[215,263,220,263,265,263,270,263,299,396,188,396,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 97, 'w'=>137, 'h'=>301, 'head'=>[229, 97,255, 97,255,147,229,147,], 'body'=>[207,142,262,142,262,275,207,275,], 'legs'=>[207,265,212,265,257,265,262,265,299,398,187,398,], 'ex'=>1 },
+{ 'x'=>183, 'y'=> 97, 'w'=>134, 'h'=>301, 'head'=>[224, 97,251, 97,251,147,224,147,], 'body'=>[201,142,256,142,256,275,201,275,], 'legs'=>[201,265,206,265,251,265,256,265,300,398,186,398,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 98, 'w'=>138, 'h'=>299, 'head'=>[227, 98,257, 98,257,148,227,148,], 'body'=>[206,143,261,143,261,275,206,275,], 'legs'=>[206,265,211,265,256,265,261,265,299,397,187,397,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 99, 'w'=>149, 'h'=>296, 'head'=>[238, 99,268, 99,268,149,238,149,], 'body'=>[218,144,273,144,273,274,218,274,], 'legs'=>[218,264,223,264,268,264,273,264,300,395,188,395,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 97, 'w'=>150, 'h'=>296, 'head'=>[245, 97,274, 97,274,147,245,147,], 'body'=>[222,142,277,142,277,272,222,272,], 'legs'=>[222,262,227,262,272,262,277,262,300,393,191,393,], 'ex'=>1 },
+{ 'x'=>186, 'y'=> 96, 'w'=>145, 'h'=>299, 'head'=>[241, 96,268, 96,268,146,241,146,], 'body'=>[217,141,272,141,272,273,217,273,], 'legs'=>[217,263,222,263,267,263,272,263,300,395,189,395,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>100, 'w'=>152, 'h'=>291, 'head'=>[240,100,269,100,269,150,240,150,], 'body'=>[222,145,277,145,277,273,222,273,], 'legs'=>[222,263,227,263,272,263,277,263,299,391,188,391,], 'ex'=>1 },
+{ 'x'=>211, 'y'=> 98, 'w'=>134, 'h'=>295, 'head'=>[249, 98,278, 98,278,148,249,148,], 'body'=>[227,143,282,143,282,273,227,273,], 'legs'=>[227,263,232,263,277,263,282,263,299,393,214,393,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 97, 'w'=>126, 'h'=>294, 'head'=>[252, 97,281, 97,281,147,252,147,], 'body'=>[230,142,285,142,285,271,230,271,], 'legs'=>[230,261,235,261,280,261,285,261,299,391,224,391,], 'ex'=>1 },
+{ 'x'=>225, 'y'=> 96, 'w'=>124, 'h'=>302, 'head'=>[255, 96,283, 96,283,146,255,146,], 'body'=>[233,141,288,141,288,274,233,274,], 'legs'=>[233,264,238,264,283,264,288,264,297,398,228,398,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 98, 'w'=>124, 'h'=>301, 'head'=>[254, 98,281, 98,281,148,254,148,], 'body'=>[234,143,289,143,289,276,234,276,], 'legs'=>[234,266,239,266,284,266,289,266,299,399,227,399,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 99, 'w'=>122, 'h'=>302, 'head'=>[255, 99,284, 99,284,149,255,149,], 'body'=>[236,144,291,144,291,277,236,277,], 'legs'=>[236,267,241,267,286,267,291,267,306,401,229,401,], 'ex'=>1 },
+{ 'x'=>225, 'y'=>101, 'w'=>130, 'h'=>300, 'head'=>[259,101,289,101,289,151,259,151,], 'body'=>[240,146,295,146,295,278,240,278,], 'legs'=>[240,268,245,268,290,268,295,268,329,401,228,401,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>103, 'w'=>135, 'h'=>298, 'head'=>[264,103,295,103,295,153,264,153,], 'body'=>[246,148,301,148,301,279,246,279,], 'legs'=>[246,269,251,269,296,269,301,269,354,401,229,401,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>105, 'w'=>146, 'h'=>296, 'head'=>[274,105,303,105,303,155,274,155,], 'body'=>[255,150,310,150,310,280,255,280,], 'legs'=>[255,270,260,270,305,270,310,270,367,401,229,401,], 'ex'=>1 },
+{ 'x'=>226, 'y'=>108, 'w'=>160, 'h'=>294, 'head'=>[286,108,316,108,316,158,286,158,], 'body'=>[267,153,322,153,322,282,267,282,], 'legs'=>[267,272,272,272,317,272,322,272,368,402,229,402,], 'ex'=>1 },
+{ 'x'=>229, 'y'=>110, 'w'=>167, 'h'=>290, 'head'=>[299,110,329,110,329,160,299,160,], 'body'=>[278,155,333,155,333,282,278,282,], 'legs'=>[278,272,283,272,328,272,333,272,370,400,232,400,], 'ex'=>1 },
+{ 'x'=>239, 'y'=>106, 'w'=>166, 'h'=>284, 'head'=>[309,106,338,106,338,156,309,156,], 'body'=>[289,151,344,151,344,275,289,275,], 'legs'=>[289,265,294,265,339,265,344,265,370,390,242,390,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>102, 'w'=>146, 'h'=>289, 'head'=>[317,102,345,102,345,152,317,152,], 'body'=>[295,147,350,147,350,274,295,274,], 'legs'=>[295,264,300,264,345,264,350,264,369,391,267,391,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 95, 'w'=>155, 'h'=>300, 'head'=>[234, 95,260, 95,260,145,234,145,], 'body'=>[213,140,268,140,268,272,213,272,], 'legs'=>[213,262,218,262,263,262,268,262,302,395,182,395,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 92, 'w'=>146, 'h'=>305, 'head'=>[226, 92,253, 92,253,142,226,142,], 'body'=>[203,137,258,137,258,272,203,272,], 'legs'=>[203,262,208,262,253,262,258,262,298,397,182,397,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 91, 'w'=>139, 'h'=>306, 'head'=>[225, 91,252, 91,252,141,225,141,], 'body'=>[200,136,255,136,255,271,200,271,], 'legs'=>[200,261,205,261,250,261,255,261,288,397,182,397,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 92, 'w'=>131, 'h'=>305, 'head'=>[227, 92,251, 92,251,142,227,142,], 'body'=>[200,137,255,137,255,272,200,272,], 'legs'=>[200,262,205,262,250,262,255,262,283,397,182,397,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 99, 'w'=>119, 'h'=>297, 'head'=>[229, 99,253, 99,253,149,229,149,], 'body'=>[204,144,259,144,259,275,204,275,], 'legs'=>[204,265,209,265,254,265,259,265,283,396,182,396,], 'ex'=>1 },
+{ 'x'=>179, 'y'=>100, 'w'=>118, 'h'=>297, 'head'=>[231,100,255,100,255,150,231,150,], 'body'=>[214,145,269,145,269,276,214,276,], 'legs'=>[214,266,219,266,264,266,269,266,285,397,184,397,], 'ex'=>1 },
+{ 'x'=>161, 'y'=> 92, 'w'=>131, 'h'=>304, 'head'=>[225, 92,253, 92,253,142,225,142,], 'body'=>[213,137,268,137,268,271,213,271,], 'legs'=>[213,261,218,261,263,261,268,261,284,396,172,396,], 'ex'=>1 },
+{ 'x'=>150, 'y'=> 93, 'w'=>137, 'h'=>302, 'head'=>[211, 93,240, 93,240,143,211,143,], 'body'=>[204,138,259,138,259,271,204,271,], 'legs'=>[204,261,209,261,254,261,259,261,283,395,168,395,], 'ex'=>1 },
+{ 'x'=>142, 'y'=> 96, 'w'=>146, 'h'=>299, 'head'=>[204, 96,233, 96,233,146,204,146,], 'body'=>[199,141,254,141,254,273,199,273,], 'legs'=>[199,263,204,263,249,263,254,263,284,395,168,395,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 95, 'w'=>155, 'h'=>300, 'head'=>[233, 95,262, 95,262,145,233,145,], 'body'=>[222,140,277,140,277,272,222,272,], 'legs'=>[222,262,227,262,272,262,277,262,301,395,188,395,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>109, 'w'=>124, 'h'=>287, 'head'=>[230,109,260,109,260,159,230,159,], 'body'=>[219,154,274,154,274,280,219,280,], 'legs'=>[219,270,224,270,269,270,274,270,302,396,235,396,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>129, 'w'=>121, 'h'=>270, 'head'=>[226,129,263,129,263,179,226,179,], 'body'=>[216,174,271,174,271,291,216,291,], 'legs'=>[216,281,221,281,266,281,271,281,324,399,264,399,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>158, 'w'=>133, 'h'=>250, 'head'=>[239,158,283,158,283,208,239,208,], 'body'=>[214,203,269,203,269,310,214,310,], 'legs'=>[214,300,219,300,264,300,269,300,335,408,267,408,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>161, 'w'=>137, 'h'=>245, 'head'=>[241,161,271,161,271,211,241,211,], 'body'=>[208,206,263,206,263,311,208,311,], 'legs'=>[208,301,213,301,258,301,263,301,334,406,228,406,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>171, 'w'=>154, 'h'=>235, 'head'=>[224,171,241,171,241,221,224,221,], 'body'=>[191,216,246,216,246,316,191,316,], 'legs'=>[191,306,196,306,241,306,246,306,332,406,206,406,], 'ex'=>1 },
+{ 'x'=>159, 'y'=>203, 'w'=>182, 'h'=>197, 'head'=>[184,203,202,203,202,253,184,253,], 'body'=>[172,248,227,248,227,329,172,329,], 'legs'=>[172,319,177,319,222,319,227,319,337,400,181,400,], 'ex'=>1 },
+{ 'x'=>119, 'y'=>244, 'w'=>230, 'h'=>157, 'head'=>[136,244,154,244,154,294,136,294,], 'body'=>[153,289,208,289,208,350,153,350,], 'legs'=>[153,340,158,340,203,340,208,340,328,401,161,401,], 'ex'=>1 },
+{ 'x'=> 72, 'y'=>278, 'w'=>263, 'h'=>120, 'head'=>[194,278,240,278,240,328,194,328,], 'body'=>[146,323,201,323,201,365,146,365,], 'legs'=>[146,355,151,355,196,355,201,355,239,398,133,398,], 'ex'=>1 },
+{ 'x'=> 31, 'y'=>254, 'w'=>272, 'h'=>143, 'head'=>[211,254,261,254,261,304,211,304,], 'body'=>[174,299,229,299,229,353,174,353,], 'legs'=>[174,343,179,343,224,343,229,343,229,397, 34,397,], 'ex'=>1 },
+{ 'x'=> 29, 'y'=>218, 'w'=>230, 'h'=>185, 'head'=>[210,218,232,218,232,268,210,268,], 'body'=>[173,263,228,263,228,338,173,338,], 'legs'=>[173,328,178,328,223,328,228,328,220,403, 32,403,], 'ex'=>1 },
+{ 'x'=> 34, 'y'=>195, 'w'=>189, 'h'=>197, 'head'=>[157,195,183,195,183,245,157,245,], 'body'=>[157,240,212,240,212,321,157,321,], 'legs'=>[157,311,162,311,207,311,212,311,218,392, 43,392,], 'ex'=>1 },
+{ 'x'=> 25, 'y'=>277, 'w'=>266, 'h'=>122, 'head'=>[189,277,234,277,234,327,189,327,], 'body'=>[122,322,177,322,177,365,122,365,], 'legs'=>[122,355,127,355,172,355,177,355,231,399, 51,399,], 'ex'=>1 },
+{ 'x'=> 24, 'y'=>284, 'w'=>283, 'h'=>115, 'head'=>[199,284,236,284,236,334,199,334,], 'body'=>[109,329,164,329,164,369,109,369,], 'legs'=>[109,359,114,359,159,359,164,359,268,399, 53,399,], 'ex'=>1 },
+{ 'x'=> 21, 'y'=>305, 'w'=>303, 'h'=>110, 'head'=>[180,305,260,305,260,355,180,355,], 'body'=>[ 75,350,130,350,130,387, 75,387,], 'legs'=>[ 75,377, 80,377,125,377,130,377,287,415, 21,415,], 'ex'=>1 },
+{ 'x'=> 38, 'y'=>304, 'w'=>286, 'h'=>100, 'head'=>[175,304,241,304,241,354,175,354,], 'body'=>[ 71,349,126,349,126,381, 71,381,], 'legs'=>[ 71,371, 76,371,121,371,126,371,280,404, 78,404,], 'ex'=>1 },
+{ 'x'=> 60, 'y'=>297, 'w'=>263, 'h'=>105, 'head'=>[166,297,217,297,217,347,166,347,], 'body'=>[ 79,342,134,342,134,377, 79,377,], 'legs'=>[ 79,367, 84,367,129,367,134,367,248,402,172,402,], 'ex'=>1 },
+{ 'x'=> 72, 'y'=>278, 'w'=>255, 'h'=>119, 'head'=>[151,278,173,278,173,328,151,328,], 'body'=>[141,323,196,323,196,365,141,365,], 'legs'=>[141,355,146,355,191,355,196,355,315,397,113,397,], 'ex'=>1 },
+{ 'x'=> 77, 'y'=>262, 'w'=>265, 'h'=>134, 'head'=>[154,262,171,262,171,312,154,312,], 'body'=>[179,307,234,307,234,356,179,356,], 'legs'=>[179,346,184,346,229,346,234,346,337,396,123,396,], 'ex'=>1 },
+{ 'x'=> 90, 'y'=>271, 'w'=>265, 'h'=>125, 'head'=>[168,271,190,271,190,321,168,321,], 'body'=>[116,316,171,316,171,361,116,361,], 'legs'=>[116,351,121,351,166,351,171,351,349,396,138,396,], 'ex'=>1 },
+{ 'x'=>128, 'y'=>260, 'w'=>234, 'h'=>139, 'head'=>[141,260,177,260,177,310,141,310,], 'body'=>[158,305,213,305,213,357,158,357,], 'legs'=>[158,347,163,347,208,347,213,347,358,399,175,399,], 'ex'=>1 },
+{ 'x'=>165, 'y'=>239, 'w'=>169, 'h'=>157, 'head'=>[181,239,212,239,212,289,181,289,], 'body'=>[171,284,226,284,226,345,171,345,], 'legs'=>[171,335,176,335,221,335,226,335,330,396,183,396,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>243, 'w'=>155, 'h'=>155, 'head'=>[216,243,258,243,258,293,216,293,], 'body'=>[190,288,245,288,245,348,190,348,], 'legs'=>[190,338,195,338,240,338,245,338,297,398,195,398,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>244, 'w'=>189, 'h'=>161, 'head'=>[266,259,293,259,293,309,266,309,], 'body'=>[213,286,268,286,268,349,213,349,], 'legs'=>[209,342,214,342,259,342,264,342,298,405,205,405,], 'ex'=>0 },
+{ 'x'=>185, 'y'=>238, 'w'=>219, 'h'=>173, 'head'=>[290,249,315,249,315,299,290,299,], 'body'=>[229,283,284,283,284,352,229,352,], 'legs'=>[229,342,234,342,279,342,284,342,300,411,215,411,], 'ex'=>0 },
+{ 'x'=>188, 'y'=>206, 'w'=>214, 'h'=>199, 'head'=>[300,216,335,229,325,266,300,266,], 'body'=>[251,251,306,251,306,333,251,333,], 'legs'=>[251,323,256,323,301,323,306,323,300,405,259,405,], 'ex'=>0 },
+{ 'x'=>198, 'y'=>177, 'w'=>191, 'h'=>227, 'head'=>[300,188,328,188,328,238,300,238,], 'body'=>[225,238,301,208,272,297,222,313,], 'legs'=>[225,323,229,290,281,290,313,308,301,404,260,404,], 'ex'=>0 },
+{ 'x'=>198, 'y'=>142, 'w'=>198, 'h'=>263, 'head'=>[307,154,328,154,328,204,307,204,], 'body'=>[234,233,300,187,264,295,215,302,], 'legs'=>[272,326,214,290,268,276,313,331,299,405,255,405,], 'ex'=>0 },
+{ 'x'=>218, 'y'=>106, 'w'=>143, 'h'=>290, 'head'=>[295,114,325,114,325,164,295,164,], 'body'=>[247,151,302,151,302,278,247,278,], 'legs'=>[247,268,252,268,297,268,302,268,298,396,221,396,], 'ex'=>0 },
+{ 'x'=>209, 'y'=> 83, 'w'=>143, 'h'=>322, 'head'=>[267, 83,297, 83,297,133,267,133,], 'body'=>[241,128,296,128,296,271,241,271,], 'legs'=>[241,261,246,261,291,261,296,261,298,405,212,405,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 78, 'w'=>152, 'h'=>324, 'head'=>[262, 78,292, 78,292,128,262,128,], 'body'=>[238,123,293,123,293,267,238,267,], 'legs'=>[238,257,243,257,288,257,293,257,297,402,213,402,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 96, 'w'=>160, 'h'=>303, 'head'=>[242, 96,268, 96,268,146,242,146,], 'body'=>[215,141,270,141,270,275,215,275,], 'legs'=>[215,265,220,265,265,265,270,265,294,399,182,399,], 'ex'=>1 },
+{ 'x'=>172, 'y'=> 92, 'w'=>161, 'h'=>308, 'head'=>[250, 92,273, 92,273,142,250,142,], 'body'=>[218,137,273,137,273,273,218,273,], 'legs'=>[218,263,223,263,268,263,273,263,294,400,175,400,], 'ex'=>1 },
+{ 'x'=>160, 'y'=> 92, 'w'=>149, 'h'=>307, 'head'=>[236, 92,258, 92,258,142,236,142,], 'body'=>[209,137,264,137,264,273,209,273,], 'legs'=>[209,263,214,263,259,263,264,263,292,399,163,399,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 93, 'w'=>140, 'h'=>305, 'head'=>[218, 93,240, 93,240,143,218,143,], 'body'=>[191,138,246,138,246,273,191,273,], 'legs'=>[191,263,196,263,241,263,246,263,294,398,161,398,], 'ex'=>1 },
+{ 'x'=>157, 'y'=> 89, 'w'=>129, 'h'=>304, 'head'=>[206, 89,229, 89,229,139,206,139,], 'body'=>[183,134,238,134,238,268,183,268,], 'legs'=>[183,258,188,258,233,258,238,258,282,393,161,393,], 'ex'=>1 },
+{ 'x'=>152, 'y'=> 89, 'w'=>121, 'h'=>307, 'head'=>[202, 89,225, 89,225,139,202,139,], 'body'=>[184,134,239,134,239,270,184,270,], 'legs'=>[184,260,189,260,234,260,239,260,269,396,160,396,], 'ex'=>1 },
+{ 'x'=>155, 'y'=> 91, 'w'=>134, 'h'=>308, 'head'=>[202, 91,225, 91,225,141,202,141,], 'body'=>[185,136,240,136,240,272,185,272,], 'legs'=>[185,262,190,262,235,262,240,262,270,399,161,399,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 92, 'w'=>136, 'h'=>306, 'head'=>[203, 92,227, 92,227,142,203,142,], 'body'=>[189,137,244,137,244,272,189,272,], 'legs'=>[189,262,194,262,239,262,244,262,269,398,161,398,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 92, 'w'=>144, 'h'=>306, 'head'=>[203, 92,226, 92,226,142,203,142,], 'body'=>[195,137,250,137,250,272,195,272,], 'legs'=>[195,262,200,262,245,262,250,262,269,398,161,398,], 'ex'=>1 },
+{ 'x'=>153, 'y'=> 91, 'w'=>148, 'h'=>308, 'head'=>[200, 91,224, 91,224,141,200,141,], 'body'=>[194,136,249,136,249,272,194,272,], 'legs'=>[194,262,199,262,244,262,249,262,268,399,156,399,], 'ex'=>1 },
+{ 'x'=>149, 'y'=> 91, 'w'=>149, 'h'=>308, 'head'=>[195, 91,218, 91,218,141,195,141,], 'body'=>[191,136,246,136,246,272,191,272,], 'legs'=>[191,262,196,262,241,262,246,262,270,399,152,399,], 'ex'=>1 },
+{ 'x'=>148, 'y'=> 92, 'w'=>141, 'h'=>305, 'head'=>[187, 92,211, 92,211,142,187,142,], 'body'=>[184,137,239,137,239,272,184,272,], 'legs'=>[184,262,189,262,234,262,239,262,269,397,151,397,], 'ex'=>1 },
+{ 'x'=>148, 'y'=> 92, 'w'=>135, 'h'=>305, 'head'=>[181, 92,204, 92,204,142,181,142,], 'body'=>[179,137,234,137,234,272,179,272,], 'legs'=>[179,262,184,262,229,262,234,262,269,397,151,397,], 'ex'=>1 },
+{ 'x'=>173, 'y'=>103, 'w'=>154, 'h'=>297, 'head'=>[230,103,258,103,258,153,230,153,], 'body'=>[215,148,270,148,270,279,215,279,], 'legs'=>[215,269,220,269,265,269,270,269,297,400,176,400,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>101, 'w'=>127, 'h'=>291, 'head'=>[221,101,248,101,248,151,221,151,], 'body'=>[216,146,271,146,271,274,216,274,], 'legs'=>[216,264,221,264,266,264,271,264,298,392,206,392,], 'ex'=>1 },
+{ 'x'=>196, 'y'=>101, 'w'=>140, 'h'=>287, 'head'=>[223,101,266,101,266,151,223,151,], 'body'=>[216,146,271,146,271,272,216,272,], 'legs'=>[216,262,221,262,266,262,271,262,306,388,235,388,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 80, 'w'=>184, 'h'=>323, 'head'=>[212,118,230,118,230,168,212,168,], 'body'=>[201,184,238,145,299,231,248,250,], 'legs'=>[232,234,237,234,284,220,301,227,360,360,257,406,], 'ex'=>0 },
+{ 'x'=>111, 'y'=>100, 'w'=>313, 'h'=>306, 'head'=>[187,174,218,169,236,213,191,213,], 'body'=>[201,247,224,178,307,255,276,298,], 'legs'=>[245,293,252,269,252,270,283,272,269,406,248,406,], 'ex'=>0 },
+{ 'x'=>131, 'y'=>144, 'w'=>248, 'h'=>261, 'head'=>[190,192,228,191,228,241,189,242,], 'body'=>[204,247,236,207,326,269,250,318,], 'legs'=>[227,293,232,293,277,293,282,293,284,406,264,406,], 'ex'=>0 },
+{ 'x'=>168, 'y'=>187, 'w'=>183, 'h'=>219, 'head'=>[194,208,233,208,233,258,194,258,], 'body'=>[209,250,253,216,301,261,246,314,], 'legs'=>[233,314,232,291,283,314,287,279,271,406,245,407,], 'ex'=>0 },
+{ 'x'=>175, 'y'=>183, 'w'=>145, 'h'=>222, 'head'=>[194,222,225,222,225,272,194,272,], 'body'=>[228,211,283,211,283,304,228,304,], 'legs'=>[201,311,206,311,251,311,302,306,277,405,241,405,], 'ex'=>0 },
+{ 'x'=>164, 'y'=>150, 'w'=>132, 'h'=>236, 'head'=>[187,231,216,229,224,280,187,281,], 'body'=>[210,225,265,225,265,325,210,325,], 'legs'=>[208,285,213,285,258,285,263,285,281,386,169,386,], 'ex'=>0 },
+{ 'x'=>158, 'y'=>183, 'w'=>136, 'h'=>206, 'head'=>[192,216,211,216,211,266,192,266,], 'body'=>[176,228,231,228,231,313,176,313,], 'legs'=>[176,303,181,303,226,303,261,288,268,389,188,389,], 'ex'=>0 },
+{ 'x'=>164, 'y'=>153, 'w'=>124, 'h'=>233, 'head'=>[179,153,221,153,221,203,179,203,], 'body'=>[182,194,237,194,237,293,182,293,], 'legs'=>[175,287,180,287,256,273,274,319,270,386,183,386,], 'ex'=>0 },
+{ 'x'=>163, 'y'=>103, 'w'=>123, 'h'=>282, 'head'=>[188,103,217,103,217,153,188,153,], 'body'=>[179,148,234,148,234,271,179,271,], 'legs'=>[179,261,184,261,229,261,234,261,249,385,186,385,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 95, 'w'=>139, 'h'=>300, 'head'=>[198, 95,226, 95,226,145,198,145,], 'body'=>[187,140,242,140,242,272,187,272,], 'legs'=>[178,262,183,262,228,262,233,262,234,395,182,395,], 'ex'=>0 },
+{ 'x'=>189, 'y'=> 84, 'w'=>152, 'h'=>311, 'head'=>[240, 84,269, 84,269,134,240,134,], 'body'=>[214,129,269,129,269,267,214,267,], 'legs'=>[214,257,219,257,264,257,269,257,271,395,192,395,], 'ex'=>1 },
+{ 'x'=>156, 'y'=> 84, 'w'=>172, 'h'=>307, 'head'=>[242, 84,268, 84,268,134,242,134,], 'body'=>[209,129,264,129,264,265,209,265,], 'legs'=>[209,255,214,255,259,255,264,255,271,391,159,391,], 'ex'=>1 },
+{ 'x'=>149, 'y'=>101, 'w'=>166, 'h'=>292, 'head'=>[228,101,252,101,252,151,228,151,], 'body'=>[196,146,251,146,251,274,196,274,], 'legs'=>[196,264,201,264,246,264,251,264,272,393,152,393,], 'ex'=>1 },
+{ 'x'=>147, 'y'=> 83, 'w'=>180, 'h'=>311, 'head'=>[219, 83,244, 83,244,133,219,133,], 'body'=>[193,128,248,128,248,266,193,266,], 'legs'=>[193,256,198,256,243,256,248,256,271,394,150,394,], 'ex'=>1 },
+{ 'x'=>135, 'y'=> 65, 'w'=>197, 'h'=>321, 'head'=>[212, 65,237, 65,237,115,212,115,], 'body'=>[188,110,243,110,243,253,188,253,], 'legs'=>[188,243,193,243,238,243,243,243,267,386,149,386,], 'ex'=>1 },
+{ 'x'=>127, 'y'=> 46, 'w'=>204, 'h'=>332, 'head'=>[177, 46,199, 46,199, 96,177, 96,], 'body'=>[183, 91,238, 91,238,239,183,239,], 'legs'=>[183,229,188,229,233,229,238,229,259,378,145,378,], 'ex'=>1 },
+{ 'x'=>128, 'y'=> 51, 'w'=>191, 'h'=>329, 'head'=>[174, 51,197, 51,197,101,174,101,], 'body'=>[180, 96,235, 96,235,243,180,243,], 'legs'=>[180,233,185,233,230,233,235,233,249,380,139,380,], 'ex'=>1 },
+{ 'x'=>122, 'y'=> 75, 'w'=>185, 'h'=>314, 'head'=>[190, 75,216, 75,216,125,190,125,], 'body'=>[172,120,227,120,227,259,172,259,], 'legs'=>[172,249,177,249,222,249,227,249,244,389,136,389,], 'ex'=>1 },
+{ 'x'=>111, 'y'=> 87, 'w'=>185, 'h'=>305, 'head'=>[186, 87,209, 87,209,137,186,137,], 'body'=>[168,132,223,132,223,267,168,267,], 'legs'=>[168,257,173,257,218,257,223,257,243,392,135,392,], 'ex'=>1 },
+{ 'x'=> 98, 'y'=> 92, 'w'=>183, 'h'=>306, 'head'=>[173, 92,196, 92,196,142,173,142,], 'body'=>[159,137,214,137,214,272,159,272,], 'legs'=>[159,262,164,262,209,262,214,262,249,398,123,398,], 'ex'=>1 },
+{ 'x'=>150, 'y'=> 95, 'w'=>189, 'h'=>300, 'head'=>[234, 95,262, 95,262,145,234,145,], 'body'=>[215,140,270,140,270,272,215,272,], 'legs'=>[215,262,220,262,265,262,270,262,304,395,153,395,], 'ex'=>1 },
+{ 'x'=>143, 'y'=> 95, 'w'=>170, 'h'=>300, 'head'=>[203, 95,233, 95,233,145,203,145,], 'body'=>[193,140,248,140,248,272,193,272,], 'legs'=>[193,262,198,262,243,262,248,262,289,395,146,395,], 'ex'=>1 },
+{ 'x'=>143, 'y'=> 95, 'w'=>170, 'h'=>303, 'head'=>[203, 95,230, 95,230,145,203,145,], 'body'=>[194,140,249,140,249,274,194,274,], 'legs'=>[194,264,199,264,244,264,249,264,287,398,146,398,], 'ex'=>1 },
+{ 'x'=>130, 'y'=>103, 'w'=>162, 'h'=>294, 'head'=>[196,103,227,103,227,153,196,153,], 'body'=>[189,148,244,148,244,277,189,277,], 'legs'=>[189,267,194,267,239,267,244,267,288,397,133,397,], 'ex'=>1 },
+{ 'x'=>121, 'y'=> 93, 'w'=>167, 'h'=>301, 'head'=>[173,117,194,117,194,167,173,167,], 'body'=>[172,141,210,147,244,263,172,274,], 'legs'=>[166,261,171,261,216,261,243,251,284,394,124,394,], 'ex'=>0 },
+{ 'x'=>168, 'y'=> 98, 'w'=>163, 'h'=>297, 'head'=>[246, 98,275, 98,275,148,246,148,], 'body'=>[217,143,272,143,272,274,217,274,], 'legs'=>[217,264,222,264,267,264,272,264,294,395,171,395,], 'ex'=>1 },
+{ 'x'=>167, 'y'=> 97, 'w'=>147, 'h'=>299, 'head'=>[250, 97,274, 97,274,147,250,147,], 'body'=>[215,142,270,142,270,274,215,274,], 'legs'=>[215,264,220,264,265,264,270,264,296,396,170,396,], 'ex'=>1 },
+{ 'x'=>165, 'y'=> 95, 'w'=>149, 'h'=>302, 'head'=>[237, 95,267, 95,267,145,237,145,], 'body'=>[211,140,266,140,266,273,211,273,], 'legs'=>[211,263,216,263,261,263,266,263,295,397,168,397,], 'ex'=>1 },
+{ 'x'=>166, 'y'=> 89, 'w'=>140, 'h'=>306, 'head'=>[221, 89,250, 89,250,139,221,139,], 'body'=>[206,134,261,134,261,269,206,269,], 'legs'=>[206,259,211,259,256,259,261,259,295,395,169,395,], 'ex'=>1 },
+{ 'x'=>165, 'y'=> 96, 'w'=>135, 'h'=>299, 'head'=>[204, 96,236, 96,236,146,204,146,], 'body'=>[199,141,254,141,254,273,199,273,], 'legs'=>[199,263,204,263,249,263,254,263,296,395,168,395,], 'ex'=>1 },
+{ 'x'=>166, 'y'=> 97, 'w'=>136, 'h'=>292, 'head'=>[194, 97,229, 97,229,147,194,147,], 'body'=>[194,142,249,142,249,270,194,270,], 'legs'=>[194,260,199,260,244,260,249,260,298,389,169,389,], 'ex'=>1 },
+{ 'x'=>167, 'y'=>103, 'w'=>143, 'h'=>293, 'head'=>[229,103,266,103,266,153,229,153,], 'body'=>[205,148,260,148,260,277,205,277,], 'legs'=>[205,267,210,267,255,267,260,267,290,396,170,396,], 'ex'=>1 },
+{ 'x'=>167, 'y'=>114, 'w'=>146, 'h'=>282, 'head'=>[242,114,281,114,281,164,242,164,], 'body'=>[212,159,267,159,267,282,212,282,], 'legs'=>[212,272,217,272,262,272,267,272,290,396,170,396,], 'ex'=>1 },
+{ 'x'=>178, 'y'=> 95, 'w'=>142, 'h'=>305, 'head'=>[224, 95,254, 95,254,145,224,145,], 'body'=>[210,140,265,140,265,275,210,275,], 'legs'=>[210,265,215,265,260,265,265,265,314,400,181,400,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 86, 'w'=>142, 'h'=>312, 'head'=>[232, 86,263, 86,263,136,232,136,], 'body'=>[220,131,275,131,275,269,220,269,], 'legs'=>[220,259,225,259,270,259,275,259,314,398,184,398,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 87, 'w'=>152, 'h'=>308, 'head'=>[239, 87,271, 87,271,137,239,137,], 'body'=>[221,132,276,132,276,268,221,268,], 'legs'=>[221,258,226,258,271,258,276,258,314,395,195,395,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 80, 'w'=>137, 'h'=>317, 'head'=>[257, 98,287, 98,287,148,257,148,], 'body'=>[229,125,284,125,284,266,229,266,], 'legs'=>[229,256,234,256,279,256,284,256,320,397,194,397,], 'ex'=>0 },
+{ 'x'=>191, 'y'=> 56, 'w'=>152, 'h'=>338, 'head'=>[266, 95,294, 92,294,142,262,144,], 'body'=>[243,152,300,151,296,252,241,252,], 'legs'=>[241,242,246,242,291,242,296,242,325,394,194,394,], 'ex'=>0 },
+{ 'x'=>195, 'y'=> 77, 'w'=>158, 'h'=>317, 'head'=>[281, 77,317, 77,317,127,281,127,], 'body'=>[254,122,309,122,309,263,254,263,], 'legs'=>[254,253,259,253,304,253,309,253,326,394,198,394,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 76, 'w'=>192, 'h'=>314, 'head'=>[299, 91,324, 91,324,141,299,141,], 'body'=>[274,146,327,129,304,259,246,257,], 'legs'=>[260,250,265,250,310,250,315,250,325,390,205,390,], 'ex'=>0 },
+{ 'x'=>200, 'y'=> 94, 'w'=>183, 'h'=>296, 'head'=>[291, 95,321, 95,321,145,291,145,], 'body'=>[268,149,331,156,308,269,253,269,], 'legs'=>[253,259,258,259,303,259,308,259,324,390,203,390,], 'ex'=>0 },
+{ 'x'=>197, 'y'=> 89, 'w'=>177, 'h'=>301, 'head'=>[276, 89,305, 89,305,139,276,139,], 'body'=>[261,147,325,148,307,267,252,267,], 'legs'=>[252,257,257,257,302,257,307,257,324,390,200,390,], 'ex'=>0 },
+{ 'x'=>185, 'y'=>101, 'w'=>135, 'h'=>294, 'head'=>[234,101,261,101,261,151,234,151,], 'body'=>[212,146,267,146,267,275,212,275,], 'legs'=>[212,265,217,265,262,265,267,265,296,395,188,395,], 'ex'=>1 },
+{ 'x'=>186, 'y'=>122, 'w'=>135, 'h'=>275, 'head'=>[237,122,264,122,264,172,237,172,], 'body'=>[212,167,267,167,267,287,212,287,], 'legs'=>[212,277,217,277,262,277,267,277,296,397,189,397,], 'ex'=>1 },
+{ 'x'=>186, 'y'=>146, 'w'=>134, 'h'=>252, 'head'=>[238,146,265,146,265,196,238,196,], 'body'=>[211,191,266,191,266,299,211,299,], 'legs'=>[211,289,216,289,261,289,266,289,296,398,189,398,], 'ex'=>1 },
+{ 'x'=>187, 'y'=>167, 'w'=>130, 'h'=>231, 'head'=>[237,167,265,167,265,217,237,217,], 'body'=>[210,212,265,212,265,310,210,310,], 'legs'=>[210,300,215,300,260,300,265,300,297,398,190,398,], 'ex'=>1 },
+{ 'x'=>180, 'y'=>197, 'w'=>119, 'h'=>203, 'head'=>[202,197,232,197,232,247,202,247,], 'body'=>[188,242,243,242,243,326,188,326,], 'legs'=>[188,316,193,316,238,316,243,316,295,400,188,400,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>191, 'w'=>117, 'h'=>209, 'head'=>[208,191,238,191,238,241,208,241,], 'body'=>[193,236,248,236,248,323,193,323,], 'legs'=>[193,313,198,313,243,313,248,313,298,400,193,400,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>191, 'w'=>113, 'h'=>209, 'head'=>[219,191,248,191,248,241,219,241,], 'body'=>[203,236,258,236,258,323,203,323,], 'legs'=>[203,313,208,313,253,313,258,313,303,400,198,400,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>199, 'w'=>116, 'h'=>205, 'head'=>[232,199,259,199,259,249,232,249,], 'body'=>[214,244,269,244,269,329,214,329,], 'legs'=>[214,319,219,319,264,319,269,319,308,404,203,404,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 98, 'w'=>128, 'h'=>298, 'head'=>[232, 98,260, 98,260,148,232,148,], 'body'=>[218,143,273,143,273,274,218,274,], 'legs'=>[218,264,223,264,268,264,273,264,297,396,184,396,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 95, 'w'=>138, 'h'=>302, 'head'=>[246, 95,276, 95,276,145,246,145,], 'body'=>[235,140,290,140,290,273,235,273,], 'legs'=>[235,263,240,263,285,263,290,263,314,397,185,397,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 92, 'w'=>157, 'h'=>305, 'head'=>[257, 92,287, 92,287,142,257,142,], 'body'=>[245,137,300,137,300,272,245,272,], 'legs'=>[245,262,250,262,295,262,300,262,313,397,185,397,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 88, 'w'=>200, 'h'=>309, 'head'=>[261, 88,295, 88,295,138,261,138,], 'body'=>[247,133,302,133,302,270,247,270,], 'legs'=>[247,260,252,260,297,260,302,260,314,397,188,397,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 89, 'w'=>236, 'h'=>308, 'head'=>[271, 90,315, 90,315,140,271,140,], 'body'=>[248,134,303,134,303,270,248,270,], 'legs'=>[248,260,253,260,298,260,303,260,314,397,191,397,], 'ex'=>0, 'hit'=>[383,115,422,112,420,129,386,129,] },
+{ 'x'=>175, 'y'=> 97, 'w'=>136, 'h'=>305, 'head'=>[230, 97,259, 97,259,147,230,147,], 'body'=>[209,142,264,142,264,277,209,277,], 'legs'=>[209,267,214,267,259,267,264,267,299,402,178,402,], 'ex'=>1 },
+{ 'x'=>173, 'y'=> 98, 'w'=>146, 'h'=>304, 'head'=>[247, 98,274, 98,274,148,247,148,], 'body'=>[219,143,274,143,274,277,219,277,], 'legs'=>[219,267,224,267,269,267,274,267,315,402,176,402,], 'ex'=>1 },
+{ 'x'=>171, 'y'=>104, 'w'=>152, 'h'=>298, 'head'=>[258,104,286,104,286,154,258,154,], 'body'=>[226,149,281,149,281,280,226,280,], 'legs'=>[226,270,231,270,276,270,281,270,319,402,174,402,], 'ex'=>1 },
+{ 'x'=>171, 'y'=>119, 'w'=>164, 'h'=>285, 'head'=>[269,119,302,119,302,169,269,169,], 'body'=>[228,164,283,164,283,289,228,289,], 'legs'=>[228,279,233,279,278,279,283,279,319,404,174,404,], 'ex'=>1 },
+{ 'x'=>173, 'y'=>137, 'w'=>228, 'h'=>267, 'head'=>[279,137,316,137,316,187,279,187,], 'body'=>[231,182,286,182,286,298,231,298,], 'legs'=>[231,288,236,288,281,288,286,288,320,404,176,404,], 'ex'=>1 },
+{ 'x'=>173, 'y'=>153, 'w'=>251, 'h'=>251, 'head'=>[278,153,323,153,323,203,278,203,], 'body'=>[227,198,282,198,282,306,227,306,], 'legs'=>[227,296,232,296,277,296,282,296,319,404,176,404,], 'ex'=>0, 'hit'=>[410,204,428,203,403,238,389,224,] },
+{ 'x'=>182, 'y'=> 92, 'w'=>143, 'h'=>304, 'head'=>[230, 92,258, 92,258,142,230,142,], 'body'=>[210,137,265,137,265,271,210,271,], 'legs'=>[210,261,215,261,260,261,265,261,292,396,185,396,], 'ex'=>1 },
+{ 'x'=>181, 'y'=>101, 'w'=>134, 'h'=>297, 'head'=>[237,101,268,101,268,151,237,151,], 'body'=>[224,146,279,146,279,277,224,277,], 'legs'=>[224,267,229,267,274,267,279,267,308,398,184,398,], 'ex'=>1 },
+{ 'x'=>191, 'y'=>106, 'w'=>133, 'h'=>293, 'head'=>[250,106,277,106,277,156,250,156,], 'body'=>[247,151,302,151,302,280,247,280,], 'legs'=>[247,270,252,270,297,270,302,270,316,399,194,399,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>116, 'w'=>118, 'h'=>284, 'head'=>[263,116,298,116,298,166,263,166,], 'body'=>[258,161,313,161,313,285,258,285,], 'legs'=>[258,275,263,275,308,275,313,275,324,400,289,400,], 'ex'=>1 },
+{ 'x'=>254, 'y'=>118, 'w'=>150, 'h'=>281, 'head'=>[266,118,307,118,307,168,266,168,], 'body'=>[264,163,319,163,319,286,264,286,], 'legs'=>[264,276,269,276,314,276,319,276,318,399,291,399,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>118, 'w'=>213, 'h'=>281, 'head'=>[272,118,311,118,311,168,272,168,], 'body'=>[270,163,325,163,325,286,270,286,], 'legs'=>[270,276,275,276,320,276,325,276,316,399,293,399,], 'ex'=>1 },
+{ 'x'=>250, 'y'=>121, 'w'=>236, 'h'=>279, 'head'=>[278,121,318,121,318,171,278,171,], 'body'=>[269,166,324,166,324,288,269,288,], 'legs'=>[269,278,274,278,319,278,324,278,319,400,298,400,], 'ex'=>0, 'hit'=>[429,197,479,201,475,226,431,216,] },
+{ 'x'=>179, 'y'=> 92, 'w'=>142, 'h'=>309, 'head'=>[236, 92,268, 92,268,142,236,142,], 'body'=>[224,137,279,137,279,274,224,274,], 'legs'=>[224,264,229,264,274,264,279,264,317,401,182,401,], 'ex'=>1 },
+{ 'x'=>186, 'y'=> 99, 'w'=>146, 'h'=>302, 'head'=>[253, 99,282, 99,282,149,253,149,], 'body'=>[249,144,304,144,304,277,249,277,], 'legs'=>[249,267,254,267,299,267,304,267,316,401,189,401,], 'ex'=>1 },
+{ 'x'=>251, 'y'=>107, 'w'=> 98, 'h'=>295, 'head'=>[268,107,294,107,294,157,268,157,], 'body'=>[257,152,312,152,312,282,257,282,], 'legs'=>[257,272,262,272,307,272,312,272,317,402,260,402,], 'ex'=>1 },
+{ 'x'=>249, 'y'=>113, 'w'=>131, 'h'=>288, 'head'=>[265,113,295,113,295,163,265,163,], 'body'=>[262,158,317,158,317,284,262,284,], 'legs'=>[262,274,267,274,312,274,317,274,317,401,286,401,], 'ex'=>1 },
+{ 'x'=>247, 'y'=>116, 'w'=>170, 'h'=>283, 'head'=>[264,116,294,116,294,166,264,166,], 'body'=>[262,161,317,161,317,285,262,285,], 'legs'=>[262,275,267,275,312,275,317,275,316,399,290,399,], 'ex'=>1 },
+{ 'x'=>245, 'y'=>122, 'w'=>223, 'h'=>278, 'head'=>[263,122,297,122,297,172,263,172,], 'body'=>[275,167,330,167,330,288,275,288,], 'legs'=>[275,278,280,278,325,278,330,278,315,400,295,400,], 'ex'=>0, 'hit'=>[431,282,463,300,450,322,415,293,] },
+{ 'x'=>181, 'y'=> 89, 'w'=>141, 'h'=>311, 'head'=>[222, 89,252, 89,252,139,222,139,], 'body'=>[204,134,259,134,259,272,204,272,], 'legs'=>[204,262,209,262,254,262,259,262,297,400,184,400,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 90, 'w'=>140, 'h'=>310, 'head'=>[233, 90,262, 90,262,140,233,140,], 'body'=>[227,135,282,135,282,272,227,272,], 'legs'=>[227,262,232,262,277,262,282,262,317,400,184,400,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 98, 'w'=>133, 'h'=>295, 'head'=>[245, 98,276, 98,276,148,245,148,], 'body'=>[242,143,297,143,297,273,242,273,], 'legs'=>[242,263,247,263,292,263,297,263,319,393,202,393,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>110, 'w'=>125, 'h'=>285, 'head'=>[255,110,290,110,290,160,255,160,], 'body'=>[253,155,308,155,308,280,253,280,], 'legs'=>[253,270,258,270,303,270,308,270,319,395,286,395,], 'ex'=>1 },
+{ 'x'=>246, 'y'=>109, 'w'=>139, 'h'=>284, 'head'=>[255,109,291,109,291,159,255,159,], 'body'=>[260,154,315,154,315,278,260,278,], 'legs'=>[260,268,265,268,310,268,315,268,317,393,289,393,], 'ex'=>1 },
+{ 'x'=>245, 'y'=>109, 'w'=>207, 'h'=>282, 'head'=>[254,109,295,109,295,159,254,159,], 'body'=>[261,154,316,154,316,277,261,277,], 'legs'=>[261,267,266,267,311,267,316,267,317,391,290,391,], 'ex'=>1 },
+{ 'x'=>245, 'y'=>104, 'w'=>225, 'h'=>288, 'head'=>[255,104,285,104,285,154,255,154,], 'body'=>[261,149,316,149,316,275,261,275,], 'legs'=>[261,265,266,265,311,265,316,265,316,392,289,392,], 'ex'=>0, 'hit'=>[406,210,460,211,456,233,406,226,] },
+{ 'x'=>181, 'y'=> 92, 'w'=>150, 'h'=>303, 'head'=>[237, 92,265, 92,265,142,237,142,], 'body'=>[213,137,268,137,268,271,213,271,], 'legs'=>[213,261,218,261,263,261,268,261,311,395,184,395,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>114, 'w'=>154, 'h'=>270, 'head'=>[259,114,290,114,290,164,259,164,], 'body'=>[237,159,292,159,292,276,237,276,], 'legs'=>[237,266,242,266,287,266,292,266,322,384,209,384,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>134, 'w'=>155, 'h'=>248, 'head'=>[263,134,290,134,290,184,263,184,], 'body'=>[247,179,302,179,302,285,247,285,], 'legs'=>[247,275,252,275,297,275,302,275,326,382,258,382,], 'ex'=>1 },
+{ 'x'=>198, 'y'=>169, 'w'=>168, 'h'=>227, 'head'=>[260,169,293,169,293,219,260,219,], 'body'=>[246,214,301,214,301,310,246,310,], 'legs'=>[246,300,251,300,296,300,301,300,323,396,201,396,], 'ex'=>1 },
+{ 'x'=>204, 'y'=>198, 'w'=>163, 'h'=>206, 'head'=>[262,198,311,198,311,248,262,248,], 'body'=>[260,243,315,243,315,328,260,328,], 'legs'=>[260,318,265,318,310,318,315,318,325,404,207,404,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>183, 'w'=>159, 'h'=>223, 'head'=>[286,183,311,183,311,233,286,233,], 'body'=>[246,228,301,228,301,322,246,322,], 'legs'=>[246,312,251,312,296,312,301,312,325,406,210,406,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>172, 'w'=>185, 'h'=>236, 'head'=>[215,260,253,263,253,313,214,293,], 'body'=>[248,247,334,279,314,327,243,322,], 'legs'=>[235,307,240,307,285,307,290,307,327,408,210,408,], 'ex'=>0 },
+{ 'x'=>204, 'y'=>174, 'w'=>263, 'h'=>235, 'head'=>[215,262,244,265,244,315,210,292,], 'body'=>[255,244,346,281,318,325,231,318,], 'legs'=>[231,308,236,308,281,308,286,308,331,408,211,408,], 'ex'=>0 },
+{ 'x'=>193, 'y'=>175, 'w'=>269, 'h'=>233, 'head'=>[215,257,235,257,235,307,215,307,], 'body'=>[255,233,361,290,285,319,230,319,], 'legs'=>[230,309,235,309,280,309,285,309,328,403,211,408,], 'ex'=>0, 'hit'=>[414,329,463,353,456,370,398,349,] },
+{ 'x'=>181, 'y'=>103, 'w'=>142, 'h'=>298, 'head'=>[243,103,271,103,271,153,243,153,], 'body'=>[221,148,276,148,276,279,221,279,], 'legs'=>[221,269,226,269,271,269,276,269,295,401,184,401,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>115, 'w'=>144, 'h'=>284, 'head'=>[265,115,293,115,293,165,265,165,], 'body'=>[232,160,287,160,287,284,232,284,], 'legs'=>[232,274,237,274,282,274,287,274,297,399,212,399,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>112, 'w'=>147, 'h'=>300, 'head'=>[268,112,298,112,298,162,268,162,], 'body'=>[239,157,294,157,294,289,239,289,], 'legs'=>[239,279,244,279,289,279,294,279,357,412,239,412,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 98, 'w'=>147, 'h'=>312, 'head'=>[255, 98,285, 98,285,148,255,148,], 'body'=>[238,143,293,143,293,281,238,281,], 'legs'=>[238,271,243,271,288,271,293,271,298,410,237,410,], 'ex'=>1 },
+{ 'x'=>196, 'y'=>101, 'w'=>141, 'h'=>311, 'head'=>[248,101,278,101,278,151,248,151,], 'body'=>[236,146,291,146,291,284,236,284,], 'legs'=>[236,274,241,274,286,274,291,274,299,412,239,412,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>107, 'w'=>145, 'h'=>303, 'head'=>[242,107,273,107,273,157,242,157,], 'body'=>[232,152,287,152,287,286,232,286,], 'legs'=>[232,276,237,276,282,276,287,276,275,410,240,410,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>113, 'w'=>128, 'h'=>299, 'head'=>[238,113,268,113,268,163,238,163,], 'body'=>[230,158,285,158,285,290,230,290,], 'legs'=>[230,280,235,280,280,280,285,280,279,412,239,412,], 'ex'=>0, 'hit'=>[310,225,343,222,327,277,303,270,] },
+{ 'x'=>182, 'y'=> 86, 'w'=>131, 'h'=>309, 'head'=>[209, 86,238, 86,238,136,209,136,], 'body'=>[203,131,258,131,258,268,203,268,], 'legs'=>[203,258,208,258,253,258,258,258,297,395,185,395,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 87, 'w'=>154, 'h'=>308, 'head'=>[215, 87,245, 87,245,137,215,137,], 'body'=>[218,132,273,132,273,268,218,268,], 'legs'=>[218,258,223,258,268,258,273,258,332,395,185,395,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 98, 'w'=>169, 'h'=>298, 'head'=>[251, 98,285, 98,285,148,251,148,], 'body'=>[252,143,307,143,307,274,252,274,], 'legs'=>[252,264,257,264,302,264,307,264,344,396,185,396,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 95, 'w'=>175, 'h'=>299, 'head'=>[280, 95,311, 95,311,145,280,145,], 'body'=>[265,140,320,140,320,272,265,272,], 'legs'=>[265,262,270,262,315,262,320,262,345,394,190,394,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 94, 'w'=>173, 'h'=>299, 'head'=>[329, 98,362,104,362,154,319,153,], 'body'=>[271,138,326,138,326,270,271,270,], 'legs'=>[271,260,276,260,321,260,326,260,346,392,197,392,], 'ex'=>0 },
+{ 'x'=>197, 'y'=>119, 'w'=>197, 'h'=>272, 'head'=>[343,126,388,126,388,176,343,176,], 'body'=>[299,135,353,158,320,282,265,282,], 'legs'=>[265,272,270,272,315,272,320,272,343,391,200,391,], 'ex'=>0, 'hit'=>[347,134,391,140,383,165,338,169,] },
+{ 'x'=>178, 'y'=> 81, 'w'=>145, 'h'=>324, 'head'=>[222, 81,253, 81,253,131,222,131,], 'body'=>[204,126,259,126,259,270,204,270,], 'legs'=>[204,260,209,260,254,260,259,260,284,405,181,405,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 88, 'w'=>139, 'h'=>318, 'head'=>[223, 88,254, 88,254,138,223,138,], 'body'=>[220,133,275,133,275,274,220,274,], 'legs'=>[220,264,225,264,270,264,275,264,303,406,182,406,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 96, 'w'=>104, 'h'=>299, 'head'=>[239, 96,268, 96,268,146,239,146,], 'body'=>[249,141,304,141,304,273,249,273,], 'legs'=>[249,263,254,263,299,263,304,263,307,395,217,395,], 'ex'=>1 },
+{ 'x'=>228, 'y'=> 86, 'w'=>110, 'h'=>308, 'head'=>[261, 86,288, 86,288,136,261,136,], 'body'=>[259,131,314,131,314,267,259,267,], 'legs'=>[259,257,264,257,309,257,314,257,308,394,266,394,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 77, 'w'=>152, 'h'=>318, 'head'=>[270, 77,299, 77,299,127,270,127,], 'body'=>[259,122,314,122,314,263,259,263,], 'legs'=>[259,253,264,253,309,253,314,253,309,395,269,395,], 'ex'=>1 },
+{ 'x'=>233, 'y'=> 72, 'w'=>204, 'h'=>319, 'head'=>[282, 72,312, 72,312,122,282,122,], 'body'=>[264,117,319,117,319,259,264,259,], 'legs'=>[264,249,269,249,314,249,319,249,309,391,281,391,], 'ex'=>1 },
+{ 'x'=>236, 'y'=> 81, 'w'=>227, 'h'=>311, 'head'=>[296, 81,331, 81,331,131,296,131,], 'body'=>[284,126,339,126,339,264,284,264,], 'legs'=>[284,254,289,254,334,254,339,254,318,392,293,392,], 'ex'=>0, 'hit'=>[397,177,458,153,451,198,408,194,] },
+{ 'x'=>236, 'y'=> 93, 'w'=>215, 'h'=>299, 'head'=>[305, 93,346, 93,346,143,305,143,], 'body'=>[285,138,340,138,340,270,285,270,], 'legs'=>[285,260,290,260,335,260,340,260,321,392,294,392,], 'ex'=>1 },
+{ 'x'=>277, 'y'=> 90, 'w'=>136, 'h'=>301, 'head'=>[336, 90,368, 90,368,140,336,140,], 'body'=>[300,135,355,135,355,268,300,268,], 'legs'=>[300,258,305,258,350,258,355,258,379,391,294,391,], 'ex'=>1 },
+{ 'x'=>285, 'y'=> 94, 'w'=>125, 'h'=>295, 'head'=>[359, 94,390, 94,390,144,359,144,], 'body'=>[328,139,383,139,383,269,328,269,], 'legs'=>[328,259,333,259,378,259,383,259,390,389,288,389,], 'ex'=>1 },
+{ 'x'=>330, 'y'=> 88, 'w'=>143, 'h'=>299, 'head'=>[372, 88,402, 88,402,138,372,138,], 'body'=>[346,133,401,133,401,265,346,265,], 'legs'=>[346,255,351,255,396,255,401,255,391,387,335,387,], 'ex'=>1 },
+{ 'x'=>338, 'y'=> 79, 'w'=>134, 'h'=>313, 'head'=>[376, 79,405, 79,405,129,376,129,], 'body'=>[347,124,402,124,402,263,347,263,], 'legs'=>[347,253,352,253,397,253,402,253,407,392,353,392,], 'ex'=>1 },
+{ 'x'=>313, 'y'=> 77, 'w'=>160, 'h'=>314, 'head'=>[364, 77,393, 77,393,127,364,127,], 'body'=>[338,122,393,122,393,261,338,261,], 'legs'=>[338,251,343,251,388,251,393,251,406,391,313,391,], 'ex'=>1 },
+{ 'x'=>284, 'y'=> 84, 'w'=>157, 'h'=>303, 'head'=>[336, 84,365, 84,365,134,336,134,], 'body'=>[312,129,367,129,367,263,312,263,], 'legs'=>[312,253,317,253,362,253,367,253,402,387,287,387,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>197, 'w'=>116, 'h'=>203, 'head'=>[216,197,247,197,247,247,216,247,], 'body'=>[195,242,250,242,250,326,195,326,], 'legs'=>[195,316,200,316,245,316,250,316,281,400,188,400,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>199, 'w'=>113, 'h'=>203, 'head'=>[227,199,257,199,257,249,227,249,], 'body'=>[205,244,260,244,260,328,205,328,], 'legs'=>[205,318,210,318,255,318,260,318,282,402,188,402,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>199, 'w'=>130, 'h'=>204, 'head'=>[237,199,270,199,270,249,237,249,], 'body'=>[202,244,257,244,257,328,202,328,], 'legs'=>[202,318,207,318,252,318,257,318,284,403,188,403,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>200, 'w'=>163, 'h'=>203, 'head'=>[260,203,301,203,301,253,260,253,], 'body'=>[217,237,272,237,272,321,217,321,], 'legs'=>[198,319,203,319,248,319,253,319,283,403,188,403,], 'ex'=>0 },
+{ 'x'=>177, 'y'=>214, 'w'=>207, 'h'=>191, 'head'=>[293,232,325,228,325,278,291,275,], 'body'=>[190,274,281,248,312,288,206,325,], 'legs'=>[190,321,202,284,263,286,290,313,283,405,183,386,], 'ex'=>0, 'hit'=>[331,290,386,329,375,350,313,307,] },
+{ 'x'=>179, 'y'=>195, 'w'=>158, 'h'=>207, 'head'=>[230,195,259,195,259,245,230,245,], 'body'=>[196,240,251,240,251,326,196,326,], 'legs'=>[196,316,201,316,246,316,251,316,292,402,185,402,], 'ex'=>1 },
+{ 'x'=>180, 'y'=>183, 'w'=>173, 'h'=>221, 'head'=>[222,183,252,183,252,233,222,233,], 'body'=>[210,226,265,226,265,319,210,319,], 'legs'=>[196,311,201,311,261,296,300,329,293,404,190,404,], 'ex'=>0 },
+{ 'x'=>176, 'y'=>177, 'w'=>172, 'h'=>227, 'head'=>[206,177,249,177,249,227,206,227,], 'body'=>[208,222,263,222,263,318,208,318,], 'legs'=>[195,308,200,308,267,283,301,319,291,404,205,404,], 'ex'=>0 },
+{ 'x'=>166, 'y'=>182, 'w'=>172, 'h'=>222, 'head'=>[176,187,231,187,231,237,176,237,], 'body'=>[194,227,249,227,278,285,194,320,], 'legs'=>[194,310,199,310,273,267,315,305,295,404,203,404,], 'ex'=>0 },
+{ 'x'=>155, 'y'=>197, 'w'=>200, 'h'=>208, 'head'=>[170,203,212,201,212,251,180,252,], 'body'=>[188,242,243,242,293,278,240,316,], 'legs'=>[194,306,300,264,344,360,266,305,237,405,204,405,], 'ex'=>0 },
+{ 'x'=>145, 'y'=>200, 'w'=>262, 'h'=>202, 'head'=>[154,222,192,221,192,271,165,271,], 'body'=>[199,231,265,232,268,285,171,291,], 'legs'=>[248,240,410,343,404,363,275,300,238,402,204,402,], 'ex'=>0, 'hit'=>[350,304,407,348,399,363,321,319,] },
+{ 'x'=>181, 'y'=> 85, 'w'=>158, 'h'=>311, 'head'=>[238, 85,269, 85,269,135,238,135,], 'body'=>[220,130,275,130,275,268,220,268,], 'legs'=>[220,258,225,258,270,258,275,258,295,396,184,396,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 84, 'w'=>146, 'h'=>308, 'head'=>[246, 84,277, 84,277,134,246,134,], 'body'=>[224,129,279,129,279,265,224,265,], 'legs'=>[224,255,229,255,274,255,279,255,296,392,207,392,], 'ex'=>1 },
+{ 'x'=>211, 'y'=> 83, 'w'=>122, 'h'=>313, 'head'=>[249, 83,278, 83,278,133,249,133,], 'body'=>[224,128,279,128,279,267,224,267,], 'legs'=>[224,257,229,257,274,257,279,257,295,396,229,396,], 'ex'=>1 },
+{ 'x'=>213, 'y'=> 85, 'w'=> 95, 'h'=>315, 'head'=>[249, 85,273, 85,273,135,249,135,], 'body'=>[226,130,281,130,281,270,226,270,], 'legs'=>[226,260,231,260,276,260,281,260,296,400,230,400,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>102, 'w'=>107, 'h'=>300, 'head'=>[239,102,274,102,274,152,239,152,], 'body'=>[225,147,280,147,280,279,225,279,], 'legs'=>[225,269,230,269,275,269,280,269,318,402,229,402,], 'ex'=>1 },
+{ 'x'=>180, 'y'=>110, 'w'=>176, 'h'=>292, 'head'=>[232,110,268,110,268,160,232,160,], 'body'=>[227,155,282,155,282,283,227,283,], 'legs'=>[227,273,232,273,277,273,282,273,277,402,229,402,], 'ex'=>1 },
+{ 'x'=>195, 'y'=>121, 'w'=>185, 'h'=>282, 'head'=>[233,121,268,121,268,171,233,171,], 'body'=>[229,166,284,166,284,289,229,289,], 'legs'=>[229,279,234,279,279,279,284,279,278,403,231,403,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>128, 'w'=>160, 'h'=>274, 'head'=>[241,128,269,128,269,178,241,178,], 'body'=>[232,173,287,173,287,292,232,292,], 'legs'=>[232,282,237,282,282,282,287,282,284,402,237,402,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>135, 'w'=>157, 'h'=>269, 'head'=>[237,135,266,135,266,185,237,185,], 'body'=>[234,180,289,180,289,297,234,297,], 'legs'=>[234,287,239,287,284,287,289,287,289,404,241,404,], 'ex'=>0, 'hit'=>[333,284,343,284,350,298,333,294,] },
+{ 'x'=>185, 'y'=> 87, 'w'=>155, 'h'=>308, 'head'=>[247, 87,274, 87,274,137,247,137,], 'body'=>[222,132,277,132,277,268,222,268,], 'legs'=>[222,258,227,258,272,258,277,258,300,395,188,395,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 95, 'w'=>138, 'h'=>308, 'head'=>[241, 95,269, 95,269,145,241,145,], 'body'=>[216,140,271,140,271,276,216,276,], 'legs'=>[216,266,221,266,266,266,271,266,302,403,193,403,], 'ex'=>1 },
+{ 'x'=>190, 'y'=>104, 'w'=>136, 'h'=>300, 'head'=>[243,104,276,104,276,154,243,154,], 'body'=>[216,149,271,149,271,281,216,281,], 'legs'=>[216,271,221,271,266,271,271,271,322,404,193,404,], 'ex'=>1 },
+{ 'x'=>189, 'y'=>116, 'w'=>153, 'h'=>287, 'head'=>[246,116,286,116,286,166,246,166,], 'body'=>[234,161,289,161,289,287,234,287,], 'legs'=>[234,277,239,277,284,277,289,277,338,403,192,403,], 'ex'=>1 },
+{ 'x'=>189, 'y'=>149, 'w'=>155, 'h'=>256, 'head'=>[263,149,313,149,313,199,263,199,], 'body'=>[251,194,306,194,306,304,251,304,], 'legs'=>[251,294,256,294,301,294,306,294,339,405,192,405,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>123, 'w'=>224, 'h'=>281, 'head'=>[279,123,319,123,319,173,279,173,], 'body'=>[266,168,321,168,321,291,266,291,], 'legs'=>[266,281,271,281,316,281,321,281,341,404,200,404,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 81, 'w'=>212, 'h'=>320, 'head'=>[301,103,332, 94,332,144,305,143,], 'body'=>[273,125,328,125,328,267,273,267,], 'legs'=>[273,257,278,257,323,257,328,257,339,400,212,400,], 'ex'=>0, 'hit'=>[400, 83,410, 83,402,154,376,149,] },
+{ 'x'=>230, 'y'=> 62, 'w'=>199, 'h'=>330, 'head'=>[303, 67,328, 67,328,117,303,117,], 'body'=>[281,107,336,107,336,254,281,254,], 'legs'=>[281,244,286,244,331,244,336,244,336,392,233,392,], 'ex'=>0, 'hit'=>[411, 67,429, 67,408,121,388,107,] },
+{ 'x'=>181, 'y'=> 99, 'w'=>155, 'h'=>305, 'head'=>[236, 99,262, 99,262,149,236,149,], 'body'=>[214,144,269,144,269,279,214,279,], 'legs'=>[214,269,219,269,264,269,269,269,286,404,184,404,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>103, 'w'=>200, 'h'=>300, 'head'=>[263,103,290,103,290,153,263,153,], 'body'=>[231,148,286,148,286,280,231,280,], 'legs'=>[231,270,236,270,281,270,286,270,326,403,185,403,], 'ex'=>1 },
+{ 'x'=>181, 'y'=>156, 'w'=>230, 'h'=>246, 'head'=>[283,156,322,156,322,206,283,206,], 'body'=>[232,201,287,201,287,306,232,306,], 'legs'=>[232,296,237,296,282,296,287,296,329,402,184,402,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>200, 'w'=>236, 'h'=>200, 'head'=>[267,200,345,200,345,250,267,250,], 'body'=>[248,245,303,245,303,327,248,327,], 'legs'=>[248,317,253,317,298,317,303,317,327,400,185,400,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>191, 'w'=>236, 'h'=>208, 'head'=>[273,191,342,191,342,241,273,241,], 'body'=>[239,236,294,236,294,322,239,322,], 'legs'=>[239,312,244,312,289,312,294,312,326,399,185,399,], 'ex'=>1 },
+{ 'x'=>181, 'y'=>175, 'w'=>243, 'h'=>224, 'head'=>[281,175,337,175,337,225,281,225,], 'body'=>[252,220,307,220,307,314,252,314,], 'legs'=>[252,304,257,304,302,304,307,304,328,399,184,399,], 'ex'=>1 },
+{ 'x'=>183, 'y'=>149, 'w'=>234, 'h'=>250, 'head'=>[284,149,322,149,322,199,284,199,], 'body'=>[236,194,291,194,291,301,236,301,], 'legs'=>[236,291,241,291,286,291,291,291,328,399,186,399,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>114, 'w'=>195, 'h'=>284, 'head'=>[300,114,325,114,325,164,300,164,], 'body'=>[243,159,298,159,298,283,243,283,], 'legs'=>[243,273,248,273,293,273,298,273,326,398,187,398,], 'ex'=>1 },
+{ 'x'=>183, 'y'=> 62, 'w'=>167, 'h'=>336, 'head'=>[287, 62,304, 62,304,112,287,112,], 'body'=>[247,107,302,107,302,257,247,257,], 'legs'=>[247,247,252,247,297,247,302,247,326,398,186,398,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 32, 'w'=>148, 'h'=>365, 'head'=>[250, 32,269, 32,269, 82,250, 82,], 'body'=>[232, 77,287, 77,287,242,232,242,], 'legs'=>[232,232,237,232,282,232,287,232,326,397,185,397,], 'ex'=>1 },
+{ 'x'=>143, 'y'=> 31, 'w'=>186, 'h'=>364, 'head'=>[207, 31,229, 31,229, 81,207, 81,], 'body'=>[218, 76,273, 76,273,240,218,240,], 'legs'=>[218,230,223,230,268,230,273,230,325,395,185,395,], 'ex'=>1 },
+{ 'x'=>109, 'y'=> 59, 'w'=>211, 'h'=>334, 'head'=>[164, 59,190, 59,190,109,164,109,], 'body'=>[206,104,261,104,261,253,206,253,], 'legs'=>[206,243,211,243,256,243,261,243,316,393,185,393,], 'ex'=>1 },
+{ 'x'=> 96, 'y'=>122, 'w'=>211, 'h'=>272, 'head'=>[140,122,193,122,193,172,140,172,], 'body'=>[206,167,261,167,261,285,206,285,], 'legs'=>[206,275,211,275,256,275,261,275,292,394,185,394,], 'ex'=>1 },
+{ 'x'=> 83, 'y'=>168, 'w'=>219, 'h'=>236, 'head'=>[142,168,235,168,235,218,142,218,], 'body'=>[215,213,270,213,270,313,215,313,], 'legs'=>[215,303,220,303,265,303,270,303,279,404,183,404,], 'ex'=>1 },
+{ 'x'=> 82, 'y'=>193, 'w'=>215, 'h'=>212, 'head'=>[155,193,245,193,245,243,155,243,], 'body'=>[217,238,272,238,272,326,217,326,], 'legs'=>[217,316,222,316,267,316,272,316,278,405,180,405,], 'ex'=>1 },
+{ 'x'=>103, 'y'=>154, 'w'=>194, 'h'=>251, 'head'=>[163,154,208,154,208,204,163,204,], 'body'=>[210,199,265,199,265,307,210,307,], 'legs'=>[210,297,215,297,260,297,265,297,277,405,180,405,], 'ex'=>1 },
+{ 'x'=>122, 'y'=>124, 'w'=>165, 'h'=>280, 'head'=>[170,124,201,124,201,174,170,174,], 'body'=>[201,169,256,169,256,291,201,291,], 'legs'=>[201,281,206,281,251,281,256,281,276,404,172,404,], 'ex'=>1 },
+{ 'x'=>146, 'y'=>119, 'w'=>133, 'h'=>284, 'head'=>[171,119,202,119,202,169,171,169,], 'body'=>[189,164,244,164,244,288,189,288,], 'legs'=>[189,278,194,278,239,278,244,278,275,403,171,403,], 'ex'=>1 },
+{ 'x'=>170, 'y'=> 95, 'w'=>109, 'h'=>298, 'head'=>[188, 95,213, 95,213,145,188,145,], 'body'=>[192,140,247,140,247,271,192,271,], 'legs'=>[192,261,197,261,242,261,247,261,275,393,173,393,], 'ex'=>1 },
+{ 'x'=>169, 'y'=> 85, 'w'=>139, 'h'=>306, 'head'=>[211, 85,238, 85,238,135,211,135,], 'body'=>[195,130,250,130,250,265,195,265,], 'legs'=>[195,255,200,255,245,255,250,255,278,391,172,391,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 92, 'w'=>167, 'h'=>300, 'head'=>[239, 92,267, 92,267,142,239,142,], 'body'=>[216,137,271,137,271,269,216,269,], 'legs'=>[216,259,221,259,266,259,271,259,280,392,179,392,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 88, 'w'=>161, 'h'=>310, 'head'=>[236, 88,264, 88,264,138,236,138,], 'body'=>[212,133,267,133,267,270,212,270,], 'legs'=>[212,260,217,260,262,260,267,260,282,398,185,398,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>102, 'w'=>154, 'h'=>293, 'head'=>[239,102,266,102,266,152,239,152,], 'body'=>[209,147,264,147,264,276,209,276,], 'legs'=>[209,266,214,266,259,266,264,266,295,395,169,395,], 'ex'=>1 },
+{ 'x'=>164, 'y'=> 93, 'w'=>146, 'h'=>304, 'head'=>[211, 93,235, 93,235,143,211,143,], 'body'=>[198,138,253,138,253,272,198,272,], 'legs'=>[198,262,203,262,248,262,253,262,295,397,167,397,], 'ex'=>1 },
+{ 'x'=>164, 'y'=>107, 'w'=>135, 'h'=>289, 'head'=>[180,107,215,107,215,157,180,157,], 'body'=>[189,152,244,152,244,279,189,279,], 'legs'=>[189,269,194,269,239,269,244,269,295,396,167,396,], 'ex'=>1 },
+{ 'x'=>157, 'y'=>119, 'w'=>142, 'h'=>275, 'head'=>[166,119,215,119,215,169,166,169,], 'body'=>[187,164,242,164,242,284,187,284,], 'legs'=>[187,274,192,274,237,274,242,274,295,394,168,394,], 'ex'=>1 },
+{ 'x'=>147, 'y'=>125, 'w'=>150, 'h'=>269, 'head'=>[156,125,209,125,209,175,156,175,], 'body'=>[182,170,237,170,237,287,182,287,], 'legs'=>[182,277,187,277,232,277,237,277,293,394,167,394,], 'ex'=>1 },
+{ 'x'=>173, 'y'=> 96, 'w'=>164, 'h'=>299, 'head'=>[244, 96,271, 96,271,146,244,146,], 'body'=>[216,141,271,141,271,273,216,273,], 'legs'=>[216,263,221,263,266,263,271,263,292,395,176,395,], 'ex'=>1 },
+{ 'x'=>167, 'y'=>110, 'w'=>143, 'h'=>287, 'head'=>[228,110,266,110,266,160,228,160,], 'body'=>[199,155,254,155,254,281,199,281,], 'legs'=>[199,271,204,271,249,271,254,271,293,397,170,397,], 'ex'=>1 },
+{ 'x'=>164, 'y'=>127, 'w'=>122, 'h'=>262, 'head'=>[231,127,268,127,268,177,231,177,], 'body'=>[178,172,233,172,233,285,178,285,], 'legs'=>[178,275,183,275,228,275,233,275,280,389,167,389,], 'ex'=>1 },
+{ 'x'=>162, 'y'=>140, 'w'=>120, 'h'=>249, 'head'=>[223,140,263,140,263,190,223,190,], 'body'=>[176,185,231,185,231,292,176,292,], 'legs'=>[176,282,181,282,226,282,231,282,273,389,167,389,], 'ex'=>1 },
+{ 'x'=>160, 'y'=>155, 'w'=>126, 'h'=>234, 'head'=>[215,155,267,155,267,205,215,205,], 'body'=>[172,200,227,200,227,299,172,299,], 'legs'=>[172,289,177,289,222,289,227,289,271,389,167,389,], 'ex'=>1 },
+{ 'x'=>173, 'y'=> 84, 'w'=>159, 'h'=>311, 'head'=>[237, 84,265, 84,265,134,237,134,], 'body'=>[210,129,265,129,265,267,210,267,], 'legs'=>[210,257,215,257,260,257,265,257,296,395,176,395,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 84, 'w'=>152, 'h'=>312, 'head'=>[230, 84,257, 84,257,134,230,134,], 'body'=>[201,129,256,129,256,267,201,267,], 'legs'=>[201,257,206,257,251,257,256,257,296,396,161,396,], 'ex'=>1 },
+{ 'x'=>152, 'y'=> 90, 'w'=>148, 'h'=>306, 'head'=>[220, 90,244, 90,244,140,220,140,], 'body'=>[189,135,244,135,244,270,189,270,], 'legs'=>[189,260,194,260,239,260,244,260,296,396,155,396,], 'ex'=>1 },
+{ 'x'=>151, 'y'=>104, 'w'=>149, 'h'=>291, 'head'=>[209,104,237,104,237,154,209,154,], 'body'=>[175,149,230,149,230,277,175,277,], 'legs'=>[175,267,180,267,225,267,230,267,296,395,154,395,], 'ex'=>1 },
+{ 'x'=>150, 'y'=>118, 'w'=>133, 'h'=>269, 'head'=>[198,118,228,118,228,168,198,168,], 'body'=>[164,163,219,163,219,280,164,280,], 'legs'=>[164,270,169,270,214,270,219,270,279,387,153,387,], 'ex'=>1 },
+{ 'x'=>146, 'y'=>137, 'w'=>102, 'h'=>248, 'head'=>[187,137,221,137,221,187,187,187,], 'body'=>[167,182,222,182,222,288,167,288,], 'legs'=>[167,278,172,278,217,278,222,278,244,385,153,385,], 'ex'=>1 },
+{ 'x'=>138, 'y'=>172, 'w'=>100, 'h'=>214, 'head'=>[161,172,212,172,212,222,161,222,], 'body'=>[160,217,215,217,215,306,160,306,], 'legs'=>[160,296,165,296,210,296,215,296,222,386,153,386,], 'ex'=>1 },
+{ 'x'=>131, 'y'=>163, 'w'=>101, 'h'=>222, 'head'=>[161,163,205,163,205,213,161,213,], 'body'=>[150,208,205,208,205,301,150,301,], 'legs'=>[150,291,155,291,200,291,205,291,222,385,153,385,], 'ex'=>1 },
+{ 'x'=>125, 'y'=>155, 'w'=>101, 'h'=>230, 'head'=>[155,155,197,155,197,205,155,205,], 'body'=>[144,200,199,200,199,297,144,297,], 'legs'=>[144,287,149,287,194,287,199,287,222,385,154,385,], 'ex'=>1 },
+{ 'x'=>179, 'y'=>190, 'w'=>158, 'h'=>212, 'head'=>[197,190,223,190,223,240,197,240,], 'body'=>[190,235,245,235,245,323,190,323,], 'legs'=>[190,313,195,313,240,313,245,313,285,402,182,402,], 'ex'=>1 },
+{ 'x'=>161, 'y'=>207, 'w'=>176, 'h'=>193, 'head'=>[169,207,219,207,219,257,169,257,], 'body'=>[182,252,237,252,237,331,182,331,], 'legs'=>[182,321,187,321,232,321,237,321,284,400,182,400,], 'ex'=>1 },
+{ 'x'=>151, 'y'=>220, 'w'=>185, 'h'=>182, 'head'=>[169,220,247,220,247,270,169,270,], 'body'=>[178,265,233,265,233,338,178,338,], 'legs'=>[178,328,183,328,228,328,233,328,285,402,182,402,], 'ex'=>1 },
+{ 'x'=>144, 'y'=>205, 'w'=>170, 'h'=>197, 'head'=>[147,231,183,231,183,281,147,281,], 'body'=>[167,250,222,250,222,331,167,331,], 'legs'=>[167,321,172,321,217,321,292,325,284,402,180,402,], 'ex'=>0 },
+{ 'x'=>131, 'y'=>199, 'w'=>173, 'h'=>203, 'head'=>[194,199,222,199,222,249,194,249,], 'body'=>[178,244,233,244,233,328,178,328,], 'legs'=>[178,318,183,318,228,318,289,309,295,402,134,402,], 'ex'=>0 },
+{ 'x'=> 90, 'y'=>200, 'w'=>209, 'h'=>201, 'head'=>[168,200,199,200,199,250,168,250,], 'body'=>[164,245,219,245,219,328,164,328,], 'legs'=>[164,318,169,318,214,318,289,308,295,401, 93,401,], 'ex'=>0 },
+{ 'x'=> 79, 'y'=>215, 'w'=>218, 'h'=>185, 'head'=>[144,215,181,215,181,265,144,265,], 'body'=>[151,260,206,260,206,335,151,335,], 'legs'=>[151,325,156,325,201,325,286,309,293,400, 82,400,], 'ex'=>0 },
+{ 'x'=> 77, 'y'=>232, 'w'=>220, 'h'=>167, 'head'=>[119,232,172,232,172,282,119,282,], 'body'=>[139,277,194,277,194,343,139,343,], 'legs'=>[139,333,144,333,189,333,272,303,293,399, 80,399,], 'ex'=>0 },
+{ 'x'=> 77, 'y'=>222, 'w'=>218, 'h'=>176, 'head'=>[100,250,142,250,142,300,100,300,], 'body'=>[136,247,191,247,191,317,136,317,], 'legs'=>[122,327,127,327,172,327,266,303,291,398, 80,398,], 'ex'=>0 },
+{ 'x'=> 76, 'y'=>222, 'w'=>218, 'h'=>176, 'head'=>[ 93,254,142,254,142,304, 93,304,], 'body'=>[137,254,192,254,192,324,137,324,], 'legs'=>[120,327,125,327,170,327,265,306,290,398, 79,398,], 'ex'=>0 },
+{ 'x'=>176, 'y'=> 92, 'w'=>143, 'h'=>311, 'head'=>[244, 92,273, 92,273,142,244,142,], 'body'=>[208,137,263,137,263,275,208,275,], 'legs'=>[208,265,213,265,258,265,263,265,301,403,179,403,], 'ex'=>1 },
+{ 'x'=>174, 'y'=>109, 'w'=>131, 'h'=>297, 'head'=>[244,109,280,109,280,159,244,159,], 'body'=>[204,154,259,154,259,285,204,285,], 'legs'=>[204,275,209,275,254,275,259,275,301,406,177,406,], 'ex'=>1 },
+{ 'x'=>175, 'y'=> 33, 'w'=>162, 'h'=>374, 'head'=>[281,111,309,113,309,162,281,161,], 'body'=>[236,156,282,155,273,243,209,241,], 'legs'=>[215,237,219,238,278,236,286,236,312,407,178,407,], 'ex'=>0 },
+{ 'x'=>176, 'y'=> 54, 'w'=>191, 'h'=>353, 'head'=>[296,110,342,111,334,161,296,160,], 'body'=>[245,160,299,136,282,252,218,239,], 'legs'=>[227,241,246,240,269,246,286,250,313,407,179,407,], 'ex'=>0 },
+{ 'x'=>180, 'y'=>113, 'w'=>242, 'h'=>293, 'head'=>[305,118,343,118,343,168,305,168,], 'body'=>[240,158,295,158,295,287,240,287,], 'legs'=>[240,277,245,277,290,277,295,277,312,406,183,406,], 'ex'=>0 },
+{ 'x'=>177, 'y'=>124, 'w'=>234, 'h'=>278, 'head'=>[326,132,360,132,360,182,326,182,], 'body'=>[242,169,297,169,297,290,242,290,], 'legs'=>[242,280,247,280,292,280,297,280,311,402,180,402,], 'ex'=>0 },
+{ 'x'=>157, 'y'=>137, 'w'=>226, 'h'=>263, 'head'=>[331,146,380,146,380,196,331,196,], 'body'=>[243,182,298,182,298,296,243,296,], 'legs'=>[243,286,248,286,293,286,298,286,306,400,275,400,], 'ex'=>0 },
+{ 'x'=>145, 'y'=> 58, 'w'=>251, 'h'=>341, 'head'=>[349, 58,365, 58,365,108,349,108,], 'body'=>[298,103,353,103,353,256,298,256,], 'legs'=>[298,246,303,246,348,246,353,246,309,399,271,399,], 'ex'=>1 },
+{ 'x'=>149, 'y'=>122, 'w'=>272, 'h'=>278, 'head'=>[328,122,349,122,349,172,328,172,], 'body'=>[246,167,301,167,301,288,246,288,], 'legs'=>[246,278,251,278,296,278,301,278,310,400,270,400,], 'ex'=>1 },
+{ 'x'=>155, 'y'=>111, 'w'=>266, 'h'=>288, 'head'=>[368,111,383,111,383,161,368,161,], 'body'=>[257,156,312,156,312,282,257,282,], 'legs'=>[257,272,262,272,307,272,312,272,308,399,271,399,], 'ex'=>1 },
+{ 'x'=>158, 'y'=>151, 'w'=>297, 'h'=>248, 'head'=>[333,151,398,151,398,201,333,201,], 'body'=>[233,196,288,196,288,302,233,302,], 'legs'=>[233,292,238,292,283,292,288,292,307,399,270,399,], 'ex'=>1 },
+{ 'x'=>161, 'y'=>159, 'w'=>291, 'h'=>239, 'head'=>[306,159,368,159,368,209,306,209,], 'body'=>[225,204,280,204,280,306,225,306,], 'legs'=>[225,296,230,296,275,296,280,296,306,398,270,398,], 'ex'=>1 },
+{ 'x'=>162, 'y'=>122, 'w'=>243, 'h'=>275, 'head'=>[304,122,323,122,323,172,304,172,], 'body'=>[245,167,300,167,300,287,245,287,], 'legs'=>[245,277,250,277,295,277,300,277,306,397,269,397,], 'ex'=>1 },
+{ 'x'=>164, 'y'=> 96, 'w'=>255, 'h'=>302, 'head'=>[357, 96,379, 96,379,146,357,146,], 'body'=>[268,141,323,141,323,274,268,274,], 'legs'=>[268,264,273,264,318,264,323,264,306,398,267,398,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 89, 'w'=>126, 'h'=>310, 'head'=>[224, 89,255, 89,255,139,224,139,], 'body'=>[201,134,256,134,256,271,201,271,], 'legs'=>[201,261,206,261,251,261,256,261,297,399,188,399,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 88, 'w'=>124, 'h'=>310, 'head'=>[225, 88,258, 88,258,138,225,138,], 'body'=>[203,133,258,133,258,270,203,270,], 'legs'=>[203,260,208,260,253,260,258,260,305,398,188,398,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 86, 'w'=>137, 'h'=>312, 'head'=>[228, 86,259, 86,259,136,228,136,], 'body'=>[210,131,265,131,265,269,210,269,], 'legs'=>[210,259,215,259,260,259,265,259,318,398,188,398,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 89, 'w'=>158, 'h'=>309, 'head'=>[231, 89,264, 89,264,139,231,139,], 'body'=>[221,134,276,134,276,271,221,271,], 'legs'=>[221,261,226,261,271,261,276,261,331,398,189,398,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 90, 'w'=>174, 'h'=>308, 'head'=>[248, 90,281, 90,281,140,248,140,], 'body'=>[232,135,287,135,287,271,232,271,], 'legs'=>[232,261,237,261,282,261,287,261,343,398,188,398,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 91, 'w'=>210, 'h'=>310, 'head'=>[276, 91,305, 91,305,141,276,141,], 'body'=>[254,136,309,136,309,273,254,273,], 'legs'=>[254,263,259,263,304,263,309,263,347,401,188,401,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 79, 'w'=>248, 'h'=>323, 'head'=>[310,106,338,106,338,156,310,156,], 'body'=>[271,124,326,124,326,268,271,268,], 'legs'=>[271,258,276,258,321,258,326,258,347,402,188,402,], 'ex'=>0 },
+{ 'x'=>187, 'y'=>107, 'w'=>264, 'h'=>293, 'head'=>[316,107,366,107,366,157,316,157,], 'body'=>[264,152,319,152,319,281,264,281,], 'legs'=>[264,271,269,271,314,271,319,271,345,400,190,400,], 'ex'=>1 },
+{ 'x'=>191, 'y'=>105, 'w'=>286, 'h'=>291, 'head'=>[342,105,395,105,395,155,342,155,], 'body'=>[276,150,331,150,331,278,276,278,], 'legs'=>[276,268,281,268,326,268,331,268,342,396,194,396,], 'ex'=>0, 'hit'=>[413,127,474,123,473,155,411,159,] },
+{ 'x'=>200, 'y'=> 92, 'w'=>239, 'h'=>307, 'head'=>[349, 97,377, 97,377,147,349,147,], 'body'=>[287,137,342,137,342,273,287,273,], 'legs'=>[287,263,292,263,337,263,342,263,340,399,203,399,], 'ex'=>0 },
+{ 'x'=>197, 'y'=> 87, 'w'=>182, 'h'=>313, 'head'=>[328, 88,358, 88,358,138,328,138,], 'body'=>[281,132,336,132,336,271,281,271,], 'legs'=>[281,261,286,261,331,261,336,261,344,400,200,400,], 'ex'=>0 },
+{ 'x'=>199, 'y'=> 86, 'w'=>149, 'h'=>314, 'head'=>[301, 88,326, 88,326,138,301,138,], 'body'=>[260,131,315,131,315,270,260,270,], 'legs'=>[260,260,265,260,310,260,315,260,344,400,202,400,], 'ex'=>0 },
+{ 'x'=>196, 'y'=> 76, 'w'=>134, 'h'=>326, 'head'=>[259, 80,289, 80,289,130,259,130,], 'body'=>[230,121,285,121,285,266,230,266,], 'legs'=>[230,256,235,256,280,256,285,256,326,402,199,402,], 'ex'=>0 },
+{ 'x'=>173, 'y'=> 89, 'w'=>146, 'h'=>312, 'head'=>[250, 91,280, 91,280,141,250,141,], 'body'=>[214,134,269,134,269,272,214,272,], 'legs'=>[214,262,219,262,264,262,269,262,296,401,176,401,], 'ex'=>0 },
+{ 'x'=>174, 'y'=> 85, 'w'=>140, 'h'=>316, 'head'=>[225, 85,250, 85,250,135,225,135,], 'body'=>[202,130,257,130,257,270,202,270,], 'legs'=>[202,260,207,260,252,260,257,260,296,401,177,401,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 82, 'w'=>125, 'h'=>317, 'head'=>[213, 82,238, 82,238,132,213,132,], 'body'=>[192,127,247,127,247,268,192,268,], 'legs'=>[192,258,197,258,242,258,247,258,294,399,177,399,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 81, 'w'=>152, 'h'=>321, 'head'=>[220, 81,246, 81,246,131,220,131,], 'body'=>[200,126,255,126,255,269,200,269,], 'legs'=>[200,259,205,259,250,259,255,259,293,402,179,402,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 78, 'w'=>138, 'h'=>325, 'head'=>[255, 81,280, 81,280,131,255,131,], 'body'=>[220,123,275,123,275,268,220,268,], 'legs'=>[220,258,225,258,270,258,275,258,293,403,179,403,], 'ex'=>0 },
+{ 'x'=>202, 'y'=> 80, 'w'=>117, 'h'=>325, 'head'=>[270, 82,295, 82,295,132,270,132,], 'body'=>[235,125,290,125,290,270,235,270,], 'legs'=>[235,260,240,260,285,260,290,260,294,405,214,405,], 'ex'=>0 },
+{ 'x'=>191, 'y'=> 80, 'w'=>145, 'h'=>323, 'head'=>[262, 82,286, 82,286,132,262,132,], 'body'=>[233,125,288,125,288,269,233,269,], 'legs'=>[233,259,238,259,283,259,288,259,294,403,235,403,], 'ex'=>0 },
+{ 'x'=>218, 'y'=> 82, 'w'=>101, 'h'=>320, 'head'=>[253, 82,278, 82,278,132,253,132,], 'body'=>[228,127,283,127,283,269,228,269,], 'legs'=>[228,259,233,259,278,259,283,259,291,402,235,402,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 79, 'w'=> 96, 'h'=>323, 'head'=>[252, 79,278, 79,278,129,252,129,], 'body'=>[230,124,285,124,285,268,230,268,], 'legs'=>[230,258,235,258,280,258,285,258,289,402,234,402,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 83, 'w'=> 98, 'h'=>318, 'head'=>[252, 83,278, 83,278,133,252,133,], 'body'=>[230,128,285,128,285,269,230,269,], 'legs'=>[230,259,235,259,280,259,285,259,291,401,235,401,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 98, 'w'=> 98, 'h'=>305, 'head'=>[250, 98,276, 98,276,148,250,148,], 'body'=>[230,143,285,143,285,278,230,278,], 'legs'=>[230,268,235,268,280,268,285,268,289,403,235,403,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>104, 'w'=> 98, 'h'=>299, 'head'=>[252,104,277,104,277,154,252,154,], 'body'=>[232,149,287,149,287,281,232,281,], 'legs'=>[232,271,237,271,282,271,287,271,291,403,237,403,], 'ex'=>1 },
diff --git a/data/characters/ULMARDATA.DAT.pl b/data/characters/ULMARDATA.DAT.pl
new file mode 100644
index 0000000..d760cc1
--- /dev/null
+++ b/data/characters/ULMARDATA.DAT.pl
@@ -0,0 +1,345 @@
+{ 'x'=>222, 'y'=> 36, 'w'=>101, 'h'=>335, 'head'=>[256, 36,282, 36,282, 86,256, 86,], 'body'=>[232, 81,287, 81,287,231,232,231,], 'legs'=>[232,221,237,221,282,221,287,221,314,371,225,371,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 35, 'w'=>102, 'h'=>335, 'head'=>[258, 35,283, 35,283, 85,258, 85,], 'body'=>[239, 80,294, 80,294,230,239,230,], 'legs'=>[239,220,244,220,289,220,294,220,315,370,226,370,], 'ex'=>1 },
+{ 'x'=>220, 'y'=> 37, 'w'=>104, 'h'=>333, 'head'=>[259, 37,284, 37,284, 87,259, 87,], 'body'=>[238, 82,293, 82,293,231,238,231,], 'legs'=>[238,221,243,221,288,221,293,221,310,370,224,370,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 37, 'w'=>106, 'h'=>335, 'head'=>[259, 37,284, 37,284, 87,259, 87,], 'body'=>[241, 82,296, 82,296,232,241,232,], 'legs'=>[241,222,246,222,291,222,296,222,312,372,226,372,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 37, 'w'=>112, 'h'=>332, 'head'=>[257, 37,282, 37,282, 87,257, 87,], 'body'=>[238, 82,293, 82,293,230,238,230,], 'legs'=>[238,220,243,220,288,220,293,220,315,369,224,369,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 38, 'w'=>118, 'h'=>334, 'head'=>[256, 38,281, 38,281, 88,256, 88,], 'body'=>[238, 83,293, 83,293,232,238,232,], 'legs'=>[238,222,243,222,288,222,293,222,312,372,225,372,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 38, 'w'=>125, 'h'=>333, 'head'=>[251, 38,278, 38,278, 88,251, 88,], 'body'=>[236, 83,291, 83,291,232,236,232,], 'legs'=>[236,222,241,222,286,222,291,222,313,371,227,371,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 38, 'w'=>125, 'h'=>331, 'head'=>[243, 38,274, 38,274, 88,243, 88,], 'body'=>[235, 83,290, 83,290,231,235,231,], 'legs'=>[235,221,240,221,285,221,290,221,314,369,225,369,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 38, 'w'=>125, 'h'=>334, 'head'=>[239, 38,271, 38,271, 88,239, 88,], 'body'=>[231, 83,286, 83,286,232,231,232,], 'legs'=>[231,222,236,222,281,222,286,222,313,372,226,372,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 37, 'w'=>125, 'h'=>335, 'head'=>[234, 37,265, 37,265, 87,234, 87,], 'body'=>[230, 82,285, 82,285,232,230,232,], 'legs'=>[230,222,235,222,280,222,285,222,311,372,224,372,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 41, 'w'=>125, 'h'=>328, 'head'=>[226, 41,259, 41,259, 91,226, 91,], 'body'=>[230, 86,285, 86,285,232,230,232,], 'legs'=>[230,222,235,222,280,222,285,222,315,369,225,369,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 37, 'w'=>122, 'h'=>334, 'head'=>[242, 37,275, 37,275, 87,242, 87,], 'body'=>[236, 82,291, 82,291,231,236,231,], 'legs'=>[236,221,241,221,286,221,291,221,316,371,226,371,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 35, 'w'=>125, 'h'=>333, 'head'=>[240, 35,273, 35,273, 85,240, 85,], 'body'=>[236, 80,291, 80,291,229,236,229,], 'legs'=>[236,219,241,219,286,219,291,219,316,368,226,368,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 36, 'w'=>128, 'h'=>332, 'head'=>[227, 36,261, 36,261, 86,227, 86,], 'body'=>[231, 81,286, 81,286,229,231,229,], 'legs'=>[231,219,236,219,281,219,286,219,317,368,226,368,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 36, 'w'=>133, 'h'=>332, 'head'=>[226, 36,260, 36,260, 86,226, 86,], 'body'=>[229, 81,284, 81,284,229,229,229,], 'legs'=>[229,219,234,219,279,219,284,219,316,368,226,368,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 36, 'w'=>137, 'h'=>332, 'head'=>[236, 36,270, 36,270, 86,236, 86,], 'body'=>[230, 81,285, 81,285,229,230,229,], 'legs'=>[230,219,235,219,280,219,285,219,317,368,226,368,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 35, 'w'=>132, 'h'=>332, 'head'=>[249, 35,274, 35,274, 85,249, 85,], 'body'=>[236, 80,291, 80,291,228,236,228,], 'legs'=>[236,218,241,218,286,218,291,218,314,367,228,367,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 35, 'w'=>125, 'h'=>333, 'head'=>[252, 35,278, 35,278, 85,252, 85,], 'body'=>[238, 80,293, 80,293,229,238,229,], 'legs'=>[238,219,243,219,288,219,293,219,315,368,225,368,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 35, 'w'=>116, 'h'=>332, 'head'=>[255, 35,282, 35,282, 85,255, 85,], 'body'=>[240, 80,295, 80,295,228,240,228,], 'legs'=>[240,218,245,218,290,218,295,218,317,367,223,367,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 36, 'w'=>107, 'h'=>332, 'head'=>[263, 36,291, 36,291, 86,263, 86,], 'body'=>[243, 81,298, 81,298,229,243,229,], 'legs'=>[243,219,248,219,293,219,298,219,317,368,226,368,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 36, 'w'=>106, 'h'=>332, 'head'=>[270, 36,297, 36,297, 86,270, 86,], 'body'=>[245, 81,300, 81,300,229,245,229,], 'legs'=>[245,219,250,219,295,219,300,219,316,368,226,368,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 38, 'w'=>108, 'h'=>332, 'head'=>[269, 38,296, 38,296, 88,269, 88,], 'body'=>[240, 83,295, 83,295,231,240,231,], 'legs'=>[240,221,245,221,290,221,295,221,314,370,227,370,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 39, 'w'=>102, 'h'=>333, 'head'=>[255, 39,285, 39,285, 89,255, 89,], 'body'=>[233, 84,288, 84,288,233,233,233,], 'legs'=>[233,223,238,223,283,223,288,223,312,372,225,372,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 39, 'w'=>104, 'h'=>327, 'head'=>[247, 39,279, 39,279, 89,247, 89,], 'body'=>[228, 84,283, 84,283,230,228,230,], 'legs'=>[228,220,233,220,278,220,283,220,312,366,230,366,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 39, 'w'=>119, 'h'=>334, 'head'=>[242, 39,275, 39,275, 89,242, 89,], 'body'=>[225, 84,280, 84,280,233,225,233,], 'legs'=>[225,223,230,223,275,223,280,223,324,373,229,373,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 41, 'w'=>119, 'h'=>323, 'head'=>[246, 41,281, 41,281, 91,246, 91,], 'body'=>[228, 86,283, 86,283,230,228,230,], 'legs'=>[228,220,233,220,278,220,283,220,325,364,227,364,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 42, 'w'=>124, 'h'=>329, 'head'=>[258, 42,293, 42,293, 92,258, 92,], 'body'=>[237, 87,292, 87,292,234,237,234,], 'legs'=>[237,224,242,224,287,224,292,224,326,371,227,371,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 47, 'w'=>137, 'h'=>322, 'head'=>[268, 47,302, 47,302, 97,268, 97,], 'body'=>[244, 92,299, 92,299,235,244,235,], 'legs'=>[244,225,249,225,294,225,299,225,325,369,227,369,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 46, 'w'=>137, 'h'=>323, 'head'=>[265, 46,300, 46,300, 96,265, 96,], 'body'=>[243, 91,298, 91,298,235,243,235,], 'legs'=>[243,225,248,225,293,225,298,225,325,369,222,369,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 47, 'w'=>114, 'h'=>323, 'head'=>[251, 47,285, 47,285, 97,251, 97,], 'body'=>[236, 92,291, 92,291,236,236,236,], 'legs'=>[236,226,241,226,286,226,291,226,323,370,221,370,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 58, 'w'=>110, 'h'=>308, 'head'=>[245, 58,280, 58,280,108,245,108,], 'body'=>[229,103,284,103,284,239,229,239,], 'legs'=>[229,229,234,229,279,229,284,229,324,366,221,366,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 52, 'w'=>107, 'h'=>305, 'head'=>[246, 52,280, 52,280,102,246,102,], 'body'=>[231, 97,286, 97,286,232,231,232,], 'legs'=>[231,222,236,222,281,222,286,222,324,357,225,357,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 47, 'w'=>117, 'h'=>317, 'head'=>[251, 47,287, 47,287, 97,251, 97,], 'body'=>[237, 92,292, 92,292,233,237,233,], 'legs'=>[237,223,242,223,287,223,292,223,325,364,221,364,], 'ex'=>1 },
+{ 'x'=>217, 'y'=> 47, 'w'=>127, 'h'=>317, 'head'=>[256, 47,292, 47,292, 97,256, 97,], 'body'=>[242, 92,297, 92,297,233,242,233,], 'legs'=>[242,223,247,223,292,223,297,223,325,364,220,364,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 53, 'w'=>133, 'h'=>312, 'head'=>[261, 53,298, 53,298,103,261,103,], 'body'=>[246, 98,301, 98,301,236,246,236,], 'legs'=>[246,226,251,226,296,226,301,226,327,365,221,365,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 59, 'w'=>134, 'h'=>305, 'head'=>[264, 59,301, 59,301,109,264,109,], 'body'=>[247,104,302,104,302,239,247,239,], 'legs'=>[247,229,252,229,297,229,302,229,327,364,222,364,], 'ex'=>1 },
+{ 'x'=>217, 'y'=> 47, 'w'=>131, 'h'=>319, 'head'=>[265, 47,302, 47,302, 97,265, 97,], 'body'=>[253, 92,308, 92,308,234,253,234,], 'legs'=>[253,224,258,224,303,224,308,224,328,366,220,366,], 'ex'=>1 },
+{ 'x'=>230, 'y'=> 46, 'w'=>130, 'h'=>316, 'head'=>[278, 46,315, 46,315, 96,278, 96,], 'body'=>[264, 91,319, 91,319,231,264,231,], 'legs'=>[264,221,269,221,314,221,319,221,333,362,233,362,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 51, 'w'=>110, 'h'=>310, 'head'=>[294, 51,328, 51,328,101,294,101,], 'body'=>[275, 96,330, 96,330,233,275,233,], 'legs'=>[275,223,280,223,325,223,330,223,341,361,263,361,], 'ex'=>1 },
+{ 'x'=>277, 'y'=> 62, 'w'=>104, 'h'=>302, 'head'=>[302, 62,339, 62,339,112,302,112,], 'body'=>[283,107,338,107,338,240,283,240,], 'legs'=>[283,230,288,230,333,230,338,230,346,364,292,364,], 'ex'=>1 },
+{ 'x'=>286, 'y'=> 62, 'w'=>105, 'h'=>308, 'head'=>[311, 62,350, 62,350,112,311,112,], 'body'=>[292,107,347,107,347,243,292,243,], 'legs'=>[292,233,297,233,342,233,347,233,356,370,294,370,], 'ex'=>1 },
+{ 'x'=>292, 'y'=> 58, 'w'=>110, 'h'=>313, 'head'=>[318, 58,357, 58,357,108,318,108,], 'body'=>[303,103,358,103,358,242,303,242,], 'legs'=>[303,232,308,232,353,232,358,232,366,371,295,371,], 'ex'=>1 },
+{ 'x'=>298, 'y'=> 57, 'w'=>112, 'h'=>318, 'head'=>[327, 57,366, 57,366,107,327,107,], 'body'=>[314,102,369,102,369,243,314,243,], 'legs'=>[314,233,319,233,364,233,369,233,367,375,301,375,], 'ex'=>1 },
+{ 'x'=>313, 'y'=> 62, 'w'=>103, 'h'=>315, 'head'=>[336, 62,374, 62,374,112,336,112,], 'body'=>[324,107,379,107,379,247,324,247,], 'legs'=>[324,237,329,237,374,237,379,237,377,377,320,377,], 'ex'=>1 },
+{ 'x'=>323, 'y'=> 65, 'w'=>118, 'h'=>313, 'head'=>[346, 65,384, 65,384,115,346,115,], 'body'=>[333,110,388,110,388,249,333,249,], 'legs'=>[333,239,338,239,383,239,388,239,399,378,345,378,], 'ex'=>1 },
+{ 'x'=>335, 'y'=> 58, 'w'=>108, 'h'=>318, 'head'=>[359, 58,398, 58,398,108,359,108,], 'body'=>[343,103,398,103,398,244,343,244,], 'legs'=>[343,234,348,234,393,234,398,234,425,376,348,376,], 'ex'=>1 },
+{ 'x'=>347, 'y'=> 53, 'w'=>112, 'h'=>322, 'head'=>[372, 53,412, 53,412,103,372,103,], 'body'=>[355, 98,410, 98,410,241,355,241,], 'legs'=>[355,231,360,231,405,231,410,231,455,375,350,375,], 'ex'=>1 },
+{ 'x'=>347, 'y'=> 56, 'w'=>118, 'h'=>320, 'head'=>[385, 56,422, 56,422,106,385,106,], 'body'=>[365,101,420,101,420,243,365,243,], 'legs'=>[365,233,370,233,415,233,420,233,459,376,350,376,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 52, 'w'=>129, 'h'=>318, 'head'=>[226, 52,263, 52,263,102,226,102,], 'body'=>[211, 97,266, 97,266,238,211,238,], 'legs'=>[211,228,216,228,261,228,266,228,317,370,195,370,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 70, 'w'=>130, 'h'=>295, 'head'=>[253, 70,291, 70,291,120,253,120,], 'body'=>[232,115,287,115,287,245,232,245,], 'legs'=>[232,235,237,235,282,235,287,235,329,365,206,365,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 67, 'w'=>133, 'h'=>298, 'head'=>[258, 67,288, 67,288,117,258,117,], 'body'=>[236,112,291,112,291,243,236,243,], 'legs'=>[236,233,241,233,286,233,291,233,329,365,203,365,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 55, 'w'=>130, 'h'=>307, 'head'=>[258, 55,285, 55,285,105,258,105,], 'body'=>[241,100,296,100,296,236,241,236,], 'legs'=>[241,226,246,226,291,226,296,226,329,362,206,362,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 44, 'w'=>132, 'h'=>317, 'head'=>[249, 44,278, 44,278, 94,249, 94,], 'body'=>[248, 89,303, 89,303,230,248,230,], 'legs'=>[248,220,253,220,298,220,303,220,328,361,208,361,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 44, 'w'=>127, 'h'=>317, 'head'=>[244, 44,279, 44,279, 94,244, 94,], 'body'=>[250, 89,305, 89,305,230,250,230,], 'legs'=>[250,220,255,220,300,220,305,220,330,361,218,361,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 56, 'w'=>128, 'h'=>305, 'head'=>[240, 56,277, 56,277,106,240,106,], 'body'=>[254,101,309,101,309,236,254,236,], 'legs'=>[254,226,259,226,304,226,309,226,333,361,219,361,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 70, 'w'=>125, 'h'=>293, 'head'=>[244, 70,283, 70,283,120,244,120,], 'body'=>[254,115,309,115,309,244,254,244,], 'legs'=>[254,234,259,234,304,234,309,234,335,363,219,363,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 61, 'w'=>122, 'h'=>302, 'head'=>[259, 61,299, 61,299,111,259,111,], 'body'=>[264,106,319,106,319,239,264,239,], 'legs'=>[264,229,269,229,314,229,319,229,335,363,221,363,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 61, 'w'=>120, 'h'=>304, 'head'=>[260, 61,295, 61,295,111,260,111,], 'body'=>[237,106,292,106,292,240,237,240,], 'legs'=>[237,230,242,230,287,230,292,230,317,365,221,365,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 71, 'w'=>125, 'h'=>296, 'head'=>[266, 71,302, 71,302,121,266,121,], 'body'=>[236,116,291,116,291,246,236,246,], 'legs'=>[236,236,241,236,286,236,291,236,331,367,235,367,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 83, 'w'=>125, 'h'=>281, 'head'=>[266, 83,308, 83,308,133,266,133,], 'body'=>[232,128,287,128,287,251,232,251,], 'legs'=>[232,241,237,241,282,241,287,241,318,364,247,364,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 95, 'w'=>135, 'h'=>270, 'head'=>[253, 95,306, 95,306,145,253,145,], 'body'=>[221,140,276,140,276,257,221,257,], 'legs'=>[221,247,226,247,271,247,276,247,321,365,243,365,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>107, 'w'=>161, 'h'=>251, 'head'=>[230,107,283,107,283,157,230,157,], 'body'=>[210,152,265,152,265,260,210,260,], 'legs'=>[210,250,215,250,260,250,265,250,334,358,240,358,], 'ex'=>1 },
+{ 'x'=>170, 'y'=>106, 'w'=>191, 'h'=>254, 'head'=>[229,106,266,106,266,156,229,156,], 'body'=>[199,151,254,151,254,260,199,260,], 'legs'=>[199,250,204,250,249,250,254,250,360,360,229,360,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>124, 'w'=>210, 'h'=>245, 'head'=>[209,124,239,124,239,174,209,174,], 'body'=>[189,169,244,169,244,274,189,274,], 'legs'=>[189,264,194,264,239,264,244,264,372,369,221,369,], 'ex'=>1 },
+{ 'x'=>146, 'y'=>153, 'w'=>245, 'h'=>236, 'head'=>[183,153,207,153,207,203,183,203,], 'body'=>[176,198,231,198,231,298,176,298,], 'legs'=>[176,288,181,288,226,288,231,288,389,389,216,389,], 'ex'=>1 },
+{ 'x'=>125, 'y'=>185, 'w'=>266, 'h'=>200, 'head'=>[154,185,170,185,170,235,154,235,], 'body'=>[155,230,210,230,210,312,155,312,], 'legs'=>[155,302,160,302,205,302,210,302,390,385,147,385,], 'ex'=>1 },
+{ 'x'=>101, 'y'=>241, 'w'=>290, 'h'=>149, 'head'=>[125,241,144,241,144,291,125,291,], 'body'=>[125,286,180,286,180,343,125,343,], 'legs'=>[125,333,130,333,175,333,180,333,265,390,139,390,], 'ex'=>1 },
+{ 'x'=> 83, 'y'=>281, 'w'=>280, 'h'=>110, 'head'=>[105,281,206,281,206,331,105,331,], 'body'=>[114,326,169,326,169,363,114,363,], 'legs'=>[114,353,119,353,164,353,169,353,162,391,137,391,], 'ex'=>1 },
+{ 'x'=> 50, 'y'=>287, 'w'=>296, 'h'=>105, 'head'=>[ 95,287,246,287,246,337, 95,337,], 'body'=>[108,332,163,332,163,367,108,367,], 'legs'=>[108,357,113,357,158,357,163,357,155,392,136,392,], 'ex'=>1 },
+{ 'x'=> 34, 'y'=>282, 'w'=>294, 'h'=>110, 'head'=>[ 94,282,230,282,230,332, 94,332,], 'body'=>[ 79,327,134,327,134,364, 79,364,], 'legs'=>[ 79,354, 84,354,129,354,134,354,149,392,131,392,], 'ex'=>1 },
+{ 'x'=> 35, 'y'=>285, 'w'=>272, 'h'=>102, 'head'=>[ 78,285,213,285,213,335, 78,335,], 'body'=>[ 89,330,144,330,144,363, 89,363,], 'legs'=>[ 89,353, 94,353,139,353,144,353,134,387,110,387,], 'ex'=>1 },
+{ 'x'=> 30, 'y'=>288, 'w'=>287, 'h'=>104, 'head'=>[ 72,288,218,288,218,338, 72,338,], 'body'=>[ 45,333,100,333,100,367, 45,367,], 'legs'=>[ 45,357, 50,357, 95,357,100,357,128,392,104,392,], 'ex'=>1 },
+{ 'x'=> 32, 'y'=>290, 'w'=>296, 'h'=>103, 'head'=>[ 65,290,199,290,199,340, 65,340,], 'body'=>[ 91,335,146,335,146,369, 91,369,], 'legs'=>[ 91,359, 96,359,141,359,146,359,129,393,108,393,], 'ex'=>1 },
+{ 'x'=> 53, 'y'=>277, 'w'=>293, 'h'=>116, 'head'=>[ 74,277,171,277,171,327, 74,327,], 'body'=>[ 99,322,154,322,154,362, 99,362,], 'legs'=>[ 99,352,104,352,149,352,154,352,129,393, 74,393,], 'ex'=>1 },
+{ 'x'=> 63, 'y'=>273, 'w'=>277, 'h'=>120, 'head'=>[ 81,273,178,273,178,323, 81,323,], 'body'=>[112,318,167,318,167,360,112,360,], 'legs'=>[112,350,117,350,162,350,167,350,130,393,108,393,], 'ex'=>1 },
+{ 'x'=> 76, 'y'=>269, 'w'=>247, 'h'=>124, 'head'=>[ 85,269,176,269,176,319, 85,319,], 'body'=>[107,314,162,314,162,358,107,358,], 'legs'=>[107,348,112,348,157,348,162,348,131,393,107,393,], 'ex'=>1 },
+{ 'x'=> 85, 'y'=>254, 'w'=>203, 'h'=>139, 'head'=>[102,254,150,254,150,304,102,304,], 'body'=>[107,299,162,299,162,351,107,351,], 'legs'=>[107,341,112,341,157,341,162,341,132,393,107,393,], 'ex'=>1 },
+{ 'x'=> 92, 'y'=>243, 'w'=>190, 'h'=>146, 'head'=>[108,243,157,243,157,293,108,293,], 'body'=>[113,288,168,288,168,343,113,343,], 'legs'=>[113,333,118,333,163,333,168,333,143,389,108,389,], 'ex'=>1 },
+{ 'x'=> 98, 'y'=>238, 'w'=>182, 'h'=>153, 'head'=>[112,238,169,238,169,288,112,288,], 'body'=>[125,283,180,283,180,342,125,342,], 'legs'=>[125,332,130,332,175,332,180,332,163,391,107,391,], 'ex'=>1 },
+{ 'x'=>104, 'y'=>226, 'w'=>176, 'h'=>165, 'head'=>[120,226,177,226,177,276,120,276,], 'body'=>[136,271,191,271,191,336,136,336,], 'legs'=>[136,326,141,326,186,326,191,326,164,391,108,391,], 'ex'=>1 },
+{ 'x'=>104, 'y'=>214, 'w'=>142, 'h'=>163, 'head'=>[130,214,183,214,183,264,130,264,], 'body'=>[141,259,196,259,196,323,141,323,], 'legs'=>[141,313,146,313,191,313,196,313,218,377,107,377,], 'ex'=>1 },
+{ 'x'=>104, 'y'=>209, 'w'=>134, 'h'=>168, 'head'=>[135,209,198,209,198,259,135,259,], 'body'=>[145,254,200,254,200,320,145,320,], 'legs'=>[145,310,150,310,195,310,200,310,199,377,107,377,], 'ex'=>1 },
+{ 'x'=>110, 'y'=>195, 'w'=>122, 'h'=>182, 'head'=>[141,195,201,195,201,245,141,245,], 'body'=>[144,240,199,240,199,313,144,313,], 'legs'=>[144,303,149,303,194,303,199,303,199,377,113,377,], 'ex'=>1 },
+{ 'x'=> 90, 'y'=>176, 'w'=>131, 'h'=>200, 'head'=>[137,176,195,176,195,226,137,226,], 'body'=>[131,221,186,221,186,303,131,303,], 'legs'=>[131,293,136,293,181,293,186,293,200,376, 93,376,], 'ex'=>1 },
+{ 'x'=> 86, 'y'=>161, 'w'=>133, 'h'=>215, 'head'=>[136,161,189,161,189,211,136,211,], 'body'=>[122,206,177,206,177,296,122,296,], 'legs'=>[122,286,127,286,172,286,177,286,201,376, 89,376,], 'ex'=>1 },
+{ 'x'=> 86, 'y'=>144, 'w'=>136, 'h'=>226, 'head'=>[133,144,183,144,183,194,133,194,], 'body'=>[122,189,177,189,177,284,122,284,], 'legs'=>[122,274,127,274,172,274,177,274,200,370, 89,370,], 'ex'=>1 },
+{ 'x'=> 83, 'y'=>128, 'w'=>137, 'h'=>245, 'head'=>[128,128,177,128,177,178,128,178,], 'body'=>[120,173,175,173,175,278,120,278,], 'legs'=>[120,268,125,268,170,268,175,268,204,373, 86,373,], 'ex'=>1 },
+{ 'x'=> 85, 'y'=>113, 'w'=>139, 'h'=>259, 'head'=>[129,113,173,113,173,163,129,163,], 'body'=>[116,158,171,158,171,270,116,270,], 'legs'=>[116,260,121,260,166,260,171,260,218,372, 88,372,], 'ex'=>1 },
+{ 'x'=> 86, 'y'=>101, 'w'=>142, 'h'=>272, 'head'=>[133,101,175,101,175,151,133,151,], 'body'=>[117,146,172,146,172,264,117,264,], 'legs'=>[117,254,122,254,167,254,172,254,224,373, 89,373,], 'ex'=>1 },
+{ 'x'=> 87, 'y'=> 89, 'w'=>154, 'h'=>287, 'head'=>[145, 89,191, 89,191,139,145,139,], 'body'=>[130,134,185,134,185,260,130,260,], 'legs'=>[130,250,135,250,180,250,185,250,226,376, 90,376,], 'ex'=>1 },
+{ 'x'=> 95, 'y'=> 80, 'w'=>134, 'h'=>295, 'head'=>[141, 80,184, 80,184,130,141,130,], 'body'=>[120,125,175,125,175,255,120,255,], 'legs'=>[120,245,125,245,170,245,175,245,225,375, 98,375,], 'ex'=>1 },
+{ 'x'=> 95, 'y'=> 63, 'w'=>135, 'h'=>312, 'head'=>[144, 63,186, 63,186,113,144,113,], 'body'=>[127,108,182,108,182,246,127,246,], 'legs'=>[127,236,132,236,177,236,182,236,223,375, 98,375,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 58, 'w'=>137, 'h'=>312, 'head'=>[270, 58,314, 58,314,108,270,108,], 'body'=>[244,103,299,103,299,241,244,241,], 'legs'=>[244,231,249,231,294,231,299,231,336,370,215,370,], 'ex'=>1 },
+{ 'x'=>211, 'y'=> 55, 'w'=>128, 'h'=>315, 'head'=>[254, 55,294, 55,294,105,254,105,], 'body'=>[234,100,289,100,289,240,234,240,], 'legs'=>[234,230,239,230,284,230,289,230,335,370,214,370,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 59, 'w'=>106, 'h'=>303, 'head'=>[240, 59,280, 59,280,109,240,109,], 'body'=>[223,104,278,104,278,238,223,238,], 'legs'=>[223,228,228,228,273,228,278,228,316,362,215,362,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 65, 'w'=>110, 'h'=>305, 'head'=>[245, 65,288, 65,288,115,245,115,], 'body'=>[227,110,282,110,282,245,227,245,], 'legs'=>[227,235,232,235,277,235,282,235,316,370,213,370,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 68, 'w'=>112, 'h'=>300, 'head'=>[251, 68,295, 68,295,118,251,118,], 'body'=>[229,113,284,113,284,245,229,245,], 'legs'=>[229,235,234,235,279,235,284,235,315,368,210,368,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 70, 'w'=>121, 'h'=>298, 'head'=>[239, 70,282, 70,282,120,239,120,], 'body'=>[222,115,277,115,277,246,222,246,], 'legs'=>[222,236,227,236,272,236,277,236,316,368,202,368,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 68, 'w'=>121, 'h'=>299, 'head'=>[231, 68,272, 68,272,118,231,118,], 'body'=>[218,113,273,113,273,245,218,245,], 'legs'=>[218,235,223,235,268,235,273,235,316,367,202,367,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 66, 'w'=>121, 'h'=>301, 'head'=>[223, 66,263, 66,263,116,223,116,], 'body'=>[213,111,268,111,268,244,213,244,], 'legs'=>[213,234,218,234,263,234,268,234,316,367,202,367,], 'ex'=>1 },
+{ 'x'=>189, 'y'=> 73, 'w'=>130, 'h'=>294, 'head'=>[205, 73,246, 73,246,123,205,123,], 'body'=>[204,118,259,118,259,247,204,247,], 'legs'=>[204,237,209,237,254,237,259,237,315,367,200,367,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 77, 'w'=>135, 'h'=>290, 'head'=>[198, 77,238, 77,238,127,198,127,], 'body'=>[201,122,256,122,256,249,201,249,], 'legs'=>[201,239,206,239,251,239,256,239,315,367,208,367,], 'ex'=>1 },
+{ 'x'=>179, 'y'=> 84, 'w'=>140, 'h'=>282, 'head'=>[191, 84,235, 84,235,134,191,134,], 'body'=>[201,129,256,129,256,252,201,252,], 'legs'=>[201,242,206,242,251,242,256,242,315,366,202,366,], 'ex'=>1 },
+{ 'x'=>175, 'y'=> 92, 'w'=>143, 'h'=>274, 'head'=>[183, 92,228, 92,228,142,183,142,], 'body'=>[194,137,249,137,249,256,194,256,], 'legs'=>[194,246,199,246,244,246,249,246,314,366,200,366,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 94, 'w'=>136, 'h'=>270, 'head'=>[181, 94,228, 94,228,144,181,144,], 'body'=>[191,139,246,139,246,256,191,256,], 'legs'=>[191,246,196,246,241,246,246,246,306,364,201,364,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 54, 'w'=>122, 'h'=>313, 'head'=>[247, 54,282, 54,282,104,247,104,], 'body'=>[234, 99,289, 99,289,238,234,238,], 'legs'=>[234,228,239,228,284,228,289,228,318,367,225,367,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 54, 'w'=>117, 'h'=>320, 'head'=>[259, 54,288, 54,288,104,259,104,], 'body'=>[238, 99,293, 99,293,241,238,241,], 'legs'=>[238,231,243,231,288,231,293,231,326,374,218,374,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 90, 'w'=>121, 'h'=>284, 'head'=>[265, 90,297, 90,297,140,265,140,], 'body'=>[235,135,290,135,290,259,235,259,], 'legs'=>[235,249,240,249,285,249,290,249,329,374,215,374,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>113, 'w'=>125, 'h'=>263, 'head'=>[270,113,307,113,307,163,270,163,], 'body'=>[234,158,289,158,289,272,234,272,], 'legs'=>[234,262,239,262,284,262,289,262,332,376,217,376,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>146, 'w'=>128, 'h'=>232, 'head'=>[260,146,304,146,304,196,260,196,], 'body'=>[233,191,288,191,288,289,233,289,], 'legs'=>[233,279,238,279,283,279,288,279,330,378,218,378,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>173, 'w'=>131, 'h'=>204, 'head'=>[249,173,303,173,303,223,249,223,], 'body'=>[229,218,284,218,284,302,229,302,], 'legs'=>[229,292,234,292,279,292,284,292,327,377,221,377,], 'ex'=>1 },
+{ 'x'=>196, 'y'=>195, 'w'=>134, 'h'=>182, 'head'=>[239,195,299,195,299,245,239,245,], 'body'=>[223,240,278,240,278,313,223,313,], 'legs'=>[223,303,228,303,273,303,278,303,325,377,221,377,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>212, 'w'=>134, 'h'=>163, 'head'=>[232,212,286,212,286,262,232,262,], 'body'=>[221,257,276,257,276,321,221,321,], 'legs'=>[221,311,226,311,271,311,276,311,323,375,220,375,], 'ex'=>1 },
+{ 'x'=>193, 'y'=>225, 'w'=>131, 'h'=>155, 'head'=>[220,225,274,225,274,275,220,275,], 'body'=>[205,270,260,270,260,330,205,330,], 'legs'=>[205,320,210,320,255,320,260,320,292,380,217,380,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 54, 'w'=>118, 'h'=>315, 'head'=>[237, 54,274, 54,274,104,237,104,], 'body'=>[220, 99,275, 99,275,239,220,239,], 'legs'=>[220,229,225,229,270,229,275,229,326,369,219,369,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 50, 'w'=>122, 'h'=>318, 'head'=>[234, 50,270, 50,270,100,234,100,], 'body'=>[218, 95,273, 95,273,236,218,236,], 'legs'=>[218,226,223,226,268,226,273,226,326,368,218,368,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 49, 'w'=>129, 'h'=>319, 'head'=>[230, 49,264, 49,264, 99,230, 99,], 'body'=>[214, 94,269, 94,269,236,214,236,], 'legs'=>[214,226,219,226,264,226,269,226,325,368,220,368,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 48, 'w'=>136, 'h'=>318, 'head'=>[224, 48,258, 48,258, 98,224, 98,], 'body'=>[209, 93,264, 93,264,234,209,234,], 'legs'=>[209,224,214,224,259,224,264,224,325,366,219,366,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 48, 'w'=>142, 'h'=>320, 'head'=>[219, 48,253, 48,253, 98,219, 98,], 'body'=>[207, 93,262, 93,262,235,207,235,], 'legs'=>[207,225,212,225,257,225,262,225,326,368,220,368,], 'ex'=>1 },
+{ 'x'=>183, 'y'=> 48, 'w'=>146, 'h'=>320, 'head'=>[214, 48,248, 48,248, 98,214, 98,], 'body'=>[207, 93,262, 93,262,235,207,235,], 'legs'=>[207,225,212,225,257,225,262,225,325,368,216,368,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 47, 'w'=>144, 'h'=>320, 'head'=>[209, 47,246, 47,246, 97,209, 97,], 'body'=>[205, 92,260, 92,260,234,205,234,], 'legs'=>[205,224,210,224,255,224,260,224,322,367,218,367,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 46, 'w'=>137, 'h'=>321, 'head'=>[213, 46,250, 46,250, 96,213, 96,], 'body'=>[213, 91,268, 91,268,234,213,234,], 'legs'=>[213,224,218,224,263,224,268,224,314,367,218,367,], 'ex'=>1 },
+{ 'x'=>183, 'y'=> 43, 'w'=>131, 'h'=>324, 'head'=>[225, 43,257, 43,257, 93,225, 93,], 'body'=>[222, 88,277, 88,277,232,222,232,], 'legs'=>[222,222,227,222,272,222,277,222,310,367,218,367,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 45, 'w'=>131, 'h'=>323, 'head'=>[239, 45,270, 45,270, 95,239, 95,], 'body'=>[231, 90,286, 90,286,234,231,234,], 'legs'=>[231,224,236,224,281,224,286,224,313,368,218,368,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 46, 'w'=>123, 'h'=>322, 'head'=>[256, 46,281, 46,281, 96,256, 96,], 'body'=>[240, 91,295, 91,295,234,240,234,], 'legs'=>[240,224,245,224,290,224,295,224,311,368,218,368,], 'ex'=>1 },
+{ 'x'=>217, 'y'=> 46, 'w'=>111, 'h'=>322, 'head'=>[266, 46,291, 46,291, 96,266, 96,], 'body'=>[243, 91,298, 91,298,234,243,234,], 'legs'=>[243,224,248,224,293,224,298,224,312,368,220,368,], 'ex'=>1 },
+{ 'x'=>216, 'y'=> 46, 'w'=>116, 'h'=>321, 'head'=>[273, 46,297, 46,297, 96,273, 96,], 'body'=>[247, 91,302, 91,302,234,247,234,], 'legs'=>[247,224,252,224,297,224,302,224,312,367,219,367,], 'ex'=>1 },
+{ 'x'=>225, 'y'=> 45, 'w'=>106, 'h'=>323, 'head'=>[276, 45,300, 45,300, 95,276, 95,], 'body'=>[244, 90,299, 90,299,234,244,234,], 'legs'=>[244,224,249,224,294,224,299,224,313,368,228,368,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 68, 'w'=>145, 'h'=>296, 'head'=>[253, 68,296, 68,296,118,253,118,], 'body'=>[234,113,289,113,289,243,234,243,], 'legs'=>[234,233,239,233,284,233,289,233,313,364,195,364,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 72, 'w'=>143, 'h'=>291, 'head'=>[243, 72,299, 72,299,122,243,122,], 'body'=>[230,117,285,117,285,245,230,245,], 'legs'=>[230,235,235,235,280,235,285,235,313,363,187,363,], 'ex'=>1 },
+{ 'x'=>181, 'y'=> 76, 'w'=>134, 'h'=>290, 'head'=>[230, 76,280, 76,280,126,230,126,], 'body'=>[225,121,280,121,280,248,225,248,], 'legs'=>[225,238,230,238,275,238,280,238,311,366,184,366,], 'ex'=>1 },
+{ 'x'=>184, 'y'=> 86, 'w'=>134, 'h'=>277, 'head'=>[214, 86,263, 86,263,136,214,136,], 'body'=>[219,131,274,131,274,252,219,252,], 'legs'=>[219,242,224,242,269,242,274,242,314,363,187,363,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>105, 'w'=>131, 'h'=>255, 'head'=>[197,105,246,105,246,155,197,155,], 'body'=>[208,150,263,150,263,260,208,260,], 'legs'=>[208,250,213,250,258,250,263,250,312,360,188,360,], 'ex'=>1 },
+{ 'x'=>179, 'y'=>125, 'w'=>136, 'h'=>235, 'head'=>[191,125,242,125,242,175,191,175,], 'body'=>[201,170,256,170,256,270,201,270,], 'legs'=>[201,260,206,260,251,260,256,260,311,360,187,360,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 59, 'w'=>115, 'h'=>305, 'head'=>[262, 59,297, 59,297,109,262,109,], 'body'=>[237,104,292,104,292,239,237,239,], 'legs'=>[237,229,242,229,287,229,292,229,321,364,221,364,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 89, 'w'=>113, 'h'=>275, 'head'=>[247, 89,283, 89,283,139,247,139,], 'body'=>[232,134,287,134,287,254,232,254,], 'legs'=>[232,244,237,244,282,244,287,244,321,364,221,364,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>126, 'w'=>111, 'h'=>233, 'head'=>[250,126,286,126,286,176,250,176,], 'body'=>[235,171,290,171,290,270,235,270,], 'legs'=>[235,260,240,260,285,260,290,260,322,359,224,359,], 'ex'=>1 },
+{ 'x'=>219, 'y'=>170, 'w'=>119, 'h'=>196, 'head'=>[263,170,307,170,307,220,263,220,], 'body'=>[237,215,292,215,292,295,237,295,], 'legs'=>[237,285,242,285,287,285,292,285,323,366,222,366,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>186, 'w'=>133, 'h'=>175, 'head'=>[277,186,321,186,321,236,277,236,], 'body'=>[243,231,298,231,298,301,243,301,], 'legs'=>[243,291,248,291,293,291,298,291,324,361,223,361,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>179, 'w'=>128, 'h'=>186, 'head'=>[267,179,309,179,309,229,267,229,], 'body'=>[240,224,295,224,295,299,240,299,], 'legs'=>[240,289,245,289,290,289,295,289,323,365,223,365,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>173, 'w'=>123, 'h'=>193, 'head'=>[257,173,294,173,294,223,257,223,], 'body'=>[234,218,289,218,289,297,234,297,], 'legs'=>[234,287,239,287,284,287,289,287,324,366,224,366,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>182, 'w'=>125, 'h'=>183, 'head'=>[248,182,286,182,286,232,248,232,], 'body'=>[232,227,287,227,287,301,232,301,], 'legs'=>[232,291,237,291,282,291,287,291,323,365,221,365,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>172, 'w'=>131, 'h'=>190, 'head'=>[241,172,282,172,282,222,241,222,], 'body'=>[223,217,278,217,278,294,223,294,], 'legs'=>[223,284,228,284,273,284,278,284,326,362,223,362,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>170, 'w'=>125, 'h'=>194, 'head'=>[250,170,291,170,291,220,250,220,], 'body'=>[230,215,285,215,285,294,230,294,], 'legs'=>[230,284,235,284,280,284,285,284,325,364,224,364,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>169, 'w'=>124, 'h'=>197, 'head'=>[269,169,309,169,309,219,269,219,], 'body'=>[237,214,292,214,292,295,237,295,], 'legs'=>[237,285,242,285,287,285,292,285,323,366,223,366,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>169, 'w'=>124, 'h'=>197, 'head'=>[269,169,309,169,309,219,269,219,], 'body'=>[237,214,292,214,292,295,237,295,], 'legs'=>[237,285,242,285,287,285,292,285,323,366,223,366,], 'ex'=>1 },
+{ 'x'=>218, 'y'=>176, 'w'=>164, 'h'=>191, 'head'=>[284,176,327,176,327,226,284,226,], 'body'=>[235,221,290,221,290,299,235,299,], 'legs'=>[235,289,240,289,285,289,290,289,319,367,221,367,], 'ex'=>1 },
+{ 'x'=>217, 'y'=>189, 'w'=>211, 'h'=>176, 'head'=>[283,189,339,189,339,239,283,239,], 'body'=>[231,234,286,234,286,304,231,304,], 'legs'=>[231,294,236,294,281,294,286,294,319,365,220,365,], 'ex'=>0, 'hit'=>[361,247,420,263,428,283,341,286,] },
+{ 'x'=>206, 'y'=>191, 'w'=>127, 'h'=>173, 'head'=>[245,191,288,191,288,241,245,241,], 'body'=>[221,236,276,236,276,305,221,305,], 'legs'=>[221,295,226,295,271,295,276,295,318,364,240,364,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>183, 'w'=>138, 'h'=>183, 'head'=>[231,183,273,183,273,233,231,233,], 'body'=>[224,228,279,228,279,302,224,302,], 'legs'=>[224,292,229,292,274,292,279,292,318,366,238,366,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>179, 'w'=>158, 'h'=>187, 'head'=>[216,179,258,179,258,229,216,229,], 'body'=>[229,224,284,224,284,300,229,300,], 'legs'=>[229,290,234,290,279,290,284,290,351,366,238,366,], 'ex'=>1 },
+{ 'x'=>191, 'y'=>179, 'w'=>209, 'h'=>186, 'head'=>[204,179,248,179,248,229,204,229,], 'body'=>[232,224,287,224,287,299,232,299,], 'legs'=>[232,289,237,289,282,289,287,289,396,365,239,365,], 'ex'=>1 },
+{ 'x'=>173, 'y'=>181, 'w'=>262, 'h'=>185, 'head'=>[189,181,238,181,238,231,189,231,], 'body'=>[228,207,283,207,283,282,228,282,], 'legs'=>[257,365,234,361,220,275,294,237,429,339,296,304,], 'ex'=>0, 'hit'=>[322,261,427,322,428,345,303,279,] },
+{ 'x'=>214, 'y'=> 51, 'w'=>125, 'h'=>316, 'head'=>[254, 51,287, 51,287,101,254,101,], 'body'=>[234, 96,289, 96,289,236,234,236,], 'legs'=>[234,226,239,226,284,226,289,226,313,367,217,367,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 50, 'w'=>121, 'h'=>317, 'head'=>[250, 50,282, 50,282,100,250,100,], 'body'=>[229, 95,284, 95,284,236,229,236,], 'legs'=>[229,226,234,226,279,226,284,226,314,367,218,367,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 49, 'w'=>119, 'h'=>318, 'head'=>[239, 49,268, 49,268, 99,239, 99,], 'body'=>[219, 94,274, 94,274,235,219,235,], 'legs'=>[219,225,224,225,269,225,274,225,313,367,217,367,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 47, 'w'=>120, 'h'=>322, 'head'=>[230, 47,258, 47,258, 97,230, 97,], 'body'=>[215, 92,270, 92,270,235,215,235,], 'legs'=>[215,225,220,225,265,225,270,225,314,369,217,369,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 45, 'w'=>119, 'h'=>324, 'head'=>[226, 45,250, 45,250, 95,226, 95,], 'body'=>[211, 90,266, 90,266,234,211,234,], 'legs'=>[211,224,216,224,261,224,266,224,312,369,217,369,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 44, 'w'=>112, 'h'=>324, 'head'=>[227, 44,251, 44,251, 94,227, 94,], 'body'=>[213, 89,268, 89,268,233,213,233,], 'legs'=>[213,223,218,223,263,223,268,223,305,368,217,368,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 43, 'w'=>110, 'h'=>324, 'head'=>[230, 43,254, 43,254, 93,230, 93,], 'body'=>[213, 88,268, 88,268,232,213,232,], 'legs'=>[213,222,218,222,263,222,268,222,304,367,214,367,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 62, 'w'=>114, 'h'=>303, 'head'=>[254, 62,291, 62,291,112,254,112,], 'body'=>[237,107,292,107,292,241,237,241,], 'legs'=>[237,231,242,231,287,231,292,231,320,365,221,365,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 63, 'w'=>107, 'h'=>302, 'head'=>[240, 63,279, 63,279,113,240,113,], 'body'=>[227,108,282,108,282,241,227,241,], 'legs'=>[227,231,232,231,277,231,282,231,321,365,221,365,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 59, 'w'=>112, 'h'=>305, 'head'=>[229, 59,266, 59,266,109,229,109,], 'body'=>[218,104,273,104,273,239,218,239,], 'legs'=>[218,229,223,229,268,229,273,229,316,364,221,364,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 59, 'w'=>100, 'h'=>307, 'head'=>[221, 59,258, 59,258,109,221,109,], 'body'=>[215,104,270,104,270,240,215,240,], 'legs'=>[215,230,220,230,265,230,270,230,287,366,222,366,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 59, 'w'=> 96, 'h'=>308, 'head'=>[218, 59,254, 59,254,109,218,109,], 'body'=>[214,104,269,104,269,240,214,240,], 'legs'=>[214,230,219,230,264,230,269,230,275,367,221,367,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 60, 'w'=>128, 'h'=>305, 'head'=>[227, 60,265, 60,265,110,227,110,], 'body'=>[224,105,279,105,279,240,224,240,], 'legs'=>[224,230,229,230,274,230,279,230,333,365,212,365,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 58, 'w'=>129, 'h'=>306, 'head'=>[237, 58,274, 58,274,108,237,108,], 'body'=>[233,103,288,103,288,238,233,238,], 'legs'=>[233,228,238,228,283,228,288,228,334,364,212,364,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 53, 'w'=>127, 'h'=>311, 'head'=>[253, 53,288, 53,288,103,253,103,], 'body'=>[241, 98,296, 98,296,236,241,236,], 'legs'=>[241,226,246,226,291,226,296,226,333,364,213,364,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 52, 'w'=>194, 'h'=>311, 'head'=>[269, 52,316, 52,316,102,269,102,], 'body'=>[244, 97,299, 97,299,235,244,235,], 'legs'=>[244,225,249,225,294,225,299,225,333,363,213,363,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 56, 'w'=>206, 'h'=>308, 'head'=>[275, 56,318, 56,318,106,275,106,], 'body'=>[243,101,298,101,298,237,243,237,], 'legs'=>[243,227,248,227,293,227,298,227,328,364,211,364,], 'ex'=>0, 'hit'=>[360, 94,405, 87,410,105,360,104,] },
+{ 'x'=>201, 'y'=> 71, 'w'=>202, 'h'=>295, 'head'=>[279, 71,317, 71,317,121,279,121,], 'body'=>[242,116,297,116,297,246,242,246,], 'legs'=>[242,236,247,236,292,236,297,236,333,366,204,366,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 72, 'w'=>174, 'h'=>290, 'head'=>[279, 72,319, 72,319,122,279,122,], 'body'=>[245,117,300,117,300,244,245,244,], 'legs'=>[245,234,250,234,295,234,300,234,330,362,204,362,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 66, 'w'=>138, 'h'=>296, 'head'=>[275, 66,314, 66,314,116,275,116,], 'body'=>[243,111,298,111,298,241,243,241,], 'legs'=>[243,231,248,231,293,231,298,231,329,362,208,362,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 63, 'w'=>130, 'h'=>301, 'head'=>[265, 63,308, 63,308,113,265,113,], 'body'=>[234,108,289,108,289,241,234,241,], 'legs'=>[234,231,239,231,284,231,289,231,334,364,211,364,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 65, 'w'=>131, 'h'=>302, 'head'=>[252, 65,295, 65,295,115,252,115,], 'body'=>[226,110,281,110,281,243,226,243,], 'legs'=>[226,233,231,233,276,233,281,233,333,367,209,367,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 65, 'w'=>128, 'h'=>301, 'head'=>[242, 65,282, 65,282,115,242,115,], 'body'=>[220,110,275,110,275,243,220,243,], 'legs'=>[220,233,225,233,270,233,275,233,332,366,211,366,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 56, 'w'=>134, 'h'=>314, 'head'=>[239, 56,276, 56,276,106,239,106,], 'body'=>[223,101,278,101,278,240,223,240,], 'legs'=>[223,230,228,230,273,230,278,230,331,370,211,370,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 50, 'w'=>129, 'h'=>320, 'head'=>[251, 50,291, 50,291,100,251,100,], 'body'=>[237, 95,292, 95,292,237,237,237,], 'legs'=>[237,227,242,227,287,227,292,227,333,370,211,370,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 55, 'w'=>177, 'h'=>313, 'head'=>[270, 55,304, 55,304,105,270,105,], 'body'=>[244,100,299,100,299,239,244,239,], 'legs'=>[244,229,249,229,294,229,299,229,333,368,210,368,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 68, 'w'=>218, 'h'=>299, 'head'=>[278, 68,313, 68,313,118,278,118,], 'body'=>[240,113,295,113,295,245,240,245,], 'legs'=>[240,235,245,235,290,235,295,235,328,367,209,367,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 83, 'w'=>223, 'h'=>287, 'head'=>[277, 83,316, 83,316,133,277,133,], 'body'=>[239,128,294,128,294,254,239,254,], 'legs'=>[239,244,244,244,289,244,294,244,334,370,205,370,], 'ex'=>0, 'hit'=>[369,138,419,151,419,165,362,153,] },
+{ 'x'=>239, 'y'=> 49, 'w'=>129, 'h'=>319, 'head'=>[289, 49,325, 49,325, 99,289, 99,], 'body'=>[265, 94,320, 94,320,236,265,236,], 'legs'=>[265,226,270,226,315,226,320,226,347,368,242,368,], 'ex'=>1 },
+{ 'x'=>239, 'y'=> 59, 'w'=>132, 'h'=>311, 'head'=>[294, 59,330, 59,330,109,294,109,], 'body'=>[266,104,321,104,321,242,266,242,], 'legs'=>[266,232,271,232,316,232,321,232,348,370,242,370,], 'ex'=>1 },
+{ 'x'=>239, 'y'=> 73, 'w'=>136, 'h'=>290, 'head'=>[295, 73,333, 73,333,123,295,123,], 'body'=>[265,118,320,118,320,245,265,245,], 'legs'=>[265,235,270,235,315,235,320,235,350,363,242,363,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 76, 'w'=>131, 'h'=>293, 'head'=>[298, 76,333, 76,333,126,298,126,], 'body'=>[263,121,318,121,318,250,263,250,], 'legs'=>[263,240,268,240,313,240,318,240,350,369,245,369,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 68, 'w'=>115, 'h'=>299, 'head'=>[293, 68,327, 68,327,118,293,118,], 'body'=>[260,113,315,113,315,245,260,245,], 'legs'=>[260,235,265,235,310,235,315,235,348,367,253,367,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 59, 'w'=>124, 'h'=>314, 'head'=>[250, 59,285, 59,285,109,250,109,], 'body'=>[227,104,282,104,282,243,227,243,], 'legs'=>[227,233,232,233,277,233,282,233,319,373,228,373,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 56, 'w'=>152, 'h'=>319, 'head'=>[232, 56,267, 56,267,106,232,106,], 'body'=>[226,101,281,101,281,243,226,243,], 'legs'=>[226,233,231,233,276,233,281,233,322,375,231,375,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 61, 'w'=>182, 'h'=>314, 'head'=>[216, 61,251, 61,251,111,216,111,], 'body'=>[221,106,276,106,276,245,221,245,], 'legs'=>[221,235,226,235,271,235,276,235,320,375,230,375,], 'ex'=>1 },
+{ 'x'=>164, 'y'=> 64, 'w'=>201, 'h'=>296, 'head'=>[208, 64,242, 64,242,114,208,114,], 'body'=>[215,109,270,109,270,239,215,239,], 'legs'=>[215,229,220,229,265,229,270,229,263,360,236,360,], 'ex'=>1 },
+{ 'x'=>160, 'y'=> 65, 'w'=>255, 'h'=>309, 'head'=>[204, 65,238, 65,238,115,204,115,], 'body'=>[220,110,275,110,275,247,220,247,], 'legs'=>[220,237,225,237,270,237,275,237,271,374,231,374,], 'ex'=>1 },
+{ 'x'=>162, 'y'=> 65, 'w'=>302, 'h'=>296, 'head'=>[199, 65,235, 65,235,115,199,115,], 'body'=>[209,110,264,110,264,240,209,240,], 'legs'=>[209,230,214,230,259,230,264,230,267,361,233,361,], 'ex'=>0, 'hit'=>[366,173,466,165,440,198,351,195,] },
+{ 'x'=>167, 'y'=> 65, 'w'=>293, 'h'=>308, 'head'=>[197, 65,234, 65,234,115,197,115,], 'body'=>[210,110,265,110,265,246,210,246,], 'legs'=>[210,236,215,236,260,236,265,236,267,373,232,373,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 72, 'w'=>127, 'h'=>293, 'head'=>[240, 72,274, 72,274,122,240,122,], 'body'=>[218,117,273,117,273,246,218,246,], 'legs'=>[218,236,223,236,268,236,273,236,329,365,226,365,], 'ex'=>1 },
+{ 'x'=>175, 'y'=> 59, 'w'=>170, 'h'=>305, 'head'=>[208, 59,244, 59,244,109,208,109,], 'body'=>[217,104,272,104,272,239,217,239,], 'legs'=>[217,229,222,229,267,229,272,229,329,364,227,364,], 'ex'=>1 },
+{ 'x'=>167, 'y'=> 59, 'w'=>191, 'h'=>304, 'head'=>[196, 59,233, 59,233,109,196,109,], 'body'=>[223,104,278,104,278,238,223,238,], 'legs'=>[223,228,228,228,273,228,278,228,328,363,234,363,], 'ex'=>1 },
+{ 'x'=>164, 'y'=> 62, 'w'=>201, 'h'=>300, 'head'=>[190, 62,230, 62,230,112,190,112,], 'body'=>[224,107,279,107,279,239,224,239,], 'legs'=>[224,229,229,229,274,229,279,229,266,362,234,362,], 'ex'=>1 },
+{ 'x'=>162, 'y'=> 67, 'w'=>249, 'h'=>297, 'head'=>[187, 67,224, 67,224,117,187,117,], 'body'=>[220,112,275,112,275,243,220,243,], 'legs'=>[220,233,225,233,270,233,275,233,265,364,232,364,], 'ex'=>1 },
+{ 'x'=>163, 'y'=> 72, 'w'=>286, 'h'=>292, 'head'=>[189, 72,228, 72,228,122,189,122,], 'body'=>[226,117,281,117,281,245,226,245,], 'legs'=>[226,235,231,235,276,235,281,235,257,364,232,364,], 'ex'=>0, 'hit'=>[379,218,445,251,446,269,370,247,] },
+{ 'x'=>202, 'y'=> 61, 'w'=>136, 'h'=>308, 'head'=>[248, 61,283, 61,283,111,248,111,], 'body'=>[231,106,286,106,286,242,231,242,], 'legs'=>[231,232,236,232,281,232,286,232,334,369,205,369,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 77, 'w'=>132, 'h'=>286, 'head'=>[241, 77,279, 77,279,127,241,127,], 'body'=>[226,122,281,122,281,247,226,247,], 'legs'=>[226,237,231,237,276,237,281,237,334,363,206,363,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 87, 'w'=>131, 'h'=>275, 'head'=>[242, 87,278, 87,278,137,242,137,], 'body'=>[223,132,278,132,278,252,223,252,], 'legs'=>[223,242,228,242,273,242,278,242,332,362,208,362,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 97, 'w'=>135, 'h'=>275, 'head'=>[254, 97,290, 97,290,147,254,147,], 'body'=>[225,142,280,142,280,262,225,262,], 'legs'=>[225,252,230,252,275,252,280,252,331,372,203,372,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>112, 'w'=>184, 'h'=>261, 'head'=>[267,112,309,112,309,162,267,162,], 'body'=>[235,157,290,157,290,270,235,270,], 'legs'=>[235,260,240,260,285,260,290,260,329,373,202,373,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>127, 'w'=>221, 'h'=>244, 'head'=>[273,127,324,127,324,177,273,177,], 'body'=>[241,172,296,172,296,276,241,276,], 'legs'=>[241,266,246,266,291,266,296,266,330,371,202,371,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>140, 'w'=>245, 'h'=>230, 'head'=>[277,140,337,140,337,190,277,190,], 'body'=>[237,185,292,185,292,282,237,282,], 'legs'=>[237,272,242,272,287,272,292,272,330,370,200,370,], 'ex'=>1 },
+{ 'x'=>182, 'y'=>150, 'w'=>266, 'h'=>216, 'head'=>[268,150,347,150,347,200,268,200,], 'body'=>[246,195,301,195,301,285,246,285,], 'legs'=>[246,275,251,275,296,275,301,275,332,366,185,366,], 'ex'=>1 },
+{ 'x'=>155, 'y'=>174, 'w'=>242, 'h'=>185, 'head'=>[253,174,357,174,357,224,253,224,], 'body'=>[242,219,297,219,297,294,242,294,], 'legs'=>[242,284,247,284,292,284,297,284,329,359,158,359,], 'ex'=>1 },
+{ 'x'=>143, 'y'=>177, 'w'=>326, 'h'=>188, 'head'=>[221,177,304,177,304,227,221,227,], 'body'=>[211,222,266,222,266,298,211,298,], 'legs'=>[211,288,216,288,261,288,266,288,334,365,160,365,], 'ex'=>0, 'hit'=>[400,260,457,285,454,311,383,275,] },
+{ 'x'=>213, 'y'=> 65, 'w'=>128, 'h'=>295, 'head'=>[261, 65,300, 65,300,115,261,115,], 'body'=>[231,110,286,110,286,240,231,240,], 'legs'=>[231,230,236,230,281,230,286,230,323,360,216,360,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 55, 'w'=>140, 'h'=>311, 'head'=>[249, 55,283, 55,283,105,249,105,], 'body'=>[232,100,287,100,287,238,232,238,], 'legs'=>[232,228,237,228,282,228,287,228,320,366,239,366,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 51, 'w'=>178, 'h'=>316, 'head'=>[227, 51,264, 51,264,101,227,101,], 'body'=>[232, 96,287, 96,287,236,232,236,], 'legs'=>[232,226,237,226,282,226,287,226,330,367,240,367,], 'ex'=>1 },
+{ 'x'=>171, 'y'=> 56, 'w'=>226, 'h'=>314, 'head'=>[208, 56,245, 56,245,106,208,106,], 'body'=>[230,101,285,101,285,240,230,240,], 'legs'=>[230,230,235,230,280,230,285,230,274,370,242,370,], 'ex'=>1 },
+{ 'x'=>182, 'y'=> 59, 'w'=>221, 'h'=>307, 'head'=>[204, 59,240, 59,240,109,204,109,], 'body'=>[229,104,284,104,284,240,229,240,], 'legs'=>[229,230,234,230,279,230,284,230,280,366,244,366,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 63, 'w'=>283, 'h'=>303, 'head'=>[206, 63,241, 63,241,113,206,113,], 'body'=>[232,108,287,108,287,242,232,242,], 'legs'=>[232,232,237,232,282,232,287,232,285,366,247,366,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 68, 'w'=>290, 'h'=>298, 'head'=>[205, 68,242, 68,242,118,205,118,], 'body'=>[239,113,294,113,294,244,239,244,], 'legs'=>[239,234,244,234,289,234,294,234,287,366,247,366,], 'ex'=>0, 'hit'=>[407,165,480,139,468,175,407,175,] },
+{ 'x'=>211, 'y'=> 65, 'w'=>143, 'h'=>300, 'head'=>[258, 65,293, 65,293,115,258,115,], 'body'=>[224,110,279,110,279,242,224,242,], 'legs'=>[224,232,229,232,274,232,279,232,334,365,214,365,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 46, 'w'=>149, 'h'=>318, 'head'=>[268, 46,305, 46,305, 96,268, 96,], 'body'=>[261, 91,316, 91,316,232,261,232,], 'legs'=>[261,222,266,222,311,222,316,222,355,364,213,364,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 38, 'w'=>156, 'h'=>313, 'head'=>[276, 38,312, 38,312, 88,276, 88,], 'body'=>[272, 83,327, 83,327,222,272,222,], 'legs'=>[272,212,277,212,322,212,327,212,357,351,221,351,], 'ex'=>1 },
+{ 'x'=>259, 'y'=> 41, 'w'=>123, 'h'=>311, 'head'=>[283, 41,319, 41,319, 91,283, 91,], 'body'=>[279, 86,334, 86,334,224,279,224,], 'legs'=>[279,214,284,214,329,214,334,214,355,352,314,352,], 'ex'=>1 },
+{ 'x'=>274, 'y'=> 51, 'w'=>139, 'h'=>300, 'head'=>[287, 51,322, 51,322,101,287,101,], 'body'=>[287, 96,342, 96,342,228,287,228,], 'legs'=>[287,218,292,218,337,218,342,218,356,351,318,351,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 62, 'w'=>162, 'h'=>291, 'head'=>[288, 62,322, 62,322,112,288,112,], 'body'=>[286,107,341,107,341,235,286,235,], 'legs'=>[286,225,291,225,336,225,341,225,362,353,322,353,], 'ex'=>1 },
+{ 'x'=>248, 'y'=> 66, 'w'=>174, 'h'=>290, 'head'=>[288, 66,321, 66,321,116,288,116,], 'body'=>[294,111,349,111,349,238,294,238,], 'legs'=>[294,228,299,228,344,228,349,228,358,356,330,356,], 'ex'=>0, 'hit'=>[384,134,405,128,422,197,383,209,] },
+{ 'x'=>204, 'y'=> 50, 'w'=>129, 'h'=>323, 'head'=>[228, 50,263, 50,263,100,228,100,], 'body'=>[220, 95,275, 95,275,239,220,239,], 'legs'=>[220,229,225,229,270,229,275,229,329,373,211,373,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 74, 'w'=>138, 'h'=>298, 'head'=>[214, 74,249, 74,249,124,214,124,], 'body'=>[222,119,277,119,277,250,222,250,], 'legs'=>[222,240,227,240,272,240,277,240,331,372,212,372,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 64, 'w'=>146, 'h'=>310, 'head'=>[215, 64,258, 64,258,114,215,114,], 'body'=>[239,109,294,109,294,246,239,246,], 'legs'=>[239,236,244,236,289,236,294,236,334,374,211,374,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 53, 'w'=>130, 'h'=>318, 'head'=>[246, 53,288, 53,288,103,246,103,], 'body'=>[248, 98,303, 98,303,239,248,239,], 'legs'=>[248,229,253,229,298,229,303,229,331,371,213,371,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 50, 'w'=>136, 'h'=>320, 'head'=>[295, 50,324, 50,324,100,295,100,], 'body'=>[254, 95,309, 95,309,237,254,237,], 'legs'=>[254,227,259,227,304,227,309,227,331,370,215,370,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>103, 'w'=>183, 'h'=>269, 'head'=>[295,103,360,103,360,153,295,153,], 'body'=>[243,148,298,148,298,265,243,265,], 'legs'=>[243,255,248,255,293,255,298,255,331,372,211,372,], 'ex'=>0, 'hit'=>[327,113,371,113,369,163,337,164,] },
+{ 'x'=>200, 'y'=>124, 'w'=>189, 'h'=>246, 'head'=>[260,124,334,124,334,174,260,174,], 'body'=>[246,169,301,169,301,274,246,274,], 'legs'=>[246,264,251,264,296,264,301,264,332,370,203,370,], 'ex'=>0, 'hit'=>[345,123,390,165,383,194,330,191,] },
+{ 'x'=>197, 'y'=> 44, 'w'=>146, 'h'=>331, 'head'=>[253, 44,288, 44,288, 94,253, 94,], 'body'=>[229, 89,284, 89,284,237,229,237,], 'legs'=>[229,227,234,227,279,227,284,227,339,375,200,375,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 63, 'w'=>142, 'h'=>310, 'head'=>[232, 63,268, 63,268,113,232,113,], 'body'=>[213,108,268,108,268,245,213,245,], 'legs'=>[213,235,218,235,263,235,268,235,336,373,201,373,], 'ex'=>1 },
+{ 'x'=>196, 'y'=> 65, 'w'=>145, 'h'=>308, 'head'=>[223, 65,259, 65,259,115,223,115,], 'body'=>[220,110,275,110,275,246,220,246,], 'legs'=>[220,236,225,236,270,236,275,236,319,373,199,373,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 59, 'w'=>129, 'h'=>326, 'head'=>[232, 59,267, 59,267,109,232,109,], 'body'=>[253,104,308,104,308,249,253,249,], 'legs'=>[253,239,258,239,303,239,308,239,321,385,218,385,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 70, 'w'=>123, 'h'=>315, 'head'=>[245, 70,284, 70,284,120,245,120,], 'body'=>[274,115,329,115,329,255,274,255,], 'legs'=>[274,245,279,245,324,245,329,245,326,385,275,385,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 69, 'w'=>128, 'h'=>316, 'head'=>[261, 69,295, 69,295,119,261,119,], 'body'=>[283,114,338,114,338,254,283,254,], 'legs'=>[283,244,288,244,333,244,338,244,376,385,277,385,], 'ex'=>1 },
+{ 'x'=>264, 'y'=> 71, 'w'=>165, 'h'=>313, 'head'=>[302, 71,328, 71,328,121,302,121,], 'body'=>[304,116,359,116,359,255,304,255,], 'legs'=>[304,245,309,245,354,245,359,245,425,384,278,384,], 'ex'=>1 },
+{ 'x'=>272, 'y'=> 66, 'w'=>164, 'h'=>322, 'head'=>[338, 66,365, 66,365,116,338,116,], 'body'=>[322,111,377,111,377,254,322,254,], 'legs'=>[322,244,327,244,372,244,377,244,432,388,282,388,], 'ex'=>1 },
+{ 'x'=>281, 'y'=> 63, 'w'=>153, 'h'=>326, 'head'=>[383, 63,410, 63,410,113,383,113,], 'body'=>[333,108,388,108,388,253,333,253,], 'legs'=>[333,243,338,243,383,243,388,243,429,389,284,389,], 'ex'=>1 },
+{ 'x'=>281, 'y'=> 95, 'w'=>186, 'h'=>290, 'head'=>[378, 95,435, 95,435,145,378,145,], 'body'=>[335,140,390,140,390,267,335,267,], 'legs'=>[335,257,340,257,385,257,390,257,430,385,284,385,], 'ex'=>0, 'hit'=>[416, 98,461,101,453,151,423,138,] },
+{ 'x'=>274, 'y'=>116, 'w'=>210, 'h'=>260, 'head'=>[395,119,477,119,477,169,395,169,], 'body'=>[357,134,412,134,412,246,357,246,], 'legs'=>[324,263,329,263,374,263,379,263,431,376,277,376,], 'ex'=>0, 'hit'=>[430,117,477,126,475,174,439,158,] },
+{ 'x'=>200, 'y'=> 47, 'w'=>140, 'h'=>322, 'head'=>[264, 47,297, 47,297, 97,264, 97,], 'body'=>[239, 92,294, 92,294,235,239,235,], 'legs'=>[239,225,244,225,289,225,294,225,326,369,203,369,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 62, 'w'=>151, 'h'=>306, 'head'=>[267, 62,305, 62,305,112,267,112,], 'body'=>[239,107,294,107,294,242,239,242,], 'legs'=>[239,232,244,232,289,232,294,232,328,368,204,368,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 50, 'w'=>138, 'h'=>324, 'head'=>[252, 50,288, 50,288,100,252,100,], 'body'=>[228, 95,283, 95,283,239,228,239,], 'legs'=>[228,229,233,229,278,229,283,229,328,374,204,374,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 63, 'w'=>131, 'h'=>311, 'head'=>[236, 63,271, 63,271,113,236,113,], 'body'=>[222,108,277,108,277,246,222,246,], 'legs'=>[222,236,227,236,272,236,277,236,327,374,203,374,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 67, 'w'=>134, 'h'=>308, 'head'=>[233, 67,268, 67,268,117,233,117,], 'body'=>[224,112,279,112,279,248,224,248,], 'legs'=>[224,238,229,238,274,238,279,238,329,375,205,375,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 59, 'w'=>163, 'h'=>314, 'head'=>[237, 59,273, 59,273,109,237,109,], 'body'=>[228,104,283,104,283,243,228,243,], 'legs'=>[228,233,233,233,278,233,283,233,328,373,203,373,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 47, 'w'=>209, 'h'=>327, 'head'=>[253, 47,290, 47,290, 97,253, 97,], 'body'=>[233, 92,288, 92,288,238,233,238,], 'legs'=>[233,228,238,228,283,228,288,228,330,374,205,374,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 42, 'w'=>236, 'h'=>329, 'head'=>[273, 42,310, 42,310, 92,273, 92,], 'body'=>[238, 87,293, 87,293,234,238,234,], 'legs'=>[238,224,243,224,288,224,293,224,328,371,206,371,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 47, 'w'=>251, 'h'=>324, 'head'=>[290, 47,326, 47,326, 97,290, 97,], 'body'=>[241, 92,296, 92,296,236,241,236,], 'legs'=>[241,226,246,226,291,226,296,226,329,371,204,371,], 'ex'=>0, 'hit'=>[ 13, 10, 23, 10, 33, 24, 13, 20,] },
+{ 'x'=>200, 'y'=> 59, 'w'=>256, 'h'=>311, 'head'=>[303, 59,339, 59,339,109,303,109,], 'body'=>[241,104,296,104,296,242,241,242,], 'legs'=>[241,232,246,232,291,232,296,232,329,370,203,370,], 'ex'=>0, 'hit'=>[449,127,459,127,475,146,449,137,] },
+{ 'x'=>208, 'y'=> 52, 'w'=>131, 'h'=>317, 'head'=>[252, 52,288, 52,288,102,252,102,], 'body'=>[227, 97,282, 97,282,238,227,238,], 'legs'=>[227,228,232,228,277,228,282,228,331,369,211,369,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 63, 'w'=>144, 'h'=>309, 'head'=>[253, 63,289, 63,289,113,253,113,], 'body'=>[226,108,281,108,281,245,226,245,], 'legs'=>[226,235,231,235,276,235,281,235,341,372,207,372,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 83, 'w'=>153, 'h'=>289, 'head'=>[255, 83,291, 83,291,133,255,133,], 'body'=>[227,128,282,128,282,255,227,255,], 'legs'=>[227,245,232,245,277,245,282,245,347,372,208,372,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>109, 'w'=>146, 'h'=>263, 'head'=>[259,109,297,109,297,159,259,159,], 'body'=>[231,154,286,154,286,268,231,268,], 'legs'=>[231,258,236,258,281,258,286,258,347,372,209,372,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>104, 'w'=>147, 'h'=>269, 'head'=>[269,104,305,104,305,154,269,154,], 'body'=>[249,149,304,149,304,266,249,266,], 'legs'=>[249,256,254,256,299,256,304,256,348,373,208,373,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 84, 'w'=>182, 'h'=>288, 'head'=>[275, 84,310, 84,310,134,275,134,], 'body'=>[255,129,310,129,310,255,255,255,], 'legs'=>[255,245,260,245,305,245,310,245,350,372,206,372,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 71, 'w'=>238, 'h'=>302, 'head'=>[276, 71,311, 71,311,121,276,121,], 'body'=>[264,116,319,116,319,249,264,249,], 'legs'=>[264,239,269,239,314,239,319,239,350,373,197,373,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 25, 'w'=>205, 'h'=>347, 'head'=>[336, 75,286, 74,285,121,329,121,], 'body'=>[274,123,329,123,325,237,273,231,], 'legs'=>[279,216,284,216,329,216,334,216,351,372,194,372,], 'ex'=>0, 'hit'=>[374, 32,394, 29,402,116,344,135,] },
+{ 'x'=>192, 'y'=> 30, 'w'=>182, 'h'=>344, 'head'=>[295, 78,335, 75,336,127,295,128,], 'body'=>[286,132,350,118,340,229,285,229,], 'legs'=>[285,219,290,219,335,219,340,219,350,374,195,374,], 'ex'=>0, 'hit'=>[331, 35,351, 36,405,132,352,147,] },
+{ 'x'=>209, 'y'=> 74, 'w'=>130, 'h'=>298, 'head'=>[252, 74,289, 74,289,124,252,124,], 'body'=>[235,119,290,119,290,250,235,250,], 'legs'=>[235,240,240,240,285,240,290,240,324,372,212,372,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 74, 'w'=>133, 'h'=>295, 'head'=>[264, 74,305, 74,305,124,264,124,], 'body'=>[248,119,303,119,303,249,248,249,], 'legs'=>[248,239,253,239,298,239,303,239,328,369,212,369,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 80, 'w'=>127, 'h'=>281, 'head'=>[285, 80,324, 80,324,130,285,130,], 'body'=>[258,125,313,125,313,248,258,248,], 'legs'=>[258,238,263,238,308,238,313,238,331,361,240,361,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 90, 'w'=>131, 'h'=>276, 'head'=>[297, 90,336, 90,336,140,297,140,], 'body'=>[264,135,319,135,319,255,264,255,], 'legs'=>[264,245,269,245,314,245,319,245,331,366,282,366,], 'ex'=>1 },
+{ 'x'=>260, 'y'=> 97, 'w'=>152, 'h'=>272, 'head'=>[308, 97,349, 97,349,147,308,147,], 'body'=>[276,142,331,142,331,260,276,260,], 'legs'=>[276,250,281,250,326,250,331,250,383,369,283,369,], 'ex'=>1 },
+{ 'x'=>266, 'y'=>102, 'w'=>188, 'h'=>266, 'head'=>[320,102,362,102,362,152,320,152,], 'body'=>[286,147,341,147,341,262,286,262,], 'legs'=>[286,252,291,252,336,252,341,252,406,368,286,368,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>122, 'w'=>205, 'h'=>251, 'head'=>[334,122,402,122,402,172,334,172,], 'body'=>[297,167,352,167,352,275,297,275,], 'legs'=>[297,265,302,265,347,265,352,265,399,373,287,373,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>130, 'w'=>215, 'h'=>246, 'head'=>[344,130,418,130,418,180,344,180,], 'body'=>[307,175,362,175,362,280,307,280,], 'legs'=>[307,270,312,270,357,270,362,270,399,376,277,376,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>119, 'w'=>201, 'h'=>252, 'head'=>[347,119,413,119,413,169,347,169,], 'body'=>[308,164,363,164,363,272,308,272,], 'legs'=>[308,262,313,262,358,262,363,262,398,371,281,371,], 'ex'=>1 },
+{ 'x'=>275, 'y'=> 99, 'w'=>194, 'h'=>272, 'head'=>[362, 99,413, 99,413,149,362,149,], 'body'=>[309,144,364,144,364,262,309,262,], 'legs'=>[309,252,314,252,359,252,364,252,400,371,279,371,], 'ex'=>1 },
+{ 'x'=>266, 'y'=> 84, 'w'=>191, 'h'=>286, 'head'=>[364, 84,409, 84,409,134,364,134,], 'body'=>[314,129,369,129,369,254,314,254,], 'legs'=>[314,244,319,244,364,244,369,244,397,370,276,370,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 71, 'w'=>185, 'h'=>299, 'head'=>[368, 71,401, 71,401,121,368,121,], 'body'=>[321,116,376,116,376,248,321,248,], 'legs'=>[321,238,326,238,371,238,376,238,399,370,271,370,], 'ex'=>1 },
+{ 'x'=>258, 'y'=> 66, 'w'=>180, 'h'=>301, 'head'=>[364, 66,396, 66,396,116,364,116,], 'body'=>[325,111,380,111,380,244,325,244,], 'legs'=>[325,234,330,234,375,234,380,234,407,367,268,367,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 63, 'w'=>170, 'h'=>303, 'head'=>[354, 63,390, 63,390,113,354,113,], 'body'=>[326,108,381,108,381,242,326,242,], 'legs'=>[326,232,331,232,376,232,381,232,412,366,266,366,], 'ex'=>1 },
+{ 'x'=>257, 'y'=> 61, 'w'=>161, 'h'=>306, 'head'=>[334, 61,377, 61,377,111,334,111,], 'body'=>[321,106,376,106,376,241,321,241,], 'legs'=>[321,231,326,231,371,231,376,231,414,367,266,367,], 'ex'=>1 },
+{ 'x'=>262, 'y'=> 53, 'w'=>162, 'h'=>314, 'head'=>[310, 53,356, 53,356,103,310,103,], 'body'=>[315, 98,370, 98,370,237,315,237,], 'legs'=>[315,227,320,227,365,227,370,227,420,367,266,367,], 'ex'=>1 },
+{ 'x'=>256, 'y'=> 58, 'w'=>171, 'h'=>308, 'head'=>[274, 58,317, 58,317,108,274,108,], 'body'=>[299,103,354,103,354,239,299,239,], 'legs'=>[299,229,304,229,349,229,354,229,423,366,268,366,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 98, 'w'=>229, 'h'=>267, 'head'=>[258, 98,302, 98,302,148,258,148,], 'body'=>[291,143,346,143,346,259,291,259,], 'legs'=>[291,249,296,249,341,249,346,249,423,365,267,365,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>128, 'w'=>240, 'h'=>236, 'head'=>[245,128,304,128,304,178,245,178,], 'body'=>[296,173,351,173,351,273,296,273,], 'legs'=>[296,263,301,263,346,263,351,263,421,364,268,364,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>143, 'w'=>209, 'h'=>219, 'head'=>[269,143,327,143,327,193,269,193,], 'body'=>[285,188,340,188,340,280,285,280,], 'legs'=>[285,270,290,270,335,270,340,270,419,362,269,362,], 'ex'=>1 },
+{ 'x'=>220, 'y'=>161, 'w'=>200, 'h'=>200, 'head'=>[254,161,343,161,343,211,254,211,], 'body'=>[283,206,338,206,338,288,283,288,], 'legs'=>[283,278,288,278,333,278,338,278,416,361,240,361,], 'ex'=>1 },
+{ 'x'=>241, 'y'=>164, 'w'=>163, 'h'=>198, 'head'=>[264,164,355,164,355,214,264,214,], 'body'=>[283,209,338,209,338,290,283,290,], 'legs'=>[283,280,288,280,333,280,338,280,400,362,270,362,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>131, 'w'=>142, 'h'=>229, 'head'=>[274,131,330,131,330,181,274,181,], 'body'=>[299,176,354,176,354,273,299,273,], 'legs'=>[299,263,304,263,349,263,354,263,400,360,267,360,], 'ex'=>1 },
+{ 'x'=>268, 'y'=> 98, 'w'=>136, 'h'=>259, 'head'=>[295, 98,332, 98,332,148,295,148,], 'body'=>[299,143,354,143,354,255,299,255,], 'legs'=>[299,245,304,245,349,245,354,245,400,357,271,357,], 'ex'=>1 },
+{ 'x'=>276, 'y'=> 84, 'w'=>128, 'h'=>278, 'head'=>[295, 84,328, 84,328,134,295,134,], 'body'=>[288,129,343,129,343,250,288,250,], 'legs'=>[288,240,293,240,338,240,343,240,400,362,279,362,], 'ex'=>1 },
+{ 'x'=>273, 'y'=> 90, 'w'=>113, 'h'=>277, 'head'=>[286, 90,324, 90,324,140,286,140,], 'body'=>[284,135,339,135,339,256,284,256,], 'legs'=>[284,246,289,246,334,246,339,246,376,367,280,367,], 'ex'=>1 },
+{ 'x'=>272, 'y'=> 80, 'w'=>112, 'h'=>296, 'head'=>[286, 80,320, 80,320,130,286,130,], 'body'=>[282,125,337,125,337,255,282,255,], 'legs'=>[282,245,287,245,332,245,337,245,365,376,279,376,], 'ex'=>1 },
+{ 'x'=>245, 'y'=> 55, 'w'=>143, 'h'=>337, 'head'=>[277, 55,297, 55,297,105,277,105,], 'body'=>[285,100,340,100,340,251,285,251,], 'legs'=>[285,241,290,241,335,241,340,241,360,392,280,392,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 53, 'w'=>153, 'h'=>338, 'head'=>[285, 53,310, 53,310,103,285,103,], 'body'=>[286, 98,341, 98,341,249,286,249,], 'legs'=>[286,239,291,239,336,239,341,239,360,391,276,391,], 'ex'=>1 },
+{ 'x'=>245, 'y'=> 54, 'w'=>158, 'h'=>338, 'head'=>[268, 54,297, 54,297,104,268,104,], 'body'=>[279, 99,334, 99,334,250,279,250,], 'legs'=>[279,240,284,240,329,240,334,240,352,392,282,392,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 44, 'w'=>173, 'h'=>347, 'head'=>[291, 44,318, 44,318, 94,291, 94,], 'body'=>[277, 89,332, 89,332,245,277,245,], 'legs'=>[277,235,282,235,327,235,332,235,355,391,292,391,], 'ex'=>1 },
+{ 'x'=>263, 'y'=> 68, 'w'=>134, 'h'=>317, 'head'=>[300, 68,335, 68,335,118,300,118,], 'body'=>[276,113,331,113,331,254,276,254,], 'legs'=>[276,244,281,244,326,244,331,244,353,385,282,385,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 78, 'w'=>113, 'h'=>293, 'head'=>[305, 78,340, 78,340,128,305,128,], 'body'=>[272,123,327,123,327,252,272,252,], 'legs'=>[272,242,277,242,322,242,327,242,352,371,258,371,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 76, 'w'=>147, 'h'=>292, 'head'=>[266, 76,303, 76,303,126,266,126,], 'body'=>[255,121,310,121,310,249,255,249,], 'legs'=>[255,239,260,239,305,239,310,239,349,368,230,368,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 59, 'w'=>134, 'h'=>311, 'head'=>[251, 59,278, 59,278,109,251,109,], 'body'=>[235,104,290,104,290,242,235,242,], 'legs'=>[235,232,240,232,285,232,290,232,323,370,197,370,], 'ex'=>1 },
+{ 'x'=>194, 'y'=> 65, 'w'=>137, 'h'=>302, 'head'=>[205, 65,238, 65,238,115,205,115,], 'body'=>[227,110,282,110,282,243,227,243,], 'legs'=>[227,233,232,233,277,233,282,233,326,367,200,367,], 'ex'=>1 },
+{ 'x'=>159, 'y'=> 88, 'w'=>175, 'h'=>280, 'head'=>[170, 88,221, 88,221,138,170,138,], 'body'=>[223,133,278,133,278,255,223,255,], 'legs'=>[223,245,228,245,273,245,278,245,325,368,200,368,], 'ex'=>1 },
+{ 'x'=>151, 'y'=>101, 'w'=>187, 'h'=>266, 'head'=>[159,101,212,101,212,151,159,151,], 'body'=>[217,146,272,146,272,261,217,261,], 'legs'=>[217,251,222,251,267,251,272,251,330,367,197,367,], 'ex'=>1 },
+{ 'x'=>137, 'y'=> 95, 'w'=>215, 'h'=>273, 'head'=>[176, 95,203, 95,203,145,176,145,], 'body'=>[197,140,252,140,252,259,197,259,], 'legs'=>[197,249,202,249,247,249,252,249,330,368,196,368,], 'ex'=>1 },
+{ 'x'=>124, 'y'=>114, 'w'=>208, 'h'=>253, 'head'=>[150,114,192,114,192,164,150,164,], 'body'=>[197,159,252,159,252,268,197,268,], 'legs'=>[197,258,202,258,247,258,252,258,325,367,197,367,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 78, 'w'=>125, 'h'=>287, 'head'=>[251, 78,289, 78,289,128,251,128,], 'body'=>[235,123,290,123,290,249,235,249,], 'legs'=>[235,239,240,239,285,239,290,239,319,365,209,365,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 86, 'w'=>123, 'h'=>280, 'head'=>[255, 86,291, 86,291,136,255,136,], 'body'=>[231,131,286,131,286,253,231,253,], 'legs'=>[231,243,236,243,281,243,286,243,317,366,207,366,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 98, 'w'=>126, 'h'=>268, 'head'=>[266, 98,298, 98,298,148,266,148,], 'body'=>[221,143,276,143,276,259,221,259,], 'legs'=>[221,249,226,249,271,249,276,249,313,366,195,366,], 'ex'=>1 },
+{ 'x'=>186, 'y'=>134, 'w'=>135, 'h'=>237, 'head'=>[240,134,303,134,303,184,240,184,], 'body'=>[203,179,258,179,258,280,203,280,], 'legs'=>[203,270,208,270,253,270,258,270,312,371,189,371,], 'ex'=>1 },
+{ 'x'=>177, 'y'=>153, 'w'=>150, 'h'=>219, 'head'=>[202,153,288,153,288,203,202,203,], 'body'=>[192,198,247,198,247,290,192,290,], 'legs'=>[192,280,197,280,242,280,247,280,289,372,185,372,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>160, 'w'=>139, 'h'=>212, 'head'=>[186,160,269,160,269,210,186,210,], 'body'=>[185,205,240,205,240,293,185,293,], 'legs'=>[185,283,190,283,235,283,240,283,262,372,185,372,], 'ex'=>1 },
+{ 'x'=>157, 'y'=>164, 'w'=>140, 'h'=>207, 'head'=>[171,164,257,164,257,214,171,214,], 'body'=>[179,209,234,209,234,295,179,295,], 'legs'=>[179,285,184,285,229,285,234,285,225,371,185,371,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 71, 'w'=>122, 'h'=>294, 'head'=>[242, 71,273, 71,273,121,242,121,], 'body'=>[233,116,288,116,288,245,233,245,], 'legs'=>[233,235,238,235,283,235,288,235,321,365,212,365,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 65, 'w'=>118, 'h'=>299, 'head'=>[236, 65,268, 65,268,115,236,115,], 'body'=>[230,110,285,110,285,242,230,242,], 'legs'=>[230,232,235,232,280,232,285,232,318,364,213,364,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 56, 'w'=>108, 'h'=>308, 'head'=>[233, 56,271, 56,271,106,233,106,], 'body'=>[224,101,279,101,279,237,224,237,], 'legs'=>[224,227,229,227,274,227,279,227,309,364,212,364,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 63, 'w'=>107, 'h'=>299, 'head'=>[245, 63,278, 63,278,113,245,113,], 'body'=>[222,108,277,108,277,240,222,240,], 'legs'=>[222,230,227,230,272,230,277,230,305,362,212,362,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 98, 'w'=>113, 'h'=>266, 'head'=>[248, 98,289, 98,289,148,248,148,], 'body'=>[218,143,273,143,273,258,218,258,], 'legs'=>[218,248,223,248,268,248,273,248,299,364,210,364,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>146, 'w'=>124, 'h'=>215, 'head'=>[215,146,292,146,292,196,215,196,], 'body'=>[221,191,276,191,276,281,221,281,], 'legs'=>[221,271,226,271,271,271,276,271,298,361,209,361,], 'ex'=>1 },
+{ 'x'=>195, 'y'=>158, 'w'=>118, 'h'=>203, 'head'=>[209,158,281,158,281,208,209,208,], 'body'=>[219,203,274,203,274,287,219,287,], 'legs'=>[219,277,224,277,269,277,274,277,296,361,209,361,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>172, 'w'=>123, 'h'=>191, 'head'=>[201,172,279,172,279,222,201,222,], 'body'=>[221,217,276,217,276,295,221,295,], 'legs'=>[221,285,226,285,271,285,276,285,298,363,211,363,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>177, 'w'=>130, 'h'=>188, 'head'=>[252,177,293,177,293,227,252,227,], 'body'=>[235,222,290,222,290,298,235,298,], 'legs'=>[235,288,240,288,285,288,290,288,326,365,217,365,], 'ex'=>1 },
+{ 'x'=>215, 'y'=>146, 'w'=>139, 'h'=>219, 'head'=>[229,146,257,146,257,196,229,196,], 'body'=>[228,191,283,191,283,283,228,283,], 'legs'=>[228,273,233,273,278,273,283,273,331,365,218,365,], 'ex'=>1 },
+{ 'x'=>188, 'y'=>142, 'w'=>176, 'h'=>222, 'head'=>[194,142,231,142,231,192,194,192,], 'body'=>[212,187,267,187,267,280,212,280,], 'legs'=>[212,270,217,270,262,270,267,270,335,364,218,364,], 'ex'=>1 },
+{ 'x'=>170, 'y'=>158, 'w'=>194, 'h'=>212, 'head'=>[181,158,229,158,229,208,181,208,], 'body'=>[208,203,263,203,263,291,208,291,], 'legs'=>[208,281,213,281,258,281,263,281,305,370,219,370,], 'ex'=>1 },
+{ 'x'=>160, 'y'=>170, 'w'=>203, 'h'=>207, 'head'=>[170,170,223,170,223,220,170,220,], 'body'=>[215,215,270,215,270,301,215,301,], 'legs'=>[215,291,220,291,265,291,270,291,306,377,219,377,], 'ex'=>1 },
+{ 'x'=>224, 'y'=>188, 'w'=>121, 'h'=>176, 'head'=>[250,188,285,188,285,238,250,238,], 'body'=>[235,233,290,233,290,303,235,303,], 'legs'=>[235,293,240,293,285,293,290,293,324,364,227,364,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>181, 'w'=>133, 'h'=>182, 'head'=>[246,181,287,181,287,231,246,231,], 'body'=>[222,226,277,226,277,299,222,299,], 'legs'=>[222,289,227,289,272,289,277,289,324,363,228,363,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>209, 'w'=>120, 'h'=>155, 'head'=>[232,209,296,209,296,259,232,259,], 'body'=>[223,254,278,254,278,314,223,314,], 'legs'=>[223,304,228,304,273,304,278,304,316,364,226,364,], 'ex'=>1 },
+{ 'x'=>189, 'y'=>224, 'w'=>131, 'h'=>140, 'head'=>[202,224,275,224,275,274,202,274,], 'body'=>[223,269,278,269,278,321,223,321,], 'legs'=>[223,311,228,311,273,311,278,311,316,364,228,364,], 'ex'=>1 },
+{ 'x'=>169, 'y'=>224, 'w'=>150, 'h'=>133, 'head'=>[190,224,262,224,262,274,190,274,], 'body'=>[223,269,278,269,278,318,223,318,], 'legs'=>[223,308,228,308,273,308,278,308,315,357,227,357,], 'ex'=>1 },
+{ 'x'=>128, 'y'=>232, 'w'=>190, 'h'=>149, 'head'=>[185,232,240,232,240,282,185,282,], 'body'=>[193,277,248,277,248,334,193,334,], 'legs'=>[193,324,198,324,243,324,248,324,312,381,131,381,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 55, 'w'=>122, 'h'=>310, 'head'=>[261, 55,299, 55,299,105,261,105,], 'body'=>[237,100,292,100,292,237,237,237,], 'legs'=>[237,227,242,227,287,227,292,227,330,365,221,365,], 'ex'=>1 },
+{ 'x'=>211, 'y'=> 53, 'w'=>172, 'h'=>306, 'head'=>[295, 53,347, 53,347,103,295,103,], 'body'=>[251, 98,306, 98,306,233,251,233,], 'legs'=>[251,223,256,223,301,223,306,223,326,359,214,359,], 'ex'=>1 },
+{ 'x'=>192, 'y'=> 83, 'w'=>251, 'h'=>278, 'head'=>[308, 83,363, 83,363,133,308,133,], 'body'=>[258,128,313,128,313,249,258,249,], 'legs'=>[258,239,263,239,308,239,313,239,326,361,197,361,], 'ex'=>1 },
+{ 'x'=>178, 'y'=>105, 'w'=>272, 'h'=>255, 'head'=>[302,105,388,105,388,155,302,155,], 'body'=>[232,150,287,150,287,260,232,260,], 'legs'=>[232,250,237,250,282,250,287,250,325,360,287,360,], 'ex'=>1 },
+{ 'x'=>152, 'y'=>107, 'w'=>358, 'h'=>257, 'head'=>[231,107,310,107,310,157,231,157,], 'body'=>[240,152,295,152,295,263,240,263,], 'legs'=>[240,253,245,253,290,253,295,253,319,364,281,364,], 'ex'=>1 },
+{ 'x'=>137, 'y'=>122, 'w'=>311, 'h'=>240, 'head'=>[250,122,357,122,357,172,250,172,], 'body'=>[254,167,309,167,309,269,254,269,], 'legs'=>[254,259,259,259,304,259,309,259,322,362,283,362,], 'ex'=>1 },
+{ 'x'=>160, 'y'=> 92, 'w'=>384, 'h'=>269, 'head'=>[180, 92,214, 92,214,142,180,142,], 'body'=>[275,137,330,137,330,254,275,254,], 'legs'=>[275,244,280,244,325,244,330,244,322,361,283,361,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 72, 'w'=>275, 'h'=>284, 'head'=>[204, 72,233, 72,233,122,204,122,], 'body'=>[286,117,341,117,341,241,286,241,], 'legs'=>[286,231,291,231,336,231,341,231,323,356,287,356,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 68, 'w'=>264, 'h'=>284, 'head'=>[232, 68,262, 68,262,118,232,118,], 'body'=>[295,113,350,113,350,237,295,237,], 'legs'=>[295,227,300,227,345,227,350,227,475,352,287,352,], 'ex'=>1 },
+{ 'x'=>250, 'y'=>104, 'w'=>248, 'h'=>246, 'head'=>[266,104,291,104,291,154,266,154,], 'body'=>[302,149,357,149,357,254,302,254,], 'legs'=>[302,244,307,244,352,244,357,244,494,350,291,350,], 'ex'=>1 },
+{ 'x'=>213, 'y'=> 61, 'w'=>122, 'h'=>308, 'head'=>[238, 61,276, 61,276,111,238,111,], 'body'=>[223,106,278,106,278,242,223,242,], 'legs'=>[223,232,228,232,273,232,278,232,331,369,217,369,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 55, 'w'=>129, 'h'=>314, 'head'=>[245, 55,281, 55,281,105,245,105,], 'body'=>[228,100,283,100,283,239,228,239,], 'legs'=>[228,229,233,229,278,229,283,229,333,369,215,369,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 54, 'w'=>147, 'h'=>314, 'head'=>[259, 54,299, 54,299,104,259,104,], 'body'=>[239, 99,294, 99,294,238,239,238,], 'legs'=>[239,228,244,228,289,228,294,228,334,368,218,368,], 'ex'=>1 },
+{ 'x'=>220, 'y'=> 59, 'w'=>148, 'h'=>308, 'head'=>[267, 59,307, 59,307,109,267,109,], 'body'=>[244,104,299,104,299,240,244,240,], 'legs'=>[244,230,249,230,294,230,299,230,336,367,223,367,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 56, 'w'=>148, 'h'=>315, 'head'=>[273, 56,313, 56,313,106,273,106,], 'body'=>[246,101,301,101,301,241,246,241,], 'legs'=>[246,231,251,231,296,231,301,231,335,371,222,371,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 47, 'w'=>133, 'h'=>326, 'head'=>[269, 47,303, 47,303, 97,269, 97,], 'body'=>[241, 92,296, 92,296,237,241,237,], 'legs'=>[241,227,246,227,291,227,296,227,336,373,224,373,], 'ex'=>1 },
+{ 'x'=>217, 'y'=> 50, 'w'=>123, 'h'=>322, 'head'=>[254, 50,287, 50,287,100,254,100,], 'body'=>[232, 95,287, 95,287,238,232,238,], 'legs'=>[232,228,237,228,282,228,287,228,335,372,223,372,], 'ex'=>1 },
+{ 'x'=>215, 'y'=> 49, 'w'=>125, 'h'=>323, 'head'=>[243, 49,277, 49,277, 99,243, 99,], 'body'=>[227, 94,282, 94,282,238,227,238,], 'legs'=>[227,228,232,228,277,228,282,228,336,372,223,372,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 47, 'w'=>119, 'h'=>326, 'head'=>[248, 47,283, 47,283, 97,248, 97,], 'body'=>[232, 92,287, 92,287,237,232,237,], 'legs'=>[232,227,237,227,282,227,287,227,336,373,225,373,], 'ex'=>1 },
diff --git a/data/characters/UPIDATA.DAT.pl b/data/characters/UPIDATA.DAT.pl
new file mode 100644
index 0000000..b4c0ce6
--- /dev/null
+++ b/data/characters/UPIDATA.DAT.pl
@@ -0,0 +1,340 @@
+{ 'x'=>225, 'y'=> 53, 'w'=> 91, 'h'=>311, 'head'=>[250, 53,274, 53,274,103,250,103,], 'body'=>[236, 98,291, 98,291,236,236,236,], 'legs'=>[236,226,241,226,286,226,291,226,315,364,233,364,], 'ex'=>1 },
+{ 'x'=>220, 'y'=> 54, 'w'=>110, 'h'=>311, 'head'=>[255, 54,279, 54,279,104,255,104,], 'body'=>[236, 99,291, 99,291,237,236,237,], 'legs'=>[236,227,241,227,286,227,291,227,316,365,233,365,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 54, 'w'=>121, 'h'=>311, 'head'=>[255, 54,280, 54,280,104,255,104,], 'body'=>[233, 99,288, 99,288,237,233,237,], 'legs'=>[233,227,238,227,283,227,288,227,317,365,230,365,], 'ex'=>1 },
+{ 'x'=>180, 'y'=> 54, 'w'=>181, 'h'=>313, 'head'=>[253, 54,278, 54,278,104,253,104,], 'body'=>[232, 99,287, 99,287,238,232,238,], 'legs'=>[232,228,237,228,282,228,287,228,315,367,230,367,], 'ex'=>1 },
+{ 'x'=>171, 'y'=> 53, 'w'=>198, 'h'=>314, 'head'=>[256, 53,280, 53,280,103,256,103,], 'body'=>[232, 98,287, 98,287,237,232,237,], 'legs'=>[232,227,237,227,282,227,287,227,313,367,228,367,], 'ex'=>1 },
+{ 'x'=>167, 'y'=> 51, 'w'=>207, 'h'=>315, 'head'=>[249, 51,274, 51,274,101,249,101,], 'body'=>[236, 96,291, 96,291,236,236,236,], 'legs'=>[236,226,241,226,286,226,291,226,314,366,229,366,], 'ex'=>1 },
+{ 'x'=>164, 'y'=> 51, 'w'=>216, 'h'=>316, 'head'=>[257, 51,282, 51,282,101,257,101,], 'body'=>[234, 96,289, 96,289,236,234,236,], 'legs'=>[234,226,239,226,284,226,289,226,315,367,229,367,], 'ex'=>1 },
+{ 'x'=>167, 'y'=> 51, 'w'=>212, 'h'=>317, 'head'=>[250, 51,275, 51,275,101,250,101,], 'body'=>[224, 96,279, 96,279,237,224,237,], 'legs'=>[224,227,229,227,274,227,279,227,312,368,230,368,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 64, 'w'=> 86, 'h'=>312, 'head'=>[247, 64,273, 64,273,114,247,114,], 'body'=>[235,109,290,109,290,247,235,247,], 'legs'=>[235,237,240,237,285,237,290,237,312,376,229,376,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 64, 'w'=> 93, 'h'=>313, 'head'=>[244, 64,272, 64,272,114,244,114,], 'body'=>[232,109,287,109,287,248,232,248,], 'legs'=>[232,238,237,238,282,238,287,238,315,377,228,377,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 64, 'w'=> 94, 'h'=>313, 'head'=>[240, 64,269, 64,269,114,240,114,], 'body'=>[228,109,283,109,283,248,228,248,], 'legs'=>[228,238,233,238,278,238,283,238,314,377,228,377,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 66, 'w'=> 96, 'h'=>312, 'head'=>[238, 66,269, 66,269,116,238,116,], 'body'=>[226,111,281,111,281,249,226,249,], 'legs'=>[226,239,231,239,276,239,281,239,313,378,227,378,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 67, 'w'=>100, 'h'=>311, 'head'=>[239, 67,271, 67,271,117,239,117,], 'body'=>[226,112,281,112,281,250,226,250,], 'legs'=>[226,240,231,240,276,240,281,240,316,378,227,378,], 'ex'=>1 },
+{ 'x'=>221, 'y'=> 68, 'w'=>106, 'h'=>311, 'head'=>[240, 68,272, 68,272,118,240,118,], 'body'=>[227,113,282,113,282,251,227,251,], 'legs'=>[227,241,232,241,277,241,282,241,323,379,228,379,], 'ex'=>1 },
+{ 'x'=>223, 'y'=> 69, 'w'=>121, 'h'=>310, 'head'=>[243, 69,274, 69,274,119,243,119,], 'body'=>[229,114,284,114,284,251,229,251,], 'legs'=>[229,241,234,241,279,241,284,241,326,379,227,379,], 'ex'=>1 },
+{ 'x'=>228, 'y'=> 69, 'w'=>155, 'h'=>311, 'head'=>[247, 69,278, 69,278,119,247,119,], 'body'=>[233,114,288,114,288,252,233,252,], 'legs'=>[233,242,238,242,283,242,288,242,327,380,230,380,], 'ex'=>1 },
+{ 'x'=>229, 'y'=> 74, 'w'=>174, 'h'=>304, 'head'=>[260, 74,292, 74,292,124,260,124,], 'body'=>[244,119,299,119,299,253,244,253,], 'legs'=>[244,243,249,243,294,243,299,243,326,378,229,378,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 78, 'w'=>202, 'h'=>304, 'head'=>[264, 78,298, 78,298,128,264,128,], 'body'=>[238,123,293,123,293,257,238,257,], 'legs'=>[238,247,243,247,288,247,293,247,328,382,206,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 78, 'w'=>185, 'h'=>304, 'head'=>[244, 78,281, 78,281,128,244,128,], 'body'=>[222,123,277,123,277,257,222,257,], 'legs'=>[222,247,227,247,272,247,277,247,326,382,207,382,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 79, 'w'=>172, 'h'=>305, 'head'=>[246, 79,282, 79,282,129,246,129,], 'body'=>[225,124,280,124,280,259,225,259,], 'legs'=>[225,249,230,249,275,249,280,249,326,384,208,384,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 79, 'w'=>183, 'h'=>305, 'head'=>[260, 79,294, 79,294,129,260,129,], 'body'=>[235,124,290,124,290,259,235,259,], 'legs'=>[235,249,240,249,285,249,290,249,327,384,208,384,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 80, 'w'=>198, 'h'=>304, 'head'=>[266, 80,300, 80,300,130,266,130,], 'body'=>[243,125,298,125,298,259,243,259,], 'legs'=>[243,249,248,249,293,249,298,249,327,384,209,384,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 83, 'w'=>210, 'h'=>302, 'head'=>[268, 83,302, 83,302,133,268,133,], 'body'=>[244,128,299,128,299,261,244,261,], 'legs'=>[244,251,249,251,294,251,299,251,329,385,209,385,], 'ex'=>1 },
+{ 'x'=>216, 'y'=> 74, 'w'=>172, 'h'=>308, 'head'=>[243, 74,278, 74,278,124,243,124,], 'body'=>[222,119,277,119,277,255,222,255,], 'legs'=>[222,245,227,245,272,245,277,245,320,382,216,382,], 'ex'=>1 },
+{ 'x'=>216, 'y'=> 75, 'w'=>175, 'h'=>309, 'head'=>[244, 75,278, 75,278,125,244,125,], 'body'=>[223,120,278,120,278,257,223,257,], 'legs'=>[223,247,228,247,273,247,278,247,322,384,216,384,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 75, 'w'=>177, 'h'=>308, 'head'=>[253, 75,288, 75,288,125,253,125,], 'body'=>[232,120,287,120,287,256,232,256,], 'legs'=>[232,246,237,246,282,246,287,246,346,383,214,383,], 'ex'=>1 },
+{ 'x'=>214, 'y'=> 77, 'w'=>192, 'h'=>306, 'head'=>[273, 77,308, 77,308,127,273,127,], 'body'=>[253,122,308,122,308,257,253,257,], 'legs'=>[253,247,258,247,303,247,308,247,348,383,214,383,], 'ex'=>1 },
+{ 'x'=>228, 'y'=> 80, 'w'=>196, 'h'=>298, 'head'=>[295, 80,332, 80,332,130,295,130,], 'body'=>[275,125,330,125,330,256,275,256,], 'legs'=>[275,246,280,246,325,246,330,246,347,378,229,378,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 80, 'w'=>191, 'h'=>289, 'head'=>[304, 80,341, 80,341,130,304,130,], 'body'=>[283,125,338,125,338,252,283,252,], 'legs'=>[283,242,288,242,333,242,338,242,351,369,253,369,], 'ex'=>1 },
+{ 'x'=>280, 'y'=> 80, 'w'=>164, 'h'=>294, 'head'=>[311, 80,348, 80,348,130,311,130,], 'body'=>[291,125,346,125,346,254,291,254,], 'legs'=>[291,244,296,244,341,244,346,244,352,374,280,374,], 'ex'=>1 },
+{ 'x'=>303, 'y'=> 79, 'w'=>150, 'h'=>293, 'head'=>[326, 79,360, 79,360,129,326,129,], 'body'=>[305,124,360,124,360,253,305,253,], 'legs'=>[305,243,310,243,355,243,360,243,372,372,312,372,], 'ex'=>1 },
+{ 'x'=>312, 'y'=> 79, 'w'=>155, 'h'=>306, 'head'=>[337, 79,371, 79,371,129,337,129,], 'body'=>[319,124,374,124,374,259,319,259,], 'legs'=>[319,249,324,249,369,249,374,249,385,385,313,385,], 'ex'=>1 },
+{ 'x'=>322, 'y'=> 79, 'w'=>141, 'h'=>301, 'head'=>[345, 79,379, 79,379,129,345,129,], 'body'=>[326,124,381,124,381,257,326,257,], 'legs'=>[326,247,331,247,376,247,381,247,387,380,323,380,], 'ex'=>1 },
+{ 'x'=>335, 'y'=> 82, 'w'=>138, 'h'=>298, 'head'=>[358, 82,396, 82,396,132,358,132,], 'body'=>[338,127,393,127,393,258,338,258,], 'legs'=>[338,248,343,248,388,248,393,248,409,380,357,380,], 'ex'=>1 },
+{ 'x'=>342, 'y'=> 79, 'w'=>147, 'h'=>308, 'head'=>[367, 79,403, 79,403,129,367,129,], 'body'=>[345,124,400,124,400,260,345,260,], 'legs'=>[345,250,350,250,395,250,400,250,434,387,360,387,], 'ex'=>1 },
+{ 'x'=>357, 'y'=> 80, 'w'=>142, 'h'=>299, 'head'=>[382, 80,420, 80,420,130,382,130,], 'body'=>[360,125,415,125,415,257,360,257,], 'legs'=>[360,247,365,247,410,247,415,247,455,379,362,379,], 'ex'=>1 },
+{ 'x'=>356, 'y'=> 84, 'w'=>161, 'h'=>295, 'head'=>[395, 84,434, 84,434,134,395,134,], 'body'=>[374,129,429,129,429,259,374,259,], 'legs'=>[374,249,379,249,424,249,429,249,455,379,360,379,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 83, 'w'=>164, 'h'=>298, 'head'=>[238, 83,273, 83,273,133,238,133,], 'body'=>[218,128,273,128,273,259,218,259,], 'legs'=>[218,249,223,249,268,249,273,249,323,381,207,381,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 79, 'w'=>150, 'h'=>301, 'head'=>[236, 79,267, 79,267,129,236,129,], 'body'=>[217,124,272,124,272,257,217,257,], 'legs'=>[217,247,222,247,267,247,272,247,331,380,206,380,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 80, 'w'=>144, 'h'=>296, 'head'=>[237, 80,266, 80,266,130,237,130,], 'body'=>[218,125,273,125,273,255,218,255,], 'legs'=>[218,245,223,245,268,245,273,245,331,376,207,376,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 82, 'w'=>129, 'h'=>298, 'head'=>[243, 82,271, 82,271,132,243,132,], 'body'=>[225,127,280,127,280,258,225,258,], 'legs'=>[225,248,230,248,275,248,280,248,330,380,205,380,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 84, 'w'=>128, 'h'=>292, 'head'=>[250, 84,281, 84,281,134,250,134,], 'body'=>[231,129,286,129,286,257,231,257,], 'legs'=>[231,247,236,247,281,247,286,247,332,376,210,376,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 87, 'w'=>133, 'h'=>294, 'head'=>[255, 87,288, 87,288,137,255,137,], 'body'=>[238,132,293,132,293,261,238,261,], 'legs'=>[238,251,243,251,288,251,293,251,331,381,205,381,], 'ex'=>1 },
+{ 'x'=>176, 'y'=> 92, 'w'=>155, 'h'=>277, 'head'=>[254, 92,293, 92,293,142,254,142,], 'body'=>[241,137,296,137,296,258,241,258,], 'legs'=>[241,248,246,248,291,248,296,248,330,369,210,369,], 'ex'=>1 },
+{ 'x'=>164, 'y'=> 91, 'w'=>166, 'h'=>280, 'head'=>[245, 91,285, 91,285,141,245,141,], 'body'=>[234,136,289,136,289,258,234,258,], 'legs'=>[234,248,239,248,284,248,289,248,329,371,208,371,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 70, 'w'=>138, 'h'=>312, 'head'=>[235, 70,268, 70,268,120,235,120,], 'body'=>[219,115,274,115,274,253,219,253,], 'legs'=>[219,243,224,243,269,243,274,243,292,382,205,382,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 79, 'w'=>129, 'h'=>303, 'head'=>[220, 79,253, 79,253,129,220,129,], 'body'=>[210,124,265,124,265,258,210,258,], 'legs'=>[210,248,215,248,260,248,265,248,292,382,212,382,], 'ex'=>1 },
+{ 'x'=>183, 'y'=>101, 'w'=>129, 'h'=>277, 'head'=>[204,101,237,101,237,151,204,151,], 'body'=>[192,146,247,146,247,267,192,267,], 'legs'=>[192,257,197,257,242,257,247,257,293,378,249,378,], 'ex'=>1 },
+{ 'x'=>175, 'y'=>122, 'w'=>131, 'h'=>259, 'head'=>[195,122,227,122,227,172,195,172,], 'body'=>[183,167,238,167,238,279,183,279,], 'legs'=>[183,269,188,269,233,269,238,269,294,381,250,381,], 'ex'=>1 },
+{ 'x'=>163, 'y'=>147, 'w'=>132, 'h'=>233, 'head'=>[182,147,213,147,213,197,182,197,], 'body'=>[167,192,222,192,222,291,167,291,], 'legs'=>[167,281,172,281,217,281,222,281,293,380,245,380,], 'ex'=>1 },
+{ 'x'=>145, 'y'=>174, 'w'=>149, 'h'=>204, 'head'=>[157,174,190,174,190,224,157,224,], 'body'=>[151,219,206,219,206,303,151,303,], 'legs'=>[151,293,156,293,201,293,206,293,293,378,172,378,], 'ex'=>1 },
+{ 'x'=>116, 'y'=>211, 'w'=>177, 'h'=>171, 'head'=>[130,211,167,211,167,261,130,261,], 'body'=>[123,256,178,256,178,324,123,324,], 'legs'=>[123,314,128,314,173,314,178,314,291,382,146,382,], 'ex'=>1 },
+{ 'x'=> 89, 'y'=>243, 'w'=>207, 'h'=>137, 'head'=>[ 93,243,125,243,125,293, 93,293,], 'body'=>[ 93,288,148,288,148,339, 93,339,], 'legs'=>[ 93,329, 98,329,143,329,148,329,291,380,119,380,], 'ex'=>1 },
+{ 'x'=> 50, 'y'=>263, 'w'=>240, 'h'=>129, 'head'=>[ 69,263,106,263,106,313, 69,313,], 'body'=>[100,308,155,308,155,355,100,355,], 'legs'=>[100,345,105,345,150,345,155,345,182,392, 81,392,], 'ex'=>1 },
+{ 'x'=> 21, 'y'=>281, 'w'=>253, 'h'=>112, 'head'=>[153,281,245,281,245,331,153,331,], 'body'=>[ 46,326,101,326,101,364, 46,364,], 'legs'=>[ 46,354, 51,354, 96,354,101,354,176,393, 57,393,], 'ex'=>1 },
+{ 'x'=> 9, 'y'=>238, 'w'=>230, 'h'=>150, 'head'=>[173,238,226,238,226,288,173,288,], 'body'=>[115,283,170,283,170,340,115,340,], 'legs'=>[115,330,120,330,165,330,170,330,173,388, 44,388,], 'ex'=>1 },
+{ 'x'=> 5, 'y'=>190, 'w'=>164, 'h'=>195, 'head'=>[ 46,190, 84,190, 84,240, 46,240,], 'body'=>[ 66,235,121,235,121,315, 66,315,], 'legs'=>[ 66,305, 71,305,116,305,121,305,167,385, 5,385,], 'ex'=>1 },
+{ 'x'=> 5, 'y'=>182, 'w'=>165, 'h'=>202, 'head'=>[ 62,182, 95,182, 95,232, 62,232,], 'body'=>[ 72,227,127,227,127,310, 72,310,], 'legs'=>[ 72,300, 77,300,122,300,127,300,167,384, 5,384,], 'ex'=>1 },
+{ 'x'=> 6, 'y'=>173, 'w'=>166, 'h'=>212, 'head'=>[121,173,149,173,149,223,121,223,], 'body'=>[108,218,163,218,163,306,108,306,], 'legs'=>[108,296,113,296,158,296,163,296,169,385, 6,385,], 'ex'=>1 },
+{ 'x'=> 7, 'y'=>183, 'w'=>194, 'h'=>201, 'head'=>[155,183,184,183,184,233,155,233,], 'body'=>[129,228,184,228,184,311,129,311,], 'legs'=>[129,301,134,301,179,301,184,301,170,384, 7,384,], 'ex'=>1 },
+{ 'x'=> 10, 'y'=>225, 'w'=>254, 'h'=>160, 'head'=>[218,225,248,225,248,275,218,275,], 'body'=>[144,270,199,270,199,332,144,332,], 'legs'=>[144,322,149,322,194,322,199,322,180,385, 12,385,], 'ex'=>1 },
+{ 'x'=> 12, 'y'=>261, 'w'=>276, 'h'=>124, 'head'=>[227,261,276,261,276,311,227,311,], 'body'=>[ 78,306,133,306,133,350, 78,350,], 'legs'=>[ 78,340, 83,340,128,340,133,340,172,385, 26,385,], 'ex'=>1 },
+{ 'x'=> 15, 'y'=>306, 'w'=>287, 'h'=> 79, 'head'=>[ 52,306,215,306,215,356, 52,356,], 'body'=>[ 30,351, 85,351, 85,373, 30,373,], 'legs'=>[ 30,363, 35,363, 80,363, 85,363,172,385, 85,385,], 'ex'=>1 },
+{ 'x'=> 20, 'y'=>298, 'w'=>282, 'h'=> 90, 'head'=>[ 26,298,148,298,148,348, 26,348,], 'body'=>[ 52,343,107,343,107,370, 52,370,], 'legs'=>[ 52,360, 57,360,102,360,107,360,169,388, 72,388,], 'ex'=>1 },
+{ 'x'=> 27, 'y'=>284, 'w'=>274, 'h'=>105, 'head'=>[ 32,284, 93,284, 93,334, 32,334,], 'body'=>[ 55,329,110,329,110,364, 55,364,], 'legs'=>[ 55,354, 60,354,105,354,110,354,167,389, 72,389,], 'ex'=>1 },
+{ 'x'=> 52, 'y'=>251, 'w'=>248, 'h'=>137, 'head'=>[ 55,251, 91,251, 91,301, 55,301,], 'body'=>[ 74,296,129,296,129,347, 74,347,], 'legs'=>[ 74,337, 79,337,124,337,129,337,266,388, 83,388,], 'ex'=>1 },
+{ 'x'=> 80, 'y'=>237, 'w'=>208, 'h'=>152, 'head'=>[ 91,237,127,237,127,287, 91,287,], 'body'=>[ 95,282,150,282,150,340, 95,340,], 'legs'=>[ 95,330,100,330,145,330,150,330,188,389, 96,389,], 'ex'=>1 },
+{ 'x'=> 88, 'y'=>231, 'w'=>187, 'h'=>154, 'head'=>[111,231,149,231,149,281,111,281,], 'body'=>[113,276,168,276,168,335,113,335,], 'legs'=>[113,325,118,325,163,325,168,325,194,385,100,385,], 'ex'=>1 },
+{ 'x'=>107, 'y'=>225, 'w'=>141, 'h'=>161, 'head'=>[130,225,169,225,169,275,130,275,], 'body'=>[109,270,164,270,164,333,109,333,], 'legs'=>[109,323,114,323,159,323,164,323,183,386,113,386,], 'ex'=>1 },
+{ 'x'=>118, 'y'=>224, 'w'=>113, 'h'=>162, 'head'=>[149,224,189,224,189,274,149,274,], 'body'=>[121,269,176,269,176,332,121,332,], 'legs'=>[121,322,126,322,171,322,176,322,229,386,120,386,], 'ex'=>1 },
+{ 'x'=>125, 'y'=>230, 'w'=>107, 'h'=>156, 'head'=>[176,230,223,230,223,280,176,280,], 'body'=>[133,275,188,275,188,335,133,335,], 'legs'=>[133,325,138,325,183,325,188,325,228,386,125,386,], 'ex'=>1 },
+{ 'x'=>136, 'y'=>226, 'w'=>124, 'h'=>156, 'head'=>[192,226,248,226,248,276,192,276,], 'body'=>[142,271,197,271,197,331,142,331,], 'legs'=>[142,321,147,321,192,321,197,321,231,382,137,382,], 'ex'=>1 },
+{ 'x'=>137, 'y'=>196, 'w'=>129, 'h'=>177, 'head'=>[201,196,252,196,252,246,201,246,], 'body'=>[144,241,199,241,199,312,144,312,], 'legs'=>[144,302,149,302,194,302,199,302,239,373,191,373,], 'ex'=>1 },
+{ 'x'=>136, 'y'=>178, 'w'=>142, 'h'=>195, 'head'=>[205,178,254,178,254,228,205,228,], 'body'=>[144,223,199,223,199,303,144,303,], 'legs'=>[144,293,149,293,194,293,199,293,276,373,193,373,], 'ex'=>1 },
+{ 'x'=>131, 'y'=>135, 'w'=>171, 'h'=>240, 'head'=>[208,135,248,135,248,185,208,185,], 'body'=>[163,180,218,180,218,282,163,282,], 'legs'=>[163,272,168,272,213,272,218,272,230,375,157,375,], 'ex'=>1 },
+{ 'x'=>129, 'y'=>116, 'w'=>175, 'h'=>258, 'head'=>[203,116,240,116,240,166,203,166,], 'body'=>[155,161,210,161,210,272,155,272,], 'legs'=>[155,262,160,262,205,262,210,262,231,374,129,374,], 'ex'=>1 },
+{ 'x'=>107, 'y'=> 92, 'w'=>193, 'h'=>297, 'head'=>[188, 92,224, 92,224,142,188,142,], 'body'=>[146,137,201,137,201,268,146,268,], 'legs'=>[146,258,151,258,196,258,201,258,231,389,107,389,], 'ex'=>1 },
+{ 'x'=>105, 'y'=> 84, 'w'=>172, 'h'=>308, 'head'=>[166, 84,202, 84,202,134,166,134,], 'body'=>[134,129,189,129,189,265,134,265,], 'legs'=>[134,255,139,255,184,255,189,255,231,392,106,392,], 'ex'=>1 },
+{ 'x'=>104, 'y'=> 78, 'w'=>159, 'h'=>306, 'head'=>[148, 78,183, 78,183,128,148,128,], 'body'=>[124,123,179,123,179,258,124,258,], 'legs'=>[124,248,129,248,174,248,179,248,229,384,105,384,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 71, 'w'=>142, 'h'=>311, 'head'=>[244, 71,276, 71,276,121,244,121,], 'body'=>[230,116,285,116,285,254,230,254,], 'legs'=>[230,244,235,244,280,244,285,244,316,382,205,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 72, 'w'=>126, 'h'=>305, 'head'=>[252, 72,292, 72,292,122,252,122,], 'body'=>[234,117,289,117,289,252,234,252,], 'legs'=>[234,242,239,242,284,242,289,242,314,377,206,377,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 74, 'w'=>109, 'h'=>304, 'head'=>[266, 74,296, 74,296,124,266,124,], 'body'=>[239,119,294,119,294,253,239,253,], 'legs'=>[239,243,244,243,289,243,294,243,313,378,209,378,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 79, 'w'=>105, 'h'=>290, 'head'=>[268, 79,298, 79,298,129,268,129,], 'body'=>[236,124,291,124,291,251,236,251,], 'legs'=>[236,241,241,241,286,241,291,241,312,369,210,369,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 84, 'w'=>108, 'h'=>285, 'head'=>[264, 84,299, 84,299,134,264,134,], 'body'=>[233,129,288,129,288,254,233,254,], 'legs'=>[233,244,238,244,283,244,288,244,312,369,208,369,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 84, 'w'=>105, 'h'=>282, 'head'=>[251, 84,285, 84,285,134,251,134,], 'body'=>[222,129,277,129,277,252,222,252,], 'legs'=>[222,242,227,242,272,242,277,242,309,366,207,366,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 78, 'w'=>100, 'h'=>288, 'head'=>[233, 78,262, 78,262,128,233,128,], 'body'=>[213,123,268,123,268,249,213,249,], 'legs'=>[213,239,218,239,263,239,268,239,304,366,207,366,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 79, 'w'=>113, 'h'=>290, 'head'=>[222, 79,252, 79,252,129,222,129,], 'body'=>[209,124,264,124,264,251,209,251,], 'legs'=>[209,241,214,241,259,241,264,241,311,369,203,369,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 79, 'w'=>113, 'h'=>289, 'head'=>[207, 79,238, 79,238,129,207,129,], 'body'=>[206,124,261,124,261,251,206,251,], 'legs'=>[206,241,211,241,256,241,261,241,308,368,204,368,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 80, 'w'=>113, 'h'=>285, 'head'=>[207, 80,238, 80,238,130,207,130,], 'body'=>[205,125,260,125,260,250,205,250,], 'legs'=>[205,240,210,240,255,240,260,240,308,365,203,365,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 81, 'w'=>109, 'h'=>289, 'head'=>[209, 81,240, 81,240,131,209,131,], 'body'=>[208,126,263,126,263,253,208,253,], 'legs'=>[208,243,213,243,258,243,263,243,306,370,203,370,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 71, 'w'=>178, 'h'=>307, 'head'=>[222, 71,255, 71,255,121,222,121,], 'body'=>[208,116,263,116,263,252,208,252,], 'legs'=>[208,242,213,242,258,242,263,242,293,378,188,378,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 79, 'w'=>186, 'h'=>302, 'head'=>[234, 79,268, 79,268,129,234,129,], 'body'=>[220,124,275,124,275,257,220,257,], 'legs'=>[220,247,225,247,270,247,275,247,316,381,205,381,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 88, 'w'=>179, 'h'=>297, 'head'=>[225, 88,258, 88,258,138,225,138,], 'body'=>[214,133,269,133,269,264,214,264,], 'legs'=>[214,254,219,254,264,254,269,254,315,385,195,385,], 'ex'=>1 },
+{ 'x'=>187, 'y'=>106, 'w'=>166, 'h'=>283, 'head'=>[214,106,247,106,247,156,214,156,], 'body'=>[205,151,260,151,260,275,205,275,], 'legs'=>[205,265,210,265,255,265,260,265,318,389,193,389,], 'ex'=>1 },
+{ 'x'=>178, 'y'=>127, 'w'=>144, 'h'=>262, 'head'=>[204,127,238,127,238,177,204,177,], 'body'=>[207,172,262,172,262,285,207,285,], 'legs'=>[207,275,212,275,257,275,262,275,319,389,187,389,], 'ex'=>1 },
+{ 'x'=>165, 'y'=>145, 'w'=>156, 'h'=>243, 'head'=>[195,145,228,145,228,195,195,195,], 'body'=>[200,190,255,190,255,294,200,294,], 'legs'=>[200,284,205,284,250,284,255,284,320,388,186,388,], 'ex'=>1 },
+{ 'x'=>167, 'y'=>162, 'w'=>154, 'h'=>226, 'head'=>[185,162,228,162,228,212,185,212,], 'body'=>[201,207,256,207,256,302,201,302,], 'legs'=>[201,292,206,292,251,292,256,292,319,388,184,388,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 71, 'w'=>156, 'h'=>311, 'head'=>[245, 71,277, 71,277,121,245,121,], 'body'=>[231,116,286,116,286,254,231,254,], 'legs'=>[231,244,236,244,281,244,286,244,312,382,210,382,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 69, 'w'=>127, 'h'=>312, 'head'=>[242, 69,272, 69,272,119,242,119,], 'body'=>[231,114,286,114,286,252,231,252,], 'legs'=>[231,242,236,242,281,242,286,242,315,381,211,381,], 'ex'=>1 },
+{ 'x'=>212, 'y'=> 68, 'w'=>105, 'h'=>311, 'head'=>[240, 68,269, 68,269,118,240,118,], 'body'=>[226,113,281,113,281,251,226,251,], 'legs'=>[226,241,231,241,276,241,281,241,315,379,215,379,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 68, 'w'=>109, 'h'=>316, 'head'=>[231, 68,257, 68,257,118,231,118,], 'body'=>[214,113,269,113,269,253,214,253,], 'legs'=>[214,243,219,243,264,243,269,243,312,384,211,384,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 64, 'w'=>111, 'h'=>315, 'head'=>[222, 64,249, 64,249,114,222,114,], 'body'=>[207,109,262,109,262,249,207,249,], 'legs'=>[207,239,212,239,257,239,262,239,306,379,204,379,], 'ex'=>1 },
+{ 'x'=>191, 'y'=> 65, 'w'=> 91, 'h'=>313, 'head'=>[218, 65,246, 65,246,115,218,115,], 'body'=>[204,110,259,110,259,249,204,249,], 'legs'=>[204,239,209,239,254,239,259,239,274,378,205,378,], 'ex'=>1 },
+{ 'x'=>180, 'y'=> 67, 'w'=>113, 'h'=>310, 'head'=>[218, 67,246, 67,246,117,218,117,], 'body'=>[199,112,254,112,254,249,199,249,], 'legs'=>[199,239,204,239,249,239,254,239,271,377,204,377,], 'ex'=>1 },
+{ 'x'=>177, 'y'=> 72, 'w'=>121, 'h'=>309, 'head'=>[218, 72,244, 72,244,122,218,122,], 'body'=>[195,117,250,117,250,254,195,254,], 'legs'=>[195,244,200,244,245,244,250,244,273,381,203,381,], 'ex'=>1 },
+{ 'x'=>187, 'y'=> 71, 'w'=>110, 'h'=>303, 'head'=>[212, 71,237, 71,237,121,212,121,], 'body'=>[198,116,253,116,253,250,198,250,], 'legs'=>[198,240,203,240,248,240,253,240,272,374,193,374,], 'ex'=>1 },
+{ 'x'=>159, 'y'=> 69, 'w'=>123, 'h'=>304, 'head'=>[202, 69,227, 69,227,119,202,119,], 'body'=>[196,114,251,114,251,248,196,248,], 'legs'=>[196,238,201,238,246,238,251,238,269,373,160,373,], 'ex'=>1 },
+{ 'x'=>133, 'y'=> 68, 'w'=>138, 'h'=>304, 'head'=>[192, 68,218, 68,218,118,192,118,], 'body'=>[189,113,244,113,244,247,189,247,], 'legs'=>[189,237,194,237,239,237,244,237,268,372,134,372,], 'ex'=>1 },
+{ 'x'=>119, 'y'=> 73, 'w'=>151, 'h'=>302, 'head'=>[183, 73,209, 73,209,123,183,123,], 'body'=>[178,118,233,118,233,251,178,251,], 'legs'=>[178,241,183,241,228,241,233,241,268,375,120,375,], 'ex'=>1 },
+{ 'x'=>116, 'y'=> 74, 'w'=>153, 'h'=>306, 'head'=>[166, 74,192, 74,192,124,166,124,], 'body'=>[167,119,222,119,222,254,167,254,], 'legs'=>[167,244,172,244,217,244,222,244,266,380,117,380,], 'ex'=>1 },
+{ 'x'=>116, 'y'=> 72, 'w'=>156, 'h'=>307, 'head'=>[156, 72,183, 72,183,122,156,122,], 'body'=>[152,117,207,117,207,253,152,253,], 'legs'=>[152,243,157,243,202,243,207,243,270,379,117,379,], 'ex'=>1 },
+{ 'x'=>116, 'y'=> 69, 'w'=>152, 'h'=>310, 'head'=>[144, 69,171, 69,171,119,144,119,], 'body'=>[137,114,192,114,192,251,137,251,], 'legs'=>[137,241,142,241,187,241,192,241,267,379,118,379,], 'ex'=>1 },
+{ 'x'=>116, 'y'=> 65, 'w'=>131, 'h'=>314, 'head'=>[138, 65,166, 65,166,115,138,115,], 'body'=>[130,110,185,110,185,249,130,249,], 'legs'=>[130,239,135,239,180,239,185,239,245,379,117,379,], 'ex'=>1 },
+{ 'x'=>113, 'y'=> 58, 'w'=> 94, 'h'=>312, 'head'=>[135, 58,162, 58,162,108,135,108,], 'body'=>[123,103,178,103,178,241,123,241,], 'legs'=>[123,231,128,231,173,231,178,231,192,370,122,370,], 'ex'=>1 },
+{ 'x'=>114, 'y'=> 62, 'w'=>123, 'h'=>317, 'head'=>[139, 62,167, 62,167,112,139,112,], 'body'=>[123,107,178,107,178,248,123,248,], 'legs'=>[123,238,128,238,173,238,178,238,182,379,117,379,], 'ex'=>1 },
+{ 'x'=>106, 'y'=> 56, 'w'=>117, 'h'=>319, 'head'=>[136, 56,163, 56,163,106,136,106,], 'body'=>[116,101,171,101,171,243,116,243,], 'legs'=>[116,233,121,233,166,233,171,233,183,375,110,375,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 67, 'w'=>155, 'h'=>315, 'head'=>[258, 67,286, 67,286,117,258,117,], 'body'=>[241,112,296,112,296,252,241,252,], 'legs'=>[241,242,246,242,291,242,296,242,312,382,206,382,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 78, 'w'=>134, 'h'=>298, 'head'=>[255, 78,296, 78,296,128,255,128,], 'body'=>[238,123,293,123,293,254,238,254,], 'legs'=>[238,244,243,244,288,244,293,244,319,376,199,376,], 'ex'=>1 },
+{ 'x'=>190, 'y'=> 98, 'w'=>134, 'h'=>284, 'head'=>[224, 98,272, 98,272,148,224,148,], 'body'=>[226,143,281,143,281,267,226,267,], 'legs'=>[226,257,231,257,276,257,281,257,321,382,191,382,], 'ex'=>1 },
+{ 'x'=>186, 'y'=>111, 'w'=>133, 'h'=>271, 'head'=>[193,111,256,111,256,161,193,161,], 'body'=>[214,156,269,156,269,274,214,274,], 'legs'=>[214,264,219,264,264,264,269,264,317,382,191,382,], 'ex'=>1 },
+{ 'x'=>176, 'y'=>122, 'w'=>138, 'h'=>259, 'head'=>[181,122,252,122,252,172,181,172,], 'body'=>[211,167,266,167,266,279,211,279,], 'legs'=>[211,269,216,269,261,269,266,269,312,381,190,381,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 75, 'w'=>185, 'h'=>307, 'head'=>[245, 75,278, 75,278,125,245,125,], 'body'=>[224,120,279,120,279,256,224,256,], 'legs'=>[224,246,229,246,274,246,279,246,305,382,205,382,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>109, 'w'=>178, 'h'=>271, 'head'=>[248,109,283,109,283,159,248,159,], 'body'=>[223,154,278,154,278,272,223,272,], 'legs'=>[223,262,228,262,273,262,278,262,310,380,208,380,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>139, 'w'=>184, 'h'=>248, 'head'=>[246,139,284,139,284,189,246,189,], 'body'=>[219,184,274,184,274,290,219,290,], 'legs'=>[219,280,224,280,269,280,274,280,307,387,203,387,], 'ex'=>1 },
+{ 'x'=>198, 'y'=>185, 'w'=>181, 'h'=>204, 'head'=>[238,185,276,185,276,235,238,235,], 'body'=>[218,230,273,230,273,314,218,314,], 'legs'=>[218,304,223,304,268,304,273,304,303,389,199,389,], 'ex'=>1 },
+{ 'x'=>193, 'y'=>211, 'w'=>181, 'h'=>178, 'head'=>[233,211,270,211,270,261,233,261,], 'body'=>[212,256,267,256,267,327,212,327,], 'legs'=>[212,317,217,317,262,317,267,317,298,389,194,389,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>206, 'w'=>183, 'h'=>184, 'head'=>[232,206,266,206,266,256,232,256,], 'body'=>[208,251,263,251,263,325,208,325,], 'legs'=>[208,315,213,315,258,315,263,315,295,390,193,390,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>206, 'w'=>181, 'h'=>186, 'head'=>[232,206,267,206,267,256,232,256,], 'body'=>[206,251,261,251,261,326,206,326,], 'legs'=>[206,316,211,316,256,316,261,316,296,392,192,392,], 'ex'=>1 },
+{ 'x'=>191, 'y'=>209, 'w'=>186, 'h'=>186, 'head'=>[231,209,267,209,267,259,231,259,], 'body'=>[205,254,260,254,260,329,205,329,], 'legs'=>[205,319,210,319,255,319,260,319,297,395,192,395,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>214, 'w'=>155, 'h'=>173, 'head'=>[223,214,259,214,259,264,223,264,], 'body'=>[199,259,254,259,254,328,199,328,], 'legs'=>[199,318,204,318,249,318,254,318,294,387,196,387,], 'ex'=>1 },
+{ 'x'=>177, 'y'=>216, 'w'=>189, 'h'=>171, 'head'=>[221,216,263,216,263,266,221,266,], 'body'=>[195,261,250,261,250,329,195,329,], 'legs'=>[195,319,200,319,245,319,250,319,294,387,196,387,], 'ex'=>1 },
+{ 'x'=>168, 'y'=>222, 'w'=>213, 'h'=>165, 'head'=>[203,222,270,222,270,272,203,272,], 'body'=>[206,267,261,267,261,332,206,332,], 'legs'=>[206,322,211,322,256,322,261,322,294,387,196,387,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>221, 'w'=>205, 'h'=>166, 'head'=>[192,221,241,221,241,271,192,271,], 'body'=>[209,266,264,266,264,331,209,331,], 'legs'=>[209,321,214,321,259,321,264,321,293,387,195,387,], 'ex'=>1 },
+{ 'x'=>188, 'y'=>224, 'w'=>200, 'h'=>163, 'head'=>[195,224,244,224,244,274,195,274,], 'body'=>[211,269,266,269,266,333,211,333,], 'legs'=>[211,323,216,323,261,323,266,323,294,387,196,387,], 'ex'=>0, 'hit'=>[287,279,390,313,380,334,273,312,] },
+{ 'x'=>179, 'y'=>222, 'w'=>168, 'h'=>166, 'head'=>[218,222,254,222,254,272,218,272,], 'body'=>[186,267,241,267,241,332,186,332,], 'legs'=>[186,322,191,322,236,322,241,322,298,388,198,388,], 'ex'=>1 },
+{ 'x'=>153, 'y'=>217, 'w'=>191, 'h'=>171, 'head'=>[199,217,235,217,235,267,199,267,], 'body'=>[164,262,219,262,219,330,164,330,], 'legs'=>[164,320,169,320,214,320,219,320,297,388,197,388,], 'ex'=>1 },
+{ 'x'=>133, 'y'=>222, 'w'=>203, 'h'=>166, 'head'=>[182,222,227,222,227,272,182,272,], 'body'=>[142,267,197,267,197,332,142,332,], 'legs'=>[142,322,147,322,192,322,197,322,316,388,195,388,], 'ex'=>1 },
+{ 'x'=>133, 'y'=>225, 'w'=>223, 'h'=>163, 'head'=>[179,225,228,225,228,275,179,275,], 'body'=>[147,270,202,270,202,334,147,334,], 'legs'=>[147,324,152,324,197,324,202,324,308,388,196,388,], 'ex'=>1 },
+{ 'x'=>115, 'y'=>236, 'w'=>258, 'h'=>152, 'head'=>[186,235,232,236,232,286,192,279,], 'body'=>[180,280,235,280,268,339,183,364,], 'legs'=>[174,323,184,321,260,310,355,353,372,394,196,389,], 'ex'=>0, 'hit'=>[240,310,370,369,359,390,198,382,] },
+{ 'x'=>205, 'y'=> 75, 'w'=>160, 'h'=>300, 'head'=>[245, 75,277, 75,277,125,245,125,], 'body'=>[225,120,280,120,280,252,225,252,], 'legs'=>[225,242,230,242,275,242,280,242,315,375,205,375,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 73, 'w'=>130, 'h'=>305, 'head'=>[247, 73,277, 73,277,123,247,123,], 'body'=>[226,118,281,118,281,253,226,253,], 'legs'=>[226,243,231,243,276,243,281,243,315,378,206,378,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 72, 'w'=>115, 'h'=>302, 'head'=>[247, 72,281, 72,281,122,247,122,], 'body'=>[224,117,279,117,279,250,224,250,], 'legs'=>[224,240,229,240,274,240,279,240,317,374,205,374,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 72, 'w'=>126, 'h'=>302, 'head'=>[233, 72,275, 72,275,122,233,122,], 'body'=>[221,117,276,117,276,250,221,250,], 'legs'=>[221,240,226,240,271,240,276,240,316,374,205,374,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 74, 'w'=>128, 'h'=>304, 'head'=>[221, 74,274, 74,274,124,221,124,], 'body'=>[220,119,275,119,275,253,220,253,], 'legs'=>[220,243,225,243,270,243,275,243,318,378,204,378,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 75, 'w'=>175, 'h'=>306, 'head'=>[241, 75,272, 75,272,125,241,125,], 'body'=>[229,120,284,120,284,255,229,255,], 'legs'=>[229,245,234,245,279,245,284,245,320,381,212,381,], 'ex'=>1 },
+{ 'x'=>211, 'y'=> 75, 'w'=>176, 'h'=>304, 'head'=>[239, 75,268, 75,268,125,239,125,], 'body'=>[229,120,284,120,284,254,229,254,], 'legs'=>[229,244,234,244,279,244,284,244,317,379,211,379,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 75, 'w'=>174, 'h'=>306, 'head'=>[239, 75,268, 75,268,125,239,125,], 'body'=>[230,120,285,120,285,255,230,255,], 'legs'=>[230,245,235,245,280,245,285,245,319,381,209,381,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 77, 'w'=>169, 'h'=>305, 'head'=>[242, 77,275, 77,275,127,242,127,], 'body'=>[227,122,282,122,282,257,227,257,], 'legs'=>[227,247,232,247,277,247,282,247,316,382,202,382,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 71, 'w'=>147, 'h'=>311, 'head'=>[249, 71,284, 71,284,121,249,121,], 'body'=>[228,116,283,116,283,254,228,254,], 'legs'=>[228,244,233,244,278,244,283,244,315,382,203,382,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 70, 'w'=>130, 'h'=>314, 'head'=>[255, 70,291, 70,291,120,255,120,], 'body'=>[230,115,285,115,285,254,230,254,], 'legs'=>[230,244,235,244,280,244,285,244,315,384,202,384,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 71, 'w'=>121, 'h'=>312, 'head'=>[260, 71,296, 71,296,121,260,121,], 'body'=>[231,116,286,116,286,254,231,254,], 'legs'=>[231,244,236,244,281,244,286,244,315,383,203,383,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 73, 'w'=>121, 'h'=>310, 'head'=>[268, 73,305, 73,305,123,268,123,], 'body'=>[231,118,286,118,286,255,231,255,], 'legs'=>[231,245,236,245,281,245,286,245,317,383,203,383,], 'ex'=>1 },
+{ 'x'=>202, 'y'=> 77, 'w'=>125, 'h'=>306, 'head'=>[277, 77,314, 77,314,127,277,127,], 'body'=>[232,122,287,122,287,257,232,257,], 'legs'=>[232,247,237,247,282,247,287,247,317,383,203,383,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 75, 'w'=>155, 'h'=>306, 'head'=>[247, 75,279, 75,279,125,247,125,], 'body'=>[227,120,282,120,282,255,227,255,], 'legs'=>[227,245,232,245,277,245,282,245,338,381,199,381,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 75, 'w'=>189, 'h'=>307, 'head'=>[260, 75,291, 75,291,125,260,125,], 'body'=>[234,120,289,120,289,256,234,256,], 'legs'=>[234,246,239,246,284,246,289,246,336,382,200,382,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 79, 'w'=>216, 'h'=>303, 'head'=>[278, 79,322, 79,322,129,278,129,], 'body'=>[242,124,297,124,297,258,242,258,], 'legs'=>[242,248,247,248,292,248,297,248,333,382,200,382,], 'ex'=>1 },
+{ 'x'=>199, 'y'=> 86, 'w'=>230, 'h'=>295, 'head'=>[302, 86,356, 86,356,136,302,136,], 'body'=>[254,131,309,131,309,261,254,261,], 'legs'=>[254,251,259,251,304,251,309,251,338,381,200,381,], 'ex'=>0, 'hit'=>[392,109,436, 97,424,119,398,131,] },
+{ 'x'=>205, 'y'=> 78, 'w'=>160, 'h'=>300, 'head'=>[238, 78,271, 78,271,128,238,128,], 'body'=>[220,123,275,123,275,255,220,255,], 'legs'=>[220,245,225,245,270,245,275,245,315,378,205,378,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 77, 'w'=>138, 'h'=>303, 'head'=>[254, 77,287, 77,287,127,254,127,], 'body'=>[229,122,284,122,284,256,229,256,], 'legs'=>[229,246,234,246,279,246,284,246,330,380,207,380,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 83, 'w'=>163, 'h'=>298, 'head'=>[280, 83,312, 83,312,133,280,133,], 'body'=>[254,128,309,128,309,259,254,259,], 'legs'=>[254,249,259,249,304,249,309,249,336,381,206,381,], 'ex'=>1 },
+{ 'x'=>208, 'y'=> 96, 'w'=>189, 'h'=>285, 'head'=>[290, 96,325, 96,325,146,290,146,], 'body'=>[258,141,313,141,313,266,258,266,], 'legs'=>[258,256,263,256,308,256,313,256,336,381,208,381,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>108, 'w'=>232, 'h'=>272, 'head'=>[292,108,334,108,334,158,292,158,], 'body'=>[259,153,314,153,314,271,259,271,], 'legs'=>[259,261,264,261,309,261,314,261,336,380,208,380,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>123, 'w'=>239, 'h'=>255, 'head'=>[302,123,361,123,361,173,302,173,], 'body'=>[264,168,319,168,319,278,264,278,], 'legs'=>[264,268,269,268,314,268,319,268,335,378,209,378,], 'ex'=>0, 'hit'=>[408,161,449,161,447,175,410,180,] },
+{ 'x'=>200, 'y'=> 80, 'w'=>136, 'h'=>297, 'head'=>[235, 80,268, 80,268,130,235,130,], 'body'=>[219,125,274,125,274,256,219,256,], 'legs'=>[219,246,224,246,269,246,274,246,315,377,219,377,], 'ex'=>1 },
+{ 'x'=>174, 'y'=> 88, 'w'=>148, 'h'=>293, 'head'=>[210, 88,242, 88,242,138,210,138,], 'body'=>[208,133,263,133,263,262,208,262,], 'legs'=>[208,252,213,252,258,252,263,252,320,381,228,381,], 'ex'=>1 },
+{ 'x'=>160, 'y'=> 98, 'w'=>186, 'h'=>285, 'head'=>[197, 98,232, 98,232,148,197,148,], 'body'=>[200,143,255,143,255,268,200,268,], 'legs'=>[200,258,205,258,250,258,255,258,344,383,227,383,], 'ex'=>1 },
+{ 'x'=>149, 'y'=>105, 'w'=>268, 'h'=>293, 'head'=>[188,105,226,105,226,155,188,155,], 'body'=>[199,150,254,150,254,279,199,279,], 'legs'=>[199,269,204,269,249,269,254,269,272,398,237,398,], 'ex'=>1 },
+{ 'x'=>140, 'y'=>114, 'w'=>292, 'h'=>263, 'head'=>[179,114,227,114,227,164,179,164,], 'body'=>[191,159,246,159,246,273,191,273,], 'legs'=>[191,263,196,263,241,263,246,263,275,377,239,377,], 'ex'=>1 },
+{ 'x'=>140, 'y'=>122, 'w'=>290, 'h'=>263, 'head'=>[176,122,232,122,232,172,176,172,], 'body'=>[195,167,250,167,250,281,195,281,], 'legs'=>[195,271,200,271,245,271,250,271,281,385,237,385,], 'ex'=>0, 'hit'=>[382,170,428,140,433,165,393,185,] },
+{ 'x'=>205, 'y'=> 79, 'w'=>138, 'h'=>298, 'head'=>[248, 79,277, 79,277,129,248,129,], 'body'=>[226,124,281,124,281,255,226,255,], 'legs'=>[226,245,231,245,276,245,281,245,333,377,207,377,], 'ex'=>1 },
+{ 'x'=>185, 'y'=> 82, 'w'=>146, 'h'=>302, 'head'=>[226, 82,254, 82,254,132,226,132,], 'body'=>[216,127,271,127,271,260,216,260,], 'legs'=>[216,250,221,250,266,250,271,250,330,384,226,384,], 'ex'=>1 },
+{ 'x'=>158, 'y'=> 96, 'w'=>204, 'h'=>287, 'head'=>[195, 96,226, 96,226,146,195,146,], 'body'=>[200,141,255,141,255,267,200,267,], 'legs'=>[200,257,205,257,250,257,255,257,361,383,221,383,], 'ex'=>1 },
+{ 'x'=>150, 'y'=>106, 'w'=>259, 'h'=>277, 'head'=>[184,106,217,106,217,156,184,156,], 'body'=>[193,151,248,151,248,272,193,272,], 'legs'=>[193,262,198,262,243,262,248,262,257,383,220,383,], 'ex'=>1 },
+{ 'x'=>146, 'y'=>114, 'w'=>280, 'h'=>269, 'head'=>[175,114,210,114,210,164,175,164,], 'body'=>[188,159,243,159,243,276,188,276,], 'legs'=>[188,266,193,266,238,266,243,266,259,383,223,383,], 'ex'=>0, 'hit'=>[391,237,429,253,417,288,385,267,] },
+{ 'x'=>192, 'y'=> 80, 'w'=>165, 'h'=>302, 'head'=>[251, 80,284, 80,284,130,251,130,], 'body'=>[224,125,279,125,279,258,224,258,], 'legs'=>[224,248,229,248,274,248,279,248,329,382,193,382,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 96, 'w'=>138, 'h'=>286, 'head'=>[273, 96,306, 96,306,146,273,146,], 'body'=>[238,141,293,141,293,266,238,266,], 'legs'=>[238,256,243,256,288,256,293,256,330,382,194,382,], 'ex'=>1 },
+{ 'x'=>193, 'y'=>126, 'w'=>165, 'h'=>263, 'head'=>[298,126,329,126,329,176,298,176,], 'body'=>[258,171,313,171,313,285,258,285,], 'legs'=>[258,275,263,275,308,275,313,275,336,389,193,389,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>161, 'w'=>117, 'h'=>226, 'head'=>[294,161,328,161,328,211,294,211,], 'body'=>[265,206,320,206,320,301,265,301,], 'legs'=>[265,291,270,291,315,291,320,291,342,387,255,387,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>174, 'w'=>130, 'h'=>225, 'head'=>[288,174,320,174,320,224,288,224,], 'body'=>[269,219,324,219,324,314,269,314,], 'legs'=>[269,304,274,304,319,304,324,304,349,399,307,399,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>186, 'w'=>219, 'h'=>195, 'head'=>[284,186,318,186,318,236,284,236,], 'body'=>[281,231,336,231,336,311,281,311,], 'legs'=>[281,301,286,301,331,301,336,301,470,381,258,381,], 'ex'=>1 },
+{ 'x'=>256, 'y'=>205, 'w'=>275, 'h'=>174, 'head'=>[285,205,321,205,321,255,285,255,], 'body'=>[282,250,337,250,337,319,282,319,], 'legs'=>[282,309,287,309,332,309,337,309,358,379,256,379,], 'ex'=>0, 'hit'=>[469,306,533,309,533,338,465,324,] },
+{ 'x'=>197, 'y'=> 79, 'w'=>157, 'h'=>302, 'head'=>[245, 79,277, 79,277,129,245,129,], 'body'=>[223,124,278,124,278,257,223,257,], 'legs'=>[223,247,228,247,273,247,278,247,317,381,198,381,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 80, 'w'=>128, 'h'=>296, 'head'=>[265, 80,298, 80,298,130,265,130,], 'body'=>[245,125,300,125,300,255,245,255,], 'legs'=>[245,245,250,245,295,245,300,245,329,376,204,376,], 'ex'=>1 },
+{ 'x'=>229, 'y'=> 80, 'w'=>108, 'h'=>285, 'head'=>[276, 80,307, 80,307,130,276,130,], 'body'=>[261,125,316,125,316,250,261,250,], 'legs'=>[261,240,266,240,311,240,316,240,334,365,231,365,], 'ex'=>1 },
+{ 'x'=>255, 'y'=> 82, 'w'=>108, 'h'=>285, 'head'=>[280, 82,311, 82,311,132,280,132,], 'body'=>[264,127,319,127,319,252,264,252,], 'legs'=>[264,242,269,242,314,242,319,242,338,367,287,367,], 'ex'=>1 },
+{ 'x'=>252, 'y'=> 88, 'w'=>147, 'h'=>275, 'head'=>[284, 88,316, 88,316,138,284,138,], 'body'=>[258,133,313,133,313,253,258,253,], 'legs'=>[258,243,263,243,308,243,313,243,397,363,304,363,], 'ex'=>1 },
+{ 'x'=>242, 'y'=> 93, 'w'=>216, 'h'=>268, 'head'=>[288, 93,321, 93,321,143,288,143,], 'body'=>[258,138,313,138,313,254,258,254,], 'legs'=>[258,244,263,244,308,244,313,244,344,361,308,361,], 'ex'=>0, 'hit'=>[414,205,467,191,467,222,415,234,] },
+{ 'x'=>210, 'y'=> 78, 'w'=>167, 'h'=>304, 'head'=>[242, 78,274, 78,274,128,242,128,], 'body'=>[225,123,280,123,280,257,225,257,], 'legs'=>[225,247,230,247,275,247,280,247,331,382,211,382,], 'ex'=>1 },
+{ 'x'=>209, 'y'=> 84, 'w'=>174, 'h'=>298, 'head'=>[265, 84,298, 84,298,134,265,134,], 'body'=>[246,129,301,129,301,260,246,260,], 'legs'=>[246,250,251,250,296,250,301,250,371,382,210,382,], 'ex'=>1 },
+{ 'x'=>217, 'y'=> 79, 'w'=>161, 'h'=>298, 'head'=>[291, 79,322, 79,322,129,291,129,], 'body'=>[278,124,333,124,333,255,278,255,], 'legs'=>[278,245,283,245,328,245,333,245,375,377,217,377,], 'ex'=>1 },
+{ 'x'=>247, 'y'=> 76, 'w'=>131, 'h'=>279, 'head'=>[303, 76,334, 76,334,126,303,126,], 'body'=>[291,121,346,121,346,243,291,243,], 'legs'=>[291,233,296,233,341,233,346,233,376,355,247,355,], 'ex'=>1 },
+{ 'x'=>290, 'y'=> 74, 'w'=>103, 'h'=>281, 'head'=>[312, 74,343, 74,343,124,312,124,], 'body'=>[299,119,354,119,354,242,299,242,], 'legs'=>[299,232,304,232,349,232,354,232,376,355,305,355,], 'ex'=>1 },
+{ 'x'=>294, 'y'=> 75, 'w'=>118, 'h'=>278, 'head'=>[318, 75,349, 75,349,125,318,125,], 'body'=>[302,120,357,120,357,241,302,241,], 'legs'=>[302,231,307,231,352,231,357,231,381,353,342,353,], 'ex'=>0, 'hit'=>[381,196,420,194,407,244,381,236,] },
+{ 'x'=>284, 'y'=> 88, 'w'=>159, 'h'=>267, 'head'=>[325, 88,358, 88,358,138,325,138,], 'body'=>[310,133,365,133,365,249,310,249,], 'legs'=>[310,239,315,239,360,239,365,239,381,355,350,355,], 'ex'=>0, 'hit'=>[375,150,396,139,455,207,433,234,] },
+{ 'x'=>205, 'y'=> 84, 'w'=>148, 'h'=>298, 'head'=>[241, 84,274, 84,274,134,241,134,], 'body'=>[221,129,276,129,276,260,221,260,], 'legs'=>[221,250,226,250,271,250,276,250,328,382,206,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 90, 'w'=>171, 'h'=>293, 'head'=>[259, 90,291, 90,291,140,259,140,], 'body'=>[235,135,290,135,290,264,235,264,], 'legs'=>[235,254,240,254,285,254,290,254,374,383,205,383,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 80, 'w'=>185, 'h'=>303, 'head'=>[271, 80,310, 80,310,130,271,130,], 'body'=>[273,125,328,125,328,259,273,259,], 'legs'=>[273,249,278,249,323,249,328,249,385,383,204,383,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 79, 'w'=>169, 'h'=>298, 'head'=>[290, 79,327, 79,327,129,290,129,], 'body'=>[290,124,345,124,345,255,290,255,], 'legs'=>[290,245,295,245,340,245,345,245,381,377,219,377,], 'ex'=>1 },
+{ 'x'=>244, 'y'=> 73, 'w'=>130, 'h'=>281, 'head'=>[325, 73,359, 73,359,123,325,123,], 'body'=>[302,118,357,118,357,241,302,241,], 'legs'=>[302,231,307,231,352,231,357,231,372,354,244,354,], 'ex'=>1 },
+{ 'x'=>271, 'y'=> 93, 'w'=>140, 'h'=>261, 'head'=>[356, 93,400, 93,400,143,356,143,], 'body'=>[302,138,357,138,357,251,302,251,], 'legs'=>[302,241,307,241,352,241,357,241,376,354,272,354,], 'ex'=>0, 'hit'=>[380,100,413, 97,413,145,382,150,] },
+{ 'x'=>300, 'y'=>131, 'w'=>130, 'h'=>228, 'head'=>[316,131,405,131,405,181,316,181,], 'body'=>[306,176,361,176,361,272,306,272,], 'legs'=>[306,262,311,262,356,262,361,262,384,359,311,359,], 'ex'=>0, 'hit'=>[407,146,432,147,431,181,406,186,] },
+{ 'x'=>205, 'y'=> 79, 'w'=>152, 'h'=>302, 'head'=>[243, 79,276, 79,276,129,243,129,], 'body'=>[227,124,282,124,282,257,227,257,], 'legs'=>[227,247,232,247,277,247,282,247,316,381,205,381,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 84, 'w'=>146, 'h'=>298, 'head'=>[270, 84,301, 84,301,134,270,134,], 'body'=>[253,129,308,129,308,260,253,260,], 'legs'=>[253,250,258,250,303,250,308,250,314,382,206,382,], 'ex'=>1 },
+{ 'x'=>267, 'y'=> 92, 'w'=> 89, 'h'=>283, 'head'=>[292, 92,317, 92,317,142,292,142,], 'body'=>[270,137,325,137,325,261,270,261,], 'legs'=>[270,251,275,251,320,251,325,251,325,375,279,375,], 'ex'=>1 },
+{ 'x'=>261, 'y'=> 96, 'w'=>104, 'h'=>280, 'head'=>[293, 96,321, 96,321,146,293,146,], 'body'=>[275,141,330,141,330,263,275,263,], 'legs'=>[275,253,280,253,325,253,330,253,353,376,285,376,], 'ex'=>1 },
+{ 'x'=>268, 'y'=> 98, 'w'=>117, 'h'=>275, 'head'=>[293, 98,327, 98,327,148,293,148,], 'body'=>[287,143,342,143,342,263,287,263,], 'legs'=>[287,253,292,253,337,253,342,253,383,373,288,373,], 'ex'=>1 },
+{ 'x'=>284, 'y'=>108, 'w'=>103, 'h'=>257, 'head'=>[291,108,328,108,328,158,291,158,], 'body'=>[303,153,358,153,358,264,303,264,], 'legs'=>[303,254,308,254,353,254,358,254,385,365,299,365,], 'ex'=>1 },
+{ 'x'=>284, 'y'=>118, 'w'=>119, 'h'=>248, 'head'=>[290,118,329,118,329,168,290,168,], 'body'=>[313,163,368,163,368,269,313,269,], 'legs'=>[313,259,318,259,363,259,368,259,391,366,357,366,], 'ex'=>1 },
+{ 'x'=>286, 'y'=>121, 'w'=>164, 'h'=>242, 'head'=>[291,121,329,121,329,171,291,171,], 'body'=>[325,166,380,166,380,269,325,269,], 'legs'=>[325,259,330,259,375,259,380,259,395,363,362,363,], 'ex'=>1 },
+{ 'x'=>282, 'y'=>116, 'w'=>234, 'h'=>254, 'head'=>[290,116,321,116,321,166,290,166,], 'body'=>[330,161,385,161,385,270,330,270,], 'legs'=>[330,260,335,260,380,260,385,260,396,370,363,370,], 'ex'=>0, 'hit'=>[483,198,518,196,513,227,483,223,] },
+{ 'x'=>278, 'y'=>109, 'w'=>265, 'h'=>255, 'head'=>[289,109,324,109,324,159,289,159,], 'body'=>[337,154,392,154,392,264,337,264,], 'legs'=>[337,254,342,254,387,254,392,254,406,364,370,364,], 'ex'=>0, 'hit'=>[503,183,542,182,542,212,500,212,] },
+{ 'x'=>210, 'y'=> 84, 'w'=>164, 'h'=>298, 'head'=>[244, 84,276, 84,276,134,244,134,], 'body'=>[235,129,290,129,290,260,235,260,], 'legs'=>[235,250,240,250,285,250,290,250,335,382,211,382,], 'ex'=>1 },
+{ 'x'=>211, 'y'=> 85, 'w'=>130, 'h'=>288, 'head'=>[242, 85,272, 85,272,135,242,135,], 'body'=>[231,130,286,130,286,256,231,256,], 'legs'=>[231,246,236,246,281,246,286,246,333,373,211,373,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 87, 'w'=>127, 'h'=>287, 'head'=>[237, 87,266, 87,266,137,237,137,], 'body'=>[226,132,281,132,281,258,226,258,], 'legs'=>[226,248,231,248,276,248,281,248,335,374,211,374,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 90, 'w'=>135, 'h'=>292, 'head'=>[234, 90,262, 90,262,140,234,140,], 'body'=>[216,135,271,135,271,263,216,263,], 'legs'=>[216,253,221,253,266,253,271,253,333,382,209,382,], 'ex'=>1 },
+{ 'x'=>193, 'y'=> 94, 'w'=>143, 'h'=>282, 'head'=>[228, 94,257, 94,257,144,228,144,], 'body'=>[208,139,263,139,263,262,208,262,], 'legs'=>[208,252,213,252,258,252,263,252,334,376,208,376,], 'ex'=>1 },
+{ 'x'=>188, 'y'=>100, 'w'=>148, 'h'=>277, 'head'=>[226,100,256,100,256,150,226,150,], 'body'=>[208,145,263,145,263,266,208,266,], 'legs'=>[208,256,213,256,258,256,263,256,333,377,206,377,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>101, 'w'=>161, 'h'=>281, 'head'=>[244,101,278,101,278,151,244,151,], 'body'=>[222,146,277,146,277,269,222,269,], 'legs'=>[222,259,227,259,272,259,277,259,359,382,208,382,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>101, 'w'=>157, 'h'=>275, 'head'=>[261,101,296,101,296,151,261,151,], 'body'=>[235,146,290,146,290,266,235,266,], 'legs'=>[235,256,240,256,285,256,290,256,364,376,212,376,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>105, 'w'=>158, 'h'=>278, 'head'=>[281,105,318,105,318,155,281,155,], 'body'=>[249,150,304,150,304,271,249,271,], 'legs'=>[249,261,254,261,299,261,304,261,364,383,210,383,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>108, 'w'=>155, 'h'=>274, 'head'=>[300,108,335,108,335,158,300,158,], 'body'=>[270,153,325,153,325,272,270,272,], 'legs'=>[270,262,275,262,320,262,325,262,362,382,212,382,], 'ex'=>1 },
+{ 'x'=>214, 'y'=>114, 'w'=>198, 'h'=>268, 'head'=>[316,114,354,114,354,164,316,164,], 'body'=>[281,159,336,159,336,275,281,275,], 'legs'=>[281,265,286,265,331,265,336,265,364,382,214,382,], 'ex'=>1 },
+{ 'x'=>216, 'y'=>129, 'w'=>236, 'h'=>254, 'head'=>[328,129,401,129,401,179,328,179,], 'body'=>[287,174,342,174,342,283,287,283,], 'legs'=>[287,273,292,273,337,273,342,273,366,383,216,383,], 'ex'=>0, 'hit'=>[442,158,452,158,452,168,442,168,] },
+{ 'x'=>223, 'y'=>108, 'w'=>215, 'h'=>272, 'head'=>[312,108,370,108,370,158,312,158,], 'body'=>[281,153,336,153,336,271,281,271,], 'legs'=>[281,261,286,261,331,261,336,261,373,380,223,380,], 'ex'=>1 },
+{ 'x'=>223, 'y'=>101, 'w'=>190, 'h'=>279, 'head'=>[301,101,341,101,341,151,301,151,], 'body'=>[275,146,330,146,330,268,275,268,], 'legs'=>[275,258,280,258,325,258,330,258,372,380,224,380,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 97, 'w'=>164, 'h'=>285, 'head'=>[284, 97,319, 97,319,147,284,147,], 'body'=>[265,142,320,142,320,267,265,267,], 'legs'=>[265,257,270,257,315,257,320,257,373,382,223,382,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 92, 'w'=>151, 'h'=>286, 'head'=>[274, 92,308, 92,308,142,274,142,], 'body'=>[255,137,310,137,310,262,255,262,], 'legs'=>[255,252,260,252,305,252,310,252,370,378,227,378,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 90, 'w'=>147, 'h'=>293, 'head'=>[264, 90,297, 90,297,140,264,140,], 'body'=>[247,135,302,135,302,264,247,264,], 'legs'=>[247,254,252,254,297,254,302,254,366,383,223,383,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 88, 'w'=>155, 'h'=>288, 'head'=>[257, 88,290, 88,290,138,257,138,], 'body'=>[240,133,295,133,295,259,240,259,], 'legs'=>[240,249,245,249,290,249,295,249,357,376,227,376,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 85, 'w'=>165, 'h'=>297, 'head'=>[246, 85,279, 85,279,135,246,135,], 'body'=>[222,130,277,130,277,261,222,261,], 'legs'=>[222,251,227,251,272,251,277,251,317,382,206,382,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 87, 'w'=>159, 'h'=>289, 'head'=>[253, 87,290, 87,290,137,253,137,], 'body'=>[226,132,281,132,281,259,226,259,], 'legs'=>[226,249,231,249,276,249,281,249,320,376,207,376,], 'ex'=>1 },
+{ 'x'=>207, 'y'=> 87, 'w'=>138, 'h'=>291, 'head'=>[253, 87,288, 87,288,137,253,137,], 'body'=>[230,132,285,132,285,260,230,260,], 'legs'=>[230,250,235,250,280,250,285,250,332,378,208,378,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 90, 'w'=>133, 'h'=>293, 'head'=>[267, 90,309, 90,309,140,267,140,], 'body'=>[243,135,298,135,298,264,243,264,], 'legs'=>[243,254,248,254,293,254,298,254,335,383,205,383,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 94, 'w'=>126, 'h'=>285, 'head'=>[277, 94,309, 94,309,144,277,144,], 'body'=>[258,139,313,139,313,264,258,264,], 'legs'=>[258,254,263,254,308,254,313,254,333,379,210,379,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>100, 'w'=>155, 'h'=>282, 'head'=>[285,100,316,100,316,150,285,150,], 'body'=>[263,145,318,145,318,268,263,268,], 'legs'=>[263,258,268,258,313,258,318,258,334,382,207,382,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>105, 'w'=>199, 'h'=>276, 'head'=>[293,105,324,105,324,155,293,155,], 'body'=>[266,150,321,150,321,270,266,270,], 'legs'=>[266,260,271,260,316,260,321,260,334,381,208,381,], 'ex'=>0, 'hit'=>[389,144,424,145,414,172,385,174,] },
+{ 'x'=>209, 'y'=> 90, 'w'=>168, 'h'=>293, 'head'=>[338, 90,365, 90,365,140,338,140,], 'body'=>[276,135,331,135,331,264,276,264,], 'legs'=>[276,254,281,254,326,254,331,254,336,383,209,383,], 'ex'=>0, 'hit'=>[361, 80,381, 74,404,150,356,164,] },
+{ 'x'=>205, 'y'=> 88, 'w'=>164, 'h'=>294, 'head'=>[238, 88,270, 88,270,138,238,138,], 'body'=>[222,133,277,133,277,262,222,262,], 'legs'=>[222,252,227,252,272,252,277,252,321,382,205,382,], 'ex'=>1 },
+{ 'x'=>200, 'y'=> 90, 'w'=>176, 'h'=>298, 'head'=>[254, 90,287, 90,287,140,254,140,], 'body'=>[235,135,290,135,290,266,235,266,], 'legs'=>[235,256,240,256,285,256,290,256,339,388,201,388,], 'ex'=>1 },
+{ 'x'=>201, 'y'=> 90, 'w'=>186, 'h'=>298, 'head'=>[264, 90,297, 90,297,140,264,140,], 'body'=>[242,135,297,135,297,266,242,266,], 'legs'=>[242,256,247,256,292,256,297,256,337,388,201,388,], 'ex'=>0, 'hit'=>[370,198,380,198,381,210,370,208,] },
+{ 'x'=>209, 'y'=> 88, 'w'=>192, 'h'=>289, 'head'=>[272, 88,304, 88,304,138,272,138,], 'body'=>[251,133,306,133,306,260,251,260,], 'legs'=>[251,250,256,250,301,250,306,250,335,377,209,377,], 'ex'=>1 },
+{ 'x'=>210, 'y'=> 87, 'w'=>192, 'h'=>292, 'head'=>[278, 87,310, 87,310,137,278,137,], 'body'=>[255,132,310,132,310,260,255,260,], 'legs'=>[255,250,260,250,305,250,310,250,338,379,212,379,], 'ex'=>1 },
+{ 'x'=>226, 'y'=> 75, 'w'=>168, 'h'=>298, 'head'=>[298, 75,325, 75,325,125,298,125,], 'body'=>[264,120,319,120,319,251,264,251,], 'legs'=>[264,241,269,241,314,241,319,241,338,373,228,373,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 57, 'w'=>130, 'h'=>315, 'head'=>[317, 57,336, 57,336,107,317,107,], 'body'=>[270,102,325,102,325,242,270,242,], 'legs'=>[270,232,275,232,320,232,325,232,335,372,238,372,], 'ex'=>1 },
+{ 'x'=>238, 'y'=> 68, 'w'=>110, 'h'=>307, 'head'=>[286, 68,321, 68,321,118,286,118,], 'body'=>[269,113,324,113,324,249,269,249,], 'legs'=>[269,239,274,239,319,239,324,239,336,375,239,375,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 86, 'w'=>104, 'h'=>288, 'head'=>[285, 86,315, 86,315,136,285,136,], 'body'=>[265,131,320,131,320,257,265,257,], 'legs'=>[265,247,270,247,315,247,320,247,338,374,239,374,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 87, 'w'=>115, 'h'=>287, 'head'=>[286, 87,314, 87,314,137,286,137,], 'body'=>[259,132,314,132,314,258,259,258,], 'legs'=>[259,248,264,248,309,248,314,248,334,374,238,374,], 'ex'=>1 },
+{ 'x'=>237, 'y'=> 84, 'w'=>101, 'h'=>292, 'head'=>[285, 84,311, 84,311,134,285,134,], 'body'=>[267,129,322,129,322,257,267,257,], 'legs'=>[267,247,272,247,317,247,322,247,335,376,238,376,], 'ex'=>1 },
+{ 'x'=>251, 'y'=> 85, 'w'=>119, 'h'=>290, 'head'=>[288, 85,315, 85,315,135,288,135,], 'body'=>[264,130,319,130,319,257,264,257,], 'legs'=>[264,247,269,247,314,247,319,247,367,375,267,375,], 'ex'=>1 },
+{ 'x'=>224, 'y'=> 87, 'w'=>158, 'h'=>287, 'head'=>[289, 87,318, 87,318,137,289,137,], 'body'=>[266,132,321,132,321,258,266,258,], 'legs'=>[266,248,271,248,316,248,321,248,381,374,273,374,], 'ex'=>1 },
+{ 'x'=>216, 'y'=> 92, 'w'=>177, 'h'=>290, 'head'=>[298, 92,330, 92,330,142,298,142,], 'body'=>[274,137,329,137,329,264,274,264,], 'legs'=>[274,254,279,254,324,254,329,254,391,382,268,382,], 'ex'=>1 },
+{ 'x'=>227, 'y'=> 92, 'w'=>160, 'h'=>285, 'head'=>[314, 92,346, 92,346,142,314,142,], 'body'=>[293,137,348,137,348,262,293,262,], 'legs'=>[293,252,298,252,343,252,348,252,386,377,261,377,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>101, 'w'=>166, 'h'=>281, 'head'=>[259,101,292,101,292,151,259,151,], 'body'=>[233,146,288,146,288,269,233,269,], 'legs'=>[233,259,238,259,283,259,288,259,324,382,205,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>105, 'w'=>155, 'h'=>278, 'head'=>[257,105,289,105,289,155,257,155,], 'body'=>[231,150,286,150,286,271,231,271,], 'legs'=>[231,261,236,261,281,261,286,261,323,383,205,383,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 93, 'w'=>152, 'h'=>289, 'head'=>[250, 93,275, 93,275,143,250,143,], 'body'=>[229,138,284,138,284,265,229,265,], 'legs'=>[229,255,234,255,279,255,284,255,323,382,205,382,], 'ex'=>1 },
+{ 'x'=>202, 'y'=>101, 'w'=>151, 'h'=>281, 'head'=>[209,101,245,101,245,151,209,151,], 'body'=>[229,146,284,146,284,269,229,269,], 'legs'=>[229,259,234,259,279,259,284,259,321,382,205,382,], 'ex'=>1 },
+{ 'x'=>181, 'y'=>124, 'w'=>165, 'h'=>260, 'head'=>[195,124,276,124,276,174,195,174,], 'body'=>[224,169,279,169,279,281,224,281,], 'legs'=>[224,271,229,271,274,271,279,271,324,384,201,384,], 'ex'=>1 },
+{ 'x'=>174, 'y'=>137, 'w'=>177, 'h'=>246, 'head'=>[191,137,289,137,289,187,191,187,], 'body'=>[218,182,273,182,273,287,218,287,], 'legs'=>[218,277,223,277,268,277,273,277,321,383,202,383,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 97, 'w'=>172, 'h'=>285, 'head'=>[260, 97,292, 97,292,147,260,147,], 'body'=>[240,142,295,142,295,267,240,267,], 'legs'=>[240,257,245,257,290,257,295,257,322,382,205,382,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>109, 'w'=>140, 'h'=>279, 'head'=>[260,109,294,109,294,159,260,159,], 'body'=>[238,154,293,154,293,276,238,276,], 'legs'=>[238,266,243,266,288,266,293,266,320,388,201,388,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>129, 'w'=>121, 'h'=>259, 'head'=>[256,129,295,129,295,179,256,179,], 'body'=>[231,174,286,174,286,286,231,286,], 'legs'=>[231,276,236,276,281,276,286,276,318,388,200,388,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>116, 'w'=>124, 'h'=>268, 'head'=>[242,116,278,116,278,166,242,166,], 'body'=>[215,161,270,161,270,277,215,277,], 'legs'=>[215,267,220,267,265,267,270,267,322,384,202,384,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>131, 'w'=>127, 'h'=>258, 'head'=>[238,131,277,131,277,181,238,181,], 'body'=>[216,176,271,176,271,287,216,287,], 'legs'=>[216,277,221,277,266,277,271,277,323,389,201,389,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 86, 'w'=>155, 'h'=>296, 'head'=>[252, 86,283, 86,283,136,252,136,], 'body'=>[237,131,292,131,292,261,237,261,], 'legs'=>[237,251,242,251,287,251,292,251,326,382,207,382,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 88, 'w'=>121, 'h'=>293, 'head'=>[254, 88,284, 88,284,138,254,138,], 'body'=>[237,133,292,133,292,262,237,262,], 'legs'=>[237,252,242,252,287,252,292,252,325,381,208,381,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 95, 'w'=>122, 'h'=>288, 'head'=>[256, 95,283, 95,283,145,256,145,], 'body'=>[239,140,294,140,294,266,239,266,], 'legs'=>[239,256,244,256,289,256,294,256,326,383,207,383,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 98, 'w'=>120, 'h'=>284, 'head'=>[259, 98,285, 98,285,148,259,148,], 'body'=>[236,143,291,143,291,267,236,267,], 'legs'=>[236,257,241,257,286,257,291,257,324,382,207,382,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 98, 'w'=>120, 'h'=>285, 'head'=>[256, 98,283, 98,283,148,256,148,], 'body'=>[234,143,289,143,289,268,234,268,], 'legs'=>[234,258,239,258,284,258,289,258,325,383,206,383,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>105, 'w'=>121, 'h'=>279, 'head'=>[256,105,283,105,283,155,256,155,], 'body'=>[235,150,290,150,290,272,235,272,], 'legs'=>[235,262,240,262,285,262,290,262,325,384,206,384,], 'ex'=>1 },
+{ 'x'=>207, 'y'=>113, 'w'=>121, 'h'=>268, 'head'=>[259,113,286,113,286,163,259,163,], 'body'=>[237,158,292,158,292,274,237,274,], 'legs'=>[237,264,242,264,287,264,292,264,325,381,207,381,], 'ex'=>1 },
+{ 'x'=>206, 'y'=>125, 'w'=>121, 'h'=>255, 'head'=>[261,125,288,125,288,175,261,175,], 'body'=>[237,170,292,170,292,280,237,280,], 'legs'=>[237,270,242,270,287,270,292,270,325,380,206,380,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>136, 'w'=>123, 'h'=>243, 'head'=>[261,136,287,136,287,186,261,186,], 'body'=>[238,181,293,181,293,285,238,285,], 'legs'=>[238,275,243,275,288,275,293,275,326,379,206,379,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>150, 'w'=>122, 'h'=>235, 'head'=>[259,150,285,150,285,200,259,200,], 'body'=>[238,195,293,195,293,295,238,295,], 'legs'=>[238,285,243,285,288,285,293,285,325,385,206,385,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>169, 'w'=>115, 'h'=>230, 'head'=>[256,169,283,169,283,219,256,219,], 'body'=>[240,214,295,214,295,311,240,311,], 'legs'=>[240,301,245,301,290,301,295,301,324,399,211,399,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>165, 'w'=>115, 'h'=>232, 'head'=>[258,165,285,165,285,215,258,215,], 'body'=>[241,210,296,210,296,308,241,308,], 'legs'=>[241,298,246,298,291,298,296,298,324,397,211,397,], 'ex'=>1 },
+{ 'x'=>212, 'y'=>167, 'w'=>122, 'h'=>229, 'head'=>[271,167,305,167,305,217,271,217,], 'body'=>[240,212,295,212,295,309,240,309,], 'legs'=>[240,299,245,299,290,299,295,299,326,396,213,396,], 'ex'=>1 },
+{ 'x'=>210, 'y'=>161, 'w'=>140, 'h'=>225, 'head'=>[274,161,318,161,318,211,274,211,], 'body'=>[240,206,295,206,295,301,240,301,], 'legs'=>[240,291,245,291,290,291,295,291,331,386,211,386,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>153, 'w'=>148, 'h'=>225, 'head'=>[288,153,328,153,328,203,288,203,], 'body'=>[246,198,301,198,301,293,246,293,], 'legs'=>[246,283,251,283,296,283,301,283,326,378,210,378,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>128, 'w'=>159, 'h'=>251, 'head'=>[294,128,331,128,331,178,294,178,], 'body'=>[246,173,301,173,301,281,246,281,], 'legs'=>[246,271,251,271,296,271,301,271,322,379,209,379,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>109, 'w'=>155, 'h'=>269, 'head'=>[291,109,328,109,328,159,291,159,], 'body'=>[247,154,302,154,302,271,247,271,], 'legs'=>[247,261,252,261,297,261,302,261,321,378,209,378,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 87, 'w'=>176, 'h'=>293, 'head'=>[283, 87,316, 87,316,137,283,137,], 'body'=>[247,132,302,132,302,261,247,261,], 'legs'=>[247,251,252,251,297,251,302,251,318,380,205,380,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 90, 'w'=>182, 'h'=>289, 'head'=>[265, 90,296, 90,296,140,265,140,], 'body'=>[242,135,297,135,297,262,242,262,], 'legs'=>[242,252,247,252,292,252,297,252,318,379,206,379,], 'ex'=>1 },
+{ 'x'=>193, 'y'=>219, 'w'=>174, 'h'=>163, 'head'=>[229,219,260,219,260,269,229,269,], 'body'=>[215,264,270,264,270,328,215,328,], 'legs'=>[215,318,220,318,265,318,270,318,300,382,195,382,], 'ex'=>1 },
+{ 'x'=>193, 'y'=>219, 'w'=>172, 'h'=>163, 'head'=>[213,219,245,219,245,269,213,269,], 'body'=>[212,264,267,264,267,328,212,328,], 'legs'=>[212,318,217,318,262,318,267,318,299,382,195,382,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>225, 'w'=>164, 'h'=>156, 'head'=>[193,225,242,225,242,275,193,275,], 'body'=>[202,270,257,270,257,330,202,330,], 'legs'=>[202,320,207,320,252,320,257,320,299,381,196,381,], 'ex'=>1 },
+{ 'x'=>173, 'y'=>232, 'w'=>163, 'h'=>150, 'head'=>[182,232,239,232,239,282,182,282,], 'body'=>[197,277,252,277,252,334,197,334,], 'legs'=>[197,324,202,324,247,324,252,324,299,382,196,382,], 'ex'=>1 },
+{ 'x'=>193, 'y'=>226, 'w'=>166, 'h'=>158, 'head'=>[225,226,259,226,259,276,225,276,], 'body'=>[208,271,263,271,263,332,208,332,], 'legs'=>[208,322,213,322,258,322,263,322,298,384,195,384,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>227, 'w'=>163, 'h'=>157, 'head'=>[224,227,258,227,258,277,224,277,], 'body'=>[207,272,262,272,262,333,207,333,], 'legs'=>[207,323,212,323,257,323,262,323,298,384,195,384,], 'ex'=>1 },
+{ 'x'=>194, 'y'=>229, 'w'=>160, 'h'=>155, 'head'=>[224,229,259,229,259,279,224,279,], 'body'=>[206,274,261,274,261,334,206,334,], 'legs'=>[206,324,211,324,256,324,261,324,297,384,195,384,], 'ex'=>1 },
+{ 'x'=>195, 'y'=>225, 'w'=>143, 'h'=>152, 'head'=>[223,225,259,225,259,275,223,275,], 'body'=>[205,270,260,270,260,328,205,328,], 'legs'=>[205,318,210,318,255,318,260,318,299,377,196,377,], 'ex'=>1 },
+{ 'x'=>195, 'y'=>241, 'w'=>114, 'h'=>137, 'head'=>[211,241,271,241,271,291,211,291,], 'body'=>[204,286,259,286,259,337,204,337,], 'legs'=>[204,327,209,327,254,327,259,327,297,378,196,378,], 'ex'=>1 },
+{ 'x'=>181, 'y'=>242, 'w'=>135, 'h'=>139, 'head'=>[199,242,246,242,246,292,199,292,], 'body'=>[203,287,258,287,258,339,203,339,], 'legs'=>[203,329,208,329,253,329,258,329,297,381,196,381,], 'ex'=>1 },
+{ 'x'=>166, 'y'=>246, 'w'=>150, 'h'=>136, 'head'=>[181,246,240,246,240,296,181,296,], 'body'=>[195,291,250,291,250,341,195,341,], 'legs'=>[195,331,200,331,245,331,250,331,300,382,194,382,], 'ex'=>1 },
+{ 'x'=>155, 'y'=> 88, 'w'=>173, 'h'=>309, 'head'=>[184, 88,217, 88,217,138,184,138,], 'body'=>[163,133,218,133,218,270,163,270,], 'legs'=>[163,260,168,260,213,260,218,260,268,397,164,397,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 79, 'w'=>130, 'h'=>303, 'head'=>[255, 79,288, 79,288,129,255,129,], 'body'=>[215,124,270,124,270,258,215,258,], 'legs'=>[215,248,220,248,265,248,270,248,308,382,205,382,], 'ex'=>1 },
+{ 'x'=>198, 'y'=> 90, 'w'=>125, 'h'=>293, 'head'=>[269, 90,314, 90,314,140,269,140,], 'body'=>[214,135,269,135,269,264,214,264,], 'legs'=>[214,254,219,254,264,254,269,254,310,383,206,383,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>102, 'w'=>143, 'h'=>281, 'head'=>[243,102,315,102,315,152,243,152,], 'body'=>[232,147,287,147,287,270,232,270,], 'legs'=>[232,260,237,260,282,260,287,260,309,383,206,383,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 65, 'w'=>148, 'h'=>317, 'head'=>[260, 65,292, 65,292,115,260,115,], 'body'=>[246,110,301,110,301,251,246,251,], 'legs'=>[246,241,251,241,296,241,301,241,307,382,204,382,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>106, 'w'=>198, 'h'=>266, 'head'=>[283,106,349,106,349,156,283,156,], 'body'=>[245,151,300,151,300,266,245,266,], 'legs'=>[245,256,250,256,295,256,300,256,307,372,192,372,], 'ex'=>1 },
+{ 'x'=>179, 'y'=>131, 'w'=>245, 'h'=>239, 'head'=>[300,131,373,131,373,181,300,181,], 'body'=>[243,176,298,176,298,278,243,278,], 'legs'=>[243,268,248,268,293,268,298,268,306,370,179,370,], 'ex'=>1 },
+{ 'x'=>168, 'y'=>141, 'w'=>260, 'h'=>228, 'head'=>[297,141,385,141,385,191,297,191,], 'body'=>[239,186,294,186,294,282,239,282,], 'legs'=>[239,272,244,272,289,272,294,272,306,369,271,369,], 'ex'=>1 },
+{ 'x'=>174, 'y'=>135, 'w'=>244, 'h'=>233, 'head'=>[291,135,361,135,361,185,291,185,], 'body'=>[251,180,306,180,306,279,251,279,], 'legs'=>[251,269,256,269,301,269,306,269,312,368,272,368,], 'ex'=>1 },
+{ 'x'=>186, 'y'=> 99, 'w'=>245, 'h'=>267, 'head'=>[336, 99,367, 99,367,149,336,149,], 'body'=>[292,144,347,144,347,260,292,260,], 'legs'=>[292,250,297,250,342,250,347,250,321,366,272,366,], 'ex'=>1 },
+{ 'x'=>195, 'y'=>137, 'w'=>266, 'h'=>229, 'head'=>[379,137,414,137,414,187,379,187,], 'body'=>[272,182,327,182,327,279,272,279,], 'legs'=>[272,269,277,269,322,269,327,269,320,366,273,366,], 'ex'=>1 },
+{ 'x'=>202, 'y'=>180, 'w'=>274, 'h'=>186, 'head'=>[288,180,386,180,386,230,288,230,], 'body'=>[264,225,319,225,319,300,264,300,], 'legs'=>[264,290,269,290,314,290,319,290,317,366,272,366,], 'ex'=>1 },
+{ 'x'=>208, 'y'=>186, 'w'=>274, 'h'=>179, 'head'=>[257,186,313,186,313,236,257,236,], 'body'=>[308,231,363,231,363,303,308,303,], 'legs'=>[308,293,313,293,358,293,363,293,467,365,274,365,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 88, 'w'=>146, 'h'=>294, 'head'=>[230, 88,261, 88,261,138,230,138,], 'body'=>[215,133,270,133,270,262,215,262,], 'legs'=>[215,252,220,252,265,252,270,252,302,382,206,382,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 94, 'w'=>137, 'h'=>298, 'head'=>[235, 94,268, 94,268,144,235,144,], 'body'=>[213,139,268,139,268,270,213,270,], 'legs'=>[213,260,218,260,263,260,268,260,303,392,214,392,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>109, 'w'=>126, 'h'=>284, 'head'=>[236,109,270,109,270,159,236,159,], 'body'=>[212,154,267,154,267,278,212,278,], 'legs'=>[212,268,217,268,262,268,267,268,298,393,215,393,], 'ex'=>1 },
+{ 'x'=>216, 'y'=> 94, 'w'=>107, 'h'=>298, 'head'=>[235, 94,267, 94,267,144,235,144,], 'body'=>[221,139,276,139,276,270,221,270,], 'legs'=>[221,260,226,260,271,260,276,260,285,392,220,392,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 73, 'w'=> 93, 'h'=>323, 'head'=>[233, 73,263, 73,263,123,233,123,], 'body'=>[220,118,275,118,275,262,220,262,], 'legs'=>[220,252,225,252,270,252,275,252,262,396,218,396,], 'ex'=>1 },
+{ 'x'=>218, 'y'=> 60, 'w'=> 98, 'h'=>293, 'head'=>[237, 60,269, 60,269,110,237,110,], 'body'=>[222,105,277,105,277,234,222,234,], 'legs'=>[222,224,227,224,272,224,277,224,281,353,219,353,], 'ex'=>1 },
+{ 'x'=>222, 'y'=> 61, 'w'=>100, 'h'=>251, 'head'=>[251, 61,281, 61,281,111,251,111,], 'body'=>[224,106,279,106,279,214,224,214,], 'legs'=>[224,204,229,204,274,204,279,204,305,312,254,312,], 'ex'=>1 },
+{ 'x'=>219, 'y'=> 77, 'w'=>139, 'h'=>273, 'head'=>[254, 77,291, 77,291,127,254,127,], 'body'=>[225,122,280,122,280,241,225,241,], 'legs'=>[225,231,230,231,275,231,280,231,303,350,266,350,], 'ex'=>0, 'hit'=>[350,184,380,189,381,218,337,227,] },
+{ 'x'=>228, 'y'=> 71, 'w'=>170, 'h'=>278, 'head'=>[257, 71,297, 71,297,121,257,121,], 'body'=>[234,116,289,116,289,237,234,237,], 'legs'=>[234,227,239,227,284,227,289,227,295,349,267,349,], 'ex'=>0, 'hit'=>[370, 89,387, 88,405,134,354,160,] },
+{ 'x'=>205, 'y'=> 70, 'w'=>148, 'h'=>312, 'head'=>[234, 70,265, 70,265,120,234,120,], 'body'=>[226,115,281,115,281,253,226,253,], 'legs'=>[226,243,231,243,276,243,281,243,324,382,206,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 73, 'w'=>129, 'h'=>310, 'head'=>[230, 73,260, 73,260,123,230,123,], 'body'=>[226,118,281,118,281,255,226,255,], 'legs'=>[226,245,231,245,276,245,281,245,325,383,206,383,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 76, 'w'=>123, 'h'=>306, 'head'=>[225, 76,254, 76,254,126,225,126,], 'body'=>[223,121,278,121,278,256,223,256,], 'legs'=>[223,246,228,246,273,246,278,246,325,382,206,382,], 'ex'=>1 },
+{ 'x'=>203, 'y'=> 79, 'w'=>124, 'h'=>303, 'head'=>[223, 79,252, 79,252,129,223,129,], 'body'=>[216,124,271,124,271,258,216,258,], 'legs'=>[216,248,221,248,266,248,271,248,325,382,205,382,], 'ex'=>1 },
+{ 'x'=>195, 'y'=> 79, 'w'=>134, 'h'=>303, 'head'=>[221, 79,250, 79,250,129,221,129,], 'body'=>[214,124,269,124,269,258,214,258,], 'legs'=>[214,248,219,248,264,248,269,248,327,382,206,382,], 'ex'=>1 },
+{ 'x'=>188, 'y'=> 79, 'w'=>138, 'h'=>303, 'head'=>[224, 79,251, 79,251,129,224,129,], 'body'=>[216,124,271,124,271,258,216,258,], 'legs'=>[216,248,221,248,266,248,271,248,323,382,206,382,], 'ex'=>1 },
+{ 'x'=>183, 'y'=> 76, 'w'=>144, 'h'=>306, 'head'=>[232, 76,260, 76,260,126,232,126,], 'body'=>[217,121,272,121,272,256,217,256,], 'legs'=>[217,246,222,246,267,246,272,246,324,382,205,382,], 'ex'=>1 },
+{ 'x'=>197, 'y'=> 71, 'w'=>130, 'h'=>311, 'head'=>[240, 71,280, 71,280,121,240,121,], 'body'=>[225,116,280,116,280,254,225,254,], 'legs'=>[225,244,230,244,275,244,280,244,324,382,206,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 71, 'w'=>122, 'h'=>311, 'head'=>[259, 71,296, 71,296,121,259,121,], 'body'=>[241,116,296,116,296,254,241,254,], 'legs'=>[241,244,246,244,291,244,296,244,324,382,206,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=> 73, 'w'=>135, 'h'=>309, 'head'=>[271, 73,307, 73,307,123,271,123,], 'body'=>[248,118,303,118,303,255,248,255,], 'legs'=>[248,245,253,245,298,245,303,245,322,382,206,382,], 'ex'=>1 },
+{ 'x'=>206, 'y'=> 76, 'w'=>187, 'h'=>306, 'head'=>[274, 76,307, 76,307,126,274,126,], 'body'=>[249,121,304,121,304,256,249,256,], 'legs'=>[249,246,254,246,299,246,304,246,325,382,207,382,], 'ex'=>0, 'hit'=>[370,136,396,131,398,152,370,146,] },
+{ 'x'=>206, 'y'=> 76, 'w'=>178, 'h'=>306, 'head'=>[269, 76,300, 76,300,126,269,126,], 'body'=>[246,121,301,121,301,256,246,256,], 'legs'=>[246,246,251,246,296,246,301,246,325,382,206,382,], 'ex'=>1 },
+{ 'x'=>204, 'y'=> 73, 'w'=>179, 'h'=>310, 'head'=>[256, 73,286, 73,286,123,256,123,], 'body'=>[239,118,294,118,294,255,239,255,], 'legs'=>[239,245,244,245,289,245,294,245,323,383,205,383,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>206, 'w'=>159, 'h'=>176, 'head'=>[225,206,286,206,286,256,225,256,], 'body'=>[210,251,265,251,265,321,210,321,], 'legs'=>[210,311,215,311,260,311,265,311,299,382,210,382,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>205, 'w'=>156, 'h'=>178, 'head'=>[223,205,268,205,268,255,223,255,], 'body'=>[208,250,263,250,263,321,208,321,], 'legs'=>[208,311,213,311,258,311,263,311,300,383,211,383,], 'ex'=>1 },
+{ 'x'=>204, 'y'=>204, 'w'=>125, 'h'=>181, 'head'=>[224,204,261,204,261,254,224,254,], 'body'=>[208,249,263,249,263,322,208,322,], 'legs'=>[208,312,213,312,258,312,263,312,301,385,211,385,], 'ex'=>1 },
+{ 'x'=>192, 'y'=>202, 'w'=>114, 'h'=>181, 'head'=>[229,202,263,202,263,252,229,252,], 'body'=>[201,247,256,247,256,320,201,320,], 'legs'=>[201,310,206,310,251,310,256,310,301,383,212,383,], 'ex'=>1 },
+{ 'x'=>184, 'y'=>204, 'w'=>131, 'h'=>181, 'head'=>[232,204,269,204,269,254,232,254,], 'body'=>[191,249,246,249,246,322,191,322,], 'legs'=>[191,312,196,312,241,312,246,312,300,385,211,385,], 'ex'=>1 },
+{ 'x'=>180, 'y'=>206, 'w'=>133, 'h'=>178, 'head'=>[226,206,272,206,272,256,226,256,], 'body'=>[200,251,255,251,255,322,200,322,], 'legs'=>[200,312,205,312,250,312,255,312,301,384,210,384,], 'ex'=>1 },
+{ 'x'=>185, 'y'=>200, 'w'=>121, 'h'=>184, 'head'=>[234,200,275,200,275,250,234,250,], 'body'=>[201,245,256,245,256,319,201,319,], 'legs'=>[201,309,206,309,251,309,256,309,301,384,208,384,], 'ex'=>1 },
+{ 'x'=>199, 'y'=>200, 'w'=>120, 'h'=>184, 'head'=>[241,200,279,200,279,250,241,250,], 'body'=>[205,245,260,245,260,319,205,319,], 'legs'=>[205,309,210,309,255,309,260,309,301,384,210,384,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>203, 'w'=>126, 'h'=>182, 'head'=>[243,203,286,203,286,253,243,253,], 'body'=>[216,248,271,248,271,321,216,321,], 'legs'=>[216,311,221,311,266,311,271,311,302,385,210,385,], 'ex'=>1 },
+{ 'x'=>201, 'y'=>208, 'w'=>169, 'h'=>176, 'head'=>[242,208,302,208,302,258,242,258,], 'body'=>[218,253,273,253,273,323,218,323,], 'legs'=>[218,313,223,313,268,313,273,313,303,384,211,384,], 'ex'=>0, 'hit'=>[357,250,367,250,368,258,357,260,] },
+{ 'x'=>201, 'y'=>209, 'w'=>179, 'h'=>174, 'head'=>[242,209,282,209,282,259,242,259,], 'body'=>[216,254,271,254,271,323,216,323,], 'legs'=>[216,313,221,313,266,313,271,313,300,383,211,383,], 'ex'=>1 },
+{ 'x'=>203, 'y'=>207, 'w'=>142, 'h'=>176, 'head'=>[241,207,278,207,278,257,241,257,], 'body'=>[216,252,271,252,271,322,216,322,], 'legs'=>[216,312,221,312,266,312,271,312,302,383,211,383,], 'ex'=>1 },
diff --git a/data/characters/ZOLIDATA.DAT.pl b/data/characters/ZOLIDATA.DAT.pl
new file mode 100644
index 0000000..5f357e8
--- /dev/null
+++ b/data/characters/ZOLIDATA.DAT.pl
@@ -0,0 +1,286 @@
+{ 'x'=>323, 'y'=>188, 'w'=> 91, 'h'=>290, 'head'=>[356,188,378,188,378,238,356,238,], 'body'=>[333,233,388,233,388,360,333,360,], 'legs'=>[333,350,338,350,383,350,388,350,411,478,323,478,], 'ex'=>1 },
+{ 'x'=>312, 'y'=>188, 'w'=>102, 'h'=>290, 'head'=>[358,188,381,188,381,238,358,238,], 'body'=>[332,233,387,233,387,360,332,360,], 'legs'=>[332,350,337,350,382,350,387,350,408,478,320,478,], 'ex'=>1 },
+{ 'x'=>304, 'y'=>187, 'w'=>110, 'h'=>290, 'head'=>[360,187,382,187,382,237,360,237,], 'body'=>[329,232,384,232,384,359,329,359,], 'legs'=>[329,349,334,349,379,349,384,349,408,477,318,477,], 'ex'=>1 },
+{ 'x'=>299, 'y'=>187, 'w'=>114, 'h'=>290, 'head'=>[356,187,380,187,380,237,356,237,], 'body'=>[329,232,384,232,384,359,329,359,], 'legs'=>[329,349,334,349,379,349,384,349,406,477,318,477,], 'ex'=>1 },
+{ 'x'=>301, 'y'=>189, 'w'=>112, 'h'=>291, 'head'=>[340,189,369,189,369,239,340,239,], 'body'=>[333,234,388,234,388,362,333,362,], 'legs'=>[333,352,338,352,383,352,388,352,406,480,317,480,], 'ex'=>1 },
+{ 'x'=>310, 'y'=>179, 'w'=>104, 'h'=>300, 'head'=>[337,179,367,179,367,229,337,229,], 'body'=>[338,224,393,224,393,356,338,356,], 'legs'=>[338,346,343,346,388,346,393,346,409,479,320,479,], 'ex'=>1 },
+{ 'x'=>321, 'y'=>159, 'w'=> 93, 'h'=>321, 'head'=>[351,159,370,159,370,209,351,209,], 'body'=>[344,204,399,204,399,347,344,347,], 'legs'=>[344,337,349,337,394,337,399,337,412,480,323,480,], 'ex'=>1 },
+{ 'x'=>324, 'y'=>148, 'w'=> 93, 'h'=>331, 'head'=>[343,148,358,148,358,198,343,198,], 'body'=>[347,193,402,193,402,341,347,341,], 'legs'=>[347,331,352,331,397,331,402,331,413,479,324,479,], 'ex'=>1 },
+{ 'x'=>319, 'y'=>165, 'w'=> 99, 'h'=>312, 'head'=>[353,165,373,165,373,215,353,215,], 'body'=>[342,210,397,210,397,348,342,348,], 'legs'=>[342,338,347,338,392,338,397,338,412,477,323,477,], 'ex'=>1 },
+{ 'x'=>319, 'y'=>151, 'w'=> 96, 'h'=>328, 'head'=>[334,151,348,151,348,201,334,201,], 'body'=>[346,196,401,196,401,342,346,342,], 'legs'=>[346,332,351,332,396,332,401,332,411,479,323,479,], 'ex'=>1 },
+{ 'x'=>314, 'y'=>157, 'w'=> 99, 'h'=>321, 'head'=>[341,157,357,157,357,207,341,207,], 'body'=>[342,202,397,202,397,345,342,345,], 'legs'=>[342,335,347,335,392,335,397,335,409,478,321,478,], 'ex'=>1 },
+{ 'x'=>295, 'y'=>155, 'w'=>110, 'h'=>324, 'head'=>[312,155,327,155,327,205,312,205,], 'body'=>[329,200,384,200,384,344,329,344,], 'legs'=>[329,334,334,334,379,334,384,334,404,479,317,479,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>187, 'w'=>123, 'h'=>292, 'head'=>[336,187,358,187,358,237,336,237,], 'body'=>[314,232,369,232,369,360,314,360,], 'legs'=>[314,350,319,350,364,350,369,350,400,479,312,479,], 'ex'=>1 },
+{ 'x'=>284, 'y'=>188, 'w'=>120, 'h'=>291, 'head'=>[332,188,355,188,355,238,332,238,], 'body'=>[314,233,369,233,369,361,314,361,], 'legs'=>[314,351,319,351,364,351,369,351,403,479,314,479,], 'ex'=>1 },
+{ 'x'=>305, 'y'=>186, 'w'=>101, 'h'=>287, 'head'=>[324,186,348,186,348,236,324,236,], 'body'=>[314,231,369,231,369,357,314,357,], 'legs'=>[314,347,319,347,364,347,369,347,405,473,320,473,], 'ex'=>1 },
+{ 'x'=>309, 'y'=>191, 'w'=> 93, 'h'=>289, 'head'=>[327,191,352,191,352,241,327,241,], 'body'=>[320,236,375,236,375,363,320,363,], 'legs'=>[320,353,325,353,370,353,375,353,401,480,320,480,], 'ex'=>1 },
+{ 'x'=>324, 'y'=>186, 'w'=> 96, 'h'=>299, 'head'=>[351,186,375,186,375,236,351,236,], 'body'=>[334,231,389,231,389,363,334,363,], 'legs'=>[334,353,339,353,384,353,389,353,406,485,324,485,], 'ex'=>1 },
+{ 'x'=>322, 'y'=>190, 'w'=>114, 'h'=>300, 'head'=>[368,190,394,190,394,240,368,240,], 'body'=>[345,235,400,235,400,367,345,367,], 'legs'=>[345,357,350,357,395,357,400,357,404,490,322,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>194, 'w'=>149, 'h'=>297, 'head'=>[351,194,383,194,383,244,351,244,], 'body'=>[324,239,379,239,379,370,324,370,], 'legs'=>[324,360,329,360,374,360,379,360,394,491,277,491,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>187, 'w'=>131, 'h'=>303, 'head'=>[333,187,364,187,364,237,333,237,], 'body'=>[309,232,364,232,364,366,309,366,], 'legs'=>[309,356,314,356,359,356,364,356,397,490,277,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>184, 'w'=>118, 'h'=>306, 'head'=>[317,184,346,184,346,234,317,234,], 'body'=>[296,229,351,229,351,364,296,364,], 'legs'=>[296,354,301,354,346,354,351,354,394,490,277,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>187, 'w'=>124, 'h'=>303, 'head'=>[326,187,358,187,358,237,326,237,], 'body'=>[304,232,359,232,359,366,304,366,], 'legs'=>[304,356,309,356,354,356,359,356,392,490,277,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>116, 'h'=>304, 'head'=>[319,185,350,185,350,235,319,235,], 'body'=>[296,230,351,230,351,364,296,364,], 'legs'=>[296,354,301,354,346,354,351,354,392,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>115, 'h'=>304, 'head'=>[314,185,344,185,344,235,314,235,], 'body'=>[292,230,347,230,347,364,292,364,], 'legs'=>[292,354,297,354,342,354,347,354,391,489,277,489,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>187, 'w'=>123, 'h'=>303, 'head'=>[323,187,353,187,353,237,323,237,], 'body'=>[304,232,359,232,359,366,304,366,], 'legs'=>[304,356,309,356,354,356,359,356,392,490,278,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>141, 'h'=>303, 'head'=>[318,188,349,188,349,238,318,238,], 'body'=>[303,233,358,233,358,367,303,367,], 'legs'=>[303,357,308,357,353,357,358,357,391,491,277,491,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>137, 'h'=>304, 'head'=>[332,185,363,185,363,235,332,235,], 'body'=>[312,230,367,230,367,364,312,364,], 'legs'=>[312,354,317,354,362,354,367,354,390,489,277,489,], 'ex'=>1 },
+{ 'x'=>294, 'y'=>183, 'w'=>123, 'h'=>297, 'head'=>[363,183,393,183,393,233,363,233,], 'body'=>[343,228,398,228,398,359,343,359,], 'legs'=>[343,349,348,349,393,349,398,349,394,480,294,480,], 'ex'=>1 },
+{ 'x'=>345, 'y'=>182, 'w'=> 84, 'h'=>298, 'head'=>[391,182,421,182,421,232,391,232,], 'body'=>[368,227,423,227,423,358,368,358,], 'legs'=>[368,348,373,348,418,348,423,348,408,480,345,480,], 'ex'=>1 },
+{ 'x'=>378, 'y'=>181, 'w'=> 76, 'h'=>303, 'head'=>[408,181,438,181,438,231,408,231,], 'body'=>[382,226,437,226,437,360,382,360,], 'legs'=>[382,350,387,350,432,350,437,350,415,484,380,484,], 'ex'=>1 },
+{ 'x'=>382, 'y'=>183, 'w'=> 99, 'h'=>306, 'head'=>[421,183,452,183,452,233,421,233,], 'body'=>[392,228,447,228,447,363,392,363,], 'legs'=>[392,353,397,353,442,353,447,353,462,489,383,489,], 'ex'=>1 },
+{ 'x'=>391, 'y'=>185, 'w'=>112, 'h'=>318, 'head'=>[445,185,475,185,475,235,445,235,], 'body'=>[426,230,481,230,481,371,426,371,], 'legs'=>[426,361,431,361,476,361,481,361,485,503,391,503,], 'ex'=>1 },
+{ 'x'=>403, 'y'=>183, 'w'=> 99, 'h'=>320, 'head'=>[457,183,487,183,487,233,457,233,], 'body'=>[441,228,496,228,496,370,441,370,], 'legs'=>[441,360,446,360,491,360,496,360,488,503,403,503,], 'ex'=>1 },
+{ 'x'=>448, 'y'=>184, 'w'=> 87, 'h'=>321, 'head'=>[482,184,512,184,512,234,482,234,], 'body'=>[466,229,521,229,521,372,466,372,], 'legs'=>[466,362,471,362,516,362,521,362,498,505,448,505,], 'ex'=>1 },
+{ 'x'=>473, 'y'=>181, 'w'=> 87, 'h'=>321, 'head'=>[496,181,526,181,526,231,496,231,], 'body'=>[479,226,534,226,534,369,479,369,], 'legs'=>[479,359,484,359,529,359,534,359,518,502,473,502,], 'ex'=>1 },
+{ 'x'=>474, 'y'=>183, 'w'=>104, 'h'=>319, 'head'=>[508,183,537,183,537,233,508,233,], 'body'=>[490,228,545,228,545,370,490,370,], 'legs'=>[490,360,495,360,540,360,545,360,562,502,474,502,], 'ex'=>1 },
+{ 'x'=>473, 'y'=>179, 'w'=>110, 'h'=>315, 'head'=>[524,179,553,179,553,229,524,229,], 'body'=>[507,224,562,224,562,364,507,364,], 'legs'=>[507,354,512,354,557,354,562,354,562,494,473,494,], 'ex'=>1 },
+{ 'x'=>479, 'y'=>179, 'w'=>103, 'h'=>312, 'head'=>[533,179,561,179,561,229,533,229,], 'body'=>[515,224,570,224,570,362,515,362,], 'legs'=>[515,352,520,352,565,352,570,352,564,491,479,491,], 'ex'=>1 },
+{ 'x'=>286, 'y'=>186, 'w'=>106, 'h'=>306, 'head'=>[315,186,346,186,346,236,315,236,], 'body'=>[297,231,352,231,352,366,297,366,], 'legs'=>[297,356,302,356,347,356,352,356,391,492,286,492,], 'ex'=>1 },
+{ 'x'=>285, 'y'=>185, 'w'=>109, 'h'=>307, 'head'=>[317,185,344,185,344,235,317,235,], 'body'=>[296,230,351,230,351,366,296,366,], 'legs'=>[296,356,301,356,346,356,351,356,393,492,285,492,], 'ex'=>1 },
+{ 'x'=>285, 'y'=>186, 'w'=>112, 'h'=>306, 'head'=>[322,186,344,186,344,236,322,236,], 'body'=>[299,231,354,231,354,366,299,366,], 'legs'=>[299,356,304,356,349,356,354,356,396,492,285,492,], 'ex'=>1 },
+{ 'x'=>286, 'y'=>187, 'w'=>114, 'h'=>304, 'head'=>[329,187,354,187,354,237,329,237,], 'body'=>[308,232,363,232,363,366,308,366,], 'legs'=>[308,356,313,356,358,356,363,356,399,491,286,491,], 'ex'=>1 },
+{ 'x'=>287, 'y'=>189, 'w'=>126, 'h'=>303, 'head'=>[341,189,368,189,368,239,341,239,], 'body'=>[322,234,377,234,377,368,322,368,], 'legs'=>[322,358,327,358,372,358,377,358,401,492,287,492,], 'ex'=>1 },
+{ 'x'=>287, 'y'=>185, 'w'=>137, 'h'=>300, 'head'=>[358,185,388,185,388,235,358,235,], 'body'=>[339,230,394,230,394,362,339,362,], 'legs'=>[339,352,344,352,389,352,394,352,401,485,287,485,], 'ex'=>1 },
+{ 'x'=>295, 'y'=>185, 'w'=>128, 'h'=>299, 'head'=>[367,185,397,185,397,235,367,235,], 'body'=>[347,230,402,230,402,362,347,362,], 'legs'=>[347,352,352,352,397,352,402,352,403,484,295,484,], 'ex'=>1 },
+{ 'x'=>291, 'y'=>191, 'w'=>123, 'h'=>295, 'head'=>[359,191,389,191,389,241,359,241,], 'body'=>[344,236,399,236,399,366,344,366,], 'legs'=>[344,356,349,356,394,356,399,356,402,486,291,486,], 'ex'=>1 },
+{ 'x'=>291, 'y'=>192, 'w'=>114, 'h'=>292, 'head'=>[339,192,375,192,375,242,339,242,], 'body'=>[332,237,387,237,387,365,332,365,], 'legs'=>[332,355,337,355,382,355,387,355,404,484,291,484,], 'ex'=>1 },
+{ 'x'=>295, 'y'=>185, 'w'=> 94, 'h'=>304, 'head'=>[321,185,352,185,352,235,321,235,], 'body'=>[305,230,360,230,360,364,305,364,], 'legs'=>[305,354,310,354,355,354,360,354,380,489,297,489,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>195, 'w'=>106, 'h'=>294, 'head'=>[291,195,322,195,322,245,291,245,], 'body'=>[284,240,339,240,339,369,284,369,], 'legs'=>[284,359,289,359,334,359,339,359,375,489,294,489,], 'ex'=>1 },
+{ 'x'=>247, 'y'=>217, 'w'=>124, 'h'=>272, 'head'=>[266,217,313,217,313,267,266,267,], 'body'=>[264,262,319,262,319,380,264,380,], 'legs'=>[264,370,269,370,314,370,319,370,370,489,295,489,], 'ex'=>1 },
+{ 'x'=>222, 'y'=>227, 'w'=>143, 'h'=>265, 'head'=>[269,227,294,227,294,277,269,277,], 'body'=>[239,272,294,272,294,387,239,387,], 'legs'=>[239,377,244,377,289,377,294,377,364,492,243,492,], 'ex'=>1 },
+{ 'x'=>200, 'y'=>236, 'w'=>159, 'h'=>258, 'head'=>[259,236,272,236,272,286,259,286,], 'body'=>[217,281,272,281,272,392,217,392,], 'legs'=>[217,382,222,382,267,382,272,382,358,494,203,494,], 'ex'=>1 },
+{ 'x'=>159, 'y'=>276, 'w'=>192, 'h'=>218, 'head'=>[198,276,218,276,218,326,198,326,], 'body'=>[176,321,231,321,231,412,176,412,], 'legs'=>[176,402,181,402,226,402,231,402,350,494,161,494,], 'ex'=>1 },
+{ 'x'=>141, 'y'=>321, 'w'=>215, 'h'=>168, 'head'=>[179,321,195,321,195,371,179,371,], 'body'=>[147,366,202,366,202,432,147,432,], 'legs'=>[147,422,152,422,197,422,202,422,355,489,150,489,], 'ex'=>1 },
+{ 'x'=> 95, 'y'=>392, 'w'=>247, 'h'=>118, 'head'=>[142,392,185,392,185,442,142,442,], 'body'=>[119,437,174,437,174,478,119,478,], 'legs'=>[119,468,124,468,169,468,174,468,282,510,150,510,], 'ex'=>1 },
+{ 'x'=> 77, 'y'=>396, 'w'=>239, 'h'=>112, 'head'=>[203,396,264,396,264,446,203,446,], 'body'=>[ 89,441,144,441,144,479, 89,479,], 'legs'=>[ 89,469, 94,469,139,469,144,469,225,508,152,508,], 'ex'=>1 },
+{ 'x'=> 47, 'y'=>411, 'w'=>215, 'h'=>116, 'head'=>[155,411,201,411,201,461,155,461,], 'body'=>[ 59,456,114,456,114,496, 59,496,], 'legs'=>[ 59,486, 64,486,109,486,114,486,118,527, 47,527,], 'ex'=>1 },
+{ 'x'=> 32, 'y'=>423, 'w'=>225, 'h'=> 97, 'head'=>[126,423,197,423,197,473,126,473,], 'body'=>[ 53,468,108,468,108,499, 53,499,], 'legs'=>[ 53,489, 58,489,103,489,108,489,217,520, 37,520,], 'ex'=>1 },
+{ 'x'=> 37, 'y'=>430, 'w'=>219, 'h'=> 90, 'head'=>[ 97,430,198,430,198,480, 97,480,], 'body'=>[ 75,475,130,475,130,502, 75,502,], 'legs'=>[ 75,492, 80,492,125,492,130,492,212,520, 37,520,], 'ex'=>1 },
+{ 'x'=> 47, 'y'=>420, 'w'=>224, 'h'=> 97, 'head'=>[139,420,205,420,205,470,139,470,], 'body'=>[ 52,465,107,465,107,496, 52,496,], 'legs'=>[ 52,486, 57,486,102,486,107,486,221,517, 80,517,], 'ex'=>1 },
+{ 'x'=> 50, 'y'=>422, 'w'=>250, 'h'=> 92, 'head'=>[105,422,199,422,199,472,105,472,], 'body'=>[ 60,467,115,467,115,495, 60,495,], 'legs'=>[ 60,485, 65,485,110,485,115,485,216,514, 95,514,], 'ex'=>1 },
+{ 'x'=> 60, 'y'=>413, 'w'=>259, 'h'=>101, 'head'=>[ 86,413,159,413,159,463, 86,463,], 'body'=>[ 88,458,143,458,143,491, 88,491,], 'legs'=>[ 88,481, 93,481,138,481,143,481,199,514,104,514,], 'ex'=>1 },
+{ 'x'=>100, 'y'=>392, 'w'=>235, 'h'=>120, 'head'=>[107,392,167,392,167,442,107,442,], 'body'=>[114,437,169,437,169,479,114,479,], 'legs'=>[114,469,119,469,164,469,169,469,216,512,117,512,], 'ex'=>1 },
+{ 'x'=>133, 'y'=>374, 'w'=>209, 'h'=>146, 'head'=>[160,374,201,374,201,424,160,424,], 'body'=>[149,419,204,419,204,474,149,474,], 'legs'=>[149,464,154,464,199,464,204,464,222,520,133,520,], 'ex'=>1 },
+{ 'x'=>152, 'y'=>370, 'w'=>186, 'h'=>156, 'head'=>[203,370,241,370,241,420,203,420,], 'body'=>[172,415,227,415,227,475,172,475,], 'legs'=>[172,465,177,465,222,465,227,465,244,526,163,526,], 'ex'=>1 },
+{ 'x'=>172, 'y'=>359, 'w'=>188, 'h'=>165, 'head'=>[233,359,281,359,281,409,233,409,], 'body'=>[199,404,254,404,254,469,199,469,], 'legs'=>[199,459,204,459,249,459,254,459,257,524,172,524,], 'ex'=>1 },
+{ 'x'=>211, 'y'=>313, 'w'=>158, 'h'=>191, 'head'=>[274,313,310,313,310,363,274,363,], 'body'=>[235,358,290,358,290,436,235,436,], 'legs'=>[235,426,240,426,285,426,290,426,341,504,211,504,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>294, 'w'=>140, 'h'=>201, 'head'=>[294,294,327,294,327,344,294,344,], 'body'=>[256,339,311,339,311,422,256,422,], 'legs'=>[256,412,261,412,306,412,311,412,349,495,242,495,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>266, 'w'=>134, 'h'=>221, 'head'=>[314,266,347,266,347,316,314,316,], 'body'=>[278,311,333,311,333,404,278,404,], 'legs'=>[278,394,283,394,328,394,333,394,355,487,263,487,], 'ex'=>1 },
+{ 'x'=>280, 'y'=>224, 'w'=>125, 'h'=>255, 'head'=>[333,224,363,224,363,274,333,274,], 'body'=>[303,269,358,269,358,379,303,379,], 'legs'=>[303,369,308,369,353,369,358,369,365,479,280,479,], 'ex'=>1 },
+{ 'x'=>268, 'y'=>197, 'w'=>131, 'h'=>283, 'head'=>[331,197,362,197,362,247,331,247,], 'body'=>[300,242,355,242,355,366,300,366,], 'legs'=>[300,356,305,356,350,356,355,356,356,480,268,480,], 'ex'=>1 },
+{ 'x'=>243, 'y'=>185, 'w'=>143, 'h'=>300, 'head'=>[316,185,348,185,348,235,316,235,], 'body'=>[286,230,341,230,341,362,286,362,], 'legs'=>[286,352,291,352,336,352,341,352,352,485,243,485,], 'ex'=>1 },
+{ 'x'=>237, 'y'=>186, 'w'=>127, 'h'=>309, 'head'=>[293,186,326,186,326,236,293,236,], 'body'=>[267,231,322,231,322,368,267,368,], 'legs'=>[267,358,272,358,317,358,322,358,351,495,237,495,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>182, 'w'=>125, 'h'=>307, 'head'=>[325,182,353,182,353,232,325,232,], 'body'=>[305,227,360,227,360,363,305,363,], 'legs'=>[305,353,310,353,355,353,360,353,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>127, 'h'=>304, 'head'=>[342,185,366,185,366,235,342,235,], 'body'=>[314,230,369,230,369,364,314,364,], 'legs'=>[314,354,319,354,364,354,369,354,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>189, 'w'=>127, 'h'=>300, 'head'=>[353,189,380,189,380,239,353,239,], 'body'=>[314,234,369,234,369,366,314,366,], 'legs'=>[314,356,319,356,364,356,369,356,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>206, 'w'=>130, 'h'=>283, 'head'=>[357,206,397,206,397,256,357,256,], 'body'=>[309,251,364,251,364,375,309,375,], 'legs'=>[309,365,314,365,359,365,364,365,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>232, 'w'=>124, 'h'=>257, 'head'=>[332,232,390,232,390,282,332,282,], 'body'=>[295,277,350,277,350,388,295,388,], 'legs'=>[295,378,300,378,345,378,350,378,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>240, 'w'=>124, 'h'=>249, 'head'=>[317,240,376,240,376,290,317,290,], 'body'=>[294,285,349,285,349,392,294,392,], 'legs'=>[294,382,299,382,344,382,349,382,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>244, 'w'=>124, 'h'=>245, 'head'=>[302,244,359,244,359,294,302,294,], 'body'=>[293,289,348,289,348,394,293,394,], 'legs'=>[293,384,298,384,343,384,348,384,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>242, 'w'=>124, 'h'=>247, 'head'=>[298,242,353,242,353,292,298,292,], 'body'=>[297,287,352,287,352,393,297,393,], 'legs'=>[297,383,302,383,347,383,352,383,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>234, 'w'=>125, 'h'=>255, 'head'=>[300,234,347,234,347,284,300,284,], 'body'=>[303,279,358,279,358,389,303,389,], 'legs'=>[303,379,308,379,353,379,358,379,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>219, 'w'=>124, 'h'=>270, 'head'=>[327,219,356,219,356,269,327,269,], 'body'=>[310,264,365,264,365,381,310,381,], 'legs'=>[310,371,315,371,360,371,365,371,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>220, 'w'=>125, 'h'=>269, 'head'=>[340,220,372,220,372,270,340,270,], 'body'=>[307,265,362,265,362,382,307,382,], 'legs'=>[307,372,312,372,357,372,362,372,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>204, 'w'=>124, 'h'=>285, 'head'=>[329,204,355,204,355,254,329,254,], 'body'=>[303,249,358,249,358,374,303,374,], 'legs'=>[303,364,308,364,353,364,358,364,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>193, 'w'=>125, 'h'=>296, 'head'=>[309,193,335,193,335,243,309,243,], 'body'=>[305,238,360,238,360,368,305,368,], 'legs'=>[305,358,310,358,355,358,360,358,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>126, 'h'=>301, 'head'=>[313,188,350,188,350,238,313,238,], 'body'=>[316,233,371,233,371,366,316,366,], 'legs'=>[316,356,321,356,366,356,371,356,402,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>127, 'h'=>301, 'head'=>[333,188,374,188,374,238,333,238,], 'body'=>[316,233,371,233,371,366,316,366,], 'legs'=>[316,356,321,356,366,356,371,356,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>125, 'h'=>301, 'head'=>[330,188,368,188,368,238,330,238,], 'body'=>[304,233,359,233,359,366,304,366,], 'legs'=>[304,356,309,356,354,356,359,356,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>124, 'h'=>301, 'head'=>[306,188,337,188,337,238,306,238,], 'body'=>[292,233,347,233,347,366,292,366,], 'legs'=>[292,356,297,356,342,356,347,356,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>198, 'w'=>125, 'h'=>291, 'head'=>[320,198,349,198,349,248,320,248,], 'body'=>[302,243,357,243,357,371,302,371,], 'legs'=>[302,361,307,361,352,361,357,361,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>213, 'w'=>127, 'h'=>276, 'head'=>[317,213,345,213,345,263,317,263,], 'body'=>[303,258,358,258,358,378,303,378,], 'legs'=>[303,368,308,368,353,368,358,368,403,489,278,489,], 'ex'=>1 },
+{ 'x'=>268, 'y'=>231, 'w'=>134, 'h'=>258, 'head'=>[313,231,339,231,339,281,313,281,], 'body'=>[303,276,358,276,358,387,303,387,], 'legs'=>[303,377,308,377,353,377,358,377,401,489,271,489,], 'ex'=>1 },
+{ 'x'=>268, 'y'=>241, 'w'=>134, 'h'=>248, 'head'=>[311,241,338,241,338,291,311,291,], 'body'=>[305,286,360,286,360,392,305,392,], 'legs'=>[305,382,310,382,355,382,360,382,401,489,269,489,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>251, 'w'=>128, 'h'=>227, 'head'=>[314,251,340,251,340,301,314,301,], 'body'=>[304,296,359,296,359,392,304,392,], 'legs'=>[304,382,309,382,354,382,359,382,401,478,276,478,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>186, 'w'=>132, 'h'=>303, 'head'=>[322,186,351,186,351,236,322,236,], 'body'=>[309,231,364,231,364,365,309,365,], 'legs'=>[309,355,314,355,359,355,364,355,408,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>141, 'h'=>304, 'head'=>[340,185,367,185,367,235,340,235,], 'body'=>[320,230,375,230,375,364,320,364,], 'legs'=>[320,354,325,354,370,354,375,354,407,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>190, 'w'=>161, 'h'=>303, 'head'=>[349,190,373,190,373,240,349,240,], 'body'=>[325,235,380,235,380,369,325,369,], 'legs'=>[325,359,330,359,375,359,380,359,406,493,277,493,], 'ex'=>1 },
+{ 'x'=>279, 'y'=>192, 'w'=>170, 'h'=>302, 'head'=>[353,192,376,192,376,242,353,242,], 'body'=>[326,237,381,237,381,370,326,370,], 'legs'=>[326,360,331,360,376,360,381,360,406,494,279,494,], 'ex'=>1 },
+{ 'x'=>273, 'y'=>203, 'w'=>169, 'h'=>301, 'head'=>[339,203,367,203,367,253,339,253,], 'body'=>[319,248,374,248,374,381,319,381,], 'legs'=>[319,371,324,371,369,371,374,371,402,504,281,504,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>196, 'w'=>156, 'h'=>307, 'head'=>[343,196,367,196,367,246,343,246,], 'body'=>[315,241,370,241,370,377,315,377,], 'legs'=>[315,367,320,367,365,367,370,367,400,503,287,503,], 'ex'=>1 },
+{ 'x'=>261, 'y'=>181, 'w'=>143, 'h'=>319, 'head'=>[321,181,340,181,340,231,321,231,], 'body'=>[298,226,353,226,353,368,298,368,], 'legs'=>[298,358,303,358,348,358,353,358,395,500,284,500,], 'ex'=>1 },
+{ 'x'=>240, 'y'=>194, 'w'=>150, 'h'=>305, 'head'=>[316,194,337,194,337,244,316,244,], 'body'=>[285,239,340,239,340,374,285,374,], 'legs'=>[285,364,290,364,335,364,340,364,389,499,277,499,], 'ex'=>1 },
+{ 'x'=>237, 'y'=>204, 'w'=>152, 'h'=>294, 'head'=>[305,204,327,204,327,254,305,254,], 'body'=>[278,249,333,249,333,378,278,378,], 'legs'=>[278,368,283,368,328,368,333,368,388,498,274,498,], 'ex'=>1 },
+{ 'x'=>238, 'y'=>193, 'w'=>155, 'h'=>304, 'head'=>[317,193,338,193,338,243,317,243,], 'body'=>[282,238,337,238,337,372,282,372,], 'legs'=>[282,362,287,362,332,362,337,362,387,497,273,497,], 'ex'=>1 },
+{ 'x'=>232, 'y'=>196, 'w'=>156, 'h'=>300, 'head'=>[303,196,327,196,327,246,303,246,], 'body'=>[278,241,333,241,333,373,278,373,], 'legs'=>[278,363,283,363,328,363,333,363,385,496,271,496,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>195, 'w'=>114, 'h'=>294, 'head'=>[310,195,339,195,339,245,310,245,], 'body'=>[296,240,351,240,351,369,296,369,], 'legs'=>[296,359,301,359,346,359,351,359,390,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>197, 'w'=>115, 'h'=>292, 'head'=>[313,197,341,197,341,247,313,247,], 'body'=>[298,242,353,242,353,370,298,370,], 'legs'=>[298,360,303,360,348,360,353,360,391,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>195, 'w'=>114, 'h'=>294, 'head'=>[308,195,346,195,346,245,308,245,], 'body'=>[293,240,348,240,348,369,293,369,], 'legs'=>[293,359,298,359,343,359,348,359,390,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>195, 'w'=>116, 'h'=>294, 'head'=>[300,195,342,195,342,245,300,245,], 'body'=>[286,240,341,240,341,369,286,369,], 'legs'=>[286,359,291,359,336,359,341,359,392,489,278,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>195, 'w'=>114, 'h'=>294, 'head'=>[302,195,346,195,346,245,302,245,], 'body'=>[289,240,344,240,344,369,289,369,], 'legs'=>[289,359,294,359,339,359,344,359,390,489,277,489,], 'ex'=>1 },
+{ 'x'=>272, 'y'=>207, 'w'=>146, 'h'=>276, 'head'=>[347,207,378,207,378,257,347,257,], 'body'=>[317,252,372,252,372,372,317,372,], 'legs'=>[317,362,322,362,367,362,372,362,392,483,272,483,], 'ex'=>1 },
+{ 'x'=>260, 'y'=>236, 'w'=>153, 'h'=>249, 'head'=>[345,236,380,236,380,286,345,286,], 'body'=>[314,281,369,281,369,388,314,388,], 'legs'=>[314,378,319,378,364,378,369,378,389,485,260,485,], 'ex'=>1 },
+{ 'x'=>261, 'y'=>258, 'w'=>144, 'h'=>226, 'head'=>[333,258,368,258,368,308,333,308,], 'body'=>[305,303,360,303,360,398,305,398,], 'legs'=>[305,388,310,388,355,388,360,388,391,484,261,484,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>269, 'w'=>131, 'h'=>220, 'head'=>[316,269,349,269,349,319,316,319,], 'body'=>[294,314,349,314,349,406,294,406,], 'legs'=>[294,396,299,396,344,396,349,396,392,489,262,489,], 'ex'=>1 },
+{ 'x'=>264, 'y'=>277, 'w'=>129, 'h'=>223, 'head'=>[295,277,325,277,325,327,295,327,], 'body'=>[279,322,334,322,334,416,279,416,], 'legs'=>[279,406,284,406,329,406,334,406,392,500,264,500,], 'ex'=>1 },
+{ 'x'=>271, 'y'=>273, 'w'=>124, 'h'=>218, 'head'=>[309,273,338,273,338,323,309,323,], 'body'=>[290,318,345,318,345,409,290,409,], 'legs'=>[290,399,295,399,340,399,345,399,394,491,271,491,], 'ex'=>1 },
+{ 'x'=>271, 'y'=>273, 'w'=>144, 'h'=>219, 'head'=>[326,273,355,273,355,323,326,323,], 'body'=>[294,318,349,318,349,410,294,410,], 'legs'=>[294,400,299,400,344,400,349,400,395,492,271,492,], 'ex'=>1 },
+{ 'x'=>272, 'y'=>276, 'w'=>158, 'h'=>214, 'head'=>[339,276,384,276,384,326,339,326,], 'body'=>[315,321,370,321,370,410,315,410,], 'legs'=>[315,400,320,400,365,400,370,400,395,490,272,490,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>276, 'w'=>143, 'h'=>212, 'head'=>[342,276,386,276,386,326,342,326,], 'body'=>[323,321,378,321,378,409,323,409,], 'legs'=>[323,399,328,399,373,399,378,399,393,488,270,488,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>280, 'w'=>171, 'h'=>209, 'head'=>[359,280,401,280,401,330,359,330,], 'body'=>[326,325,381,325,381,412,326,412,], 'legs'=>[326,402,331,402,376,402,381,402,393,489,270,489,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>285, 'w'=>211, 'h'=>205, 'head'=>[365,285,405,285,405,335,365,335,], 'body'=>[332,330,387,330,387,415,332,415,], 'legs'=>[332,405,337,405,382,405,387,405,394,490,270,490,], 'ex'=>1 },
+{ 'x'=>268, 'y'=>287, 'w'=>197, 'h'=>203, 'head'=>[367,287,400,287,400,337,367,337,], 'body'=>[326,332,381,332,381,416,326,416,], 'legs'=>[326,406,331,406,376,406,381,406,392,490,268,490,], 'ex'=>0, 'hit'=>[443,377,455,368,468,392,457,399,] },
+{ 'x'=>269, 'y'=>276, 'w'=>123, 'h'=>225, 'head'=>[286,276,315,276,315,326,286,326,], 'body'=>[274,321,329,321,329,416,274,416,], 'legs'=>[274,406,279,406,324,406,329,406,391,501,284,501,], 'ex'=>1 },
+{ 'x'=>266, 'y'=>275, 'w'=>157, 'h'=>226, 'head'=>[286,275,316,275,316,325,286,325,], 'body'=>[270,320,325,320,325,415,270,415,], 'legs'=>[270,405,275,405,320,405,325,405,422,501,282,501,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>274, 'w'=>179, 'h'=>225, 'head'=>[285,274,315,274,315,324,285,324,], 'body'=>[269,319,324,319,324,414,269,414,], 'legs'=>[269,404,274,404,319,404,324,404,441,499,280,499,], 'ex'=>1 },
+{ 'x'=>266, 'y'=>271, 'w'=>185, 'h'=>227, 'head'=>[290,271,319,271,319,321,290,321,], 'body'=>[273,316,328,316,328,412,273,412,], 'legs'=>[273,402,278,402,323,402,328,402,448,484,282,498,], 'ex'=>0, 'hit'=>[419,474,448,465,451,480,425,490,] },
+{ 'x'=>277, 'y'=>185, 'w'=>113, 'h'=>304, 'head'=>[332,185,358,185,358,235,332,235,], 'body'=>[305,230,360,230,360,364,305,364,], 'legs'=>[305,354,310,354,355,354,360,354,389,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>182, 'w'=>124, 'h'=>308, 'head'=>[324,182,348,182,348,232,324,232,], 'body'=>[297,227,352,227,352,363,297,363,], 'legs'=>[297,353,302,353,347,353,352,353,389,490,277,490,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>180, 'w'=>120, 'h'=>312, 'head'=>[305,180,329,180,329,230,305,230,], 'body'=>[287,225,342,225,342,363,287,363,], 'legs'=>[287,353,292,353,337,353,342,353,389,492,276,492,], 'ex'=>1 },
+{ 'x'=>265, 'y'=>179, 'w'=>122, 'h'=>310, 'head'=>[298,179,323,179,323,229,298,229,], 'body'=>[285,224,340,224,340,361,285,361,], 'legs'=>[285,351,290,351,335,351,340,351,386,489,274,489,], 'ex'=>1 },
+{ 'x'=>272, 'y'=>185, 'w'=>118, 'h'=>304, 'head'=>[313,185,336,185,336,235,313,235,], 'body'=>[293,230,348,230,348,364,293,364,], 'legs'=>[293,354,298,354,343,354,348,354,389,489,276,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>186, 'w'=>120, 'h'=>304, 'head'=>[325,186,352,186,352,236,325,236,], 'body'=>[302,231,357,231,357,365,302,365,], 'legs'=>[302,355,307,355,352,355,357,355,390,490,277,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>127, 'h'=>305, 'head'=>[321,185,350,185,350,235,321,235,], 'body'=>[301,230,356,230,356,365,301,365,], 'legs'=>[301,355,306,355,351,355,356,355,391,490,277,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>187, 'w'=>114, 'h'=>304, 'head'=>[316,187,347,187,347,237,316,237,], 'body'=>[297,232,352,232,352,366,297,366,], 'legs'=>[297,356,302,356,347,356,352,356,390,491,277,491,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>186, 'w'=>121, 'h'=>304, 'head'=>[322,186,352,186,352,236,322,236,], 'body'=>[304,231,359,231,359,365,304,365,], 'legs'=>[304,355,309,355,354,355,359,355,391,490,278,490,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>185, 'w'=>149, 'h'=>304, 'head'=>[335,185,367,185,367,235,335,235,], 'body'=>[315,230,370,230,370,364,315,364,], 'legs'=>[315,354,320,354,365,354,370,354,391,489,278,489,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>183, 'w'=>180, 'h'=>306, 'head'=>[358,183,390,183,390,233,358,233,], 'body'=>[326,228,381,228,381,363,326,363,], 'legs'=>[326,353,331,353,376,353,381,353,392,489,278,489,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>184, 'w'=>184, 'h'=>304, 'head'=>[368,184,401,184,401,234,368,234,], 'body'=>[329,229,384,229,384,363,329,363,], 'legs'=>[329,353,334,353,379,353,384,353,392,488,278,488,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>164, 'h'=>304, 'head'=>[359,185,390,185,390,235,359,235,], 'body'=>[321,230,376,230,376,364,321,364,], 'legs'=>[321,354,326,354,371,354,376,354,392,489,277,489,], 'ex'=>1 },
+{ 'x'=>278, 'y'=>184, 'w'=>134, 'h'=>306, 'head'=>[337,184,372,184,372,234,337,234,], 'body'=>[304,229,359,229,359,364,304,364,], 'legs'=>[304,354,309,354,354,354,359,354,392,490,278,490,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>116, 'h'=>306, 'head'=>[314,185,346,185,346,235,314,235,], 'body'=>[288,230,343,230,343,365,288,365,], 'legs'=>[288,355,293,355,338,355,343,355,392,491,277,491,], 'ex'=>1 },
+{ 'x'=>275, 'y'=>185, 'w'=>116, 'h'=>304, 'head'=>[304,185,335,185,335,235,304,235,], 'body'=>[283,230,338,230,338,364,283,364,], 'legs'=>[283,354,288,354,333,354,338,354,390,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>133, 'h'=>301, 'head'=>[329,188,360,188,360,238,329,238,], 'body'=>[305,233,360,233,360,366,305,366,], 'legs'=>[305,356,310,356,355,356,360,356,397,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>187, 'w'=>131, 'h'=>302, 'head'=>[340,187,372,187,372,237,340,237,], 'body'=>[314,232,369,232,369,365,314,365,], 'legs'=>[314,355,319,355,364,355,369,355,396,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>132, 'h'=>301, 'head'=>[348,188,380,188,380,238,348,238,], 'body'=>[322,233,377,233,377,366,322,366,], 'legs'=>[322,356,327,356,372,356,377,356,396,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>189, 'w'=>166, 'h'=>300, 'head'=>[357,189,394,189,394,239,357,239,], 'body'=>[330,234,385,234,385,366,330,366,], 'legs'=>[330,356,335,356,380,356,385,356,396,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>189, 'w'=>204, 'h'=>300, 'head'=>[375,189,424,189,424,239,375,239,], 'body'=>[334,234,389,234,389,366,334,366,], 'legs'=>[334,356,339,356,384,356,389,356,397,489,277,489,], 'ex'=>0, 'hit'=>[457,210,480,206,480,224,457,220,] },
+{ 'x'=>277, 'y'=>188, 'w'=>123, 'h'=>301, 'head'=>[328,188,358,188,358,238,328,238,], 'body'=>[299,233,354,233,354,366,299,366,], 'legs'=>[299,356,304,356,349,356,354,356,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>189, 'w'=>125, 'h'=>300, 'head'=>[333,189,364,189,364,239,333,239,], 'body'=>[305,234,360,234,360,366,305,366,], 'legs'=>[305,356,310,356,355,356,360,356,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>192, 'w'=>130, 'h'=>297, 'head'=>[342,192,372,192,372,242,342,242,], 'body'=>[320,237,375,237,375,368,320,368,], 'legs'=>[320,358,325,358,370,358,375,358,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>196, 'w'=>132, 'h'=>293, 'head'=>[349,196,379,196,379,246,349,246,], 'body'=>[330,241,385,241,385,370,330,370,], 'legs'=>[330,360,335,360,380,360,385,360,401,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>199, 'w'=>140, 'h'=>290, 'head'=>[352,199,382,199,382,249,352,249,], 'body'=>[337,244,392,244,392,371,337,371,], 'legs'=>[337,361,342,361,387,361,392,361,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>202, 'w'=>197, 'h'=>287, 'head'=>[352,202,383,202,383,252,352,252,], 'body'=>[343,247,398,247,398,373,343,373,], 'legs'=>[343,363,348,363,393,363,398,363,400,489,277,489,], 'ex'=>0, 'hit'=>[444,305,468,298,476,316,444,315,] },
+{ 'x'=>277, 'y'=>185, 'w'=>127, 'h'=>304, 'head'=>[328,185,357,185,357,235,328,235,], 'body'=>[315,230,370,230,370,364,315,364,], 'legs'=>[315,354,320,354,365,354,370,354,403,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>127, 'h'=>304, 'head'=>[335,185,364,185,364,235,335,235,], 'body'=>[324,230,379,230,379,364,324,364,], 'legs'=>[324,354,329,354,374,354,379,354,403,489,277,489,], 'ex'=>1 },
+{ 'x'=>286, 'y'=>179, 'w'=>124, 'h'=>298, 'head'=>[345,179,374,179,374,229,345,229,], 'body'=>[341,224,396,224,396,355,341,355,], 'legs'=>[341,345,346,345,391,345,396,345,404,477,286,477,], 'ex'=>1 },
+{ 'x'=>314, 'y'=>179, 'w'=>109, 'h'=>298, 'head'=>[354,179,383,179,383,229,354,229,], 'body'=>[353,224,408,224,408,355,353,355,], 'legs'=>[353,345,358,345,403,345,408,345,410,477,314,477,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>179, 'w'=>106, 'h'=>297, 'head'=>[369,179,397,179,397,229,369,229,], 'body'=>[369,224,424,224,424,355,369,355,], 'legs'=>[369,345,374,345,419,345,424,345,419,476,388,476,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>182, 'w'=>119, 'h'=>295, 'head'=>[369,182,397,182,397,232,369,232,], 'body'=>[375,227,430,227,430,357,375,357,], 'legs'=>[375,347,380,347,425,347,430,347,421,477,391,477,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>187, 'w'=>209, 'h'=>290, 'head'=>[369,187,396,187,396,237,369,237,], 'body'=>[384,232,439,232,439,359,384,359,], 'legs'=>[384,349,389,349,434,349,439,349,422,477,389,477,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>188, 'w'=>216, 'h'=>287, 'head'=>[369,188,396,188,396,238,369,238,], 'body'=>[383,233,438,233,438,359,383,359,], 'legs'=>[383,349,388,349,433,349,438,349,423,475,390,475,], 'ex'=>0, 'hit'=>[536,304,571,301,547,330,526,324,] },
+{ 'x'=>273, 'y'=>188, 'w'=>131, 'h'=>301, 'head'=>[341,188,370,188,370,238,341,238,], 'body'=>[327,233,382,233,382,366,327,366,], 'legs'=>[327,356,332,356,377,356,382,356,398,489,273,489,], 'ex'=>1 },
+{ 'x'=>280, 'y'=>186, 'w'=>125, 'h'=>296, 'head'=>[348,186,377,186,377,236,348,236,], 'body'=>[339,231,394,231,394,361,339,361,], 'legs'=>[339,351,344,351,389,351,394,351,399,482,280,482,], 'ex'=>1 },
+{ 'x'=>325, 'y'=>186, 'w'=>100, 'h'=>297, 'head'=>[362,186,391,186,391,236,362,236,], 'body'=>[357,231,412,231,412,362,357,362,], 'legs'=>[357,352,362,352,407,352,412,352,409,483,325,483,], 'ex'=>1 },
+{ 'x'=>357, 'y'=>187, 'w'=> 90, 'h'=>296, 'head'=>[373,187,402,187,402,237,373,237,], 'body'=>[368,232,423,232,423,362,368,362,], 'legs'=>[368,352,373,352,418,352,423,352,416,483,379,483,], 'ex'=>1 },
+{ 'x'=>361, 'y'=>188, 'w'=>136, 'h'=>296, 'head'=>[375,188,404,188,404,238,375,238,], 'body'=>[371,233,426,233,426,363,371,363,], 'legs'=>[371,353,376,353,421,353,426,353,496,484,391,484,], 'ex'=>1 },
+{ 'x'=>356, 'y'=>190, 'w'=>187, 'h'=>295, 'head'=>[375,190,404,190,404,240,375,240,], 'body'=>[371,235,426,235,426,365,371,365,], 'legs'=>[371,355,376,355,421,355,431,321,543,420,390,485,], 'ex'=>0, 'hit'=>[504,404,514,404,554,422,508,432,] },
+{ 'x'=>277, 'y'=>186, 'w'=>132, 'h'=>303, 'head'=>[331,186,360,186,360,236,331,236,], 'body'=>[321,231,376,231,376,365,321,365,], 'legs'=>[321,355,326,355,371,355,376,355,408,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>183, 'w'=>131, 'h'=>300, 'head'=>[336,183,365,183,365,233,336,233,], 'body'=>[332,228,387,228,387,360,332,360,], 'legs'=>[332,350,337,350,382,350,387,350,407,483,277,483,], 'ex'=>1 },
+{ 'x'=>316, 'y'=>184, 'w'=>100, 'h'=>291, 'head'=>[349,184,378,184,378,234,349,234,], 'body'=>[352,229,407,229,407,357,352,357,], 'legs'=>[352,347,357,347,402,347,407,347,414,475,316,475,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>183, 'w'=> 99, 'h'=>293, 'head'=>[361,183,390,183,390,233,361,233,], 'body'=>[365,228,420,228,420,357,365,357,], 'legs'=>[365,347,370,347,415,347,420,347,424,476,378,476,], 'ex'=>1 },
+{ 'x'=>352, 'y'=>183, 'w'=>180, 'h'=>294, 'head'=>[362,183,391,183,391,233,362,233,], 'body'=>[367,228,422,228,422,357,367,357,], 'legs'=>[367,347,372,347,417,347,422,347,422,477,391,477,], 'ex'=>1 },
+{ 'x'=>353, 'y'=>182, 'w'=>207, 'h'=>294, 'head'=>[363,182,392,182,392,232,363,232,], 'body'=>[376,227,431,227,431,356,376,356,], 'legs'=>[376,346,381,346,426,346,431,346,424,476,390,476,], 'ex'=>0, 'hit'=>[520,337,551,329,562,345,525,357,] },
+{ 'x'=>263, 'y'=>185, 'w'=>154, 'h'=>301, 'head'=>[332,185,361,185,361,235,332,235,], 'body'=>[321,230,376,230,376,363,321,363,], 'legs'=>[321,353,326,353,371,353,376,353,399,486,263,486,], 'ex'=>1 },
+{ 'x'=>282, 'y'=>182, 'w'=>138, 'h'=>293, 'head'=>[344,182,373,182,373,232,344,232,], 'body'=>[339,227,394,227,394,356,339,356,], 'legs'=>[339,346,344,346,389,346,394,346,404,475,282,475,], 'ex'=>1 },
+{ 'x'=>318, 'y'=>180, 'w'=>143, 'h'=>295, 'head'=>[356,180,384,180,384,230,356,230,], 'body'=>[353,225,408,225,408,355,353,355,], 'legs'=>[353,345,358,345,403,345,408,345,410,475,318,475,], 'ex'=>1 },
+{ 'x'=>355, 'y'=>180, 'w'=>106, 'h'=>297, 'head'=>[369,180,397,180,397,230,369,230,], 'body'=>[367,225,422,225,422,356,367,356,], 'legs'=>[367,346,372,346,417,346,422,346,419,477,387,477,], 'ex'=>1 },
+{ 'x'=>358, 'y'=>181, 'w'=>116, 'h'=>297, 'head'=>[373,181,401,181,401,231,373,231,], 'body'=>[369,226,424,226,424,357,369,357,], 'legs'=>[369,347,374,347,419,347,424,347,446,478,388,478,], 'ex'=>1 },
+{ 'x'=>339, 'y'=>181, 'w'=>148, 'h'=>297, 'head'=>[372,181,401,181,401,231,372,231,], 'body'=>[368,226,423,226,423,357,368,357,], 'legs'=>[368,347,373,347,418,347,423,347,416,478,383,478,], 'ex'=>0, 'hit'=>[449,291,474,286,479,379,452,379,] },
+{ 'x'=>277, 'y'=>187, 'w'=>120, 'h'=>302, 'head'=>[305,187,333,187,333,237,305,237,], 'body'=>[292,232,347,232,347,365,292,365,], 'legs'=>[292,355,297,355,342,355,347,355,396,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>194, 'w'=>128, 'h'=>295, 'head'=>[334,194,363,194,363,244,334,244,], 'body'=>[310,239,365,239,365,369,310,369,], 'legs'=>[310,359,315,359,360,359,365,359,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>192, 'w'=>138, 'h'=>295, 'head'=>[364,192,395,192,395,242,364,242,], 'body'=>[338,237,393,237,393,367,338,367,], 'legs'=>[338,357,343,357,388,357,393,357,402,487,277,487,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>190, 'w'=>153, 'h'=>294, 'head'=>[363,190,409,190,409,240,363,240,], 'body'=>[337,235,392,235,392,364,337,364,], 'legs'=>[337,354,342,354,387,354,392,354,397,484,274,484,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>189, 'w'=>166, 'h'=>294, 'head'=>[367,189,407,189,407,239,367,239,], 'body'=>[340,234,395,234,395,363,340,363,], 'legs'=>[340,353,345,353,390,353,395,353,397,483,274,483,], 'ex'=>0, 'hit'=>[399,223,440,211,443,230,400,238,] },
+{ 'x'=>277, 'y'=>190, 'w'=>118, 'h'=>299, 'head'=>[319,190,345,190,345,240,319,240,], 'body'=>[299,235,354,235,354,367,299,367,], 'legs'=>[299,357,304,357,349,357,354,357,394,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>192, 'w'=>136, 'h'=>303, 'head'=>[334,192,358,192,358,242,334,242,], 'body'=>[313,237,368,237,368,371,313,371,], 'legs'=>[313,361,318,361,363,361,368,361,401,495,277,495,], 'ex'=>1 },
+{ 'x'=>266, 'y'=>181, 'w'=>144, 'h'=>304, 'head'=>[330,181,358,181,358,231,330,231,], 'body'=>[316,226,371,226,371,360,316,360,], 'legs'=>[316,350,321,350,366,350,371,350,392,485,266,485,], 'ex'=>1 },
+{ 'x'=>282, 'y'=>178, 'w'=>120, 'h'=>308, 'head'=>[338,178,369,178,369,228,338,228,], 'body'=>[336,223,391,223,391,359,336,359,], 'legs'=>[336,349,341,349,386,349,391,349,392,486,282,486,], 'ex'=>1 },
+{ 'x'=>340, 'y'=>175, 'w'=> 78, 'h'=>311, 'head'=>[360,175,389,175,389,225,360,225,], 'body'=>[361,220,416,220,416,358,361,358,], 'legs'=>[361,348,366,348,411,348,416,348,408,486,340,486,], 'ex'=>1 },
+{ 'x'=>359, 'y'=>170, 'w'=> 74, 'h'=>315, 'head'=>[380,170,405,170,405,220,380,220,], 'body'=>[380,215,435,215,435,355,380,355,], 'legs'=>[380,345,385,345,430,345,435,345,432,485,385,485,], 'ex'=>1 },
+{ 'x'=>355, 'y'=>171, 'w'=>118, 'h'=>315, 'head'=>[388,171,413,171,413,221,388,221,], 'body'=>[385,216,440,216,440,356,385,356,], 'legs'=>[385,346,390,346,435,346,440,346,472,486,384,486,], 'ex'=>1 },
+{ 'x'=>360, 'y'=>170, 'w'=>133, 'h'=>315, 'head'=>[407,170,432,170,432,220,407,220,], 'body'=>[396,215,451,215,451,355,396,355,], 'legs'=>[396,345,401,345,446,345,451,345,492,485,385,485,], 'ex'=>1 },
+{ 'x'=>371, 'y'=>177, 'w'=>131, 'h'=>312, 'head'=>[419,177,444,177,444,227,419,227,], 'body'=>[407,222,462,222,462,360,407,360,], 'legs'=>[407,350,412,350,457,350,462,350,501,489,387,489,], 'ex'=>1 },
+{ 'x'=>387, 'y'=>185, 'w'=>183, 'h'=>300, 'head'=>[456,185,484,185,484,235,456,235,], 'body'=>[437,230,492,230,492,362,437,362,], 'legs'=>[437,352,442,352,487,352,492,352,505,485,387,485,], 'ex'=>1 },
+{ 'x'=>390, 'y'=>187, 'w'=>201, 'h'=>302, 'head'=>[450,187,478,187,478,237,450,237,], 'body'=>[433,232,488,232,488,365,433,365,], 'legs'=>[433,355,438,355,483,355,488,355,508,489,390,489,], 'ex'=>0, 'hit'=>[563,226,588,222,589,240,563,236,] },
+{ 'x'=>261, 'y'=>187, 'w'=>138, 'h'=>302, 'head'=>[332,187,361,187,361,237,332,237,], 'body'=>[309,232,364,232,364,365,309,365,], 'legs'=>[309,355,314,355,359,355,364,355,395,489,261,489,], 'ex'=>1 },
+{ 'x'=>261, 'y'=>186, 'w'=>135, 'h'=>303, 'head'=>[311,186,339,186,339,236,311,236,], 'body'=>[292,231,347,231,347,365,292,365,], 'legs'=>[292,355,297,355,342,355,347,355,395,489,261,489,], 'ex'=>1 },
+{ 'x'=>240, 'y'=>188, 'w'=>152, 'h'=>301, 'head'=>[280,188,307,188,307,238,280,238,], 'body'=>[266,233,321,233,321,366,266,366,], 'legs'=>[266,356,271,356,316,356,321,356,391,489,257,489,], 'ex'=>1 },
+{ 'x'=>221, 'y'=>189, 'w'=>166, 'h'=>300, 'head'=>[263,189,289,189,289,239,263,239,], 'body'=>[255,234,310,234,310,366,255,366,], 'legs'=>[255,356,260,356,305,356,310,356,386,489,252,489,], 'ex'=>1 },
+{ 'x'=>205, 'y'=>194, 'w'=>179, 'h'=>295, 'head'=>[245,194,272,194,272,244,245,244,], 'body'=>[254,239,309,239,309,369,254,369,], 'legs'=>[254,359,259,359,304,359,309,359,383,489,250,489,], 'ex'=>1 },
+{ 'x'=>197, 'y'=>205, 'w'=>189, 'h'=>284, 'head'=>[232,205,277,205,277,255,232,255,], 'body'=>[254,250,309,250,309,374,254,374,], 'legs'=>[254,364,259,364,304,364,309,364,385,489,248,489,], 'ex'=>1 },
+{ 'x'=>209, 'y'=>204, 'w'=>188, 'h'=>285, 'head'=>[238,204,287,204,287,254,238,254,], 'body'=>[259,249,314,249,314,374,259,374,], 'legs'=>[259,364,264,364,309,364,314,364,386,489,247,489,], 'ex'=>1 },
+{ 'x'=>229, 'y'=>197, 'w'=>194, 'h'=>292, 'head'=>[267,197,308,197,308,247,267,247,], 'body'=>[272,242,327,242,327,370,272,370,], 'legs'=>[272,360,277,360,322,360,327,360,392,489,252,489,], 'ex'=>1 },
+{ 'x'=>242, 'y'=>193, 'w'=>178, 'h'=>296, 'head'=>[293,193,323,193,323,243,293,243,], 'body'=>[285,238,340,238,340,368,285,368,], 'legs'=>[285,358,290,358,335,358,340,358,394,489,254,489,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>195, 'w'=>142, 'h'=>294, 'head'=>[332,195,361,195,361,245,332,245,], 'body'=>[309,240,364,240,364,369,309,369,], 'legs'=>[309,359,314,359,359,359,364,359,400,489,259,489,], 'ex'=>1 },
+{ 'x'=>259, 'y'=>202, 'w'=>157, 'h'=>289, 'head'=>[345,202,376,202,376,252,345,252,], 'body'=>[319,247,374,247,374,374,319,374,], 'legs'=>[319,364,324,364,369,364,374,364,399,491,259,491,], 'ex'=>1 },
+{ 'x'=>261, 'y'=>205, 'w'=>195, 'h'=>287, 'head'=>[356,205,397,205,397,255,356,255,], 'body'=>[322,250,377,250,377,376,322,376,], 'legs'=>[322,366,327,366,372,366,377,366,400,492,261,492,], 'ex'=>0, 'hit'=>[451,243,461,243,464,254,451,253,] },
+{ 'x'=>263, 'y'=>201, 'w'=>154, 'h'=>291, 'head'=>[360,201,391,201,391,251,360,251,], 'body'=>[328,246,383,246,383,374,328,374,], 'legs'=>[328,364,333,364,378,364,383,364,401,492,263,492,], 'ex'=>1 },
+{ 'x'=>262, 'y'=>197, 'w'=>152, 'h'=>295, 'head'=>[345,197,376,197,376,247,345,247,], 'body'=>[317,242,372,242,372,372,317,372,], 'legs'=>[317,362,322,362,367,362,372,362,402,492,262,492,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>195, 'w'=>141, 'h'=>297, 'head'=>[335,195,365,195,365,245,335,245,], 'body'=>[309,240,364,240,364,371,309,371,], 'legs'=>[309,361,314,361,359,361,364,361,403,492,263,492,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>186, 'w'=>122, 'h'=>303, 'head'=>[322,186,351,186,351,236,322,236,], 'body'=>[305,231,360,231,360,365,305,365,], 'legs'=>[305,355,310,355,355,355,360,355,398,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>186, 'w'=>120, 'h'=>303, 'head'=>[313,186,342,186,342,236,313,236,], 'body'=>[297,231,352,231,352,365,297,365,], 'legs'=>[297,355,302,355,347,355,352,355,396,489,277,489,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>194, 'w'=>152, 'h'=>295, 'head'=>[314,194,343,194,343,244,314,244,], 'body'=>[298,239,353,239,353,369,298,369,], 'legs'=>[298,359,303,359,348,359,353,359,425,489,276,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>200, 'w'=>157, 'h'=>289, 'head'=>[322,200,351,200,351,250,322,250,], 'body'=>[305,245,360,245,360,372,305,372,], 'legs'=>[305,362,310,362,355,362,360,362,433,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>221, 'w'=>159, 'h'=>268, 'head'=>[338,221,381,221,381,271,338,271,], 'body'=>[324,266,379,266,379,382,324,382,], 'legs'=>[324,372,329,372,374,372,379,372,435,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>249, 'w'=>160, 'h'=>240, 'head'=>[359,249,392,249,392,299,359,299,], 'body'=>[351,294,406,294,406,396,351,396,], 'legs'=>[351,386,356,386,401,386,406,386,433,489,277,489,], 'ex'=>1 },
+{ 'x'=>280, 'y'=>254, 'w'=>195, 'h'=>235, 'head'=>[366,254,396,254,396,304,366,304,], 'body'=>[352,299,407,299,407,399,352,399,], 'legs'=>[352,389,357,389,402,389,407,389,434,489,280,489,], 'ex'=>1 },
+{ 'x'=>280, 'y'=>259, 'w'=>194, 'h'=>230, 'head'=>[374,259,402,259,402,309,374,309,], 'body'=>[353,304,408,304,408,401,353,401,], 'legs'=>[353,391,358,391,403,391,408,391,436,489,280,489,], 'ex'=>0, 'hit'=>[470,263,486,269,463,322,450,313,] },
+{ 'x'=>280, 'y'=>226, 'w'=>173, 'h'=>265, 'head'=>[382,264,412,262,405,308,368,313,], 'body'=>[355,319,412,304,397,387,360,386,], 'legs'=>[360,376,365,376,410,376,415,376,435,491,280,491,], 'ex'=>0, 'hit'=>[426,234,438,224,457,293,441,295,] },
+{ 'x'=>277, 'y'=>192, 'w'=>138, 'h'=>297, 'head'=>[332,192,361,192,361,242,332,242,], 'body'=>[313,237,368,237,368,368,313,368,], 'legs'=>[313,358,318,358,363,358,368,358,414,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>192, 'w'=>145, 'h'=>297, 'head'=>[350,192,380,192,380,242,350,242,], 'body'=>[330,237,385,237,385,368,330,368,], 'legs'=>[330,358,335,358,380,358,385,358,415,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>193, 'w'=>188, 'h'=>296, 'head'=>[370,193,407,193,407,243,370,243,], 'body'=>[339,238,394,238,394,368,339,368,], 'legs'=>[339,358,344,358,389,358,394,358,414,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>209, 'w'=>228, 'h'=>276, 'head'=>[384,209,415,209,415,259,384,259,], 'body'=>[339,254,394,254,394,374,339,374,], 'legs'=>[339,364,344,364,389,364,394,364,418,485,277,485,], 'ex'=>0, 'hit'=>[477,278,505,281,504,298,477,288,] },
+{ 'x'=>272, 'y'=>203, 'w'=>194, 'h'=>280, 'head'=>[364,203,410,203,410,253,364,253,], 'body'=>[329,248,384,248,384,370,329,370,], 'legs'=>[329,360,334,360,379,360,384,360,414,483,272,483,], 'ex'=>1 },
+{ 'x'=>271, 'y'=>189, 'w'=>168, 'h'=>294, 'head'=>[353,189,394,189,394,239,353,239,], 'body'=>[321,234,376,234,376,363,321,363,], 'legs'=>[321,353,326,353,371,353,376,353,412,483,271,483,], 'ex'=>1 },
+{ 'x'=>270, 'y'=>145, 'w'=>142, 'h'=>337, 'head'=>[327,189,351,189,351,239,327,239,], 'body'=>[310,242,366,238,363,341,308,341,], 'legs'=>[308,331,313,331,358,331,363,331,411,482,270,482,], 'ex'=>0 },
+{ 'x'=>250, 'y'=>155, 'w'=>158, 'h'=>326, 'head'=>[295,193,324,191,320,234,300,234,], 'body'=>[296,232,350,229,350,345,295,345,], 'legs'=>[295,335,300,335,345,335,350,335,407,481,266,481,], 'ex'=>0 },
+{ 'x'=>224, 'y'=>197, 'w'=>179, 'h'=>285, 'head'=>[263,197,291,198,310,247,263,247,], 'body'=>[275,248,334,223,367,342,307,358,], 'legs'=>[282,357,287,357,332,357,366,341,402,482,259,482,], 'ex'=>0 },
+{ 'x'=>211, 'y'=>229, 'w'=>188, 'h'=>254, 'head'=>[226,230,258,231,274,270,226,280,], 'body'=>[254,273,300,232,347,329,304,341,], 'legs'=>[284,373,296,328,341,323,355,333,398,483,256,483,], 'ex'=>0 },
+{ 'x'=>225, 'y'=>235, 'w'=>179, 'h'=>250, 'head'=>[226,236,261,234,266,278,226,286,], 'body'=>[261,276,304,232,358,335,297,356,], 'legs'=>[288,377,298,347,331,335,361,339,403,485,261,485,], 'ex'=>0 },
+{ 'x'=>261, 'y'=>205, 'w'=>153, 'h'=>280, 'head'=>[265,205,295,205,305,253,265,255,], 'body'=>[277,258,338,232,366,331,316,340,], 'legs'=>[295,362,310,332,350,329,367,334,413,485,271,485,], 'ex'=>0 },
+{ 'x'=>236, 'y'=>200, 'w'=>171, 'h'=>287, 'head'=>[279,200,316,205,323,250,279,250,], 'body'=>[297,245,352,245,365,355,315,355,], 'legs'=>[297,361,306,343,347,349,369,354,406,487,264,487,], 'ex'=>0 },
+{ 'x'=>276, 'y'=>197, 'w'=>160, 'h'=>289, 'head'=>[327,197,361,197,361,247,327,247,], 'body'=>[327,242,382,242,382,369,327,369,], 'legs'=>[327,359,332,359,377,359,382,359,416,486,276,486,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>186, 'w'=>169, 'h'=>301, 'head'=>[355,186,382,186,382,236,355,236,], 'body'=>[332,231,387,231,387,364,332,364,], 'legs'=>[332,354,337,354,382,354,387,354,417,487,277,487,], 'ex'=>1 },
+{ 'x'=>280, 'y'=>188, 'w'=>159, 'h'=>301, 'head'=>[361,188,392,188,392,238,361,238,], 'body'=>[332,233,387,233,387,366,332,366,], 'legs'=>[332,356,337,356,382,356,387,356,419,489,280,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>185, 'w'=>123, 'h'=>304, 'head'=>[317,185,346,185,346,235,317,235,], 'body'=>[306,230,361,230,361,364,306,364,], 'legs'=>[306,354,311,354,356,354,361,354,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>123, 'h'=>301, 'head'=>[301,188,331,188,331,238,301,238,], 'body'=>[306,233,361,233,361,366,306,366,], 'legs'=>[306,356,311,356,356,356,361,356,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>195, 'w'=>123, 'h'=>294, 'head'=>[289,195,319,195,319,245,289,245,], 'body'=>[297,240,352,240,352,369,297,369,], 'legs'=>[297,359,302,359,347,359,352,359,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>196, 'w'=>123, 'h'=>293, 'head'=>[292,196,324,196,324,246,292,246,], 'body'=>[295,241,350,241,350,370,295,370,], 'legs'=>[295,360,300,360,345,360,350,360,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>123, 'h'=>301, 'head'=>[315,188,346,188,346,238,315,238,], 'body'=>[306,233,361,233,361,366,306,366,], 'legs'=>[306,356,311,356,356,356,361,356,399,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>124, 'h'=>301, 'head'=>[308,188,338,188,338,238,308,238,], 'body'=>[301,233,356,233,356,366,301,366,], 'legs'=>[301,356,306,356,351,356,356,356,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>187, 'w'=>124, 'h'=>302, 'head'=>[306,187,336,187,336,237,306,237,], 'body'=>[294,232,349,232,349,365,294,365,], 'legs'=>[294,355,299,355,344,355,349,355,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>124, 'h'=>301, 'head'=>[307,188,336,188,336,238,307,238,], 'body'=>[291,233,346,233,346,366,291,366,], 'legs'=>[291,356,296,356,341,356,346,356,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>188, 'w'=>124, 'h'=>301, 'head'=>[319,188,350,188,350,238,319,238,], 'body'=>[301,233,356,233,356,366,301,366,], 'legs'=>[301,356,306,356,351,356,356,356,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>191, 'w'=>124, 'h'=>298, 'head'=>[324,191,354,191,354,241,324,241,], 'body'=>[301,236,356,236,356,367,301,367,], 'legs'=>[301,357,306,357,351,357,356,357,400,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>203, 'w'=>127, 'h'=>286, 'head'=>[329,203,371,203,371,253,329,253,], 'body'=>[289,248,344,248,344,373,289,373,], 'legs'=>[289,363,294,363,339,363,344,363,403,489,281,489,], 'ex'=>1 },
+{ 'x'=>258, 'y'=>220, 'w'=>141, 'h'=>269, 'head'=>[315,220,369,220,369,270,315,270,], 'body'=>[279,265,334,265,334,382,279,382,], 'legs'=>[279,372,284,372,329,372,334,372,398,489,277,489,], 'ex'=>1 },
+{ 'x'=>269, 'y'=>217, 'w'=>131, 'h'=>272, 'head'=>[303,217,348,217,348,267,303,267,], 'body'=>[277,262,332,262,332,380,277,380,], 'legs'=>[277,370,282,370,327,370,332,370,399,489,278,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>192, 'w'=>130, 'h'=>297, 'head'=>[321,192,348,192,348,242,321,242,], 'body'=>[307,237,362,237,362,368,307,368,], 'legs'=>[307,358,312,358,357,358,362,358,393,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>199, 'w'=>137, 'h'=>290, 'head'=>[325,199,355,199,355,249,325,249,], 'body'=>[300,244,355,244,355,371,300,371,], 'legs'=>[300,361,305,361,350,361,355,361,393,489,277,489,], 'ex'=>1 },
+{ 'x'=>275, 'y'=>213, 'w'=>118, 'h'=>276, 'head'=>[339,213,375,213,375,263,339,263,], 'body'=>[292,258,347,258,347,378,292,378,], 'legs'=>[292,368,297,368,342,368,347,368,392,489,278,489,], 'ex'=>1 },
+{ 'x'=>263, 'y'=>263, 'w'=>127, 'h'=>226, 'head'=>[311,263,379,263,379,313,311,313,], 'body'=>[281,308,336,308,336,403,281,403,], 'legs'=>[281,393,286,393,331,393,336,393,389,489,273,489,], 'ex'=>1 },
+{ 'x'=>275, 'y'=>291, 'w'=>118, 'h'=>198, 'head'=>[286,291,364,291,364,341,286,341,], 'body'=>[302,336,357,336,357,417,302,417,], 'legs'=>[302,407,307,407,352,407,357,407,392,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>311, 'w'=>117, 'h'=>178, 'head'=>[290,311,355,311,355,361,290,361,], 'body'=>[313,356,368,356,368,427,313,427,], 'legs'=>[313,417,318,417,363,417,368,417,393,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>319, 'w'=>120, 'h'=>170, 'head'=>[305,319,380,319,380,369,305,369,], 'body'=>[309,364,364,364,364,431,309,431,], 'legs'=>[309,421,314,421,359,421,364,421,394,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>308, 'w'=>141, 'h'=>181, 'head'=>[314,308,399,308,399,358,314,358,], 'body'=>[302,353,357,353,357,426,302,426,], 'legs'=>[302,416,307,416,352,416,357,416,393,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>277, 'w'=>124, 'h'=>212, 'head'=>[332,277,390,277,390,327,332,327,], 'body'=>[296,322,351,322,351,410,296,410,], 'legs'=>[296,400,301,400,346,400,351,400,394,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>239, 'w'=>117, 'h'=>250, 'head'=>[317,239,351,239,351,289,317,289,], 'body'=>[292,284,347,284,347,391,292,391,], 'legs'=>[292,381,297,381,342,381,347,381,393,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>213, 'w'=>118, 'h'=>276, 'head'=>[317,213,348,213,348,263,317,263,], 'body'=>[305,258,360,258,360,378,305,378,], 'legs'=>[305,368,310,368,355,368,360,368,394,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>194, 'w'=>123, 'h'=>295, 'head'=>[331,194,361,194,361,244,331,244,], 'body'=>[312,239,367,239,367,369,312,369,], 'legs'=>[312,359,317,359,362,359,367,359,393,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>191, 'w'=>120, 'h'=>298, 'head'=>[323,191,352,191,352,241,323,241,], 'body'=>[305,236,360,236,360,367,305,367,], 'legs'=>[305,357,310,357,355,357,360,357,393,489,277,489,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>268, 'w'=>142, 'h'=>223, 'head'=>[287,268,316,268,316,318,287,318,], 'body'=>[282,313,337,313,337,407,282,407,], 'legs'=>[282,397,287,397,332,397,337,397,394,491,253,491,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>274, 'w'=>144, 'h'=>220, 'head'=>[264,274,301,274,301,324,264,324,], 'body'=>[276,319,331,319,331,411,276,411,], 'legs'=>[276,401,281,401,326,401,331,401,396,494,253,494,], 'ex'=>1 },
+{ 'x'=>253, 'y'=>276, 'w'=>142, 'h'=>216, 'head'=>[259,276,297,276,297,326,259,326,], 'body'=>[280,321,335,321,335,411,280,411,], 'legs'=>[280,401,285,401,330,401,335,401,394,492,253,492,], 'ex'=>1 },
+{ 'x'=>246, 'y'=>281, 'w'=>148, 'h'=>212, 'head'=>[251,281,297,281,297,331,251,331,], 'body'=>[276,326,331,326,331,414,276,414,], 'legs'=>[276,404,281,404,326,404,331,404,393,493,251,493,], 'ex'=>1 },
+{ 'x'=>252, 'y'=>282, 'w'=>144, 'h'=>210, 'head'=>[300,282,334,282,334,332,300,332,], 'body'=>[276,327,331,327,331,414,276,414,], 'legs'=>[276,404,281,404,326,404,331,404,395,492,252,492,], 'ex'=>1 },
+{ 'x'=>252, 'y'=>295, 'w'=>144, 'h'=>198, 'head'=>[301,295,342,295,342,345,301,345,], 'body'=>[269,340,324,340,324,421,269,421,], 'legs'=>[269,411,274,411,319,411,324,411,395,493,252,493,], 'ex'=>1 },
+{ 'x'=>252, 'y'=>294, 'w'=>143, 'h'=>202, 'head'=>[295,294,335,294,335,344,295,344,], 'body'=>[263,339,318,339,318,422,263,422,], 'legs'=>[263,412,268,412,313,412,318,412,394,496,252,496,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>192, 'w'=>128, 'h'=>297, 'head'=>[336,192,365,192,365,242,336,242,], 'body'=>[304,237,359,237,359,368,304,368,], 'legs'=>[304,358,309,358,354,358,359,358,398,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>193, 'w'=>163, 'h'=>294, 'head'=>[351,193,396,193,396,243,351,243,], 'body'=>[322,238,377,238,377,367,322,367,], 'legs'=>[322,357,327,357,372,357,377,357,397,487,277,487,], 'ex'=>1 },
+{ 'x'=>274, 'y'=>176, 'w'=>191, 'h'=>307, 'head'=>[386,176,424,176,424,226,386,226,], 'body'=>[337,221,392,221,392,357,337,357,], 'legs'=>[337,347,342,347,387,347,392,347,397,483,274,483,], 'ex'=>1 },
+{ 'x'=>236, 'y'=>183, 'w'=>239, 'h'=>294, 'head'=>[395,183,437,183,437,233,395,233,], 'body'=>[330,228,385,228,385,357,330,357,], 'legs'=>[330,347,335,347,380,347,385,347,389,477,236,477,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>187, 'w'=>121, 'h'=>302, 'head'=>[300,187,329,187,329,237,300,237,], 'body'=>[291,232,346,232,346,365,291,365,], 'legs'=>[291,355,296,355,341,355,346,355,397,489,278,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>194, 'w'=>141, 'h'=>295, 'head'=>[319,194,349,194,349,244,319,244,], 'body'=>[312,239,367,239,367,369,312,369,], 'legs'=>[312,359,317,359,362,359,367,359,417,489,277,489,], 'ex'=>1 },
+{ 'x'=>277, 'y'=>191, 'w'=>202, 'h'=>298, 'head'=>[352,191,383,191,383,241,352,241,], 'body'=>[341,236,396,236,396,367,341,367,], 'legs'=>[341,357,346,357,391,357,396,357,418,489,277,489,], 'ex'=>1 },
+{ 'x'=>288, 'y'=>170, 'w'=>219, 'h'=>307, 'head'=>[393,170,422,170,422,220,393,220,], 'body'=>[362,215,417,215,417,351,362,351,], 'legs'=>[362,341,367,341,412,341,417,341,423,477,288,477,], 'ex'=>1 },
+{ 'x'=>316, 'y'=>158, 'w'=>205, 'h'=>311, 'head'=>[403,158,441,158,441,208,403,208,], 'body'=>[393,203,448,203,448,341,393,341,], 'legs'=>[393,331,398,331,443,331,448,331,447,469,316,469,], 'ex'=>1 },
+{ 'x'=>318, 'y'=>124, 'w'=>191, 'h'=>342, 'head'=>[446,165,473,165,473,215,446,215,], 'body'=>[409,212,457,206,464,322,409,322,], 'legs'=>[409,312,414,312,459,312,464,312,477,466,318,466,], 'ex'=>0 },
+{ 'x'=>359, 'y'=>176, 'w'=>237, 'h'=>298, 'head'=>[463,176,517,176,517,226,463,226,], 'body'=>[458,222,491,221,491,352,420,333,], 'legs'=>[421,317,454,329,486,342,491,342,512,474,357,445,], 'ex'=>0 },
+{ 'x'=>403, 'y'=>196, 'w'=>213, 'h'=>280, 'head'=>[520,196,550,196,550,246,520,246,], 'body'=>[503,235,547,241,523,363,477,363,], 'legs'=>[462,337,479,338,527,353,532,353,543,476,403,476,], 'ex'=>0, 'hit'=>[567,265,583,247,621,282,598,296,] },
+{ 'x'=>392, 'y'=>207, 'w'=>232, 'h'=>268, 'head'=>[514,207,566,207,566,257,514,257,], 'body'=>[473,252,528,252,528,368,473,368,], 'legs'=>[473,358,478,358,523,358,528,358,539,475,392,475,], 'ex'=>1 },
+{ 'x'=>392, 'y'=>149, 'w'=>181, 'h'=>329, 'head'=>[520,201,540,201,540,251,520,251,], 'body'=>[498,232,525,257,508,341,460,337,], 'legs'=>[464,328,469,328,514,328,519,328,532,472,391,461,], 'ex'=>0 },
+{ 'x'=>397, 'y'=>144, 'w'=>159, 'h'=>340, 'head'=>[487,201,512,202,512,252,483,251,], 'body'=>[468,234,514,265,516,341,461,341,], 'legs'=>[461,331,466,331,511,331,516,331,537,484,397,484,], 'ex'=>0 },
+{ 'x'=>383, 'y'=>194, 'w'=>153, 'h'=>301, 'head'=>[448,202,472,202,472,252,448,252,], 'body'=>[425,239,480,239,480,372,425,372,], 'legs'=>[425,362,430,362,475,362,480,362,535,495,397,495,], 'ex'=>0 },
+{ 'x'=>363, 'y'=>209, 'w'=>166, 'h'=>291, 'head'=>[411,209,437,209,437,259,411,259,], 'body'=>[403,254,458,254,458,382,403,382,], 'legs'=>[403,372,408,372,453,372,458,372,528,500,394,500,], 'ex'=>1 },
diff --git a/data/fonts/Makefile.am b/data/fonts/Makefile.am
new file mode 100644
index 0000000..6ef7620
--- /dev/null
+++ b/data/fonts/Makefile.am
@@ -0,0 +1,7 @@
+## Process this file with automake to produce Makefile.in
+
+fontsdatadir = $(pkgdatadir)/fonts
+fontsdata_DATA = aardvark.ttf gooddogc.ttf manslem.ttf impactfont2.png \
+fangfont.png glossyfont.png
+
+EXTRA_DIST = $(fontsdata_DATA)
diff --git a/data/fonts/Makefile.in b/data/fonts/Makefile.in
new file mode 100644
index 0000000..4c9a062
--- /dev/null
+++ b/data/fonts/Makefile.in
@@ -0,0 +1,209 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+fontsdatadir = $(pkgdatadir)/fonts
+fontsdata_DATA = aardvark.ttf gooddogc.ttf manslem.ttf impactfont2.png fangfont.png glossyfont.png
+
+
+EXTRA_DIST = $(fontsdata_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(fontsdata_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps data/fonts/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-fontsdataDATA: $(fontsdata_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(fontsdatadir)
+ @list='$(fontsdata_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(fontsdatadir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(fontsdatadir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(fontsdatadir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(fontsdatadir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-fontsdataDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(fontsdata_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(fontsdatadir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data/fonts
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-fontsdataDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-fontsdataDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(fontsdatadir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-fontsdataDATA install-fontsdataDATA tags distdir \
+info-am info dvi-am dvi check check-am installcheck-am installcheck \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/gfx/Makefile.am b/data/gfx/Makefile.am
new file mode 100644
index 0000000..49ecf0b
--- /dev/null
+++ b/data/gfx/Makefile.am
@@ -0,0 +1,9 @@
+## Process this file with automake to produce Makefile.in
+
+gfxdatadir = $(pkgdatadir)/gfx
+gfxdata_DATA = \
+Credits.png Foot.png icon.png Story1.png \
+Doodads.png GameOver.png level1.png Mortal.png \
+FighterStats.png icon.bmp level3.png PlayerSelect.png
+
+EXTRA_DIST = $(gfxdata_DATA)
diff --git a/data/gfx/Makefile.in b/data/gfx/Makefile.in
new file mode 100644
index 0000000..86b3b56
--- /dev/null
+++ b/data/gfx/Makefile.in
@@ -0,0 +1,209 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+gfxdatadir = $(pkgdatadir)/gfx
+gfxdata_DATA = Credits.png Foot.png icon.png Story1.png Doodads.png GameOver.png level1.png Mortal.png FighterStats.png icon.bmp level3.png PlayerSelect.png
+
+
+EXTRA_DIST = $(gfxdata_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(gfxdata_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps data/gfx/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-gfxdataDATA: $(gfxdata_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(gfxdatadir)
+ @list='$(gfxdata_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(gfxdatadir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(gfxdatadir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(gfxdatadir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(gfxdatadir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-gfxdataDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(gfxdata_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(gfxdatadir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data/gfx
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-gfxdataDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-gfxdataDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(gfxdatadir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-gfxdataDATA install-gfxdataDATA tags distdir info-am \
+info dvi-am dvi check check-am installcheck-am installcheck \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/script/Backend.pl b/data/script/Backend.pl
new file mode 100644
index 0000000..bf19111
--- /dev/null
+++ b/data/script/Backend.pl
@@ -0,0 +1,516 @@
+#!/usr/bin/perl -w
+
+# PERL backend for the game
+
+=comment
+
+This is the main perl backend for Mortal Szombat. It loads the other files,
+compiles characters, creates shared variables.
+
+
+
+1. FIGHTER ACTIONS
+
+1.1. BASIC MOVEMENT 1.2. OFFENSIVE MOVES 1.3. HURT MOVES
+
+Start KneelingPunch Falling
+Stand KneelingKick Laying
+Walk KneelingUppercut Getup
+Back HighPunch HighPunched
+Turn LowPunch LowPunched
+Hurt HighKick GroinKicked
+Block LowKick KneelingPunched
+Kneeling Sweep KneelingKicked
+Onknees GroinKick Thrown
+Jump KneeKick Dead
+JumpFW Elbow
+JumpBW Grenade
+Fun Uppercut
+Threat Throw
+ [fighter-specific stuff]
+
+=cut
+
+
+=comment
+
+MAIN CONSTANTS
+
+=cut
+
+$GAMEBITS = 3; # Number of oversampling bits in coordinates
+$GAMEBITS2 = 1 << $GAMEBITS; # 2^(oversampling)
+$SCRWIDTH = 640; # The physical horizontal screen resolution
+$SCRHEIGHT = 480; # The physical vertical screen resolution
+$SCRWIDTH2 = ($SCRWIDTH << $GAMEBITS); # The logical horizontal screen resolution
+$SCRHEIGHT2 = ($SCRHEIGHT << $GAMEBITS); # The logical vertical screen resolution
+$MOVEMARGIN2= 50 << $GAMEBITS; # The logical border for figthers.
+
+$BGWIDTH2 = 1920 << $GAMEBITS; # The logical background width
+$BGHEIGHT2 = 480 << $GAMEBITS; # The logical background height
+
+$GROUND2 = 160 << $GAMEBITS; # The logical ground level.
+$DELMULTIPLIER = 1; # DEL values in states are multiplied by this.
+
+$BgMax = $BGWIDTH2 - $SCRWIDTH2; # The logical maximum camera position
+$BgSpeed = 0; # The current speed of the background movement
+$BgPosition = $BgMax >> 1; # The logical camera position
+$BgScrollEnabled = 1; # Can the background scroll?
+$HitPointScale = 10; # Scale the hit points by this.
+$NextDoodad = 0; # The next doodad to process
+
+
+require 'PlayerInput.pl';
+require 'Fighter.pl';
+require 'FighterStats.pl';
+require 'Doodad.pl';
+require 'Keys.pl';
+require 'State.pl';
+
+
+=comment
+#require 'Kolos.pl';
+require 'Zoli.pl';
+require 'UPi.pl';
+#require 'Ulmar.pl';
+#require 'Cumi.pl';
+
+print "Kolos frames :", scalar @KolosFrames,"\n";
+print "Kolos states :", scalar keys %KolosStates,"\n";
+print "Zoli frames :", scalar @ZoliFrames,"\n";
+print "Zoli states :", scalar keys %ZoliStates,"\n";
+print "UPi frames :", scalar @UPiFrames,"\n";
+print "UPi states :", scalar keys %UPiStates,"\n";
+print "Ulmar frames :", scalar @UlmarFrames,"\n";
+print "Ulmar states :", scalar keys %UlmarStates,"\n";
+print "Cumi frames :", scalar @CumiFrames,"\n";
+print "Cumi states :", scalar keys %CumiStates,"\n";
+=cut
+
+
+=comment
+
+MAIN OBJECTS
+
+=cut
+
+
+$Fighter1 = Fighter->new();
+$Fighter2 = Fighter->new();
+
+$Fighter1->{NUMBER} = 0;
+$Fighter1->{OTHER} = $Fighter2;
+
+$Fighter2->{NUMBER} = 1;
+$Fighter2->{OTHER} = $Fighter1;
+
+@Fighters = ( $Fighter1, $Fighter2 );
+
+
+
+
+=comment
+
+VARIABLES FOR DRAWING THE SCENE
+
+=cut
+
+$p1x = 10; # Player 1 X position
+$p1y = 100; # Player 1 Y position
+$p1f = 10; # Player 1 frame
+$p1h = 100; # Player 1 HP
+
+$p2x = 400; # Player 2 X position
+$p2y = 100; # Player 2 Y position
+$p2f = -40; # Player 2 frame. Negative means flipped.
+$p2h = 100; # Player 2 HP
+
+$bgx = 0; # Background X position
+$bgy = 0; # Background Y position
+$time = 0; # Current game time
+$over = 0; # Is the game over?
+$ko = 0; # Is one fighter knocked down?
+
+
+$dx = 0; # Doodad X position
+$dy = 0; # Doodad Y position
+$dt = 0; # Doodad type
+$df = 0; # Doodad frame number
+
+
+
+=comment
+
+JUDGEMENT METHODS
+
+=cut
+
+
+sub JudgementStart
+{
+ $bgx = 0;
+ $bgy = ( $SCRHEIGHT2 - $BGHEIGHT2 ) >> 1;
+ $BgSpeed = 0;
+ $BgPosition = 0;
+ $BgScrollEnabled = 0;
+ $OverTimer = 0;
+ $JudgementMode = 1;
+ ($JudgementWinner) = @_;
+
+ $time = 0;
+ $over = 0;
+
+ $Fighter1->Reset();
+ $Fighter1->{X} = ($JudgementWinner ? 150 : 520 ) * $GAMEBITS2;
+ $Fighter1->{DIR} = ($JudgementWinner ? 1 : -1 );
+ $Fighter1->{NEXTST} = 'Stand';
+ $Fighter1->Update();
+
+ $Fighter2->Reset();
+ $Fighter2->{X} = ($JudgementWinner ? 520 : 150 ) * $GAMEBITS2;
+ $Fighter2->{DIR} = ($JudgementWinner ? -1 : 1 );
+ $Fighter2->{NEXTST} = 'Stand';
+ $Fighter2->Update();
+
+ $Input1->Reset();
+ $Input2->Reset();
+}
+
+
+=comment
+
+PLAYER SELECTION METHODS
+
+=cut
+
+sub SelectStart
+{
+ $bgx = 0;
+ $bgy = ( $SCRHEIGHT2 - $BGHEIGHT2 ) >> 1;
+ $BgSpeed = 0;
+ $BgPosition = 0;
+ $BgScrollEnabled = 0;
+ $OverTimer = 0;
+ $JudgementMode = 0;
+
+ $time = 0;
+ $over = 0;
+
+ $Fighter1->Reset(); #\@ZoliFrames,\%ZoliStates);
+ $Fighter1->{X} = 80 * $GAMEBITS2;
+ $Fighter1->{NEXTST} = 'Stand';
+ $Fighter1->Update();
+
+ $Fighter2->Reset(); #\@ZoliFrames,\%ZoliStates);
+ $Fighter2->{X} = 560 * $GAMEBITS2;
+ $Fighter2->{NEXTST} = 'Stand';
+ $Fighter2->Update();
+
+ $Input1->Reset();
+ $Input2->Reset();
+}
+
+
+sub SetPlayerNumber
+{
+ my ($player, $number) = @_;
+ my ($f);
+
+ $f = $player ? $Fighter2 : $Fighter1;
+
+ if ( $number eq 1 ) { $f->Reset('Ulmar', \@UlmarFrames,\%UlmarStates); }
+ elsif ( $number eq 2 ) { $f->Reset('UPi', \@UPiFrames,\%UPiStates); }
+ elsif ( $number eq 3 ) { $f->Reset('Zoli', \@ZoliFrames,\%ZoliStates); }
+ elsif ( $number eq 4 ) { $f->Reset('Cumi', \@CumiFrames,\%CumiStates); }
+ elsif ( $number eq 5 ) { $f->Reset('Sirpi', \@SirpiFrames,\%SirpiStates); }
+ elsif ( $number eq 6 ) { $f->Reset('Maci', \@MaciFrames,\%MaciStates); }
+ elsif ( $number eq 7 ) { $f->Reset('Bence', \@BenceFrames,\%BenceStates); }
+ elsif ( $number eq 9 ) { $f->Reset('Descant', \@DescantFrames,\%DescantStates); }
+ elsif ( $number eq 8 ) { $f->Reset('Grizli', \@GrizliFrames,\%GrizliStates); }
+ else {
+ # Fallback
+ $f->Reset('Zoli', \@ZoliFrames,\%ZoliStates);
+ }
+
+ $f->{NEXTST} = 'Stand';
+ $f->Update();
+}
+
+
+sub PlayerSelected
+{
+ my ($number) = @_;
+ my ($f) = $number ? $Fighter2 : $Fighter1;
+
+ $f->Event( 'Won' );
+ $f->Update();
+}
+
+
+
+=comment
+
+GAME BACKEND METHODS
+
+=cut
+
+sub GameStart
+{
+ my ( $MaxHP ) = @_;
+
+ $bgx = ( $SCRWIDTH2 - $BGWIDTH2) >> 1;
+ $bgy = ( $SCRHEIGHT2 - $BGHEIGHT2 ) >> 1;
+ $BgSpeed = 0;
+ $BgPosition = $BgMax >> 1;
+ $BgScrollEnabled = 1;
+ $HitPointScale = 1000 / $MaxHP;
+
+ $time = 0;
+ $Fighter1->Reset();
+ $Fighter1->{HP} = $MaxHP;
+ $Input1->Reset();
+ $Fighter2->Reset();
+ $Fighter2->{HP} = $MaxHP;
+ $Input2->Reset();
+ $over = 0;
+ $ko = 0;
+ $OverTimer = 0;
+ $JudgementMode = 0;
+
+ @Doodads = ();
+ @Sounds = ();
+
+ $p1h = $p2h = 0;
+}
+
+
+
+sub GetFighterData
+{
+ my ($fighter) = @_;
+ my ($x, $y, $fnum, $f, $hp);
+
+ $fnum = $fighter->{FR};
+ $f = $fighter->{FRAMES}->[$fnum];
+ $x = $fighter->{X} / $GAMEBITS2 + $f->{'x'};
+ $y = $fighter->{Y} / $GAMEBITS2 + $f->{'y'};
+
+ if ($fighter->{DIR}<0)
+ {
+ $fnum = -$fnum;
+ $x -= $f->{x}*2 + $f->{w};
+ }
+
+ return ($x, $y, $fnum);
+}
+
+
+
+sub GetNextDoodadData
+{
+ if ( $NextDoodad >= scalar @Doodads )
+ {
+ $doodad_x = $doodad_y = $doodad_t = $doodad_f = -1;
+ return;
+ }
+
+ my ($doodad) = $Doodads[$NextDoodad];
+ $doodad_x = $doodad->{X} / $GAMEBITS2 - $bgx;
+ $doodad_y = $doodad->{Y} / $GAMEBITS2 - $bgy;
+ $doodad_t = $doodad->{T};
+ $doodad_f = $doodad->{F};
+ $doodad_text = $doodad->{TEXT};
+ ++$NextDoodad;
+}
+
+
+
+sub UpdateDoodads
+{
+ my ($i, $j, $doodad);
+
+ for ($i=0; $i<scalar @Doodads; ++$i)
+ {
+ $doodad = $Doodads[$i];
+ $j = UpdateDoodad( $doodad );
+ if ( $j )
+ {
+ # Remove this Doodad
+ splice @Doodads, $i, 1;
+ --$i;
+ }
+ }
+}
+
+
+
+sub GetNextSoundData()
+{
+ # print "GetSoundData: ", scalar @Sounds, join ' ,', @Sounds, "\n";
+ $sound = pop @Sounds;
+ $sound = '' unless defined $sound;
+}
+
+
+
+sub DoFighterEvents
+{
+ my ($fighter, $hit) = @_;
+
+ if ( $JudgementMode )
+ {
+ if ( $fighter->{NUMBER} == $JudgementWinner )
+ {
+ $fighter->Event("Won");
+ }
+ else
+ {
+ $fighter->Event("Hurt");
+ }
+ return;
+ }
+
+ if ( $hit )
+ {
+ $fighter->Event( $fighter->{OTHER}->GetCurrentState()->{HIT}, $hit );
+ return;
+ }
+
+ if ( ($fighter->{X} - $fighter->{OTHER}->{X}) * ($fighter->{DIR}) > 0 )
+ {
+ $fighter->Event("Turn");
+ }
+ if ( $fighter->{OTHER}->{ST} eq 'Dead' )
+ {
+ $fighter->Event("Won");
+ }
+ if ( ($fighter->{IDLE} > 150) and (rand(350) < 1) )
+ {
+ $fighter->Event("Fun");
+ }
+ if ( ($fighter->{IDLE} > 150) and (rand(350) < 1) )
+ {
+ $fighter->Event("Threat");
+ }
+}
+
+
+
+sub GameAdvance
+{
+ my ($hit1, $hit2);
+
+ $time += 4/1000;
+ $NextDoodad = 0;
+ $NextSound = 0;
+
+ # 1. ADVANCE THE PLAYERS
+
+ $Input1->Advance();
+ $Input2->Advance();
+ $Fighter1->Advance( $Input1 );
+ $Fighter2->Advance( $Input2 );
+ $hit2 = $Fighter1->CheckHit();
+ $hit1 = $Fighter2->CheckHit();
+
+ # 2. Events come here
+
+ DoFighterEvents( $Fighter1, $hit1 );
+ DoFighterEvents( $Fighter2, $hit2 );
+ UpdateDoodads();
+ $Fighter1->Update();
+ $Fighter2->Update();
+
+ if ( $OverTimer == 0 and
+ ($Fighter1->{ST} eq 'Dead' or $Fighter1->{ST} eq 'Won2') and
+ ($Fighter2->{ST} eq 'Dead' or $Fighter2->{ST} eq 'Won2') )
+ {
+ $OverTimer = 1;
+ }
+ elsif ( $OverTimer > 0 )
+ {
+ $OverTimer++;
+ $over = 1 if ( $OverTimer > 200 )
+ }
+
+ # 3. DO THE BACKGROUND SCROLLING THING
+
+ if ( $BgScrollEnabled )
+ {
+ $BgOpt = ($Fighter1->{X} + $Fighter2->{X}) / 2; # 1/1 Stupid kdevelop syntax hightlight.
+ if ( ($BgOpt - $BgSpeed*50 - $BgPosition) > (320 << $GAMEBITS)) { $BgSpeed++; }
+ if ( ($BgOpt - $BgSpeed*50 - $BgPosition) < (320 << $GAMEBITS)) { $BgSpeed--; }
+
+ $BgPosition+=$BgSpeed;
+ if ($BgPosition<0) { $BgPosition = $BgSpeed = 0; }
+ if ($BgPosition>$BgMax) { $BgPosition = $BgMax; $BgSpeed = 0; }
+
+ # print "Pos:$BgPosition\tOpt:$BgOpt\tSpd:$BgSpeed\t";
+ }
+
+ # 4. SET GLOBAL VARIABLES FOR THE C++ DRAWING TO READ
+
+ ($p1x, $p1y, $p1f) = GetFighterData( $Fighter1 );
+ ($p2x, $p2y, $p2f) = GetFighterData( $Fighter2 );
+
+ $phTarget = $Fighter1->{HP}*$HitPointScale;
+ if ( $p1h < $phTarget ) { $p1h += 5; }
+ if ( $p1h > $phTarget ) { $p1h -= 3; }
+ $p1h = $phTarget if abs($p1h - $phTarget) < 3;
+ $p1h = 0 if $p1h < 0;
+
+ $phTarget = $Fighter2->{HP}*$HitPointScale;
+ if ( $p2h < $phTarget ) { $p2h += 5; }
+ if ( $p2h > $phTarget ) { $p2h -= 3; }
+ $p2h = $phTarget if abs($p2h - $phTarget) < 3;
+ $p2h = 0 if $p2h < 0;
+
+ $bgx = $BgPosition >> $GAMEBITS;
+ $p1x -= $bgx;
+ $p2x -= $bgx;
+ $bgy = 0;
+
+ $fr1 = $Fighter1->{FRAMES}->[ $Fighter1->{FR} ];
+ @p1head = @{ $fr1->{head} };
+ MirrorPolygon( \@p1head ) if $Fighter1->{DIR} < 0;
+ OffsetPolygon( \@p1head, $Fighter1->{X} / $GAMEBITS2 - $bgx, $Fighter1->{Y} / $GAMEBITS2 - $bgy );
+ @p1body = @{ $fr1->{body} };
+ MirrorPolygon( \@p1body ) if $Fighter1->{DIR} < 0;
+ OffsetPolygon( \@p1body, $Fighter1->{X} / $GAMEBITS2 - $bgx, $Fighter1->{Y} / $GAMEBITS2 - $bgy );
+ @p1legs = @{ $fr1->{legs} };
+ MirrorPolygon( \@p1legs) if $Fighter1->{DIR} < 0;
+ OffsetPolygon( \@p1legs, $Fighter1->{X} / $GAMEBITS2 - $bgx, $Fighter1->{Y} / $GAMEBITS2 - $bgy );
+ if ( defined $fr1->{hit} )
+ {
+ @p1hit = @{ $fr1->{hit} };
+ MirrorPolygon( \@p1hit ) if $Fighter1->{DIR} < 0;
+ OffsetPolygon( \@p1hit, $Fighter1->{X} / $GAMEBITS2 - $bgx, $Fighter1->{Y} / $GAMEBITS2 - $bgy );
+ }
+ else
+ {
+ undef @p1hit;
+ }
+
+ $fr2 = $Fighter2->{FRAMES}->[ $Fighter2->{FR} ];
+ @p2head = @{ $fr2->{head} };
+ MirrorPolygon( \@p2head ) if $Fighter2->{DIR} < 0;
+ OffsetPolygon( \@p2head, $Fighter2->{X} / $GAMEBITS2 - $bgx, $Fighter2->{Y} / $GAMEBITS2 - $bgy );
+ @p2body = @{ $fr2->{body} };
+ MirrorPolygon( \@p2body ) if $Fighter2->{DIR} < 0;
+ OffsetPolygon( \@p2body, $Fighter2->{X} / $GAMEBITS2 - $bgx, $Fighter2->{Y} / $GAMEBITS2 - $bgy );
+ @p2legs = @{ $fr2->{legs} };
+ MirrorPolygon( \@p2legs) if $Fighter2->{DIR} < 0;
+ OffsetPolygon( \@p2legs, $Fighter2->{X} / $GAMEBITS2 - $bgx, $Fighter2->{Y} / $GAMEBITS2 - $bgy );
+ if ( defined $fr2->{hit} )
+ {
+ @p2hit = @{ $fr2->{hit} };
+ MirrorPolygon( \@p2hit ) if $Fighter2->{DIR} < 0;
+ OffsetPolygon( \@p2hit, $Fighter2->{X} / $GAMEBITS2 - $bgx, $Fighter2->{Y} / $GAMEBITS2 - $bgy );
+ }
+ else
+ {
+ undef @p2hit;
+ }
+}
+
+
diff --git a/data/script/Bence.pl b/data/script/Bence.pl
new file mode 100644
index 0000000..b02b89b
--- /dev/null
+++ b/data/script/Bence.pl
@@ -0,0 +1,198 @@
+# package Bence;
+
+# Bence's images are scaled by a factor of ?
+
+require 'DataHelper.pl';
+require 'QuickSave.pl';
+use strict;
+
+sub LoadBence
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "BENCEDATA.DAT.pl", 420, 310 );
+%FrameLookup = CreateFrameLookup( scalar @Frames -1,
+"start", 23, "stand", 4, "walk", 12,
+"turn", 8, "falling", 18, "laying", 1,
+"getup", 12, "hurt", 8, "swept", 8,
+"won", 8, "block", 5, "kneeling", 4,
+"onknees", 4, "kneelingpunch",5,
+"fun", 5, "threat", 6,
+"highpunch", 6, "lowpunch", 5, "highkick", 7,
+"lowkick", 6, "sweep", 7, "groinkick", 6,
+"kneekick", 6, "elbow", 7, "spin", 10,
+"grenade", 11, "uppercut", 7, "throw", 22,
+"specpunch", 14, "pierce", 8,
+"highpunched", 5, "lowpunched", 6, "groinkicked", 8,
+"kneelingpunched",4, "kneelingkicked", 5, "thrown", 8,
+);
+
+
+# Bence has no kneelingkick... substitute kneelingpunch. This is for Jumping..
+for ( $st = 1; $st <= 5; ++$st ) { $FrameLookup{"kneelingkick$st"} = $FrameLookup{"kneelingpunch$st"}; }
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'hkickB'=>'Spin',
+'lkickB'=>'Sweep',
+
+'lpunchBD'=>'Grenade',
+'lpunchFBFB'=>'SpecPunch',
+'hpunchFB'=>'Pierce',
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingPunch',
+'hkick'=>'KneelingPunch',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+};
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>7, 'S'=>'+start 1-8',
+ 'DEL7'=>15, 'DEL14'=>15, },
+{ 'N'=>'Stand', 'DEL'=>7, 'S'=>'+stand,-stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'TURNN'=>1, 'DELTAXN'=>80 },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt,-hurt' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won, won 7-5, won 6-8, won 7-5', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won 5', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>8, 'S'=>'+fun,-fun', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>5, 'S'=>'+threat,-threat', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 1, 130, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch',
+ 'hpunchFF'=>'JumpFire'} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 6-n,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch,-highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT5'=>'Highhit', 'HIT6'=>'Highhit' },
+{ 'N'=>'Spin', 'DEL'=>5, 'S'=>'+spin,-spin',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Sweep', 'DEL'=>7, 'S'=>'+sweep,-sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade, grenade n-8, grenade 5-1',
+ 'DEL11'=>15, 'DOODAD11'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT5'=>'Uppercut', 'HIT6'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+
+{ 'N'=>'SpecPunch', 'DEL'=>5, 'S'=>'+specpunch, specpunch 4-13, specpunch 4-1',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Pierce', 'DEL'=>5, 'S'=>'+pierce,-pierce',
+ 'HIT'=>'Highhit' },
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'falling 1-11, falling 15-12, falling 12-n, laying 1',
+ 'MOVE'=>1,
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON8'=>{'down'=>'Onknees'},
+ 'CON8'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept,-swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'+kneelingkicked, -kneelingkicked',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'+highpunched, -highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched, -lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked, -groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 19 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 0, 0 );
+#TravelingStates( \%FrameLookup, \@Frames, \%States, "won", 0, 0 );
+
+%States = ( FindShorthands( \%States ), %States );
+
+%::BenceStates = %States;
+@::BenceFrames = @Frames;
+}
+
+LoadBence();
+# QuickSave('Bence', \@::BenceFrames, \%::BenceStates);
+
+return 1;
+
diff --git a/data/script/Collision.pl b/data/script/Collision.pl
new file mode 100644
index 0000000..e4a9014
--- /dev/null
+++ b/data/script/Collision.pl
@@ -0,0 +1,177 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+
+sub ccw # (three points) return -1, 0, or 1
+{
+ my(@points) = @_;
+ my($rv) = 0;
+ my($dx1, $dx2, $dy1, $dy2, $p0x, $p0y, $p1x, $p1y, $p2x, $p2y);
+
+ #($p0x, $p0y) = split(",", $points[0]);
+ #($p1x, $p1y) = split(",", $points[1]);
+ #($p2x, $p2y) = split(",", $points[2]);
+ ($p0x, $p0y, $p1x, $p1y, $p2x, $p2y) = @points;
+
+ $dx1 = $p1x - $p0x;
+ $dy1 = $p1y - $p0y;
+ $dx2 = $p2x - $p0x;
+ $dy2 = $p2y - $p0y;
+
+ switch:
+ {
+ $rv = 1, last if $dx1 * $dy2 > $dy1 * $dx2;
+ $rv = -1, last if $dx1 * $dy2 < $dy1 * $dx2;
+ $rv = -1, last if ($dx1 * $dx2 < 0.0) || ($dy1 * $dy2 < 0.0);
+ $rv = 1, last if ($dx1 * $dx1 + $dy1 * $dy1) < ($dx2 * $dx2 + $dy2 * $dy2);
+ }
+
+ $rv;
+}
+
+
+
+
+sub intersect
+{
+ my (@lines) = @_;
+ # @lines is l1_b, l1_e, l2_b, l2_e
+
+ &ccw( $lines[0], $lines[1], $lines[2], $lines[3], $lines[4], $lines[5] ) *
+ &ccw( $lines[0], $lines[1], $lines[2], $lines[3], $lines[6], $lines[7] ) <=0 and
+ &ccw( $lines[4], $lines[5], $lines[6], $lines[7], $lines[0], $lines[1] ) *
+ &ccw( $lines[4], $lines[5], $lines[6], $lines[7], $lines[2], $lines[3] ) <=0;
+}
+
+
+
+sub inside
+{
+ my ($px, $py, $poly) = @_;
+ my ($n) = scalar @{$poly}; # # of coordinates
+ my ($intersections, $i, $j, $x1, $y1, $x2, $y2, $dx, $dy, $m);
+
+ $intersections = 0;
+ $py += 0.5;
+ $px += 0.5;
+
+ for($i = 0; $i < $n; $i+=2)
+ {
+ $j = $i+2; # $i is the index of the startpoint, $j is the endpoint
+ $j = 0 if $i>=($n-2);
+ $x1 = $poly->[$i ] - $px;
+ $y1 = $poly->[$i+1] - $py;
+ $x2 = $poly->[$j ] - $px;
+ $y2 = $poly->[$j+1] - $py;
+
+ # Line is completely to the right of the Y axis
+ next if( ($x1>0) && ($x2>0) );
+
+ # Line doesn't intersect the X axis at all
+ next if( (($y1<=>0)==($y2<=>0)) && (($y1!=0)&&($y2!=0)) );
+
+ # Special case, if the Y on the bottom=0 ignore this
+ # intersection (otherwise line endpt counts as 2 hits, not 1)
+ if ($y2>$y1) {
+ next if $y2==0;
+ } elsif ($y1>$y2) {
+ next if $y1==0;
+ } else {
+ # Horizontal span overlaying the X axis. Consider it an
+ # intersection iff it extends to the left side of X axis
+ $intersections++ if ( ($x1 < 0) || ($x2 < 0) ) and ($y1==0);
+ next;
+ }
+
+ # We know line must intersect the X axis, so see where
+ $dx = $x2 - $x1;
+
+ # Special case.. if a vertical line, it intersects
+ unless ($dx){
+ $intersections++ if ( $y1 < 0 ) and ( $y2 > 0 );
+ $intersections++ if ( $y2 < 0 ) and ( $y1 > 0 );
+ next;
+ }
+
+ $dy = $y2 - $y1;
+ $m = $dy / $dx;
+ $b = $y2 - $m * $x2;
+ next if ( ( (0 - $b) / $m ) > 0 );
+
+ $intersections++;
+ }
+
+ # If there are an odd # of intersections to the left of the origin
+ # (the clicked-on point) then it is within the polygon
+
+ #print "inside ($px, $py), (", join(',',@{$poly}), ") = $intersections\n";
+
+ return $intersections % 2;
+}
+
+
+
+
+sub Collisions
+{
+ my ($polyref1, $polyref2) = @_;
+
+ my ($len1, $len2, $i, $j);
+ $len1 = scalar( @{$polyref1} ) ;
+ $len2 = scalar( @{$polyref2} ) ;
+
+ # print "Collisions: (", join(',',@{$polyref1}),") <=> (", join(',',@{$polyref2}), ")\n";
+
+ # Check inside
+ return 1 if inside( $polyref1->[0], $polyref1->[1], $polyref2 );
+ return 1 if inside( $polyref2->[0], $polyref2->[1], $polyref1 );
+
+ # Check intersect
+
+ for ( $i=0; $i<$len1; $i+=2 )
+ {
+ for ( $j=0; $j<$len2; $j+=2 )
+ {
+ return 1 if intersect(
+ $polyref1->[$i], $polyref1->[$i+1], $polyref1->[($i+2) % $len1], $polyref1->[($i+3) % $len1],
+ $polyref2->[$j], $polyref2->[$j+1], $polyref2->[($j+2) % $len2], $polyref2->[($j+3) % $len2] );
+ }
+ }
+
+ return 0;
+}
+
+
+return 1;
+
+=comment
+
+My 400MHz PII runs
+3000 Collisions in 7.16s
+This is ~ 419 Collision per second.
+Borderline usefulness.
+
+
+The testcode is:
+
+my ($poly1, $poly2, $poly3);
+
+$poly1 = [356,188, 378,188, 378,232, 356,233,];
+$poly2 = [333,233, 388,233, 388,360, 333,360,];
+$poly3 = [333,350, 338,350, 383,350, 388,350,411,478,323,478,];
+
+
+for ( my $i=0; $i<1000; ++$i )
+{
+ Collisions( $poly1, $poly2 );
+ Collisions( $poly1, $poly3 );
+ Collisions( $poly2, $poly3 );
+}
+
+
+print "Collisions( 1, 2): ", Collisions( $poly1, $poly2 ), "\n";
+print "Collisions( 1, 3): ", Collisions( $poly1, $poly3 ), "\n";
+print "Collisions( 2, 3): ", Collisions( $poly2, $poly3 ), "\n";
+
+=cut
diff --git a/data/script/Cumi.pl b/data/script/Cumi.pl
new file mode 100644
index 0000000..49824ee
--- /dev/null
+++ b/data/script/Cumi.pl
@@ -0,0 +1,189 @@
+# package Cumi;
+
+# Cumi's images are scaled:
+
+require 'DataHelper.pl';
+
+use strict;
+
+sub LoadCumi
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "CUMIDATA.DAT.pl", 320, 50 );
+%FrameLookup = CreateFrameLookup( scalar @Frames -1,
+"start", 18, "stand", 4, "walk", 14,
+"turn", 8, "falling", 12, "laying", 1,
+"getup", 19, "hurt", 9, "swept", 6,
+"won", 26, "block", 4, "kneeling", 4,
+"onknees", 1, "kneelingpunch",4, "kneelingkick", 5,
+"fun", 7, "threat", 6, "highpunch", 4,
+"lowpunch", 5, "highkick", 6, "lowkick", 6, "sweep", 14,
+"groinkick", 6, "kneekick", 6, "elbow", 5,
+"grenade", 7, "uppercut", 8,
+"throw", 24, "spit", 5, "highpunched", 5, "lowpunched", 5,
+"groinkicked", 17, "kneelingpunched",4, "kneelingkicked", 5,
+"thrown", 7, "baseball", 27,
+);
+
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'hkickB'=>'Spin',
+'lkickB'=>'Sweep',
+
+'lpunchBD'=>'Grenade',
+'hpunchFF'=>'Spit',
+'lkickFDB'=>'Baseball',
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingKick',
+'hkick'=>'KneelingKick',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+};
+
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>5, 'S'=>'start 1-8, start 8-1, start 9-n' },
+{ 'N'=>'Stand', 'DEL'=>7, 'S'=>'+stand,_stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'TURNN'=>1, },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt,-hurt' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won n', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>8, 'S'=>'+fun,-fun', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>5, 'S'=>'+threat,-threat', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 4, 110, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch'} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKick', 'DEL'=>5, 'S'=>'+kneelingkick,-kneelingkick', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 6-n,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch,-highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Sweep', 'DEL'=>7, 'S'=>'+sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade,-grenade',
+ 'DEL12'=>15, 'DOODAD'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+{ 'N'=>'Spit', 'DEL'=>7, 'S'=>'+spit,-spit' },
+{ 'N'=>'Baseball', 'DEL'=>6, 'S'=>'+baseball,baseball 5-1',
+ 'HIT'=>'Fall' },
+
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'+falling, laying 1',
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON8'=>{'down'=>'Onknees'},
+ 'CON8'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept,-swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'kneelingkicked 3-n, kneelingkicked n-3',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked','DEL'=>5, 'S'=>'+kneelingkicked,-kneelingkicked' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'highpunched 2-n, -highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched,-lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES: %CumiStates
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 13 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 1, 19 );
+
+
+%::CumiStates = ( FindShorthands( \%States ), %States );
+@::CumiFrames = @Frames;
+}
+
+
+LoadCumi();
+
+return 1;
+
diff --git a/data/script/Damage.pl b/data/script/Damage.pl
new file mode 100644
index 0000000..360ecaa
--- /dev/null
+++ b/data/script/Damage.pl
@@ -0,0 +1,63 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+
+=comment
+
+Damage entries are string => amount of damage associations.
+The string is a derivation of the state and optionally the
+name of the fighter. A full name takes precedence over the
+partial name.
+
+E.g. if we are looking for the damage for "Maci HighPunch",
+we first try the full name, then only "HighPunch".
+
+The public method is :
+GetDamage( fighter, state )
+
+
+=cut
+
+
+%::Damage = (
+ 'JumpKick' => 18,
+ 'JumpPunch' => 16,
+ 'KneelingPunch' => 6,
+ 'KneelingKick' => 12,
+ 'HighPunch' => 6, # 17
+ 'LowPunch' => 6, # 17
+ 'HighKick' => 15, # 7
+ 'LowKick' => 15, # 7
+ 'GroinKick' => 20, # 5
+ 'KneeKick' => 15, # 7
+ 'Elbow' => 12, # 8
+ 'Spin' => 19, # 6
+ 'Sweep' => 12, # 8
+ 'Grenade' => 15, # 7
+ 'Uppercut' => 19, # 5 + e
+ 'KneelingUppercut' => 19, # 5 + e
+ 'Throw' => 19, # 5 + e
+
+ 'ScissorKick Maci' => 18, # 5.5
+);
+
+
+sub GetDamage($$)
+{
+ my ($fighter, $state) = @_;
+ my ($state2);
+
+ return $::Damage{"$state $fighter"} if defined $::Damage{"$state $fighter"};
+
+ $state2 = substr( $state, 0, index( $state, " " ) );
+
+ return $::Damage{"$state2 $fighter"} if defined $::Damage{"$state2 $fighter"};
+ return $::Damage{"$state2"} if defined $::Damage{"$state2"};
+
+ print "Not in database: '$state $fighter' => ,\n";
+ return 10; # Fallback value...
+}
+
+
+return 1;
diff --git a/data/script/DataHelper.pl b/data/script/DataHelper.pl
new file mode 100644
index 0000000..4fe0eb6
--- /dev/null
+++ b/data/script/DataHelper.pl
@@ -0,0 +1,620 @@
+# DataHelper contains subroutines useful for loading a character's
+# frames, and creating his states.
+
+use strict;
+
+
+
+=comment
+
+
+SITUATIONS ARE:
+
+Ready, Stand, Crouch, (Midair = any + character is flying), Falling
+
+
+
+SITUATION DEPENDENT EVENTS ARE:
+
+Highhit, Uppercut, Hit, Groinhit, Leghit, Fall
+
+
+
+STANDBY EVENTS ARE:
+
+Won, Hurt, Threat, Fun, Turn
+
+
+
+
+________|___Ready___________Block___Stand___________Crouch______________Midair______Falling
+Highhit | HighPunched - HighPunched KneelingPunched (...) (...)
+Uppercut| Falling - Falling KneelingPunched (...) (...)
+Hit | LowPunched - LowPunched KneelingKicked
+Groinhit| GroinKicked - GroinKicked KneelingKicked
+Leghit | Swept - Swept KneelingKicked
+Fall | Falling - Falling KneelingPunched
+
+
+
+FRAME MEMBER DESCRIPTION IS:
+
+x int X coordinate offset of the image relative to the character's anchor.
+y int Y coordinate offset of the image relative to the character's anchor.
+w int The width of the image.
+h int The height of the image.
+head array The coordinates of a polygon marking the head within the image, relative to the anchor.
+body array The coordinates of a polygon marking the body within the image, relative to the anchor.
+legs array The coordinates of a polygon marking the legs within the image, relative to the anchor.
+hit array The coordinates of a polygon marking the hit within the image, relative to the anchor.
+
+
+STATE MEMBER DESCRIPTION IS:
+
+F int The number of the visible frame.
+SITU string The situation associated with this state (Ready, Stand, Crouch, Falling)
+DEL int The delay before moving to the next state.
+NEXTST string The name of the state which follows this state, if none of the CONs is used.
+CON hash Connections from this state. The keys are either events or keyboard input.
+HIT ? The hit delivered at the beginning of this state.
+BLOCK int If true, the character is blocking in his current state.
+MOVE int The character's anchor should continously move this much during this state.
+DELTAX int The character's anchor should immediately change by this much after this state.
+PUSHX int The character is pushed, with this much momentum upon entering this state.
+TURN int If true, the character's facing direction changes after this state.
+JUMP int The character leaps into the air, with this much initial momentum upon entering this state.
+DOODAD string A doodad is created at the beginning of this state. The string contains the doodad's type and speed.
+SOUND string The sound effect associated with this state (if any);
+HITSND string The sound effect if the HIT is successful.
+MISSSND string The sound effect if the HIT fails.
+
+
+=cut
+
+
+
+
+# Loads the frame data (x, y, w, h) from the given datafile.
+# The path to the datafile is inserted automatically. The frame data will
+# be shifted by (-PivotX,-PivotY).
+#
+# Returns an array of frame data. The first element in the array is
+# a dummy entry, the second is the first real entry. This is because
+# the first thing in the datafile is a PAL entry.
+#
+# Example: LoadFrames( "ZOLIDATA.DAT.txt" );
+sub LoadFrames ($$$)
+{
+ my ($DataName, $PivotX, $PivotY) = @_;
+ my (@Frames, $data, $frame);
+
+ open DATAFILE, "../characters/$DataName" || die ("Couldn't open ../characters/$DataName");
+ $data = '';
+ while ( read DATAFILE, $data, 16384, length($data) )
+ {
+ }
+ close DATAFILE;
+
+ print "$DataName file is ", length($data), " bytes long.\n";
+
+ # Insert a dummy first row for the palette entry
+ eval ("\@Frames = ( {}, $data);");
+ die $@ if $@;
+
+ foreach $frame (@Frames)
+ {
+ OffsetFrame( $frame, -$PivotX, -$PivotY );
+ }
+ print "$DataName loaded, ", scalar @Frames, " frames.\n";
+
+ return @Frames;
+}
+
+
+# Creates a frame lookup from a descriptor array.
+# The first parameter is the expected number of frames.
+# The descriptor array should have frame base names in even positions,
+# and lengths at odd. positions. For example:
+# ("start", 6, "stand", 4, ... )
+#
+# The routine will return a lookup which will contain the frame's logical
+# name as a key, and its physical index as a value. The logical names are
+# simply the basename plus a number. The example above would return:
+# ("start1"=>1, "start2"=>2, ..., "start6"=>6, "stand1"=>6, "stand2"=>7, ...)
+sub CreateFrameLookup
+{
+ my ($ExpectedCount, @FrameDesc) = @_;
+
+ my ($FrameName, $NumFrames);
+ my ($i, $j);
+ my (%FrameLookup);
+
+ for ( $i=0; $i<scalar @FrameDesc; $i +=2 )
+ {
+ $FrameName = $FrameDesc[$i];
+ $NumFrames = $FrameDesc[$i+1];
+
+ for ( $j = 1; $j<=$NumFrames; ++$j )
+ {
+ # print "Frame ", (scalar keys %FrameLookup) + 1, " is now called $FrameName$j\n";
+ $FrameLookup{ "$FrameName$j" } = (scalar keys %FrameLookup) + 1;
+ }
+ }
+
+ if ( $ExpectedCount != scalar keys( %FrameLookup ) )
+ {
+ die( "Expected number of frames ($ExpectedCount) doesn't equal the actual number of frames: ".
+ scalar keys(%FrameLookup) );
+ }
+
+ return %FrameLookup;
+}
+
+
+
+# Helper function. Finds the last frame with a given name in a frame
+# lookup structure. Return the index of the last frame (1-based), or
+# 0 if none with the given name were found.
+#
+# Example: If there are 6 "highpunch" frames (highpunch1 to highpunch6),
+# FindLastFrame(\%FrameLookup, "highpunch") returns 6.
+sub FindLastFrame($$) {
+ my ($FrameLookup, $FrameName) = @_;
+ my ($i) = (1);
+ while ( exists ${$FrameLookup}{"$FrameName$i"} ) { $i++; }
+ return $i-1;
+}
+
+
+
+sub OffsetPolygon($$$)
+{
+ my ($poly, $dx, $dy) = @_;
+ my ($i, $n);
+
+ $n = scalar @{$poly};
+
+ for ( $i=0; $i < $n; $i+=2 )
+ {
+ $poly->[$i] += $dx;
+ $poly->[$i+1] += $dy;
+ }
+}
+
+
+
+sub MirrorPolygon($)
+{
+ my ($poly) = @_;
+ my ($i, $n);
+
+ $n = scalar @{$poly};
+
+ for ( $i=0; $i < $n; $i+=2 )
+ {
+ $poly->[$i] = - $poly->[$i];
+ }
+}
+
+
+
+sub OffsetFrame($$$) {
+ my ($frame, $dx, $dy) = @_;
+
+ $frame->{'x'} += $dx;
+ $frame->{'y'} += $dy;
+
+ OffsetPolygon( $frame->{head}, $dx, $dy ) if defined ($frame->{head});
+ OffsetPolygon( $frame->{body}, $dx, $dy ) if defined ($frame->{body});
+ OffsetPolygon( $frame->{legs}, $dx, $dy ) if defined ($frame->{legs});
+ OffsetPolygon( $frame->{hit}, $dx, $dy ) if defined ($frame->{hit});
+}
+
+
+
+# FindLastState returns the last index of a given state.
+# For example, if Punch4 is the last in Punch, FindLastState("Punch") is 4.
+sub FindLastState($$) {
+ my ( $States, $StateName ) = @_;
+ my ( $i ) = ( 1 );
+
+ while ( exists ${$States}{ "$StateName $i" } ) { $i++; }
+ return $i-1;
+}
+
+
+# Translates an abbreviated sequence to a full sequence.
+# "-punch" is every punch frame backwards.
+# "_punch" is every punch frame except the last one backwards.
+# "+punch" is every punch frame forwards.
+sub TranslateSequence($$) {
+ my ($FrameLookup, $Sequence) = @_;
+
+ my ($pre, $frame) = $Sequence =~ /^([+-_]{0,1})(\w+)/;
+ my ($LastFrame) = (FindLastFrame( $FrameLookup, $frame ) );
+ #$LastFrame = (FindLastFrame( $FrameLookup, "$pre$frame" ) ) if $LastFrame == 0;
+ #print "Last frame of $frame is $LastFrame.\n";
+
+ return "$frame 1-$LastFrame" if ( $pre eq '+' );
+ return "$frame $LastFrame-1" if ( $pre eq '-' );
+ return "$frame " . ($LastFrame-1) . "-1" if ( $pre eq '_' );
+
+ $Sequence =~ s/\sn(-{0,1})/ $LastFrame$1/; # Replace n- with last frame
+ $Sequence =~ s/-n/-$LastFrame/; # Replace -n with last frame
+ return $Sequence;
+}
+
+
+
+sub SetStateData($$$)
+{
+ my ($state, $FrameDesc, $suffix) = @_;
+
+ $state->{DEL} = $FrameDesc->{"DEL$suffix"} if defined $FrameDesc->{"DEL$suffix"};
+ $state->{HIT} = $FrameDesc->{"HIT$suffix"} if defined $FrameDesc->{"HIT$suffix"};
+ $state->{CON} = $FrameDesc->{"CON$suffix"} if defined $FrameDesc->{"CON$suffix"};
+ $state->{BLOCK} = $FrameDesc->{"BLOCK$suffix"} if defined $FrameDesc->{"BLOCK$suffix"};
+ $state->{NEXTST} = $FrameDesc->{"NEXTST$suffix"} if defined $FrameDesc->{"NEXTST$suffix"};
+ $state->{MOVE} = $FrameDesc->{"MOVE$suffix"} if defined $FrameDesc->{"MOVE$suffix"};
+ $state->{DELTAX} = $FrameDesc->{"DELTAX$suffix"} if defined $FrameDesc->{"DELTAX$suffix"};
+ $state->{PUSHX} = $FrameDesc->{"PUSHX$suffix"} if defined $FrameDesc->{"PUSHX$suffix"};
+ $state->{TURN} = $FrameDesc->{"TURN$suffix"} if defined $FrameDesc->{"TURN$suffix"};
+ $state->{JUMP} = $FrameDesc->{"JUMP$suffix"} if defined $FrameDesc->{"JUMP$suffix"};
+ $state->{SITU} = $FrameDesc->{"SITU$suffix"} if defined $FrameDesc->{"SITU$suffix"};
+ $state->{DOODAD} = $FrameDesc->{"DOODAD$suffix"} if defined $FrameDesc->{"DOODAD$suffix"};
+ $state->{SOUND} = $FrameDesc->{"SOUND$suffix"} if defined $FrameDesc->{"SOUND$suffix"};
+}
+
+
+
+# Adds a sequence to the end of a state
+# Sequences are: e.g. "throw 10-14, throw 16, throw 14-10"
+# Each piece of the sequence will have $Delay delay.
+sub AddStates($$$) {
+ my ( $States, $Frames, $FrameDesc ) = @_;
+ my ( $StateName, $SequenceString, $LastState, $i, $sloop, $s, @Sequences );
+ my ( $from, $to, $frame, $state );
+
+ $StateName = $FrameDesc->{'N'};
+ $SequenceString = $FrameDesc->{'S'};
+ $FrameDesc->{SITU} = 'Stand' unless defined $FrameDesc->{SITU};
+ $LastState = FindLastState($States,$StateName)+1;
+
+ @Sequences = split ( /\s*,\s*/, $SequenceString );
+ for ( $sloop = 0; $sloop < scalar @Sequences; ++$sloop )
+ {
+ $s = TranslateSequence( $Frames, $Sequences[$sloop] );
+ #print "Sequence is $s\n";
+
+ if ( $s =~ /^\s*(\w+)\s+(\d+)-(\d+)\s*$/ )
+ {
+ # Sequence is '<frame> <from>-<to>'
+ $frame = $1;
+ $from = $2;
+ $to = $3;
+ }
+ elsif ( $s =~ /^\s*(\w+)\s+(\d+)\s*$/ )
+ {
+ # Sequence is '<frame> <number>'
+ $frame = $1;
+ $from = $to = $2;
+ }
+ else
+ {
+ die "Sequence '$s' incorrect.\n";
+ }
+
+ $i = $from;
+ while (1)
+ {
+ die "Error: Frame $frame$i doesn't exist.\n"
+ unless defined ${$Frames}{"$frame$i"};
+
+ $state = { 'F'=>"$frame$i" };
+ SetStateData( $state, $FrameDesc, '' );
+ SetStateData( $state, $FrameDesc, $LastState );
+ if ( ( $sloop == scalar @Sequences -1 ) and ( $i == $to ) )
+ {
+ SetStateData( $state, $FrameDesc, 'N' );
+ }
+
+ $States->{"$StateName $LastState"} = $state;
+ # print "Added state '$StateName $LastState' as frame '$frame$i', delay $Delay\n";
+
+ $LastState++;
+ if ( $from < $to )
+ {
+ $i++;
+ last if $i > $to;
+ }
+ else
+ {
+ $i--;
+ last if $i < $to;
+ }
+ }
+
+ }
+}
+
+
+sub BlockStates($$)
+{
+ my ( $frames, $del) = @_;
+ my ( $retval, $i );
+
+ $retval = { 'N'=>'Block', 'DEL'=>$del, 'S'=>'+block', "BLOCK$frames"=>1 };
+ for ($i = 1; $i <= $frames; ++$i )
+ {
+ $retval->{"NEXTST$i"} = "Block " . ($i-1);
+ $retval->{"CON$i"} = { 'block'=> "Block " . ($i+1) };
+ }
+
+ $retval->{'NEXTST1'} = 'Stand';
+ $retval->{"CON$frames"} = { 'block'=> "Block " . $frames };
+
+ return $retval;
+}
+
+
+sub KneelingStates($$$$)
+{
+ my ( $frames, $frames2, $del, $con ) = @_;
+ my ( $retval, $retval2, $i, $j );
+
+ $retval = { 'N'=>'Kneeling', 'DEL'=> $del, 'S' => '+kneeling', 'SITU'=>'Crouch' };
+ for ( $i = 1; $i <= $frames; ++$i )
+ {
+ $retval->{"NEXTST$i"} = "Kneeling " . ($i-1);
+ $retval->{"CON$i"} = { 'down' => "Kneeling " . ($i+1) };
+ }
+ $retval->{'NEXTST1'} = 'Stand';
+ $retval->{"CON$frames"} = { 'down' => "Onknees" };
+
+ $retval2 = { 'N'=>'Onknees', 'DEL'=>$del, 'S' => '+onknees,-onknees', 'SITU'=>'Crouch',
+ 'NEXTST' => "Kneeling $frames" };
+ $frames2 *= 2;
+ for ( $i = 1; $i <= $frames2; ++$i )
+ {
+ $j = ($i % $frames2) + 1;
+ $retval2->{"CON$i"} = { %{$con}, 'down'=>"Onknees $j", 'forw'=>"Onknees $j", 'back'=>"Onknees $j" };
+ }
+
+ return ($retval, $retval2);
+}
+
+
+sub JumpStates($$)
+{
+ my ( $frames, $con ) = @_;
+ my ( $kneelingframes, $onkneesframes,
+ $kickframes, $punchframes ) = (
+ FindLastFrame( $frames, 'kneeling' ),
+ FindLastFrame( $frames, 'onknees' ),
+ FindLastFrame( $frames, 'kneelingkick' ),
+ FindLastFrame( $frames, 'kneelingpunch' ) );
+ my ( $jump ) = 120;
+
+ my ( $i, $j, $statestotal, $statesdown, $statesknees, $deldown,
+ $jumpfw, $jumpbw, $flying, $flyingsequence, $jumpkick, $jumppunch );
+
+ # The jump's first part is going down on knees, second part is
+ # on knees, third part is getting up.
+
+ if ( $::DELMULTIPLIER )
+ {
+ $statestotal = $jump * 2 / 3 / $::DELMULTIPLIER; # 1/1
+ }
+ else
+ {
+ $statestotal = $jump * 2 / 3;
+ }
+ $statesdown = $statestotal / 4;
+
+ $deldown = int($statesdown / $kneelingframes + 0.1); # 1/1
+ $statesdown = $deldown * $kneelingframes;
+ $statesknees = $statestotal - $statesdown * 2;
+
+ $jump = { 'N'=>'Jump', 'DEL'=> $deldown, 'S'=>'kneeling 1-2, kneeling 1',
+ 'JUMPN'=>$jump, NEXTSTN=>'JumpFly', 'SOUND1'=>'slip4.voc', };
+ $jumpfw = { %{$jump}, 'N'=>'JumpFW', 'PUSHX3'=>18*16 };
+ $jumpbw = { %{$jump}, 'N'=>'JumpBW', 'PUSHX3'=>-9*16 };
+
+ $flyingsequence = '';
+ $flying = {};
+ for ( $i = 0; $i < $statesknees / $deldown; ++$i ) #1/1
+ {
+ $j = $i + $statesdown / $deldown; #1/1
+ $flyingsequence .= 'onknees 1,';
+ $flying->{"CON$j"} = $con;
+ # $flying->{"DEL$j"} = 1;
+ }
+ $flyingsequence = "+kneeling, $flyingsequence -kneeling";
+
+ $flying = { %{$flying}, 'N'=>'JumpFly', 'DEL'=> $deldown, 'S'=>$flyingsequence,
+ 'DELN'=>100 };
+
+ print join( ',', %{$flying}), "\n";
+
+ $jumpkick = { 'N'=>'JumpKick', 'HIT'=>'Fall',
+ 'DEL'=> int( $statestotal * 2 / 3 / ( $kickframes + $kneelingframes*2 + 3 ) ), # 1/1
+ 'S'=> '+kneelingkick,kneelingkick n, kneelingkick n, kneelingkick n,-kneelingkick,-kneeling',
+ 'HIT'=>'Fall', 'DELN'=>100 };
+
+ $jumppunch = { 'N'=>'JumpPunch', 'HIT'=>'Highhit',
+ 'DEL'=> int( $statestotal * 2 / 3 / ( $punchframes + $kneelingframes*2 + 3 ) ), # 1/1
+ 'S'=> '+kneelingpunch,kneelingpunch n, kneelingpunch n, kneelingpunch n,-kneelingpunch,-kneeling',
+ 'HIT'=>'Fall', 'DELN'=>100 };
+
+ return ($jump, $jumpfw, $jumpbw, $flying, $jumpkick, $jumppunch);
+}
+
+
+
+sub WalkingFrames($$$$$)
+{
+ my ( $frameLookup, $frameArray, $preFrames, $distance, $con ) = @_;
+
+ my ( $walkFrames, $totalFrames, $seq, $seq2, $distPerFrame,
+ $walk, $back, $walkNextst, $backNextst,
+ $i, $j, );
+
+ $totalFrames = FindLastFrame( $frameLookup, 'walk' );
+ $walkFrames = $totalFrames - $preFrames;
+
+ if ( $preFrames > 0 ) {
+ $seq = "+walk, walk $preFrames-1";
+ $seq2 = "walk 1-$preFrames, -walk";
+ } else {
+ $seq = "+walk";
+ $seq2 = "-walk";
+ }
+
+ $walk = { 'N'=>'Walk', 'S'=>$seq, 'DEL'=>5, 'CON'=>$con };
+ $back = { 'N'=>'Back', 'S'=>$seq2, 'DEL'=>5, };
+
+ # Add attributes for the 'pre' states.
+
+ for ( $i=1; $i <= $preFrames; ++$i )
+ {
+ $j = $i + 1;
+ $walk->{"CON$i"} = { %{$con}, 'forw' => "Walk $j" };
+ $walk->{"NEXTST$i"} = 'Stand';
+ $back->{"CON$i"} = { %{$con}, 'back' => "Back $j" };
+ $back->{"NEXTST$i"} = 'Stand';
+ }
+
+ # Add attributes for the 'walk' states.
+
+ $walkNextst = $preFrames ? 'Walk ' . ($totalFrames+1) : 'Stand';
+ $backNextst = $preFrames ? 'Back ' . ($totalFrames+1) : 'Stand';
+ $distPerFrame = $distance / $walkFrames; # 1/1
+
+ print "*** $preFrames $walkFrames $totalFrames $walkNextst $backNextst\n";
+
+ for ( $i=$preFrames+1; $i <= $totalFrames; ++$i )
+ {
+ $j = ($i == $totalFrames) ? $preFrames+1 : $i+1;
+ $walk->{"MOVE$i"} = 4;
+ $walk->{"NEXTST$i"} = $walkNextst;
+ $walk->{"CON$i"} = { %{$con}, 'forw' => "Walk $j" };
+ $back->{"MOVE$i"} = -4;
+ $back->{"NEXTST$i"} = $backNextst;
+ $back->{"CON$i"} = { %{$con}, 'back' => "Back $j" };
+
+ OffsetFrame( $frameArray->[$frameLookup->{"walk$i"}],
+ - ($i-$preFrames-1) * $distPerFrame, 0 );
+ }
+
+ return ( $walk, $back );
+}
+
+
+
+sub TravelingStates( $$$$$$ )
+{
+ my ( $frameLookup, $frameArray, $states, $frameName, $from, $to ) = @_;
+
+ $from = 1 unless $from;
+ $to = FindLastFrame( $frameLookup, $frameName ) unless $to;
+
+ my ( $fromIndex, $toIndex, $fromFrame, $toFrame, $fromOffset, $toOffset,
+ $deltax, $i, $state, $nextst );
+
+ # 1. Calculate the 'deltax' and 'fromOffset'.
+
+ $fromIndex = $frameLookup->{"$frameName$from"};
+ die "couldn't find frame $frameName$from" unless defined $fromIndex;
+ $toIndex = $fromIndex - $from + $to;
+
+ $fromFrame = $frameArray-> [ $fromIndex ];
+ $toFrame = $frameArray-> [ $toIndex ];
+
+ $fromOffset = $fromFrame->{x} + ($fromFrame->{w} >> 1);
+ $toOffset = $toFrame->{x} + ($toFrame->{w} >> 1);
+ $deltax = ( $toOffset - $fromOffset ) / ( $to - $from ); #1/1
+
+ # print "Offsets: $fromOffset $toOffset $deltax\n";
+
+ # 2. Offset every relevant frame.
+ for ( $i=$fromIndex; $i<=$toIndex; ++$i )
+ {
+ # print "Offsetting frame $i by ", - $fromOffset - $deltax * ($i-$fromIndex), "\n";
+ OffsetFrame( $frameArray->[$i],
+ - $fromOffset - $deltax * ($i-$fromIndex), 0 );
+ }
+
+ # 3. Apply deltax to every relevant state.
+ while ( ($i, $state) = each %{$states} )
+ {
+ if ( $state->{F} >= $fromIndex and $state->{F} <= $toIndex )
+ {
+ $nextst = $states->{$state->{NEXTST}};
+ if ( $nextst->{F} >= $fromIndex and $nextst->{F} <= $toIndex )
+ {
+ $state->{DELTAX} = $deltax * ($nextst->{F} - $state->{F});
+ # print "Fixing state $i : deltax = ", $state->{DELTAX}, "\n";
+ }
+ }
+ }
+}
+
+
+
+sub FixStates($$)
+{
+ my ( $frameLookup, $states ) = @_;
+
+ my ( $framename, $st, $lastchar, $key, $value, $nextchar, $nextst );
+
+ while (($key, $value) = each %{$states})
+ {
+ $framename = $value->{'F'};
+ unless ( $framename =~/^\d+$/ )
+ {
+ # Convert non-numeric frames to their numeric counterparts.
+ die "Can't find image $framename in frame $key" unless defined $frameLookup->{ $framename };
+ $value->{'F'} = $frameLookup->{ $framename };
+ }
+
+ ($st,$lastchar) = $key =~ /(\w+)\s+(\d+)/;
+
+ unless ( defined $value->{'NEXTST'} )
+ {
+ $nextchar = $lastchar + 1;
+ $nextst = "$st $nextchar";
+ unless ( defined $states->{$nextst} ) {
+ # print "Go to Standby after $key\n";
+ $nextst = 'Stand';
+ }
+ $value->{'NEXTST'} = $nextst;
+ }
+
+ }
+}
+
+
+sub FindShorthands($)
+{
+ my ( $states ) = @_;
+
+ my ( $key, $value, $st, $lastchar, %Shorthands );
+
+ while (($key, $value) = each %{$states})
+ {
+ ($st,$lastchar) = $key =~ /(\w+)\s+(\d+)/;
+ print "$key has no lastchar" unless defined $lastchar;
+ if ( $lastchar == 1 )
+ {
+ $Shorthands{$st} = $states->{$key};
+ }
+ }
+
+ return %Shorthands;
+}
+
+
+
+
+
+return 1;
diff --git a/data/script/Descant.pl b/data/script/Descant.pl
new file mode 100644
index 0000000..219cb55
--- /dev/null
+++ b/data/script/Descant.pl
@@ -0,0 +1,193 @@
+# package Descant;
+
+
+require 'DataHelper.pl';
+use strict;
+
+sub LoadDescant
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "DESCANTDATA.DAT.pl", 280, 200 );
+%FrameLookup = CreateFrameLookup( scalar @Frames -1,
+"start", 13, "stand", 4, "walk", 10,
+"turn", 9, "falling", 16, "laying", 1,
+"getup", 15, "hurt", 7, "swept", 10,
+"won", 20, "block", 5, "kneeling", 4,
+"onknees", 4, "kneelingpunch",5, "kneelingkick", 5,
+"fun", 13, "threat", 7,
+"highpunch", 5, "lowpunch", 6, "highkick", 7,
+"lowkick", 6, "sweep", 11, "groinkick", 6,
+"kneekick", 6, "elbow", 5,
+"grenade", 10, "uppercut", 7, "throw", 23,
+"highpunched", 5, "lowpunched", 6, "groinkicked", 9,
+"kneelingpunched",5, "kneelingkicked", 5, "thrown", 8,
+"knife", 17, "specpunch", 19, "hipshot", 9,
+"funb", 11,
+);
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'lkickB'=>'Sweep',
+
+'lpunchBD'=>'Grenade',
+'hpunchDF'=>'Knife',
+'hpunchFF'=>'SpecPunch',
+'lpunchBB'=>'HipShot',
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingKick',
+'hkick'=>'KneelingKick',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+};
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>7, 'S'=>'+start' },
+{ 'N'=>'Stand', 'DEL'=>10, 'S'=>'+stand,_stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'TURNN'=>1, },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt, -hurt' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won n', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>10, 'S'=>'+fun', 'CON'=>$Con },
+{ 'N'=>'Funb', 'DEL'=>8, 'S'=>'+funb,-funb', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>7, 'S'=>'+threat,-threat', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 1, 100, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch',
+ 'hpunchFF'=>'JumpFire'} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>7, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKick', 'DEL'=>7, 'S'=>'+kneelingkick,-kneelingkick', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 6-n,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch,-highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Sweep', 'DEL'=>8, 'S'=>'+sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade,_grenade',
+ 'DEL12'=>15, 'DOODAD'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+{ 'N'=>'Knife', 'DEL'=>7, 'S'=>'+knife' },
+{ 'N'=>'SpecPunch', 'DEL'=>7, 'S'=>'+specpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'HipShot', 'DEL'=>7, 'S'=>'+hipshot, -hipshot',
+ 'DOODAD9'=>$Doodad },
+
+
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'+falling, laying 1',
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON8'=>{'down'=>'Onknees'},
+ 'CON9'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>7, 'S'=>'+swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'+kneelingkicked, -kneelingkicked',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'+highpunched, -highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched, -lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked, -groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 17 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 0, 0 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "swept", 0, 0 );
+
+%States = ( FindShorthands( \%States ), %States );
+
+%::DescantStates = %States;
+@::DescantFrames = @Frames;
+}
+
+LoadDescant();
+
+return 1;
+
diff --git a/data/script/Doodad.pl b/data/script/Doodad.pl
new file mode 100644
index 0000000..4703c75
--- /dev/null
+++ b/data/script/Doodad.pl
@@ -0,0 +1,204 @@
+=comment
+
+Doodad members are:
+
+POS (int,int) The Doodad's logical position.
+SIZE (int,int) The Doodad's physical size.
+SPEED (int,int) The Doodad's logical speed.
+ACCEL (int,int) The Doodad's logical acceleration.
+T int The Doodad's type. 0 means text.
+F int The Doodad's frame.
+OWNER int The Doodad's owner (0 for player 1, 1 for player 2, other means no owner)
+GFXOWNER int The Doodad's graphics owner (0 for player 1, 1 for player 2, other means global)
+SA int Animation speed
+FRAMES int The number of frames.
+LIFETIME int The amount of time before this doodad dies. -1 means infinite.
+TEXT string The text displayed in a text doodad.
+HOSTILE int 1 if the doodad can collision with players and damage them.
+
+
+
+Doodad types are:
+0 Text
+1 Zoli's shot
+
+
+=cut
+
+
+use strict;
+
+require 'Collision.pl';
+
+
+%::DoodadDefinitions = (
+'ZoliShot' => {
+ 'W' => 64, 'H' => 64, 'T' => 1,
+ 'SX' => 48, 'SY' => -5, 'AX' => 0, 'AY' => 1,
+ 'SA' => 1/25, 'FRAMES'=>6, 'HOSTILE'=> 1, },
+
+'UPiShot' => {
+ 'W' =>170, 'H' => 22, 'T' => 2,
+ 'SX' => 48, 'SY' => 0, 'AX' => 0, 'AY' => 0,
+ 'SA' => 1/10, 'FRAMES'=>5, 'HOSTILE'=> 1, },
+
+'Explosion' => {
+ 'W' => 58, 'H' => 80, 'T' => 3,
+ 'SX' => 0, 'SY' => 0, 'AX' => 0, 'AY' => 0,
+ 'SA' => 1/10, 'FRAMES'=>15, 'HOSTILE'=> 0, },
+);
+
+
+=comment
+
+CreateDoodad creates a new doodad, and appends it to the global doodad list,
+@Doodads. The parameters are:
+ x int The logical horizontal position of the center of the doodad
+ y int The logical vertical position of the center of the doodad
+ t string The type of the doodad (doodad types are described above)
+ owner int The number of the player who 'owns' the doodad (0 or 1, anything else means no owner)
+
+=cut
+
+sub CreateDoodad($$$$)
+{
+ my ($x, $y, $t, $owner) = @_;
+ my ($doodad, $doodaddef, $w, $h);
+
+ $doodaddef = $::DoodadDefinitions{$t};
+ if ( defined $doodaddef )
+ {
+ $w = $doodaddef->{W};
+ $h = $doodaddef->{H};
+ $t = $doodaddef->{T};
+ }
+ else
+ {
+ $w = $h = $t = 0;
+ $doodaddef = {};
+ }
+
+ $doodad = {
+ 'X' => $x - $w * $::GAMEBITS2 / 2, #1/1
+ 'Y' => $y - $h * $::GAMEBITS2 / 2, #1/1
+ 'W' => $w,
+ 'H' => $h,
+ 'T' => $t,
+ 'F' => 0,
+ 'OWNER' => $owner,
+ 'SX' => 0,
+ 'SY' => 0,
+ 'SA' => 0,
+ 'FRAMES'=> 0,
+ 'LIFETIME'=> -1,
+ 'HOSTILE'=> 1,
+ %{$doodaddef}
+ };
+
+ push @::Doodads, ($doodad);
+ return $doodad;
+}
+
+
+sub CreateTextDoodad
+{
+ my ($x, $y, $owner, $text) = @_;
+ my ($self);
+ $self = CreateDoodad($x, $y, 0, $owner);
+ $self->{'TEXT'} = $text;
+ return $self;
+}
+
+
+
+=comment
+UpdateDoodad is called once every game tick.
+
+It should return 0 if the doodad is still active.
+If UpdateDoodad returns nonzero, it will be removed in this tick and
+deleted.
+=cut
+
+sub UpdateDoodad
+{
+ my ($doodad) = @_;
+
+ if ( $doodad->{LIFETIME} >= 0 )
+ {
+ $doodad->{LIFETIME} -= 1;
+ if ( $doodad->{LIFETIME} < 0 )
+ {
+ # Doodad dies.
+ return 1;
+ }
+ }
+
+ $doodad->{X} += $doodad->{SX};
+ $doodad->{Y} += $doodad->{SY};
+ $doodad->{F} += $doodad->{SA};
+
+ while ( $doodad->{F} > $doodad->{FRAMES} )
+ {
+ $doodad->{F} -= $doodad->{FRAMES};
+ }
+
+ if ( $doodad->{X} > $::BGWIDTH2 ) { return 1; }
+ if ( $doodad->{X} < $doodad->{W} * $::GAMEBITS2 ) { return 1; }
+ if ( $doodad->{Y} > $::SCRHEIGHT2 ) { return 1; }
+ if ( $doodad->{Y} < $doodad->{H} * $::GAMEBITS2 ) { return 1; }
+
+ if ( $doodad->{HOSTILE} )
+ {
+ # CheckHit($doodad);
+ }
+
+ return 0;
+}
+
+
+=comment
+sub CheckHit($)
+{
+ my ( $self ) = @_;
+
+ my ( @poly, $x, $y, $w, $h );
+ $x = $self->{X} / $::GAMEBITS2;
+ $y = $self->{Y} / $::GAMEBITS2;
+ $w = $self->{W};
+ $h = $self->{H};
+
+ @poly = (
+ $x, $y,
+ $x+$w, $y,
+ $x+$w, $y+$h,
+ $x, $y+$h );
+
+ if ( $self->{OWNER} != 0 )
+ {
+ if ( $::Fighter1->IsHitAt( \@poly ) )
+ {
+ DoHitPlayer($self, $::Fighter1);
+ }
+ }
+
+ if ( $self->{OWNER} != 1 )
+ {
+ if ( $::Fighter2->IsHitAt( \@poly ) )
+ {
+ DoHitPlayer($self, $::Fighter2);
+ }
+ }
+
+}
+
+
+sub DoHitPlayer($$)
+{
+ my ($self,$player) = @_;
+
+ $player->
+}
+=cut
+
+return 1;
+
diff --git a/data/script/Fighter.pl b/data/script/Fighter.pl
new file mode 100644
index 0000000..2b5ec49
--- /dev/null
+++ b/data/script/Fighter.pl
@@ -0,0 +1,702 @@
+require 'Collision.pl';
+require 'DataHelper.pl';
+require 'Damage.pl';
+
+
+package Fighter;
+
+
+
+use strict;
+
+=comment
+
+Fighter's members are:
+
+NAME string The name of the character, e.g. "Ulmar".
+FRAMES array The character's frame description.
+STATES hash The character's state description.
+NUMBER int Player number (either 0 or 1)
+X int The fighter's current anchor, horizontal coordinate.
+Y int The fighter's current anchor, vertical coordinate.
+ST string The name of the fighter's current state.
+FR int The number of the fighter's current frame (same as STATES->{ST}->{F}).
+DEL int The amount of time before the character moves to the next state.
+NEXTST string The name of the next state after this one (calculated by Advance and Event, user by Update).
+DIR int -1: the character is facing left; 1: if the character is facing right.
+PUSHY int The character's vertical momentum, from jumping/hits.
+PUSHX int The character's horizontal momentum, from hits.
+HP int Hit points, from 100 down to 0.
+IDLE int The amount of game time since the player is ready.
+CHECKEHIT int 1 if the hit needs to be checked soon.
+DELIVERED int 1 if a hit was delivered in this state.
+COMBO int The number of consecutive hits delivered to this fighter.
+COMBOHP int The amount of HP delivered in the last combo.
+OTHER hash A reference to the other Fighter
+
+
+
+new
+Reset
+Advance
+CheckHit
+IsHitAt
+Event
+Update
+
+
+
+Needs to be subclassed: Reset, NextState
+
+=cut
+
+
+
+
+sub new {
+ my ($class) = @_;
+
+ my $self = {
+ 'NUMBER'=> 0,
+ 'ST' => 'Start',
+ 'FR' => 0,
+ 'DEL' => 0,
+ 'DIR' => 1,
+ 'PUSHY' => 0,
+ 'PUSHX' => 0,
+ };
+
+ bless $self, $class;
+ return $self;
+}
+
+sub Reset {
+ my ($self, $name, $frames, $states) = @_;
+
+ die "Insufficient parameters." unless defined $self;# and defined $frames and defined $states;
+
+ my ($number);
+ $number = $self->{NUMBER};
+
+ print STDERR "Resetting fighter $number\n";
+
+ $self->{NAME} = $name if defined $name;
+ $self->{FRAMES} = $frames if defined $frames;
+ $self->{STATES} = $states if defined $states;
+ $self->{X} = (( $number ? 540 : 100 ) << $::GAMEBITS) + $::BgPosition;
+ $self->{Y} = $::GROUND2;
+ $self->{ST} = 'Start';
+ $self->{FR} = $self->GetCurrentState()->{F};
+ $self->{DEL} = 0;
+ $self->{DIR} = ($number ? -1 : 1);
+ $self->{PUSHY} = 0;
+ $self->{PUSHX} = 0;
+ $self->{HP} = 100;
+ $self->{IDLE} = 0;
+ $self->{CHECKHIT} = 0;
+ $self->{DELIVERED} = 0;
+ $self->{COMBO} = 0;
+ $self->{COMBOHP}= 0;
+}
+
+
+
+=comment
+
+Advance should be called once every game tick. It advances the fighter,
+preparing his variables for drawing him in the next tick. Advance also
+processes the input if it is appropriate to do so in the current state.
+
+Advance prepares the NEXTST attribute of the player. It does not modify
+the current ST yet, because that may depend on hits, event, etc. Advance
+should be followed by CheckHit and Event calls, and finally Update.
+
+=cut
+
+sub Advance {
+ my ($self, $in) = @_;
+
+ my ($stname, # The name of the current state.
+ $st, # The descriptor of the current state.
+ $move, # The move associated with the current state.
+ $i, $j, # temp var.
+ @body ); # collision detection
+
+ $self->{NEXTST} = '';
+ $stname = $self->{ST};
+
+ $st = $self->{'STATES'}->{$stname};
+
+ # 1. DECREMENT 'DEL' PROPERTY
+
+ $self->{'DEL'}--;
+ if ( $st->{SITU} eq 'Ready' )
+ {
+ $self->{IDLE} = $self->{IDLE} + 1;
+ }
+ else
+ {
+ $self->{IDLE} = 0;
+ }
+
+ # 2. UPDATE THE HORIZONTAL POSITION
+
+ # 2.1. 'MOVE' PLAYER IF NECESSARY
+
+ if ( defined $st->{'MOVE'} )
+ {
+ $move = $st->{'MOVE'}*$self->{'DIR'} * 6;
+ $self->{'X'} += $move;
+ }
+
+ # 2.2. 'PUSH' PLAYER IF NECESSARY
+
+ if ( $self->{PUSHX} )
+ {
+ $i = ($self->{PUSHX}+7) / 8; # 1/1; syntax highlight..
+ $self->{X} += $i;
+ $self->{PUSHX} -= $i if $self->{PUSHY} == 0;
+ }
+
+ # 2.3. MAKE SURE THE TWO FIGHTERS DON'T "WALK" INTO EACH OTHER
+
+ if ( $self->{Y} >= $::GROUND2 and
+ $self->{OTHER}->{Y} >= $::GROUND2 )
+ {
+ my ( $centerX, $centerOtherX, $pushDir );
+ $centerX = $self->GetCenterX;
+ $centerOtherX = $self->{OTHER}->GetCenterX;
+
+ if ( abs($centerX - $centerOtherX) < 60 )
+ {
+ $pushDir = ($centerX > $centerOtherX) ? 1 : -1;
+ $self->{X} += 10 * $pushDir;
+ $self->{OTHER}->{X} -= 10 * $pushDir;
+ }
+ }
+
+
+ # 2.4. HORIZONTAL BOUNDS CHECKING
+
+ $self->{X} = $::BgPosition + $::MOVEMARGIN2
+ if $self->{X} < $::BgPosition + $::MOVEMARGIN2;
+ $self->{X} = $::BgPosition + $::SCRWIDTH2 - $::MOVEMARGIN2
+ if $self->{X} > $::BgPosition + $::SCRWIDTH2 - $::MOVEMARGIN2;
+
+ # 3. FLYING OR FALLING
+
+ if ( $self->{Y} < $::GROUND2 )
+ {
+ $self->{PUSHY} += 3;
+ $self->{Y} += $self->{PUSHY};
+
+ if ($self->{Y} >= $::GROUND2)
+ {
+ # LANDING
+ if ( $st->{SITU} eq 'Falling')
+ {
+ push @::Sounds, ('splat.wav') if $self->{PUSHY} > 40;
+ # print "PUSHY = ", $self->{PUSHY}, "; ";
+ if ( $self->{PUSHY} > 30 )
+ {
+ # Bouncing after a fall
+ $self->{PUSHY} = - $self->{PUSHY} / 2; # 1/1
+ $self->{Y} = $::GROUND2 - 1;
+ }
+ else
+ {
+ # Getting up after a fall.
+ $self->{PUSHY} = 0;
+ $self->{Y} = $::GROUND2;
+ $self->{DEL} = 0;
+ $self->{NEXTST} = 'Getup';
+ $self->{NEXTST} = 'Dead' if $self->{HP} <= 0;
+ }
+ return;
+ }
+ else
+ {
+ push @::Sounds, ('thump.wav');
+ $self->{PUSHY} = 0;
+ $self->{Y} = $::GROUND2;
+ if ( substr($self->{ST},0,4) eq 'Jump' )
+ {
+ # Landing after a jump
+ $self->{DEL} = 0;
+ $self->{NEXTST} = 'Stand';
+ }
+ else
+ {
+ print "Landed; state: ", $self->{ST}, "\n";
+ }
+ return;
+ }
+ }
+ }
+
+ return if $self->{'DEL'} > 0;
+
+ # 4. DELAYING OVER. MAKE END-OF-STATE CHANGES.
+
+ # 4.1. 'DELTAX' displacement if so specified
+
+ if ($st->{DELTAX})
+ {
+ $self->{X} += $st->{DELTAX} * $self->{DIR} * $::GAMEBITS2;
+ }
+
+ # 4.2. 'TURN' if so specified
+
+ if ($st->{TURN})
+ {
+ $self->{DIR} = - $self->{DIR};
+
+ # Swap input keys..
+ $i = $in->{Keys}->[2];
+ $in->{Keys}->[2] = $in->{Keys}->[3];
+ $in->{Keys}->[3] = $i;
+ }
+
+ # 5. CALCULATE THE NEXT STATE
+
+ my ($nextst, $con, $input, $mod, $action, $dist);
+
+ $nextst = $st->{NEXTST};
+ $con = $st->{CON};
+ $dist = ($self->{OTHER}->{X} - $self->{X}) * $self->{DIR};
+
+ if ( defined $con )
+ {
+ $self->ComboEnds();
+
+ # 5.1. The current state has connections!
+
+ ($input,$mod) = $in->GetAction();
+ $mod = '' unless defined $mod;
+ $action = $input;
+
+ # Try to find the best matching connection.
+ for ( $i = length($mod); $i>=0; --$i )
+ {
+ $action = $input . substr( $mod, 0, $i );
+ last if defined $con->{$action};
+ }
+
+ if ( defined $con->{$action} )
+ {
+ # print "dist = $dist. ";
+ if ( ($action eq 'hpunch' or $action eq 'lpunch') and ($dist>=0) and ($dist<800) )
+ {
+ $action = 'hpunchF' if defined $con->{'hpunchF'};
+ }
+ elsif ( ($action eq 'hkick' or $action eq 'lkick') and ($dist>=0) and ($dist<900) )
+ {
+ $action = 'lkickF' if defined $con->{'lkickF'};
+ }
+ $nextst = $con->{$action};
+ $in->ActionAccepted;
+ }
+ }
+
+ $self->{'NEXTST'} = $nextst;
+}
+
+
+
+
+sub CheckHit
+{
+ my ($self) = @_;
+
+ return 0 unless $self->{CHECKHIT};
+ $self->{CHECKHIT} = 0;
+
+ my ($st, # A reference to the next state.
+ $nextst, # The name of the next state.
+ @hit, # The hit array
+ $i,
+ );
+
+ $st = $self->{STATES}->{$self->{ST}};
+
+ return 0 unless $st->{HIT};
+ return 0 unless defined $self->{FRAMES}->[$st->{F}]->{hit};
+
+ @hit = @{$self->{FRAMES}->[$st->{F}]->{hit}};
+ if ( $self->{DIR}<0 )
+ {
+ ::MirrorPolygon( \@hit );
+ }
+ ::OffsetPolygon( \@hit,
+ $self->{X} / $::GAMEBITS2,
+ $self->{Y} / $::GAMEBITS2 );
+
+ $i = $self->{OTHER}->IsHitAt( \@hit );
+ $self->{DELIVERED} = 1 if $i;
+ print "Collision = $i; ";
+
+ if ( $i == 0 )
+ {
+ # Make the 'Woosh' sound - maybe.
+ $nextst = $st->{NEXTST};
+ print "NEXTST = $nextst";
+ $nextst = $self->{STATES}->{$nextst};
+ print "NEXTST->HIT = ", $nextst->{HIT}, "\n";
+ push @::Sounds, ('woosh.wav') unless $nextst->{HIT} and defined $self->{FRAMES}->[$nextst->{F}]->{hit};
+ }
+
+ return $i;
+}
+
+
+
+
+sub IsHitAt
+{
+ my ($self, $poly) = @_;
+
+ my ($frame, @a);
+ $frame = $self->{FRAMES}->[$self->{FR}];
+
+ ::OffsetPolygon( $poly, -$self->{X} / $::GAMEBITS2, -$self->{Y} / $::GAMEBITS2 );
+ if ( $self->{DIR}<0 )
+ {
+ ::MirrorPolygon( $poly );
+ }
+
+# print "IsHitAt (", join(',',@{$poly}),")\n (",
+# join(',',@{$frame->{head}}),")\n (",
+# join(',',@{$frame->{body}}),")\n (",
+# join(',',@{$frame->{legs}}),")\n";
+
+ return 1 if ::Collisions( $poly, $frame->{head} );
+ return 2 if ::Collisions( $poly, $frame->{body} );
+ return 3 if ::Collisions( $poly, $frame->{legs} );
+ return 0;
+}
+
+
+
+
+sub Event($$$)
+{
+ my ($self, $event, $eventpar) = @_;
+
+ my ($st, $damage);
+
+ $st = $self->GetCurrentState();
+
+ if ( ($st->{SITU} eq 'Ready' or $st->{SITU} eq 'Stand') and $event eq 'Won' )
+ {
+ $self->{NEXTST} = 'Won' unless substr($self->{ST}, 0, 3) eq 'Won' ;
+ return;
+ }
+
+ if ( $st->{SITU} eq 'Ready' and $self->{NEXTST} eq '' )
+ {
+ if ( $event =~ /Hurt|Threat|Fun|Turn/ )
+ {
+ if ( $event eq 'Fun' and defined $self->{STATES}->{'Funb'} and rand() < 0.5 )
+ {
+ $event = 'Funb';
+ }
+ $self->{NEXTST} = $event;
+ return;
+ }
+ }
+
+ if ( $event =~/Won|Hurt|Threat|Fun|Turn/ )
+ {
+ return;
+ }
+
+ $eventpar = '' unless defined $eventpar;
+ $damage = ::GetDamage( $self->{OTHER}->{NAME}, $self->{OTHER}->{ST} );
+ print "Event '$event', '$eventpar'\n";
+ print "Blocked.\n" if ( $st->{BLOCK} );
+
+ # Do events: Highhit, Uppercut, Hit, Groinhit, Leghit, Fall
+
+ # Hit point adjustment here.
+
+ $self->{HP} -= $st->{BLOCK} ? $damage >> 3 : $damage;
+
+ # Turn if we must.
+
+ if ( ($self->{X} - $self->{OTHER}->{X}) * ($self->{DIR}) > 0 )
+ {
+ $self->{DIR} = - $self->{DIR};
+ }
+
+ # Handle the unfortunate event of the player "dying".
+
+ if ( $self->{HP} <= 0 )
+ {
+ push @::Sounds, ('bowling.voc');
+ $self->{NEXTST} = 'Falling';
+ $self->{PUSHX} = -20 * 3 * $self->{DIR};
+ $self->{PUSHY} = -80;
+ $self->{Y} -= 10;
+ $self->{COMBO} += 1;
+ $self->{COMBOHP} += $damage;
+ $self->ComboEnds();
+ $::ko = 1;
+ return;
+ }
+
+ # Handle blocked attacks.
+
+ if ( $st->{BLOCK} )
+ {
+ push @::Sounds, ('thump.wav');
+ $self->{PUSHX} = - $damage * 5 * $self->{DIR};
+ return;
+ }
+
+ # Handle the rest of the events.
+
+ if ( $event eq 'Uppercut' ) { push @::Sounds, ('evil_laughter.voc'); }
+ elsif ($event eq 'Groinhit') { push @::Sounds, ('woman_screams.voc'); }
+ { push @::Sounds, ('thump3.voc'); }
+
+ $self->{COMBO} += 1;
+ $self->{COMBOHP} += $damage;
+ $damage *= $self->{COMBO};
+
+ if ( $st->{SITU} eq 'Crouch' )
+ {
+ if ( $event eq 'Uppercut' or $event eq 'Fall' )
+ {
+ $self->{NEXTST} = 'Falling';
+ $self->{PUSHX} = -48 * 3 * $self->{DIR};
+ $self->{PUSHY} = -100;
+ $self->{Y} -= 10;
+ }
+ else
+ {
+ if ($eventpar == 1) {
+ $self->{NEXTST} = 'KneelingPunched';
+ } else {
+ $self->{NEXTST} = 'KneelingKicked';
+ }
+ $self->{PUSHX} = - $damage * 20 * $self->{DIR};
+ }
+ return;
+ }
+
+ if ( $st->{SITU} eq 'Falling' )
+ {
+ $self->{PUSHY} -= 50;
+ $self->{PUSHY} = -80 if $self->{PUSHY} > -80;
+ $self->{Y} -= 10;
+ return;
+ }
+
+ if ( $self->{Y} < $::GROUND2 )
+ {
+ $self->{NEXTST} = 'Falling';
+ $self->{PUSHY} -= 50;
+ $self->{PUSHX} = -48 * 3 * $self->{DIR};
+ return;
+ }
+
+ if ( $event eq 'Highhit' )
+ {
+ $self->{NEXTST} = 'HighPunched';
+ $self->{PUSHX} = - $damage * 20 * $self->{DIR};
+ }
+ elsif ( $event eq 'Hit' )
+ {
+ if ($eventpar == 1) {
+ $self->{NEXTST} = 'HighPunched';
+ } elsif ($eventpar == 2) {
+ $self->{NEXTST} = 'LowPunched';
+ } else {
+ $self->{NEXTST} = 'Swept';
+ }
+ $self->{PUSHX} = - $damage * 20 * $self->{DIR};
+ }
+ elsif ( $event eq 'Groinhit' )
+ {
+ $self->{NEXTST} = 'GroinKicked';
+ $self->{PUSHX} = - $damage * 20 * $self->{DIR};
+ }
+ elsif ( $event eq 'Leghit' )
+ {
+ $self->{NEXTST} = 'Swept';
+ $self->{PUSHX} = - $damage * 20 * $self->{DIR};
+ }
+ elsif ( $event eq 'Uppercut' or $event eq 'Fall' )
+ {
+ $self->{NEXTST} = 'Falling';
+ $self->{PUSHX} = -48 * 3 * $self->{DIR};
+ $self->{PUSHY} = -100;
+ $self->{Y} -= 10;
+ }
+ else
+ {
+ die "Unknown event: $event, $eventpar";
+ }
+}
+
+
+
+
+sub GetCurrentState
+{
+ my ($self, $statename) = @_;
+ my ($stateref);
+
+ die unless defined $self;
+
+ $statename = $self->{ST} unless defined $statename;
+ $stateref = $self->{STATES}->{$statename};
+ return $stateref;
+}
+
+
+sub ComboEnds
+{
+ my ($self) = @_;
+
+ if ($self->{COMBO})
+ {
+ if ( $self->{COMBO} > 1 )
+ {
+ my ( $head, $doodad, $x, $y );
+ $head = $self->{FRAMES}->[$self->{FR}]->{head};
+ $x = $self->{X} + $head->[0] * $::GAMEBITS2 * $self->{DIR};
+ $y = $self->{Y} + $head->[1] * $::GAMEBITS2;
+ $doodad = ::CreateTextDoodad( $x, $y - 30 * $::GAMEBITS2,
+ $self->{NUMBER},
+ $self->{COMBO} . "-hit combo!" );
+ $doodad->{LIFETIME} = 80;
+ $doodad->{SY} = -3;
+ $doodad->{SX} = -3;
+
+ $doodad = ::CreateTextDoodad( $x, $y - 10 * $::GAMEBITS2,
+ $self->{NUMBER},
+ int($self->{COMBOHP}*$::HitPointScale/10) . "% damage" );
+ $doodad->{LIFETIME} = 80;
+ $doodad->{SY} = -3;
+ $doodad->{SX} = +3;
+
+ print $self->{COMBO}, "-hit combo for ", $self->{COMBOHP}, " damage.\n";
+
+ push @::Sounds, ('ba_gooock.voc');
+ }
+
+ $self->{COMBO} = 0;
+ $self->{COMBOHP} = 0;
+ }
+}
+
+
+=comment
+
+Update moves the fighter to his next state, if there is a NEXTST set.
+NEXTST should be calculated before calling this method. No further
+branching or CON checking is done.
+
+If the next state has JUMP, the character is set aflying.
+
+=cut
+
+sub Update
+{
+ my ($self) = @_;
+
+ my ($nextst, # The name of the next state
+ $st); # The descriptor of the next state.
+
+ # Is there a next state defined?
+ $nextst = $self->{'NEXTST'};
+ # If there isn't, no updating is necessary.
+ return unless $nextst;
+
+ # ADMINISTER THE MOVING TO THE NEXT STATE
+
+ $st = $self->GetCurrentState( $nextst );
+ $self->{'ST'} = $nextst;
+ $self->{'FR'} = $st->{'F'};
+die "ERROR IN STATE $nextst" unless defined $st->{DEL};
+ $self->{'DEL'} = $st->{'DEL'} * $::DELMULTIPLIER;
+
+ # HANDLE THE JUMP and PUSH ATTRIBUTE
+
+ if ( defined ($st->{'JUMP'}) )
+ {
+ $self->{'PUSHY'} = -($st->{'JUMP'});
+ $self->{'Y'} += $self->{'PUSHY'};
+ }
+ if ( defined ($st->{'PUSHX'}) )
+ {
+ $self->{'PUSHX'} += $st->{'PUSHX'} * $self->{DIR};
+ }
+
+ # HANDLE THE HIT ATTRIBUTE
+
+ if ( defined ($st->{HIT}) )
+ {
+ $self->{CHECKHIT} = 1 unless $self->{DELIVERED};
+ }
+ else
+ {
+ $self->{DELIVERED} = 0;
+ }
+
+ # HANDLE THE SOUND ATTRIBUTE
+
+ if ( defined $st->{SOUND} )
+ {
+ push @::Sounds, ($st->{SOUND});
+ }
+
+ # HANDLE DOODADS
+
+ if ( defined ($st->{DOODAD}) )
+ {
+ # Create a doodad (probably a shot)
+ my ($frame, $hit, $doodad, $ddata);
+
+ $frame = $self->{FRAMES}->[$self->{FR}];
+ $hit = $frame->{hit};
+ if ( defined $hit )
+ {
+ $ddata = $st->{DOODAD};
+
+ $doodad = ::CreateDoodad(
+ $self->{X} + $hit->[0] * $::GAMEBITS2 * $self->{DIR},
+ $self->{Y} + $hit->[1] * $::GAMEBITS2,
+ $ddata->{W},
+ $ddata->{H},
+ $ddata->{T},
+ $self->{NUMBER} );
+ $doodad->{SX} = $ddata->{SX} * $self->{DIR};
+ $doodad->{SY} = $ddata->{SY} * $self->{DIR};
+ $doodad->{FRAMES} = $ddata->{FRAMES};
+ $doodad->{SA} = $ddata->{SA};
+ }
+ }
+
+}
+
+
+=comment
+Returns the characters 'centerline' in physical coordinates.
+=cut
+
+sub GetCenterX
+{
+ my ($self) = @_;
+ my ($body, $x);
+
+ $body = $self->{FRAMES}->[$self->{FR}]->{body};
+ $x = $body->[0] + $body->[2] + $body->[4] + $body->[6];
+ return $self->{X} / $::GAMEBITS2 + $x / 4 * $self->{DIR};
+}
+
+
+
+return 1;
+
diff --git a/data/script/FighterStats.pl b/data/script/FighterStats.pl
new file mode 100644
index 0000000..b5d84af
--- /dev/null
+++ b/data/script/FighterStats.pl
@@ -0,0 +1,303 @@
+use strict;
+
+=comment
+
+FIGHTER STATS ARE:
+
+NAME string
+TEAM string
+STYLE string
+AGE string
+WEIGHT string
+HEIGHT string
+SHOE string
+STORY string
+
+=cut
+
+
+@::FighterStats = (
+{}, # Dummy UNKNOWN fighter entry..
+
+{ 'NAME' =>'Watasiwa baka janajo',
+ 'TEAM' =>'Evil',
+ 'STYLE' =>'Clown-fu',
+ 'AGE' =>'15',
+ 'WEIGHT'=>'50kg',
+ 'HEIGHT'=>'168cm',
+ 'SHOE' =>'51',
+ 'STORY' =>
+'After Wastasiwa baka janajo took possession of his time\'s most advanced
+technogadget (read: by accident he was punched so hard that he flew fight into
+a high-tech lab, and got tangled with the WrISt(tm)),
+
+he used all his knowledge to travel to the past (read: he started mashing the buttons, and
+this is how it ended).
+
+Then he knew immediately that he had to destroy
+Saturday! (Read: He has absolutely no idea where he is, or what he is doing...)',
+ 'KEYS' =>
+'Back HPunch - Spinning headbutt
+Down Back LPunch - WrISt shot
+Forward Back Forward LPunch - WrISt mash',
+ },
+
+{ 'NAME' =>'Dark Black Evil Mage',
+ 'TEAM' =>'Evil leader',
+ 'STYLE' =>'Piro-fu',
+ 'AGE' =>'30',
+ 'WEIGHT'=>'70kg',
+ 'HEIGHT'=>'180cm',
+ 'SHOE' =>'42',
+ 'STORY' =>
+'Member of the Evil Killer Black Antipathic Dim (witted) Fire Mages Leage.
+He was sent to destroy Saturday now and forever! Or maybe he has a secret
+agenda that noone knows about..? Nah...',
+ 'KEYS' =>
+'Back HKick - Spinkick
+Forward Forward HKick - Crane kick
+Down Back LPunch - Fireball
+(also works while crouching)
+Back Up HPunch - Burning Hands',
+},
+
+{ 'NAME' =>'Boxer',
+ 'TEAM' =>'Evil',
+ 'STYLE' =>'Kickbox-fu',
+ 'AGE' =>'16',
+ 'WEIGHT'=>'80kg',
+ 'HEIGHT'=>'180cm',
+ 'SHOE' =>'43',
+ 'STORY' =>
+'Boxer joined the Mortal Szombat team for the sole purpose to punch as
+many people as hard as he possibly can. He has no other purpose
+whatsoever, but at least this keeps him entertained for the time being.',
+ 'KEYS' =>
+'Back HPunch - Spinning punch
+Down Back LPunch - Weight toss
+Forward Forward HPunch - Leaping punch',
+},
+
+{ 'NAME' =>'Cumi',
+ 'TEAM' =>'Good Leader',
+ 'STYLE' =>'N/A',
+ 'AGE' =>'15',
+ 'WEIGHT'=>'55kg',
+ 'HEIGHT'=>'170cm',
+ 'SHOE' =>'41.5',
+ 'STORY' =>
+'His life ambition was to drive a car. Now that this was accomplished,
+he has turned to his second greatest ambition: to be a great martial
+artist superhero. As a start, he has watched the TV series "Kung fu"
+from beginning to end, in one session. His current training consists
+of but this.',
+ 'KEYS' =>
+'Down Back LPunch - Finger Shot
+Forward Forward HPunch - Spit
+Back Down Forward - Baseball',
+},
+
+{ 'NAME' =>'Sirpi',
+ 'TEAM' =>'Good',
+ 'STYLE' =>'Don\'tHurtMe-FU',
+ 'AGE' =>'24',
+ 'WEIGHT'=>'76kg',
+ 'HEIGHT'=>'170cm',
+ 'SHOE' =>'41',
+ 'STORY' =>
+'After being a "hardcore" gamer for several years and consuming a
+great amount of food, his electricity was turned off. This has caused
+him to make a very stupid face which lasts till this day, and will
+last until he has defeated his archenemy. This is why he resolved to
+join the good team... also he is frightened alone.',
+ 'KEYS' =>
+'Down Forward LPunch - Surprise
+Forward Forward HPunch - Applause',
+},
+
+{ 'NAME' =>'Macy',
+ 'TEAM' =>'Good',
+ 'STYLE' =>'Macy-fu',
+ 'AGE' =>'17',
+ 'WEIGHT'=>'41kg',
+ 'HEIGHT'=>'175cm',
+ 'SHOE' =>'37',
+ 'STORY' =>
+'A few years ago (perhaps a little earlier, or maybe later) she was
+found among the clouds in a cradle (falling, of course). She learned
+martial art from brave Son Goku, so she landed on her feet and didn\'t
+die. She\'s been immortal ever since. Who knows for how long? Maybe
+it won\'t be until the next fight agains Evil...',
+ 'KEYS' =>
+'Down Back LPunch - Toss
+Forward Forward HKick - Scissor Kick',
+ },
+
+{ 'NAME' =>'Jan Ito',
+ 'TEAM' =>'Evil',
+ 'STYLE' =>'Kururin-do',
+ 'AGE' =>'20',
+ 'WEIGHT'=>'85kg',
+ 'HEIGHT'=>'172cm',
+ 'SHOE' =>'39',
+ 'STORY' =>
+'The "Japanese giant" is a sworn enemy of Descant... after he left
+muddy boot marks all over the freshly mopped porch of the pub, er,
+dojo which has belonged to his ancestors for 16 generations. Since
+he has turned to the dark side of the janitor. His knowledge of
+the "way of the concierge" matches his deep hatred towards army
+boots.',
+ 'KEYS' =>
+'Down Back LPunch - Soap Throw
+Back Fw Back Fw LPunch - Stick Spin
+Back Forward HPunc - Pierce',
+ },
+
+{ 'NAME' =>'Grizzly',
+ 'TEAM' =>'Good',
+ 'STYLE' =>'Bear dance',
+ 'AGE' =>'21',
+ 'WEIGHT'=>'Several tons',
+ 'HEIGHT'=>'170cm',
+ 'SHOE' =>'49',
+ 'STORY' =>
+'Grizzly has been long famous for his laziness. He has made laziness a
+form of art. In the past 5 years he has been to lazy to watch TV. Every
+Saturday he trains in his own special fighting style, one not unlike
+that of Bud Spencer, whom he holds as his honorary master. Though,
+since he found out that Bud WORKS on Saturdays, he has revoked his
+title, and keeps it for himself. He has joined the Good team to fight
+to protect the Saturday.',
+ 'KEYS' =>
+'Down Back LPunch - Bear Shot
+Forward Forward HPunch - Poke
+Down Down LKick - Earthquake
+Back Forward Back HPunch - Nunchaku',
+ },
+
+{ 'NAME' =>'Descant',
+ 'TEAM' =>'Good',
+ 'STYLE' =>'Murderization',
+ 'AGE' =>'58',
+ 'WEIGHT'=>'89kg',
+ 'HEIGHT'=>'180cm',
+ 'SHOE' =>'44',
+ 'STORY' =>
+'He was trained in \'Nam in every known weapon and martial art form.
+He fought there on the side of the Americans and the Russians...
+whoever paid more at the moment. Then he used the money to hybernate
+himself until the next great war.. or until the Saturday is in
+trouble. He joined the side with the more CASH...',
+ 'KEYS' =>
+'Down Back LPunch - Aimed Shot
+Back Back LPunch - Hip Shot
+Forward Down HPunch - Knife Throw
+Forward Forward HPunch - Gun Hit',
+},
+
+{ 'NAME' =>'Rising-san',
+ 'TEAM' =>'Evil',
+ 'STYLE' =>'Flick-fu',
+ 'AGE' =>'500',
+ 'WEIGHT'=>'N/A',
+ 'HEIGHT'=>'50',
+ 'SHOE' =>'N/A',
+ 'STORY' =>
+'Mistically disappeared Aeons ago.. on a Saturday! Now he is back, and
+brought back his destructive techique, unmatched on Earth. Noone knows
+why he joined the Dark Evil Mage...',
+},
+
+{ 'NAME' =>'Mad Sawman',
+ 'TEAM' =>'Evil',
+ 'STYLE' =>'Sawing',
+ 'AGE' =>'35',
+ 'WEIGHT'=>'110',
+ 'HEIGHT'=>'120',
+ 'SHOE' =>'49',
+ 'STORY' =>
+'His cradle was found on a tree. Later he chopped up the family that
+took him and fed them to the bears. He has been roaming the Canadian
+forests, chopping trees and heads alike. On hot summer nights his
+maniac laughter echoes far.',
+},
+
+{ 'NAME' =>'Imperfect Soldier',
+ 'TEAM' =>'Good',
+ 'STYLE' =>'Pub Fight',
+ 'AGE' =>'50',
+ 'WEIGHT'=>'100',
+ 'HEIGHT'=>'180',
+ 'SHOE' =>'44',
+ 'STORY' =>
+'His childhood was determined by Drezda\'s bombing. This trauma has
+caused him to join the army. For the last 30 years he is corporal
+without the slightest hope for advancement. He annoys his
+subordinates with a constant flow of stories of pub fights, until
+they ask for relocation.',
+},
+
+{ 'NAME' =>'Aisha',
+ 'TEAM' =>'Good',
+ 'STYLE' =>'Death Dance',
+ 'AGE' =>'21',
+ 'WEIGHT'=>'43.5',
+ 'HEIGHT'=>'155',
+ 'SHOE' =>'35',
+ 'STORY' =>
+'Her trials started right in the womb.. her life hung on a single
+umbilical cord! But she was finally born, and got the name
+Aisha ("survives everything"). Since her childhood she survived
+natural disasters and terrorist attacks, and got frankly fed up.
+So one time she said:
+
+"If I survive this, I swear, I\'ll join those stupid Mortal guys!"',
+ 'STORYHU'=>
+'A megprobaltatasok akkor kezdodtek, amikor anyukaja a szive alatt hordta.
+Egyetlen koldokzsinoron fuggott az elete! De megszuletett vegul, ezert
+kapta az Aisha ("mindent tulelo") nevet. Aztan gyermekkoratol fogva sok
+termeszeti katasztrofat, terrortamadast atveszelt, es mar kezdett elege
+le\
+nni az egeszbol, igy hat az egyik alkalommal kijelentette, hogy ha ezt
+tulelem, csatlakozom azokhoz a hulye Mortalosokhoz!',
+},
+
+{ 'NAME' =>'Misi (?)',
+ 'TEAM' =>'Evil',
+ 'STYLE' =>'',
+ 'AGE' =>'',
+ 'WEIGHT'=>'',
+ 'HEIGHT'=>'',
+ 'SHOE' =>'',
+ 'STORY' =>'...',
+},
+
+);
+
+
+sub GetFighterStats($)
+{
+ my ($fighter) = @_;
+ $::Name = $::FighterStats[$fighter]->{NAME};
+ $::Team = $::FighterStats[$fighter]->{TEAM};
+ $::Style = $::FighterStats[$fighter]->{STYLE};
+ $::Age = $::FighterStats[$fighter]->{AGE};
+ $::Weight = $::FighterStats[$fighter]->{WEIGHT};
+ $::Height = $::FighterStats[$fighter]->{HEIGHT};
+ $::Shoe = $::FighterStats[$fighter]->{SHOE};
+ $::Story = $::FighterStats[$fighter]->{STORY};
+ $::Keys = $::FighterStats[$fighter]->{KEYS};
+
+ $::Story =~ s/([^\n])\n([^\n])/$1 $2/gms;
+
+ @::StatTags = ( "Name: ", "Team: ", "Style: ", 'Age: ', 'Weight: ', 'Height: ', 'Shoe size: ' );
+ #@::StatTags = ( "Nテゥv: ", "Csapat: ", "Stテュlus: ", "Kor: ", "Sテコly: ", "Magassテ。g: ", "Cipテオmテゥret: " );
+}
+
+
+
+
+#GetFighterStats(1);
+#print "$::Name $::Team $::Style $::Age $::Weight $::Height $::Shoe\n$::Story\n";
+
+return 1;
diff --git a/data/script/Grizli.pl b/data/script/Grizli.pl
new file mode 100644
index 0000000..705c29e
--- /dev/null
+++ b/data/script/Grizli.pl
@@ -0,0 +1,196 @@
+# package Grizli;
+
+# Grizli's images are scaled by a factor of 0.763
+
+require 'DataHelper.pl';
+use strict;
+
+sub LoadGrizli
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "GRIZLIDATA.DAT.pl", 250, 100 );
+%FrameLookup = CreateFrameLookup( scalar @Frames -1,
+"start", 14, "stand", 6, "walk", 15,
+"turn", 9, "falling", 15, "laying", 1,
+"getup", 16, "hurt", 9, "kneeling", 4,
+"onknees", 5, "kneelingpunch",5, "kneelingkick", 5,
+"fun", 9,
+"highpunch", 9, "lowpunch", 6, "highkick", 6,
+"lowkick", 6, "sweep", 15, "groinkick", 7,
+"kneekick", 8, "elbow", 12, "spin", 17,
+"grenade", 10, "uppercut", 17, "throw", 19,
+"highpunched", 11, "lowpunched", 6, "groinkicked", 8,
+"kneelingpunched",5, "kneelingkicked", 4, "thrown", 14,
+"specpunch", 6, "nunchaku", 15,
+"swept", 16, "won", 20, "threat", 12,
+"block", 6, "stomp", 11,
+);
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'hkickB'=>'Spin',
+'lkickB'=>'Sweep',
+
+'lpunchBD'=>'Grenade',
+'hpunchFF'=>'Poke',
+'lkickDD'=>'Stomp',
+'hpunchBFB'=>'Nunchaku',
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingKick',
+'hkick'=>'KneelingKick',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+};
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>5, 'S'=>'+start' },
+{ 'N'=>'Stand', 'DEL'=>10, 'S'=>'+stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'DELTAXN'=>-10, 'TURNN'=>1, },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt,-hurt' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won n', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>8, 'S'=>'+fun,-fun', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>5, 'S'=>'+threat', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 0, 75, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch'} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKick', 'DEL'=>5, 'S'=>'+kneelingkick,-kneelingkick', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 6-n',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Spin', 'DEL'=>5, 'S'=>'+spin',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Sweep', 'DEL'=>7, 'S'=>'+sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade',
+ 'DEL12'=>15, 'DOODAD'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+
+{ 'N'=>'Poke', 'DEL'=>5, 'S'=>'+specpunch,_specpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Stomp', 'DEL'=>7, 'S'=>'+stomp',
+ 'HIT'=>'Fall' },
+{ 'N'=>'Nunchaku', 'DEL'=>7, 'S'=>'+nunchaku',
+ 'HIT'=>'Hit' },
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'falling 1-11, falling 15-12, falling 12-n, laying 1',
+ 'DEL16'=>7, 'DEL17'=>7, 'DEL18'=>7, 'DEL19'=>7, 'DEL20'=>7, 'DEL21'=>7,
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON8'=>{'down'=>'Onknees'},
+ 'CON8'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'kneelingkicked 3-n, kneelingkicked n-3',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'+highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched,-lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked,-groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 18 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 1, 16 );
+#TravelingStates( \%FrameLookup, \@Frames, \%States, "won", 0, 0 );
+
+%States = ( FindShorthands( \%States ), %States );
+
+%::GrizliStates = %States;
+@::GrizliFrames = @Frames;
+}
+
+LoadGrizli();
+
+return 1;
+
diff --git a/data/script/Keys.pl b/data/script/Keys.pl
new file mode 100644
index 0000000..85ccbfb
--- /dev/null
+++ b/data/script/Keys.pl
@@ -0,0 +1,248 @@
+use strict;
+
+
+%::Keysyms = (
+'0' => 'UNKNOWN',
+'0' => 'FIRST',
+'8' => 'BACKSPACE',
+'9' => 'TAB',
+'12' => 'CLEAR',
+'13' => 'RETURN',
+'19' => 'PAUSE',
+'27' => 'ESCAPE',
+'32' => 'SPACE',
+'33' => 'EXCLAIM',
+'34' => 'QUOTEDBL',
+'35' => 'HASH',
+'36' => 'DOLLAR',
+'38' => 'AMPERSAND',
+'39' => 'QUOTE',
+'40' => 'LEFTPAREN',
+'41' => 'RIGHTPAREN',
+'42' => 'ASTERISK',
+'43' => 'PLUS',
+'44' => 'COMMA',
+'45' => 'MINUS',
+'46' => 'PERIOD',
+'47' => 'SLASH',
+'48' => '0',
+'49' => '1',
+'50' => '2',
+'51' => '3',
+'52' => '4',
+'53' => '5',
+'54' => '6',
+'55' => '7',
+'56' => '8',
+'57' => '9',
+'58' => 'COLON',
+'59' => 'SEMICOLON',
+'60' => 'LESS',
+'61' => 'EQUALS',
+'62' => 'GREATER',
+'63' => 'QUESTION',
+'64' => 'AT',
+'91' => 'LEFTBRACKET',
+'92' => 'BACKSLASH',
+'93' => 'RIGHTBRACKET',
+'94' => 'CARET',
+'95' => 'UNDERSCORE',
+'96' => 'BACKQUOTE',
+'97' => 'a',
+'98' => 'b',
+'99' => 'c',
+'100' => 'd',
+'101' => 'e',
+'102' => 'f',
+'103' => 'g',
+'104' => 'h',
+'105' => 'i',
+'106' => 'j',
+'107' => 'k',
+'108' => 'l',
+'109' => 'm',
+'110' => 'n',
+'111' => 'o',
+'112' => 'p',
+'113' => 'q',
+'114' => 'r',
+'115' => 's',
+'116' => 't',
+'117' => 'u',
+'118' => 'v',
+'119' => 'w',
+'120' => 'x',
+'121' => 'y',
+'122' => 'z',
+'127' => 'DELETE',
+'160' => 'WORLD_0',
+'161' => 'WORLD_1',
+'162' => 'WORLD_2',
+'163' => 'WORLD_3',
+'164' => 'WORLD_4',
+'165' => 'WORLD_5',
+'166' => 'WORLD_6',
+'167' => 'WORLD_7',
+'168' => 'WORLD_8',
+'169' => 'WORLD_9',
+'170' => 'WORLD_10',
+'171' => 'WORLD_11',
+'172' => 'WORLD_12',
+'173' => 'WORLD_13',
+'174' => 'WORLD_14',
+'175' => 'WORLD_15',
+'176' => 'WORLD_16',
+'177' => 'WORLD_17',
+'178' => 'WORLD_18',
+'179' => 'WORLD_19',
+'180' => 'WORLD_20',
+'181' => 'WORLD_21',
+'182' => 'WORLD_22',
+'183' => 'WORLD_23',
+'184' => 'WORLD_24',
+'185' => 'WORLD_25',
+'186' => 'WORLD_26',
+'187' => 'WORLD_27',
+'188' => 'WORLD_28',
+'189' => 'WORLD_29',
+'190' => 'WORLD_30',
+'191' => 'WORLD_31',
+'192' => 'WORLD_32',
+'193' => 'WORLD_33',
+'194' => 'WORLD_34',
+'195' => 'WORLD_35',
+'196' => 'WORLD_36',
+'197' => 'WORLD_37',
+'198' => 'WORLD_38',
+'199' => 'WORLD_39',
+'200' => 'WORLD_40',
+'201' => 'WORLD_41',
+'202' => 'WORLD_42',
+'203' => 'WORLD_43',
+'204' => 'WORLD_44',
+'205' => 'WORLD_45',
+'206' => 'WORLD_46',
+'207' => 'WORLD_47',
+'208' => 'WORLD_48',
+'209' => 'WORLD_49',
+'210' => 'WORLD_50',
+'211' => 'WORLD_51',
+'212' => 'WORLD_52',
+'213' => 'WORLD_53',
+'214' => 'WORLD_54',
+'215' => 'WORLD_55',
+'216' => 'WORLD_56',
+'217' => 'WORLD_57',
+'218' => 'WORLD_58',
+'219' => 'WORLD_59',
+'220' => 'WORLD_60',
+'221' => 'WORLD_61',
+'222' => 'WORLD_62',
+'223' => 'WORLD_63',
+'224' => 'WORLD_64',
+'225' => 'WORLD_65',
+'226' => 'WORLD_66',
+'227' => 'WORLD_67',
+'228' => 'WORLD_68',
+'229' => 'WORLD_69',
+'230' => 'WORLD_70',
+'231' => 'WORLD_71',
+'232' => 'WORLD_72',
+'233' => 'WORLD_73',
+'234' => 'WORLD_74',
+'235' => 'WORLD_75',
+'236' => 'WORLD_76',
+'237' => 'WORLD_77',
+'238' => 'WORLD_78',
+'239' => 'WORLD_79',
+'240' => 'WORLD_80',
+'241' => 'WORLD_81',
+'242' => 'WORLD_82',
+'243' => 'WORLD_83',
+'244' => 'WORLD_84',
+'245' => 'WORLD_85',
+'246' => 'WORLD_86',
+'247' => 'WORLD_87',
+'248' => 'WORLD_88',
+'249' => 'WORLD_89',
+'250' => 'WORLD_90',
+'251' => 'WORLD_91',
+'252' => 'WORLD_92',
+'253' => 'WORLD_93',
+'254' => 'WORLD_94',
+'255' => 'WORLD_95',
+'256' => 'KP0',
+'257' => 'KP1',
+'258' => 'KP2',
+'259' => 'KP3',
+'260' => 'KP4',
+'261' => 'KP5',
+'262' => 'KP6',
+'263' => 'KP7',
+'264' => 'KP8',
+'265' => 'KP9',
+'266' => 'KP_PERIOD',
+'267' => 'KP_DIVIDE',
+'268' => 'KP_MULTIPLY',
+'269' => 'KP_MINUS',
+'270' => 'KP_PLUS',
+'271' => 'KP_ENTER',
+'272' => 'KP_EQUALS',
+'273' => 'UP',
+'274' => 'DOWN',
+'275' => 'RIGHT',
+'276' => 'LEFT',
+'277' => 'INSERT',
+'278' => 'HOME',
+'279' => 'END',
+'280' => 'PAGEUP',
+'281' => 'PAGEDOWN',
+'282' => 'F1',
+'283' => 'F2',
+'284' => 'F3',
+'285' => 'F4',
+'286' => 'F5',
+'287' => 'F6',
+'288' => 'F7',
+'289' => 'F8',
+'290' => 'F9',
+'291' => 'F10',
+'292' => 'F11',
+'293' => 'F12',
+'294' => 'F13',
+'295' => 'F14',
+'296' => 'F15',
+'300' => 'NUMLOCK',
+'301' => 'CAPSLOCK',
+'302' => 'SCROLLOCK',
+'303' => 'RSHIFT',
+'304' => 'LSHIFT',
+'305' => 'RCTRL',
+'306' => 'LCTRL',
+'307' => 'RALT',
+'308' => 'LALT',
+'309' => 'RMETA',
+'310' => 'LMETA',
+'311' => 'LSUPER',
+'312' => 'RSUPER',
+'313' => 'MODE',
+'314' => 'COMPOSE',
+'315' => 'HELP',
+'316' => 'PRINT',
+'317' => 'SYSREQ',
+'318' => 'BREAK',
+'319' => 'MENU',
+'320' => 'POWER',
+'321' => 'EURO',
+'322' => 'UNDO',
+);
+
+$::keysym = '';
+
+sub GetKeysym($)
+{
+ my ($index) = @_;
+ $::keysym = $::Keysyms{$index};
+}
+
+return 1;
diff --git a/data/script/Kolos.pl b/data/script/Kolos.pl
new file mode 100644
index 0000000..1ea526b
--- /dev/null
+++ b/data/script/Kolos.pl
@@ -0,0 +1,567 @@
+# package Kolos;
+
+
+@KolosFrames = (
+{ 'x'=> 0, 'y'=> 0, 'w'=> 0, 'h'=> 0 },
+{ 'x'=>273, 'y'=>149, 'w'=>133, 'h'=>300 },
+{ 'x'=>293, 'y'=>149, 'w'=>111, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>107, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>129, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>151, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>168, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>140, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>122, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>108, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>126, 'h'=>300 },
+{ 'x'=>290, 'y'=>149, 'w'=>145, 'h'=>300 },
+{ 'x'=>285, 'y'=>149, 'w'=>166, 'h'=>300 },
+{ 'x'=>282, 'y'=>149, 'w'=>123, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>108, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>143, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>160, 'h'=>300 },
+{ 'x'=>297, 'y'=>149, 'w'=>178, 'h'=>300 },
+{ 'x'=>294, 'y'=>149, 'w'=>176, 'h'=>300 },
+{ 'x'=>285, 'y'=>149, 'w'=>181, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>101, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>101, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>112, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>131, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>159, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>166, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>177, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>188, 'h'=>300 },
+{ 'x'=>283, 'y'=>149, 'w'=>131, 'h'=>300 },
+{ 'x'=>293, 'y'=>149, 'w'=>119, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>107, 'h'=>300 },
+{ 'x'=>298, 'y'=>149, 'w'=>117, 'h'=>300 },
+{ 'x'=>272, 'y'=>156, 'w'=>133, 'h'=>293 },
+{ 'x'=>251, 'y'=>172, 'w'=>149, 'h'=>277 },
+{ 'x'=>214, 'y'=>189, 'w'=>259, 'h'=>260 },
+{ 'x'=>214, 'y'=>189, 'w'=>259, 'h'=>260 },
+{ 'x'=>214, 'y'=>189, 'w'=>269, 'h'=>260 },
+{ 'x'=>244, 'y'=>187, 'w'=>267, 'h'=>262 },
+{ 'x'=>244, 'y'=>187, 'w'=>267, 'h'=>262 },
+{ 'x'=>298, 'y'=>149, 'w'=>141, 'h'=>300 },
+{ 'x'=>331, 'y'=>152, 'w'=>131, 'h'=>300 },
+{ 'x'=>354, 'y'=>150, 'w'=> 84, 'h'=>305 },
+{ 'x'=>343, 'y'=>159, 'w'=>146, 'h'=>284 },
+{ 'x'=>347, 'y'=>163, 'w'=>214, 'h'=>273 },
+{ 'x'=>346, 'y'=>161, 'w'=>207, 'h'=>283 },
+{ 'x'=>298, 'y'=>149, 'w'=>129, 'h'=>300 },
+{ 'x'=>298, 'y'=>153, 'w'=>131, 'h'=>296 },
+{ 'x'=>288, 'y'=>163, 'w'=>138, 'h'=>286 },
+{ 'x'=>274, 'y'=>178, 'w'=>146, 'h'=>271 },
+{ 'x'=>298, 'y'=>165, 'w'=>121, 'h'=>284 },
+{ 'x'=>298, 'y'=>169, 'w'=>114, 'h'=>280 },
+{ 'x'=>293, 'y'=>205, 'w'=>116, 'h'=>244 },
+{ 'x'=>277, 'y'=>216, 'w'=>127, 'h'=>233 },
+{ 'x'=>298, 'y'=>132, 'w'=>143, 'h'=>317 },
+{ 'x'=>298, 'y'=>134, 'w'=>148, 'h'=>315 },
+{ 'x'=>298, 'y'=>139, 'w'=>147, 'h'=>310 },
+{ 'x'=>279, 'y'=>140, 'w'=>156, 'h'=>309 },
+{ 'x'=>280, 'y'=>151, 'w'=>134, 'h'=>298 },
+{ 'x'=>278, 'y'=>164, 'w'=>135, 'h'=>285 },
+{ 'x'=>281, 'y'=>177, 'w'=>134, 'h'=>272 },
+{ 'x'=>280, 'y'=>196, 'w'=>134, 'h'=>253 },
+{ 'x'=>298, 'y'=>159, 'w'=>127, 'h'=>290 },
+{ 'x'=>298, 'y'=>159, 'w'=>122, 'h'=>290 },
+{ 'x'=>298, 'y'=>169, 'w'=>113, 'h'=>280 },
+{ 'x'=>298, 'y'=>171, 'w'=>114, 'h'=>278 },
+{ 'x'=>298, 'y'=>146, 'w'=>151, 'h'=>303 },
+{ 'x'=>332- 16, 'y'=>147, 'w'=>136, 'h'=>309 },
+{ 'x'=>377- 32, 'y'=>146, 'w'=> 87, 'h'=>311 },
+{ 'x'=>378- 48, 'y'=>152, 'w'=>123, 'h'=>306 },
+{ 'x'=>389- 68, 'y'=>151, 'w'=>119, 'h'=>313 },
+{ 'x'=>423- 80, 'y'=>139, 'w'=>121, 'h'=>323 },
+{ 'x'=>460- 96, 'y'=>133, 'w'=>104, 'h'=>328 },
+{ 'x'=>451-112, 'y'=>137, 'w'=> 98, 'h'=>323 },
+{ 'x'=>446-128, 'y'=>140, 'w'=>131, 'h'=>320 },
+{ 'x'=>282, 'y'=>137, 'w'=>130, 'h'=>312 },
+{ 'x'=>275, 'y'=>143, 'w'=>137, 'h'=>312 },
+{ 'x'=>280, 'y'=>137, 'w'=>120, 'h'=>328 },
+{ 'x'=>288, 'y'=>134, 'w'=>138, 'h'=>323 },
+{ 'x'=>293, 'y'=>153, 'w'=>128, 'h'=>296 },
+{ 'x'=>298, 'y'=>151, 'w'=>119, 'h'=>298 },
+{ 'x'=>298, 'y'=>155, 'w'=>119, 'h'=>294 },
+{ 'x'=>298, 'y'=>172, 'w'=>129, 'h'=>277 },
+{ 'x'=>298, 'y'=>201, 'w'=>135, 'h'=>248 },
+{ 'x'=>298, 'y'=>170, 'w'=>129, 'h'=>279 },
+{ 'x'=>298, 'y'=>164, 'w'=>128, 'h'=>285 },
+{ 'x'=>298, 'y'=>135, 'w'=>144, 'h'=>314 },
+{ 'x'=>298, 'y'=>160, 'w'=>161, 'h'=>289 },
+{ 'x'=>298, 'y'=>154, 'w'=>160, 'h'=>295 },
+{ 'x'=>298, 'y'=>166, 'w'=>123, 'h'=>283 },
+{ 'x'=>298, 'y'=>194, 'w'=>133, 'h'=>255 },
+{ 'x'=>298, 'y'=>194, 'w'=>137, 'h'=>255 },
+{ 'x'=>298, 'y'=>236, 'w'=>133, 'h'=>213 },
+{ 'x'=>281, 'y'=>275, 'w'=>146, 'h'=>174 },
+{ 'x'=>280, 'y'=>331, 'w'=>131, 'h'=>118 },
+{ 'x'=>281, 'y'=>149, 'w'=>140, 'h'=>300 },
+{ 'x'=>277, 'y'=>161, 'w'=>140, 'h'=>288 },
+{ 'x'=>292, 'y'=>183, 'w'=>133, 'h'=>266 },
+{ 'x'=>292, 'y'=>175, 'w'=>132, 'h'=>274 },
+{ 'x'=>290, 'y'=>171, 'w'=>159, 'h'=>278 },
+{ 'x'=>289, 'y'=>158, 'w'=>185, 'h'=>291 },
+{ 'x'=>282, 'y'=>161, 'w'=>197, 'h'=>288 },
+{ 'x'=>282, 'y'=>168, 'w'=>162, 'h'=>281 },
+{ 'x'=>298, 'y'=>159, 'w'=>134, 'h'=>290 },
+{ 'x'=>298, 'y'=>180, 'w'=>162, 'h'=>269 },
+{ 'x'=>264, 'y'=>169, 'w'=>157, 'h'=>280 },
+{ 'x'=>298, 'y'=>145, 'w'=>128, 'h'=>304 },
+{ 'x'=>235, 'y'=>155, 'w'=>179, 'h'=>294 },
+{ 'x'=>206, 'y'=>187, 'w'=>208, 'h'=>262 },
+{ 'x'=>161, 'y'=>225, 'w'=>245, 'h'=>224 },
+{ 'x'=>113, 'y'=>261, 'w'=>239, 'h'=>188 },
+{ 'x'=> 66, 'y'=>288, 'w'=>267, 'h'=>161 },
+{ 'x'=> 23, 'y'=>383, 'w'=>293, 'h'=> 91 },
+{ 'x'=> 20, 'y'=>372, 'w'=>272, 'h'=>103 },
+{ 'x'=> 64, 'y'=>324, 'w'=>224, 'h'=>150 },
+{ 'x'=>100, 'y'=>321, 'w'=>193, 'h'=>148 },
+{ 'x'=>118, 'y'=>304, 'w'=>135, 'h'=>174 },
+{ 'x'=>105, 'y'=>307, 'w'=>132, 'h'=>169 },
+{ 'x'=>119, 'y'=>284, 'w'=>145, 'h'=>176 },
+{ 'x'=>122, 'y'=>200, 'w'=>148, 'h'=>239 },
+{ 'x'=>124, 'y'=>158, 'w'=>118, 'h'=>280 },
+{ 'x'=>123, 'y'=>142, 'w'=>108, 'h'=>299 },
+{ 'x'=>104, 'y'=>141, 'w'=>121, 'h'=>303 },
+{ 'x'=> 90, 'y'=>147, 'w'=>166, 'h'=>293 },
+{ 'x'=>293, 'y'=>145, 'w'=>108, 'h'=>288 },
+{ 'x'=>298, 'y'=>129, 'w'=>147, 'h'=>276 },
+{ 'x'=>298, 'y'=>132, 'w'=> 93, 'h'=>282 },
+{ 'x'=>298, 'y'=>137, 'w'=>169, 'h'=>250 },
+{ 'x'=>298, 'y'=>132, 'w'=>178, 'h'=>217 },
+{ 'x'=>298, 'y'=>130, 'w'=>169, 'h'=>221 },
+{ 'x'=>298, 'y'=>131, 'w'=>201, 'h'=>181 },
+{ 'x'=>298, 'y'=>129, 'w'=>205, 'h'=>259 },
+{ 'x'=>298, 'y'=>151, 'w'=>146, 'h'=>298 },
+{ 'x'=>298, 'y'=>151, 'w'=>169, 'h'=>298 },
+{ 'x'=>298, 'y'=>156, 'w'=>188, 'h'=>293 },
+{ 'x'=>372, 'y'=>158, 'w'=>147, 'h'=>306 },
+{ 'x'=>380, 'y'=>161, 'w'=>180, 'h'=>300 },
+{ 'x'=>368, 'y'=>156, 'w'=>200, 'h'=>307 },
+{ 'x'=>314, 'y'=>166, 'w'=>211, 'h'=>296 },
+{ 'x'=>283, 'y'=>132, 'w'=>217, 'h'=>327 },
+{ 'x'=>281, 'y'=>148, 'w'=>219, 'h'=>310 },
+{ 'x'=>259, 'y'=>219, 'w'=>247, 'h'=>240 },
+{ 'x'=>298, 'y'=>147, 'w'=>163, 'h'=>302 },
+{ 'x'=>298, 'y'=>148, 'w'=>169, 'h'=>301 },
+{ 'x'=>298, 'y'=>149, 'w'=>197, 'h'=>300 },
+{ 'x'=>298, 'y'=>154, 'w'=>196, 'h'=>295 },
+{ 'x'=>298, 'y'=>124, 'w'=>183, 'h'=>325 },
+{ 'x'=>298, 'y'=>149, 'w'=>120, 'h'=>300 },
+{ 'x'=>342, 'y'=>147, 'w'=> 79, 'h'=>297 },
+{ 'x'=>327, 'y'=>149, 'w'=> 90, 'h'=>307 },
+{ 'x'=>314, 'y'=>146, 'w'=> 88, 'h'=>312 },
+{ 'x'=>311, 'y'=>145, 'w'=> 90, 'h'=>313 },
+{ 'x'=>298, 'y'=>148, 'w'=>125, 'h'=>301 },
+{ 'x'=>298, 'y'=>145, 'w'=>124, 'h'=>306 },
+{ 'x'=>298, 'y'=>144, 'w'=>129, 'h'=>305 },
+);
+
+
+# Align frames to pivot point to the head
+
+$PivotX = 340;
+$PivotY = 160;
+
+for ($i=scalar @KolosFrames-1; $i>0; $i--)
+{
+ $frame = $KolosFrames[$i];
+ $frame->{'x'} -= $PivotX;
+ $frame->{'y'} -= $PivotY;
+}
+
+$Punch1 = 1; $Punch2 = 7; $Strike1 = 13;
+$Strike2 = 20; $Hook = 28; $LowKick1 = 32;
+$LowKick2 = 39; $HPunched = 45; $LPunched = 49;
+$Striked = 53; $LKicked = 57; $Block = 61;
+$Walk = 65; $Turn = 74; $Fireball = 78;
+$Crouch = 88; $Uppercut = 94; $Grabbed =102;
+$KO =105; $Getup =112; $Matrix =123;
+$Throw =131; $Burn =141; $Win =146;
+$Wink =151;
+$End =154;
+
+
+$KCon = {
+ 'lpunch'=>'Punch1 A',
+ 'hpunch'=>'Strike1 A',
+ 'hook'=>'Hook A',
+ 'hkick'=>'LowKick1 A',
+ 'lkick'=>'LowKick2 A',
+ 'block'=>'Block A',
+ 'forw'=>'Walk A',
+ 'back'=>'Back A',
+ 'fireball'=>'Fireball A',
+ 'down'=>'Crouch A',
+ 'uppercut'=>'Uppercut A',
+ 'matrix'=>'Matrix A',
+ 'throw'=>'Throw A',
+ 'burn'=>'Burn A',
+ 'turn'=>'Turn A',
+ 'jump'=>'Jump A',
+ 'jumpfw'=>'Jumpfw A',
+ 'jumpbw'=>'Jumpbw A',
+ };
+
+$KolosStates{'Standby'} = { 'F'=>$Punch1+0, 'DEL'=> 5,
+ 'CON'=> $KCon,
+};
+
+$KolosStates{'Punch1 A'} = { 'F'=>$Punch1+1, 'DEL'=> 5, };
+$KolosStates{'Punch1 B'} = { 'F'=>$Punch1+2, 'DEL'=> 5, };
+$KolosStates{'Punch1 C'} = { 'F'=>$Punch1+3, 'DEL'=> 5, };
+$KolosStates{'Punch1 D'} = { 'F'=>$Punch1+4, 'DEL'=> 5, };
+$KolosStates{'Punch1 E'} = { 'F'=>$Punch1+5, 'DEL'=>10, 'HIT'=>'Punch1',
+ 'CON'=> { 'lpunch'=>'Punch2 A' } };
+$KolosStates{'Punch1 F'} = { 'F'=>$Punch1+4, 'DEL'=> 5,
+ 'CON'=> { 'lpunch'=>'Punch2 B' } };
+$KolosStates{'Punch1 G'} = { 'F'=>$Punch1+3, 'DEL'=> 5, };
+$KolosStates{'Punch1 H'} = { 'F'=>$Punch1+2, 'DEL'=> 5, };
+$KolosStates{'Punch1 I'} = { 'F'=>$Punch1+1, 'DEL'=> 5, };
+
+$KolosStates{'Punch2 A'} = { 'F'=>$Punch1+4, 'DEL'=> 5, };
+$KolosStates{'Punch2 B'} = { 'F'=>$Punch2+0, 'DEL'=> 5, };
+$KolosStates{'Punch2 C'} = { 'F'=>$Punch2+1, 'DEL'=> 5, };
+$KolosStates{'Punch2 D'} = { 'F'=>$Punch2+2, 'DEL'=> 5, };
+$KolosStates{'Punch2 E'} = { 'F'=>$Punch2+3, 'DEL'=> 5, };
+$KolosStates{'Punch2 F'} = { 'F'=>$Punch2+4, 'DEL'=> 5, };
+$KolosStates{'Punch2 G'} = { 'F'=>$Punch2+5, 'DEL'=>10, 'HIT'=>'Punch2', };
+$KolosStates{'Punch2 H'} = { 'F'=>$Punch2+4, 'DEL'=> 5, };
+$KolosStates{'Punch2 I'} = { 'F'=>$Punch2+3, 'DEL'=> 5, };
+$KolosStates{'Punch2 J'} = { 'F'=>$Punch2+2, 'DEL'=> 5,
+ 'CON'=> { 'lpunch'=>'Punch1 C' } };
+
+$KolosStates{'Strike1 A'} = { 'F'=>$Strike1+0, 'DEL'=> 2, };
+$KolosStates{'Strike1 B'} = { 'F'=>$Strike1+1, 'DEL'=> 2, };
+$KolosStates{'Strike1 C'} = { 'F'=>$Strike1+2, 'DEL'=> 2, };
+$KolosStates{'Strike1 D'} = { 'F'=>$Strike1+3, 'DEL'=> 2, };
+$KolosStates{'Strike1 E'} = { 'F'=>$Strike1+4, 'DEL'=> 2, };
+$KolosStates{'Strike1 F'} = { 'F'=>$Strike1+5, 'DEL'=> 2, };
+$KolosStates{'Strike1 G'} = { 'F'=>$Strike1+6, 'DEL'=> 7, 'HIT'=>'Strike1', };
+$KolosStates{'Strike1 H'} = { 'F'=>$Strike1+5, 'DEL'=> 2, };
+$KolosStates{'Strike1 I'} = { 'F'=>$Strike1+4, 'DEL'=> 2, };
+$KolosStates{'Strike1 J'} = { 'F'=>$Strike1+3, 'DEL'=> 2, };
+$KolosStates{'Strike1 K'} = { 'F'=>$Strike1+2, 'DEL'=> 2, };
+$KolosStates{'Strike1 L'} = { 'F'=>$Strike1+1, 'DEL'=> 2,
+ 'CON'=> { 'hpunch'=>'Strike2 B' } };
+$KolosStates{'Strike1 M'} = { 'F'=>$Strike1+0, 'DEL'=> 2, };
+
+$KolosStates{'Strike2 A'} = { 'F'=>$Strike2+0, 'DEL'=> 2, };
+$KolosStates{'Strike2 B'} = { 'F'=>$Strike2+1, 'DEL'=> 2, };
+$KolosStates{'Strike2 C'} = { 'F'=>$Strike2+2, 'DEL'=> 2, };
+$KolosStates{'Strike2 D'} = { 'F'=>$Strike2+3, 'DEL'=> 2, };
+$KolosStates{'Strike2 E'} = { 'F'=>$Strike2+4, 'DEL'=> 2, };
+$KolosStates{'Strike2 F'} = { 'F'=>$Strike2+5, 'DEL'=> 2, };
+$KolosStates{'Strike2 G'} = { 'F'=>$Strike2+6, 'DEL'=> 2, };
+$KolosStates{'Strike2 H'} = { 'F'=>$Strike2+7, 'DEL'=> 7, 'HIT'=>'Strike2', };
+$KolosStates{'Strike2 I'} = { 'F'=>$Strike2+6, 'DEL'=> 2, };
+$KolosStates{'Strike2 J'} = { 'F'=>$Strike2+5, 'DEL'=> 2, };
+$KolosStates{'Strike2 K'} = { 'F'=>$Strike2+4, 'DEL'=> 2, };
+$KolosStates{'Strike2 L'} = { 'F'=>$Strike2+3, 'DEL'=> 2, };
+$KolosStates{'Strike2 M'} = { 'F'=>$Strike2+2, 'DEL'=> 2, };
+$KolosStates{'Strike2 N'} = { 'F'=>$Strike2+1, 'DEL'=> 2, };
+$KolosStates{'Strike2 O'} = { 'F'=>$Strike2+0, 'DEL'=> 2,
+ 'CON'=> { 'hpunch'=>'Strike1 B' } };
+
+$KolosStates{'Hook A'} = { 'F'=>$Hook+0, 'DEL'=> 5, };
+$KolosStates{'Hook B'} = { 'F'=>$Hook+1, 'DEL'=> 5, };
+$KolosStates{'Hook C'} = { 'F'=>$Hook+2, 'DEL'=> 5, };
+$KolosStates{'Hook D'} = { 'F'=>$Hook+3, 'DEL'=>10, 'HIT'=>'Hook',};
+$KolosStates{'Hook E'} = { 'F'=>$Hook+2, 'DEL'=> 5, };
+$KolosStates{'Hook F'} = { 'F'=>$Hook+1, 'DEL'=> 5, };
+$KolosStates{'Hook G'} = { 'F'=>$Hook+0, 'DEL'=> 5, };
+
+$KolosStates{'LowKick1 A'}= { 'F'=>$LowKick1+0, 'DEL'=> 3, };
+$KolosStates{'LowKick1 B'}= { 'F'=>$LowKick1+1, 'DEL'=> 3, };
+$KolosStates{'LowKick1 C'}= { 'F'=>$LowKick1+2, 'DEL'=> 2, };
+$KolosStates{'LowKick1 D'}= { 'F'=>$LowKick1+3, 'DEL'=> 2, };
+$KolosStates{'LowKick1 E'}= { 'F'=>$LowKick1+4, 'DEL'=> 2, };
+$KolosStates{'LowKick1 F'}= { 'F'=>$LowKick1+5, 'DEL'=> 2, };
+$KolosStates{'LowKick1 G'}= { 'F'=>$LowKick1+6, 'DEL'=>10, 'HIT'=>'LowKick1' };
+$KolosStates{'LowKick1 H'}= { 'F'=>$LowKick1+5, 'DEL'=> 2, };
+$KolosStates{'LowKick1 I'}= { 'F'=>$LowKick1+4, 'DEL'=> 2, };
+$KolosStates{'LowKick1 J'}= { 'F'=>$LowKick1+3, 'DEL'=> 2, };
+$KolosStates{'LowKick1 K'}= { 'F'=>$LowKick1+2, 'DEL'=> 2, };
+$KolosStates{'LowKick1 L'}= { 'F'=>$LowKick1+1, 'DEL'=> 3, };
+$KolosStates{'LowKick1 M'}= { 'F'=>$LowKick1+0, 'DEL'=> 3, };
+
+$KolosStates{'LowKick2 A'}= { 'F'=>$LowKick2+0, 'DEL'=> 5, };
+$KolosStates{'LowKick2 B'}= { 'F'=>$LowKick2+1, 'DEL'=> 5, };
+$KolosStates{'LowKick2 C'}= { 'F'=>$LowKick2+2, 'DEL'=> 5, };
+$KolosStates{'LowKick2 D'}= { 'F'=>$LowKick2+3, 'DEL'=> 5, };
+$KolosStates{'LowKick2 E'}= { 'F'=>$LowKick2+4, 'DEL'=> 5, };
+$KolosStates{'LowKick2 F'}= { 'F'=>$LowKick2+5, 'DEL'=>10, 'HIT'=>'LowKick2' };
+$KolosStates{'LowKick2 G'}= { 'F'=>$LowKick2+4, 'DEL'=> 5, };
+$KolosStates{'LowKick2 H'}= { 'F'=>$LowKick2+3, 'DEL'=> 5, };
+$KolosStates{'LowKick2 I'}= { 'F'=>$LowKick2+2, 'DEL'=> 5, };
+$KolosStates{'LowKick2 J'}= { 'F'=>$LowKick2+1, 'DEL'=> 5, };
+$KolosStates{'LowKick2 K'}= { 'F'=>$LowKick2+0, 'DEL'=> 5, };
+
+$KolosStates{'HPunched A'}= { 'F'=>$HPunched+0, 'DEL'=> 5, };
+$KolosStates{'HPunched B'}= { 'F'=>$HPunched+1, 'DEL'=> 5, };
+$KolosStates{'HPunched C'}= { 'F'=>$HPunched+2, 'DEL'=> 5, };
+$KolosStates{'HPunched D'}= { 'F'=>$HPunched+3, 'DEL'=> 5, };
+$KolosStates{'HPunched E'}= { 'F'=>$HPunched+2, 'DEL'=> 5, };
+$KolosStates{'HPunched F'}= { 'F'=>$HPunched+1, 'DEL'=> 5, };
+$KolosStates{'HPunched G'}= { 'F'=>$HPunched+0, 'DEL'=> 5, };
+
+$KolosStates{'LPunched A'}= { 'F'=>$LPunched+0, 'DEL'=> 5, };
+$KolosStates{'LPunched B'}= { 'F'=>$LPunched+1, 'DEL'=> 5, };
+$KolosStates{'LPunched C'}= { 'F'=>$LPunched+2, 'DEL'=> 5, };
+$KolosStates{'LPunched D'}= { 'F'=>$LPunched+3, 'DEL'=> 5, };
+$KolosStates{'LPunched E'}= { 'F'=>$LPunched+2, 'DEL'=> 5, };
+$KolosStates{'LPunched F'}= { 'F'=>$LPunched+1, 'DEL'=> 5, };
+$KolosStates{'LPunched G'}= { 'F'=>$LPunched+0, 'DEL'=> 5, };
+
+$KolosStates{'Striked A'}= { 'F'=>$Striked+0, 'DEL'=> 5, };
+$KolosStates{'Striked B'}= { 'F'=>$Striked+1, 'DEL'=> 5, };
+$KolosStates{'Striked C'}= { 'F'=>$Striked+2, 'DEL'=> 5, };
+$KolosStates{'Striked D'}= { 'F'=>$Striked+3, 'DEL'=> 5, };
+$KolosStates{'Striked E'}= { 'F'=>$Striked+2, 'DEL'=> 5, };
+$KolosStates{'Striked F'}= { 'F'=>$Striked+1, 'DEL'=> 5, };
+$KolosStates{'Striked G'}= { 'F'=>$Striked+0, 'DEL'=> 5, };
+
+$KolosStates{'LKicked A'}= { 'F'=>$LKicked+0, 'DEL'=> 5, };
+$KolosStates{'LKicked B'}= { 'F'=>$LKicked+1, 'DEL'=> 5, };
+$KolosStates{'LKicked C'}= { 'F'=>$LKicked+2, 'DEL'=> 5, };
+$KolosStates{'LKicked D'}= { 'F'=>$LKicked+3, 'DEL'=> 5, };
+$KolosStates{'LKicked E'}= { 'F'=>$LKicked+2, 'DEL'=> 5, };
+$KolosStates{'LKicked F'}= { 'F'=>$LKicked+1, 'DEL'=> 5, };
+$KolosStates{'LKicked G'}= { 'F'=>$LKicked+0, 'DEL'=> 5, };
+
+$KolosStates{'Block A'}= { 'F'=>$Block+0, 'DEL'=> 5, };
+$KolosStates{'Block B'}= { 'F'=>$Block+1, 'DEL'=> 5, };
+$KolosStates{'Block C'}= { 'F'=>$Block+2, 'DEL'=> 5, };
+$KolosStates{'Block D'}= { 'F'=>$Block+3, 'DEL'=> 5, 'BLOCK'=>1,
+ 'CON'=>{'block'=>'Block D',} };
+$KolosStates{'Block E'}= { 'F'=>$Block+2, 'DEL'=> 5, };
+$KolosStates{'Block F'}= { 'F'=>$Block+1, 'DEL'=> 5, };
+$KolosStates{'Block G'}= { 'F'=>$Block+0, 'DEL'=> 5, };
+
+$KolosStates{'Walk A'} = { 'F'=>$Walk+0, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk B'} };
+$KolosStates{'Walk B'} = { 'F'=>$Walk+1, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk C'} };
+$KolosStates{'Walk C'} = { 'F'=>$Walk+2, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk D'} };
+$KolosStates{'Walk D'} = { 'F'=>$Walk+3, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk E'} };
+$KolosStates{'Walk E'} = { 'F'=>$Walk+4, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk F'} };
+$KolosStates{'Walk F'} = { 'F'=>$Walk+5, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk G'} };
+$KolosStates{'Walk G'} = { 'F'=>$Walk+6, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk H'} };
+$KolosStates{'Walk H'} = { 'F'=>$Walk+7, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk I'} };
+$KolosStates{'Walk I'} = { 'F'=>$Walk+8, 'DEL'=> 4, 'MOVE'=>4,
+ 'NEXTST'=>'Standby', 'CON'=>{'forw'=>'Walk A'} };
+
+$KolosStates{'Back A'} = { 'F'=>$Walk+8, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back B'} };
+$KolosStates{'Back B'} = { 'F'=>$Walk+7, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back C'} };
+$KolosStates{'Back C'} = { 'F'=>$Walk+6, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back D'} };
+$KolosStates{'Back D'} = { 'F'=>$Walk+5, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back E'} };
+$KolosStates{'Back E'} = { 'F'=>$Walk+4, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back F'} };
+$KolosStates{'Back F'} = { 'F'=>$Walk+3, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back G'} };
+$KolosStates{'Back G'} = { 'F'=>$Walk+2, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back H'} };
+$KolosStates{'Back H'} = { 'F'=>$Walk+1, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back I'} };
+$KolosStates{'Back I'} = { 'F'=>$Walk+0, 'DEL'=> 5, 'MOVE'=>-4,
+ 'NEXTST'=>'Standby', 'CON'=>{'back'=>'Back A'} };
+
+$KolosStates{'Turn A'} = { 'F'=>$Turn+0, 'DEL'=> 5, };
+$KolosStates{'Turn B'} = { 'F'=>$Turn+1, 'DEL'=> 5, };
+$KolosStates{'Turn C'} = { 'F'=>$Turn+2, 'DEL'=> 5, };
+$KolosStates{'Turn D'} = { 'F'=>$Turn+3, 'DEL'=> 5, 'TURN'=>1, };
+
+$KolosStates{'Fireball A'}= { 'F'=>$Fireball+0, 'DEL'=> 5, };
+$KolosStates{'Fireball B'}= { 'F'=>$Fireball+1, 'DEL'=> 5, };
+$KolosStates{'Fireball C'}= { 'F'=>$Fireball+2, 'DEL'=> 5, };
+$KolosStates{'Fireball D'}= { 'F'=>$Fireball+3, 'DEL'=> 5, };
+$KolosStates{'Fireball E'}= { 'F'=>$Fireball+4, 'DEL'=>15, };
+$KolosStates{'Fireball F'}= { 'F'=>$Fireball+3, 'DEL'=> 5, };
+$KolosStates{'Fireball G'}= { 'F'=>$Fireball+2, 'DEL'=> 5, };
+$KolosStates{'Fireball H'}= { 'F'=>$Fireball+5, 'DEL'=> 5, };
+$KolosStates{'Fireball I'}= { 'F'=>$Fireball+6, 'DEL'=> 5, };
+$KolosStates{'Fireball J'}= { 'F'=>$Fireball+7, 'DEL'=> 5, };
+$KolosStates{'Fireball K'}= { 'F'=>$Fireball+8, 'DEL'=> 5, };
+$KolosStates{'Fireball L'}= { 'F'=>$Fireball+9, 'DEL'=>15, 'HIT'=>'Fireball'};
+$KolosStates{'Fireball M'}= { 'F'=>$Fireball+8, 'DEL'=> 5, };
+$KolosStates{'Fireball N'}= { 'F'=>$Fireball+7, 'DEL'=> 5, };
+$KolosStates{'Fireball O'}= { 'F'=>$Fireball+6, 'DEL'=> 5, };
+#$KolosStates{'Fireball P'}= { 'F'=>$Fireball+5, 'DEL'=> 5, };
+$KolosStates{'Fireball P'}= { 'F'=>$Fireball+2, 'DEL'=> 5, };
+$KolosStates{'Fireball Q'}= { 'F'=>$Fireball+1, 'DEL'=> 5, };
+$KolosStates{'Fireball R'}= { 'F'=>$Fireball+0, 'DEL'=> 5, };
+
+$KolosStates{'Crouch A'} = { 'F'=>$Crouch+0, 'DEL'=> 5,
+ 'NEXTST'=>'Standby', 'CON'=>{'down'=>'Crouch B'} };
+$KolosStates{'Crouch B'} = { 'F'=>$Crouch+1, 'DEL'=> 5,
+ 'NEXTST'=>'Crouch K', 'CON'=>{'down'=>'Crouch C'} };
+$KolosStates{'Crouch C'} = { 'F'=>$Crouch+2, 'DEL'=> 5,
+ 'NEXTST'=>'Crouch J', 'CON'=>{'down'=>'Crouch D'} };
+$KolosStates{'Crouch D'} = { 'F'=>$Crouch+3, 'DEL'=> 5,
+ 'NEXTST'=>'Crouch I', 'CON'=>{'down'=>'Crouch E'} };
+$KolosStates{'Crouch E'} = { 'F'=>$Crouch+4, 'DEL'=> 5,
+ 'NEXTST'=>'Crouch H', 'CON'=>{'down'=>'Crouch F'} };
+$KolosStates{'Crouch F'} = { 'F'=>$Crouch+5, 'DEL'=> 5,
+ 'CON'=>{ 'down'=>'Crouch F' } };
+$KolosStates{'Crouch G'} = { 'F'=>$Crouch+4, 'DEL'=> 5,
+ 'CON'=>{ 'down'=>'Crouch F' } };
+$KolosStates{'Crouch H'} = { 'F'=>$Crouch+3, 'DEL'=> 5,
+ 'CON'=>{ 'down'=>'Crouch G' } };
+$KolosStates{'Crouch I'} = { 'F'=>$Crouch+2, 'DEL'=> 5,
+ 'CON'=>{ 'down'=>'Crouch H' } };
+$KolosStates{'Crouch J'} = { 'F'=>$Crouch+1, 'DEL'=> 5,
+ 'CON'=>{ 'down'=>'Crouch I' } };
+$KolosStates{'Crouch K'} = { 'F'=>$Crouch+0, 'DEL'=> 5,
+ 'CON'=>{ 'down'=>'Crouch J' } };
+
+$KolosStates{'Uppercut A'}= { 'F'=>$Uppercut+0, 'DEL'=> 3, };
+$KolosStates{'Uppercut B'}= { 'F'=>$Uppercut+1, 'DEL'=> 3, };
+$KolosStates{'Uppercut C'}= { 'F'=>$Uppercut+2, 'DEL'=> 3, };
+$KolosStates{'Uppercut D'}= { 'F'=>$Uppercut+3, 'DEL'=> 3, };
+$KolosStates{'Uppercut E'}= { 'F'=>$Uppercut+4, 'DEL'=> 3, };
+$KolosStates{'Uppercut F'}= { 'F'=>$Uppercut+5, 'DEL'=> 3, };
+$KolosStates{'Uppercut G'}= { 'F'=>$Uppercut+6, 'DEL'=> 3, };
+$KolosStates{'Uppercut H'}= { 'F'=>$Uppercut+7, 'DEL'=>15, 'HIT'=>'Uppercut'};
+$KolosStates{'Uppercut I'}= { 'F'=>$Uppercut+6, 'DEL'=> 3, };
+$KolosStates{'Uppercut J'}= { 'F'=>$Uppercut+5, 'DEL'=> 3, };
+$KolosStates{'Uppercut K'}= { 'F'=>$Uppercut+4, 'DEL'=> 3, };
+$KolosStates{'Uppercut L'}= { 'F'=>$Uppercut+3, 'DEL'=> 3, };
+$KolosStates{'Uppercut M'}= { 'F'=>$Uppercut+2, 'DEL'=> 3, };
+$KolosStates{'Uppercut N'}= { 'F'=>$Uppercut+1, 'DEL'=> 3, };
+$KolosStates{'Uppercut O'}= { 'F'=>$Uppercut+0, 'DEL'=> 3, };
+
+$KolosStates{'Grabbed A'} = { 'F'=>$Grabbed+0, 'DEL'=> 5, };
+$KolosStates{'Grabbed B'} = { 'F'=>$Grabbed+1, 'DEL'=> 5, };
+$KolosStates{'Grabbed C'} = { 'F'=>$Grabbed+2, 'DEL'=> 5, };
+
+$KolosStates{'KO A'} = { 'F'=>$KO+0, 'DEL'=> 5, };
+$KolosStates{'KO B'} = { 'F'=>$KO+1, 'DEL'=> 5, };
+$KolosStates{'KO C'} = { 'F'=>$KO+2, 'DEL'=> 5, };
+$KolosStates{'KO D'} = { 'F'=>$KO+3, 'DEL'=> 5, };
+$KolosStates{'KO E'} = { 'F'=>$KO+4, 'DEL'=> 5, };
+$KolosStates{'KO F'} = { 'F'=>$KO+5, 'DEL'=> 5, };
+$KolosStates{'KO G'} = { 'F'=>$KO+6, 'DEL'=> 5, };
+
+$KolosStates{'Getup A'} = { 'F'=>$Getup+0, 'DEL'=> 5, };
+$KolosStates{'Getup B'} = { 'F'=>$Getup+1, 'DEL'=> 5, };
+$KolosStates{'Getup C'} = { 'F'=>$Getup+2, 'DEL'=> 5, };
+$KolosStates{'Getup D'} = { 'F'=>$Getup+3, 'DEL'=> 5, };
+$KolosStates{'Getup E'} = { 'F'=>$Getup+4, 'DEL'=> 5, };
+$KolosStates{'Getup F'} = { 'F'=>$Getup+5, 'DEL'=> 5, };
+$KolosStates{'Getup G'} = { 'F'=>$Getup+6, 'DEL'=> 5, };
+$KolosStates{'Getup H'} = { 'F'=>$Getup+7, 'DEL'=> 5, };
+$KolosStates{'Getup I'} = { 'F'=>$Getup+8, 'DEL'=> 5, };
+$KolosStates{'Getup J'} = { 'F'=>$Getup+9, 'DEL'=> 5, };
+$KolosStates{'Getup K'} = { 'F'=>$Getup+10, 'DEL'=> 5, };
+
+$KolosStates{'Matrix A'} = { 'F'=>$Matrix+0, 'DEL'=> 5, 'JUMP'=>40};
+$KolosStates{'Matrix B'} = { 'F'=>$Matrix+2, 'DEL'=> 5, 'JUMP'=>35};
+$KolosStates{'Matrix C'} = { 'F'=>$Matrix+1, 'DEL'=> 5, 'JUMP'=>30};
+$KolosStates{'Matrix D'} = { 'F'=>$Matrix+3, 'DEL'=> 5, 'JUMP'=>25};
+$KolosStates{'Matrix E'} = { 'F'=>$Matrix+5, 'DEL'=> 5, 'JUMP'=>20};
+$KolosStates{'Matrix F'} = { 'F'=>$Matrix+4, 'DEL'=> 5, 'JUMP'=>15};
+$KolosStates{'Matrix G'} = { 'F'=>$Matrix+7, 'DEL'=> 5, 'HIT'=>'Matrix'};
+$KolosStates{'Matrix H'} = { 'F'=>$Matrix+6, 'DEL'=> 5, 'JUMP'=>10};
+$KolosStates{'Matrix I'} = { 'F'=>$Matrix+4, 'DEL'=> 5, 'JUMP'=>10};
+$KolosStates{'Matrix J'} = { 'F'=>$Matrix+5, 'DEL'=> 5, 'JUMP'=>10};
+$KolosStates{'Matrix K'} = { 'F'=>$Matrix+3, 'DEL'=> 5, 'JUMP'=>10};
+$KolosStates{'Matrix L'} = { 'F'=>$Matrix+1, 'DEL'=> 5, 'JUMP'=>10};
+$KolosStates{'Matrix M'} = { 'F'=>$Matrix+2, 'DEL'=> 5, 'JUMP'=>10};
+$KolosStates{'Matrix N'} = { 'F'=>$Matrix+0, 'DEL'=> 5, 'JUMP'=>10};
+$KolosStates{'Matrix O'} = { 'F'=>$Punch1+0, 'DEL'=>50 };
+
+$KolosStates{'Throw A'} = { 'F'=>$Throw+0, 'DEL'=> 5, };
+$KolosStates{'Throw B'} = { 'F'=>$Throw+1, 'DEL'=> 5, };
+$KolosStates{'Throw C'} = { 'F'=>$Throw+2, 'DEL'=> 5, };
+$KolosStates{'Throw D'} = { 'F'=>$Throw+3, 'DEL'=> 5, };
+$KolosStates{'Throw E'} = { 'F'=>$Throw+4, 'DEL'=>15, 'HIT'=>'Throw'};
+$KolosStates{'Throw F'} = { 'F'=>$Throw+5, 'DEL'=> 8, };
+$KolosStates{'Throw G'} = { 'F'=>$Throw+6, 'DEL'=> 8, };
+$KolosStates{'Throw H'} = { 'F'=>$Throw+7, 'DEL'=> 8, };
+$KolosStates{'Throw I'} = { 'F'=>$Throw+8, 'DEL'=> 8, };
+$KolosStates{'Throw J'} = { 'F'=>$Throw+9, 'DEL'=>20, 'TURN'=>1};
+
+$KolosStates{'Burn A'} = { 'F'=>$Burn+0, 'DEL'=> 5, };
+$KolosStates{'Burn B'} = { 'F'=>$Burn+1, 'DEL'=> 5, };
+$KolosStates{'Burn C'} = { 'F'=>$Burn+2, 'DEL'=> 5, };
+$KolosStates{'Burn D'} = { 'F'=>$Burn+3, 'DEL'=> 5, };
+$KolosStates{'Burn E'} = { 'F'=>$Burn+4, 'DEL'=>15, 'HIT'=>'Burn'};
+$KolosStates{'Burn F'} = { 'F'=>$Burn+3, 'DEL'=> 5, };
+$KolosStates{'Burn G'} = { 'F'=>$Burn+2, 'DEL'=> 5, };
+$KolosStates{'Burn H'} = { 'F'=>$Burn+1, 'DEL'=> 5, };
+$KolosStates{'Burn I'} = { 'F'=>$Burn+0, 'DEL'=> 5, };
+
+$KolosStates{'Win A'} = { 'F'=>$Win+0, 'DEL'=> 5, };
+$KolosStates{'Win B'} = { 'F'=>$Win+1, 'DEL'=> 5, };
+$KolosStates{'Win C'} = { 'F'=>$Win+2, 'DEL'=> 5, };
+$KolosStates{'Win D'} = { 'F'=>$Win+3, 'DEL'=> 5, };
+$KolosStates{'Win E'} = { 'F'=>$Win+4, 'DEL'=> 5,
+ 'NEXTST'=>'Win E', };
+
+$KolosStates{'Wink A'} = { 'F'=>$Wink+0, 'DEL'=> 5, };
+$KolosStates{'Wink B'} = { 'F'=>$Wink+1, 'DEL'=> 5, };
+$KolosStates{'Wink C'} = { 'F'=>$Wink+2, 'DEL'=> 5, };
+$KolosStates{'Wink D'} = { 'F'=>$Wink+1, 'DEL'=> 5, };
+$KolosStates{'Wink E'} = { 'F'=>$Wink+0, 'DEL'=> 5, };
+
+$KolosStates{'Jump A'} = { 'F'=>$Crouch+0, 'DEL'=> 5, };
+$KolosStates{'Jump B'} = { 'F'=>$Crouch+1, 'DEL'=> 5, };
+$KolosStates{'Jump C'} = { 'F'=>$Crouch+0, 'DEL'=> 5, 'JUMP'=>'100'};
+$KolosStates{'Jump D'} = { 'F'=>$Crouch+1, 'DEL'=> 5, };
+$KolosStates{'Jump E'} = { 'F'=>$Crouch+2, 'DEL'=> 5, };
+$KolosStates{'Jump F'} = { 'F'=>$Crouch+3, 'DEL'=>15, };
+$KolosStates{'Jump G'} = { 'F'=>$Crouch+2, 'DEL'=> 5, };
+$KolosStates{'Jump H'} = { 'F'=>$Crouch+1, 'DEL'=> 5, };
+$KolosStates{'Jump I'} = { 'F'=>$Crouch+0, 'DEL'=>50, };
+
+$KolosStates{'Jumpfw A'} = { 'F'=>$Crouch+0, 'DEL'=> 5, 'JUMP'=>'120', 'MOVE'=>6 };
+$KolosStates{'Jumpfw B'} = { 'F'=>$Crouch+1, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw C'} = { 'F'=>$Crouch+2, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw D'} = { 'F'=>$Crouch+3, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw E'} = { 'F'=>$Crouch+4, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw F'} = { 'F'=>$Crouch+5, 'DEL'=>10, 'MOVE'=>6 };
+$KolosStates{'Jumpfw G'} = { 'F'=>$Crouch+4, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw H'} = { 'F'=>$Crouch+3, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw I'} = { 'F'=>$Crouch+2, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw J'} = { 'F'=>$Crouch+1, 'DEL'=> 5, 'MOVE'=>6 };
+$KolosStates{'Jumpfw K'} = { 'F'=>$Crouch+0, 'DEL'=> 5, 'MOVE'=>6 };
+
+$KolosStates{'Jumpbw A'} = { 'F'=>$Crouch+0, 'DEL'=> 5, 'JUMP'=>'120', 'MOVE'=>-6 };
+$KolosStates{'Jumpbw B'} = { 'F'=>$Crouch+1, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw C'} = { 'F'=>$Crouch+2, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw D'} = { 'F'=>$Crouch+3, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw E'} = { 'F'=>$Crouch+4, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw F'} = { 'F'=>$Crouch+5, 'DEL'=>10, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw G'} = { 'F'=>$Crouch+4, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw H'} = { 'F'=>$Crouch+3, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw I'} = { 'F'=>$Crouch+2, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw J'} = { 'F'=>$Crouch+1, 'DEL'=> 5, 'MOVE'=>-3 };
+$KolosStates{'Jumpbw K'} = { 'F'=>$Crouch+0, 'DEL'=> 5, 'MOVE'=>-3 };
+
+
+while (($key, $value) = each %KolosStates) {
+ next if defined $value->{'NEXTST'};
+ $lastchar = substr( $key, -1, 1 );
+ $nextst = $key;
+ $lastchar++;
+ substr( $nextst, -1, 1, $lastchar ); # Replace the last character with the next
+ unless ( defined $KolosStates{$nextst} ) {
+ # print "Go to Standby after $key\n";
+ $nextst = 'Standby';
+ }
+ $value->{'NEXTST'} = $nextst;
+}
+
+return 1;
+
diff --git a/data/script/Maci.pl b/data/script/Maci.pl
new file mode 100644
index 0000000..829c582
--- /dev/null
+++ b/data/script/Maci.pl
@@ -0,0 +1,190 @@
+# package Maci;
+
+# UPi's images are scaled by a factor of 0.8
+
+require 'DataHelper.pl';
+use strict;
+
+sub LoadMaci
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "MACIDATA.DAT.pl", 316, 90 );
+%FrameLookup = CreateFrameLookup( scalar @Frames -1,
+"start", 23, "stand", 5, "walk", 14,
+"turn", 9, "falling", 12, "laying", 1,
+"getup", 18, "hurt", 13, "swept", 8,
+"won", 17, "block", 5, "kneeling", 4,
+"onknees", 4, "kneelingpunch",5, "kneelingkick", 6,
+"fun", 9, "threat", 8,
+"highpunch", 5, "lowpunch", 6, "highkick", 7,
+"lowkick", 6, "sweep", 8, "groinkick", 10,
+"kneekick", 7, "elbow", 6, "spin", 11,
+"grenade", 10, "uppercut", 8, "throw", 15,
+"highpunched", 8, "lowpunched", 6, "groinkicked", 14,
+"kneelingpunched",8, "kneelingkicked", 6, "thrown", 12,
+"scissorkick", 15
+);
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'hkickB'=>'Spin',
+'lkickB'=>'Sweep',
+
+'hkickFF'=>'ScissorKick',
+'lpunchBD'=>'Grenade',
+
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingKick',
+'hkick'=>'KneelingKick',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+};
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>5, 'S'=>'+start' },
+{ 'N'=>'Stand', 'DEL'=>7, 'S'=>'+stand,_stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'TURNN'=>1, },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt, hurt 2-1' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won n', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>7, 'S'=>'+fun,-fun', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>7, 'S'=>'threat 2-n, threat n-2', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 1, 106, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch'} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKick', 'DEL'=>5, 'S'=>'+kneelingkick,-kneelingkick', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 6-n,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch,-highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'groinkick 1-7,groinkick 7-1, groinkick 8-10, groinkick 10-8',
+ 'HIT'=>'Groinhit', 'DEL15'=>8, 'DEL16'=>8, 'DEL17'=>8, 'DEL18'=>8, 'DEL19'=>8, 'DEL20'=>8, },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Spin', 'DEL'=>7, 'S'=>'+spin',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Sweep', 'DEL'=>7, 'S'=>'+sweep,-sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade, grenade 1',
+ 'DEL7'=>15, 'DOODAD'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+
+{ 'N'=>'ScissorKick', 'DEL'=>5, 'S'=>'+scissorkick',
+ 'HIT'=>'Uppercut',
+ 'MOVE5'=>3, 'MOVE6'=>4, 'MOVE7'=>4, 'MOVE8'=>4, 'MOVE9'=>4, 'MOVE10'=>4, 'MOVE11'=>3},
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'+falling, laying 1',
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON9'=>{'down'=>'Onknees'},
+ 'CON10'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept,-swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'+kneelingkicked, -kneelingkicked',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'+highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched,-lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 13 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 0, 0 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "spin", 0, 0 );
+
+%States = ( FindShorthands( \%States ), %States );
+
+%::MaciStates = %States;
+@::MaciFrames = @Frames;
+}
+
+LoadMaci();
+
+return 1;
+
diff --git a/data/script/Makefile.am b/data/script/Makefile.am
new file mode 100644
index 0000000..be04e96
--- /dev/null
+++ b/data/script/Makefile.am
@@ -0,0 +1,11 @@
+## Process this file with automake to produce Makefile.in
+
+scriptdatadir = $(pkgdatadir)/script
+scriptdata_DATA = \
+Backend.pl Damage.pl Fighter.pl Ulmar.pl \
+Bence.pl DataHelper.pl FighterStats.pl PlayerInput.pl UPi.pl \
+Collision.pl Descant.pl Kolos.pl QuickSave.pl \
+Cumi.pl Doodad.pl Maci.pl Sirpi.pl Zoli.pl \
+Keys.pl State.pl Grizli.pl
+
+EXTRA_DIST = $(scriptdata_DATA)
diff --git a/data/script/Makefile.in b/data/script/Makefile.in
new file mode 100644
index 0000000..1f0f323
--- /dev/null
+++ b/data/script/Makefile.in
@@ -0,0 +1,209 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+scriptdatadir = $(pkgdatadir)/script
+scriptdata_DATA = Backend.pl Damage.pl Fighter.pl Ulmar.pl Bence.pl DataHelper.pl FighterStats.pl PlayerInput.pl UPi.pl Collision.pl Descant.pl Kolos.pl QuickSave.pl Cumi.pl Doodad.pl Maci.pl Sirpi.pl Zoli.pl Keys.pl State.pl Grizli.pl
+
+
+EXTRA_DIST = $(scriptdata_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(scriptdata_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps data/script/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-scriptdataDATA: $(scriptdata_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(scriptdatadir)
+ @list='$(scriptdata_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(scriptdatadir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(scriptdatadir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(scriptdatadir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(scriptdatadir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-scriptdataDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(scriptdata_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(scriptdatadir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data/script
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-scriptdataDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-scriptdataDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(scriptdatadir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-scriptdataDATA install-scriptdataDATA tags distdir \
+info-am info dvi-am dvi check check-am installcheck-am installcheck \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/data/script/PlayerInput.pl b/data/script/PlayerInput.pl
new file mode 100644
index 0000000..09e8add
--- /dev/null
+++ b/data/script/PlayerInput.pl
@@ -0,0 +1,225 @@
+package PlayerInput;
+
+$KEYTIMEOUT = 80;
+
+sub new {
+ my ($class, $name) = @_;
+ my $self = {
+ 'InputQueue' => [],
+ 'InputPointer' => 0,
+ 'Keys' => [0,0,0,0,0,0,0,0,0],
+ 'KeyTimer' => 0,
+ };
+ bless ($self, $class);
+ return $self;
+}
+
+sub Reset {
+ my ($self) = @_;
+
+ $self->ClearInput;
+ $self->{'Keys'} = [0,0,0,0,0,0,0,0,0];
+ $self->{'KeyTimer'} = 0;
+}
+
+sub ClearInput {
+ my ($self) = @_;
+
+ $self->{'InputQueue'} = [];
+ $self->{'InputPointer'} = 0;
+}
+
+sub Advance {
+ my ($self) = @_;
+ my ($ip, $lastkey);
+
+ $self->{'KeyTimer'} ++;
+ $ip = $self->{'InputPointer'};
+
+ if ($ip > 0) {
+ $lastkey = $self->{'InputQueue'}->[$ip-1];
+ return if ( ($lastkey<5) and ($self->{'Keys'}->[$lastkey]) );
+
+ if ( $self->{'KeyTimer'} > $KEYTIMEOUT )
+ {
+ $self->{'KeyTimer'} = 0;
+ $self->ClearInput;
+ print ".";
+ }
+ }
+}
+
+sub KeyDown {
+ my ($self, $key) = @_;
+
+ ${$self->{'Keys'}}[$key] = 1;
+ ${$self->{'InputQueue'}}[$self->{'InputPointer'}] = $key;
+ $self->{'InputPointer'} += 1;
+ $self->{'KeyTimer'} = 0;
+}
+
+sub KeyUp {
+ my ($self, $key) = @_;
+
+ ${$self->{'Keys'}}[$key] = 0;
+}
+
+
+
+=comment
+
+GetAction returns two scalars: input and modifier.
+
+Input is any of the following:
+ lpunch Low punch
+ hpunch High punch
+ lkick Low kick
+ hkick High kick
+ jump Jump
+ jumpfw Jump forwards (up+forward)
+ jumpbw Jump backwards (up+back)
+ forw Forwards (walk)
+ back Back (walk)
+ down Down (crouch)
+ block Block
+ '' no action
+
+Modifier applies to action buttons (punch and kick) only. It lists the
+non-action buttons pressed before the action button, in reverse order.
+The modifiers are U,D,B,F,X for up, down, back, forwards or block.
+
+E.G. if the player presses down, forwards, low punch, the output is:
+('lpunch', 'FD').
+
+=cut
+
+sub GetAction {
+ my ($self) = @_;
+
+ my $k = $self->{'Keys'};
+ my $q = $self->{'InputQueue'};
+ my $p = $self->{'InputPointer'}-1;
+
+ if ($p<0) # No keys pushed
+ {
+ return 'down' if ($k->[1]);
+ return '';
+ }
+
+ my $lastkey = ${$q}[$p];
+ unless ( ${$k}[$lastkey] )
+ {
+ # Not pushed anymore
+ return 'down' if ($k->[1]);
+ return '';
+ }
+
+ if ($lastkey >=5) # punch or kick
+ {
+ my ($act, $mod, $i);
+ $mod = '';
+
+ if ($lastkey==5) { $act = 'lpunch'; }
+ elsif ($lastkey==6) { $act = 'hpunch'; }
+ elsif ($lastkey==7) { $act = 'lkick'; }
+ else { $act = 'hkick'; }
+
+ # Add previous keys
+
+ for ( $i = $p-1; $i>=0; $i-- )
+ {
+ $lastkey = ${$q}[$i]; # Previous key
+ last if $lastkey>=5; # Only movement keys count
+ if ($lastkey==0) { $mod .= 'U'; }
+ elsif ($lastkey==1) { $mod .= 'D'; }
+ elsif ($lastkey==2) { $mod .= 'B'; }
+ elsif ($lastkey==3) { $mod .= 'F'; }
+ elsif ($lastkey==4) { $mod .= 'X'; }
+ }
+
+ print "$act $mod\n";
+ return ($act,$mod);
+ }
+
+ if ( ${$k}[0] ) # Up
+ {
+ return 'jumpfw' if ${$k}[3];
+ return 'jumpbw' if ${$k}[2];
+ return 'jump';
+ }
+
+ return 'forw' if $lastkey==3;
+ return 'back' if $lastkey==2;
+ return 'down' if $lastkey==1;
+ return 'block' if $lastkey==4;
+}
+
+
+sub ActionAccepted
+{
+ my ($self) = @_;
+
+ my $k = $self->{'Keys'};
+ my $q = $self->{'InputQueue'};
+ my $p = $self->{'InputPointer'}-1;
+
+ return '' if ($p<0); # No keys pushed
+ my $lastkey = ${$q}[$p];
+ return '' unless ${$k}[$lastkey]; # Not pushed anymore
+
+ $self->ClearInput if $lastkey>=5;
+}
+
+
+package main;
+
+
+=comment
+
+The following are interface functions and variables for the C++ code and
+Backend.pl
+
+=cut
+
+$Input1 = new PlayerInput;
+$Input2 = new PlayerInput;
+
+sub KeyDown
+{
+ my ($player, $key) = @_;
+ #print "KeyDown ($player, $key)\n";
+
+ if ( ($key==2) or ($key==3) )
+ {
+ # Map left and right to backward and forward based on DIR
+ my ($dir, $p);
+ $p = $Fighters[$player];
+ $dir = ${$p}{'DIR'};
+ $key = (5 - $key) if ($dir<0);
+ }
+
+ if ($player==0) { $Input1->KeyDown( $key ); }
+ else { $Input2->KeyDown( $key ); }
+}
+
+
+sub KeyUp
+{
+ my ($player, $key) = @_;
+ #print "KeyUp ($player, $key)\n";
+
+ if ( ($key==2) or ($key==3) )
+ {
+ # Map left and right to backward and forward based on DIR
+ my ($dir, $p);
+ $p = $Fighters[$player];
+ $dir = ${$p}{'DIR'};
+ $key = (5 - $key) if ($dir<0);
+ }
+
+ if ($player==0) { $Input1->KeyUp( $key ); }
+ else { $Input2->KeyUp( $key ); }
+}
+
+
+return 1;
diff --git a/data/script/QuickSave.pl b/data/script/QuickSave.pl
new file mode 100644
index 0000000..6bc0411
--- /dev/null
+++ b/data/script/QuickSave.pl
@@ -0,0 +1,104 @@
+use strict;
+
+
+
+# store: Convert a value into printable format for saving
+
+sub store {
+ my $x = shift;
+ my ($t, $i, $key, $value);
+
+ if ( not ref($x) ) { # $x is scalar
+ $t = "'$x'";
+ }
+
+ elsif (ref($x) eq "SCALAR"){ # $x is a scalar reference
+ $t = "\\'$x'";
+ }
+
+ elsif (ref($x) eq "REF"){ # $x is ref of a reference
+ $t = "\\"; # This could be wrong..
+ $t .= store $$x;
+ print("save: Storing ref of ref\n");
+ }
+
+ elsif (ref($x) eq "ARRAY"){ # $x is array ref. -> [...]
+ $t = '[ ';
+ foreach $i (@$x) {
+ $t .= store( $i );
+ $t .= ', ';
+ }
+ $t .= ' ]';
+ }
+
+ elsif (ref($x) eq "HASH"){ # $x is hash ref. -> {...}
+ $t .= '{ ';
+ while (($key, $value) = each %$x ) {
+ $t .= "\t'$key' => ";
+ $t .= store( $value );
+ $t .= ", \n";
+ }
+ $t .= ' }';
+ }
+
+# else { # $x should be a Thing ref
+# foreach $key (@names) {
+# if ( $Thing::things{$key} eq $x ) # Found it!
+# {
+# $t = '$::'.$key;
+# return $t;
+# }
+# }
+# main::Mydebug "Thing::save: ERROR\n";
+# $t = "'ERROR'";
+# }
+
+ return $t;
+}
+
+# save: Saves the game. Uses the %things array.
+=comment
+sub save {
+ local ($fhand) = @_;
+ my ( $i, $item, $name, $key, $value );
+ @names = keys %things; # Just to make sure..
+
+ print $fhand "# Game saved by Thing::save\n\n";
+
+ while( ($name, $item) = each %things ) {
+ print $fhand "new ". ref($item)." '$name';\n";
+ }
+
+ print $fhand "\n";
+
+ while( ($name, $item) = each %things ) {
+ print $fhand "\%\$$name = ( \%\$$name,\n";
+ while (($key, $value)=each %$item) {
+ print $fhand "$key => ";
+ print $fhand store( $value );
+ print $fhand ",\n";
+ }
+ print $fhand ");\n\n";
+ }
+}
+=cut
+
+
+sub QuickSave($$$)
+{
+ my ($prefix, $frameArray, $states) = @_;
+
+ open FILE, ">X$prefix.pl";
+
+ print FILE '$f = ';
+ print FILE store( $frameArray );
+ print FILE ";\n\n@", , $prefix, 'Frames = @{$f}', ";\n\n";
+
+ print FILE '$f = ';
+ print FILE store( $states );
+ print FILE ";\n\n%", , $prefix, 'States = %{$f}', ";\n\n";
+
+ close FILE;
+}
+
+return 1;
diff --git a/data/script/Sirpi.pl b/data/script/Sirpi.pl
new file mode 100644
index 0000000..035de5a
--- /dev/null
+++ b/data/script/Sirpi.pl
@@ -0,0 +1,194 @@
+# package Sirpi;
+
+# Sirpi's images are scaled by a factor of 0.76
+
+require 'DataHelper.pl';
+use strict;
+
+sub LoadSirpi
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "SIRPIDATA.DAT.pl", 250, 110 );
+%FrameLookup = CreateFrameLookup( scalar @Frames -1,
+"start", 20, "stand", 7, "walk", 13,
+"turn", 9, "falling", 14, "laying", 1,
+"getup", 16, "hurt", 13, "swept", 13,
+"won", 10, "block", 5,
+"fun", 8, "threat", 9,
+"kneeling", 4, "onknees", 4,
+"highpunch", 5, "lowpunch", 6, "highkick", 7,
+"lowkick", 6, "groinkick", 7, "sweep", 9,
+"kneekick", 7, "elbow", 6, "spin", 14,
+"kneelingpunch",5, "kneelingkick", 6,
+"grenade", 9, "uppercut", 8, "throw", 22,
+"highpunched", 5, "lowpunched", 5, "groinkicked", 9,
+"kneelingpunched",4, "kneelingkicked", 6, "thrown", 14,
+"specpunch", 13, "funb", 12,
+);
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'hkickB'=>'Spin',
+'lkickB'=>'Sweep',
+
+'lpunchFD'=>'Grenade',
+'hpunchFF'=>'SpecPunch',
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingKick',
+'hkick'=>'KneelingKick',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+};
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>7, 'S'=>'+start' },
+{ 'N'=>'Stand', 'DEL'=>7, 'S'=>'+stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'TURNN'=>1, },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt,_hurt' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won, won n-6, won 7-n, won n-6, won 7-n', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won n', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>8, 'S'=>'fun 1-6, fun 6-4, fun 7-8, fun 8-7, fun 4-6, fun 6-1', 'CON'=>$Con },
+{ 'N'=>'Funb', 'DEL'=>8, 'S'=>'+funb, -funb', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>8, 'S'=>'+threat, threat 3-1', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 2, 80, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch',
+ 'hpunchFF'=>'JumpFire'} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKick', 'DEL'=>5, 'S'=>'+kneelingkick,-kneelingkick', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 5-n,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch,-highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Spin', 'DEL'=>5, 'S'=>'+spin',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Sweep', 'DEL'=>7, 'S'=>'+sweep,-sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade,-grenade',
+ 'DEL12'=>15, 'DOODAD'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+
+{ 'N'=>'SpecPunch', 'DEL'=>5, 'S'=>'+specpunch',
+ 'HIT'=>'Highhit' },
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'falling 1-12, falling 12-10, falling 13-n, laying 1',
+ 'DEL10'=>7, 'DEL11'=>7, 'DEL12'=>7, 'DEL13'=>7, 'DEL14'=>7, 'DEL15'=>7,
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON9'=>{'down'=>'Onknees'},
+ 'CON10'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'+kneelingkicked, -kneelingkicked',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'+highpunched, -highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched,-lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked,-groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 15 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 0, 0 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "swept", 0, 0 ); #?
+TravelingStates( \%FrameLookup, \@Frames, \%States, "spin", 0, 0 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "specpunch", 0, 0 );
+
+%States = ( FindShorthands( \%States ), %States );
+
+%::SirpiStates = %States;
+@::SirpiFrames = @Frames;
+}
+
+LoadSirpi();
+
+return 1;
+
diff --git a/data/script/State.pl b/data/script/State.pl
new file mode 100644
index 0000000..295bcc1
--- /dev/null
+++ b/data/script/State.pl
@@ -0,0 +1,20 @@
+use strict;
+
+sub ParseConfig($)
+{
+ my ($filename) = @_;
+ open CONFFILE, "$filename" or return;
+
+ while (<CONFFILE>)
+ {
+ if ($_ =~ /(\w+)\s*=\s*(\w+)/)
+ {
+ eval( "\$::$1 = '$2';" );
+ }
+ }
+
+ close CONFFILE;
+}
+
+
+return 1;
diff --git a/data/script/UPi.pl b/data/script/UPi.pl
new file mode 100644
index 0000000..85f699d
--- /dev/null
+++ b/data/script/UPi.pl
@@ -0,0 +1,198 @@
+# package UPi;
+
+# UPi's images are scaled by a factor of 0.8
+
+require 'DataHelper.pl';
+use strict;
+
+sub LoadUPi
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "UPIDATA.DAT.pl", 275, 90 );
+%FrameLookup = CreateFrameLookup( scalar @Frames -1,
+"start", 18, "stand", 5, "walk", 14,
+"turn", 8, "falling", 17, "laying", 1,
+"getup", 16, "hurt", 12, "swept", 6,
+"won", 19, "block", 5, "kneeling", 4,
+"onknees", 4, "kneelingpunch",5, "kneelingkick", 5,
+"fun", 5, "funb", 3, "threat", 6,
+"highpunch", 4, "lowpunch", 6, "highkick", 6,
+"lowkick", 5, "sweep", 7, "groinkick", 6,
+"kneekick", 7, "elbow", 7, "spin", 10,
+"grenade", 18, "uppercut", 8, "throw", 15,
+"highpunched", 6, "lowpunched", 5, "groinkicked", 19,
+"kneelingpunched",4, "kneelingkicked", 7, "thrown", 13,
+"cranekick", 9, "burninghands", 13, "kneelingfire", 12,
+);
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'hkickB'=>'Spin',
+'lkickB'=>'Sweep',
+
+'lpunchBD'=>'Grenade',
+'hkickFF'=>'CraneKick',
+'hpunchUB'=>'BurningHands',
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingKick',
+'hkick'=>'KneelingKick',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+'hpunchFF'=>'KneelingFire',
+};
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>5, 'S'=>'start 1-8, start 8-1, start 9-n' },
+{ 'N'=>'Stand', 'DEL'=>7, 'S'=>'+stand,_stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'TURNN'=>1, },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt,-hurt' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won n', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>8, 'S'=>'+fun,-fun', 'CON'=>$Con },
+{ 'N'=>'Funb', 'DEL'=>8, 'S'=>'+funb,-funb', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>5, 'S'=>'+threat,-threat', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 4, 110, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch',
+ 'hpunchFF'=>'JumpFire'} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKick', 'DEL'=>5, 'S'=>'+kneelingkick,-kneelingkick', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 6-n,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch,-highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Spin', 'DEL'=>5, 'S'=>'+spin,-spin',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Sweep', 'DEL'=>7, 'S'=>'+sweep,-sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade',
+ 'DEL12'=>15, 'DOODAD'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+
+{ 'N'=>'CraneKick', 'DEL'=>5, 'S'=>'+cranekick, _cranekick',
+ 'HIT'=>'Uppercut', 'JUMP4'=>60, 'PUSHX4'=>12*16 },
+{ 'N'=>'BurningHands', 'DEL'=>5, 'S'=>'+burninghands', },
+{ 'N'=>'KneelingFire', 'DEL'=>5, 'S'=>'+kneelingfire', 'SITU'=>'Crouch',
+ 'DOODAD'=>$Doodad, 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'JumpFire', 'DEL'=>3, 'S'=> '+kneelingfire, -kneeling',
+ 'DOODAD'=>$Doodad, 'DELN'=>100 },
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'falling 1-11, falling 15-12, falling 12-n, laying 1',
+ 'DEL16'=>7, 'DEL17'=>7, 'DEL18'=>7, 'DEL19'=>7, 'DEL20'=>7, 'DEL21'=>7,
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON8'=>{'down'=>'Onknees'},
+ 'CON8'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept,-swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'kneelingkicked 3-n, kneelingkicked n-3',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'highpunched 2-n, -highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched,-lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 18 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 1, 16 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "won", 0, 0 );
+
+%States = ( FindShorthands( \%States ), %States );
+
+%::UPiStates = %States;
+@::UPiFrames = @Frames;
+}
+
+LoadUPi();
+
+return 1;
+
diff --git a/data/script/Ulmar.pl b/data/script/Ulmar.pl
new file mode 100644
index 0000000..0d14735
--- /dev/null
+++ b/data/script/Ulmar.pl
@@ -0,0 +1,187 @@
+# package Ulmar;
+
+# Ulmar's images are scaled: 0.75
+
+require 'DataHelper.pl';
+use strict;
+
+sub LoadUlmar
+{
+ my ( @Frames, %FrameLookup, %Frames, %States, %Shorthands,
+ $Doodad, $Con, $Con2,
+ @States1,
+ $framedesc, $key, $value, $framename, $nextst, $st, $lastchar, $nextchar );
+
+@Frames = LoadFrames( "ULMARDATA.DAT.pl", 270, 75 );
+%FrameLookup = CreateFrameLookup( scalar @Frames - 1,
+"start", 30, "stand", 6, "walk", 12, "junk",1,
+"turn", 8, "falling", 14, "laying", 1,
+"getup", 20, "hurt", 13, "swept", 9,
+"won", 14, "block", 6, "kneeling", 4,
+"onknees", 4, "kneelingpunch",6, "kneelingkick", 5,
+"fun", 7, "threat", 5, "highpunch", 11,
+"lowpunch", 10, "highkick", 6, "junkb",1,
+"lowkick", 6, "sweep", 10,
+"groinkick", 7, "kneekick", 7, "elbow", 7,
+"spin", 11, "grenade", 10, "uppercut", 9,
+"throw", 34, "highpunched", 6, "lowpunched", 7,
+"groinkicked", 8, "kneelingpunched",5, "kneelingkicked", 6,
+"thrown", 10, "specsomething",9,
+);
+
+
+
+$Doodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$Con = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickBF'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchD'=>'Uppercut',
+'hpunchF'=>'Elbow',
+'hpunchB'=>'Spin',
+'lkickB'=>'Sweep',
+
+'lpunchBD'=>'Grenade',
+'lpunchFBF'=>'SpecSomething',
+};
+
+
+$Con2 = {
+'lkick'=>'KneelingKick',
+'hkick'=>'KneelingKick',
+'hpunch'=>'KneelingUppercut',
+'lpunch'=>'KneelingPunch',
+};
+
+
+
+@States1 = (
+# 1. BASIC MOVES
+
+{ 'N'=>'Start', 'DEL'=>5, 'S'=>'+start 1-8' },
+{ 'N'=>'Stand', 'DEL'=>7, 'S'=>'+stand,_stand', 'CON'=>$Con, 'SITU'=>'Ready' },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn', 'TURNN'=>1, },
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt,-hurt' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won', 'NEXTSTN'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won n', 'NEXTST'=>'Won2', },
+{ 'N'=>'Fun', 'DEL'=>8, 'S'=>'+fun,-fun', 'CON'=>$Con },
+{ 'N'=>'Threat', 'DEL'=>5, 'S'=>'+threat,-threat', 'CON'=>$Con },
+WalkingFrames( \%FrameLookup, \@Frames, 0, 111, $Con ),
+BlockStates( FindLastFrame( \%FrameLookup, 'block' ), 5 ),
+KneelingStates( FindLastFrame( \%FrameLookup, 'kneeling' ),
+ FindLastFrame( \%FrameLookup, 'onknees' ), 7, $Con2 ),
+JumpStates( \%FrameLookup,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch',} ),
+
+# 2. OFFENSIVE MOVES
+
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKick', 'DEL'=>5, 'S'=>'+kneelingkick,-kneelingkick', 'SITU'=>'Crouch',
+ 'HIT'=>'Hit', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingUppercut','DEL'=>5, 'S'=>'kneeling 4-3,uppercut 6-n,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT'=>'Highhit' },
+{ 'N'=>'Spin', 'DEL'=>5, 'S'=>'+spin,-spin',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Sweep', 'DEL'=>7, 'S'=>'+sweep,-sweep',
+ 'HIT'=>'Hit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade,-grenade',
+ 'DEL12'=>15, 'DOODAD10'=>$Doodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+
+{ 'N'=>'SpecSomething', 'DEL'=>5, 'S'=>'+specsomething', },
+
+# 3. HURT MOVES
+
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'+falling, laying 1',
+ 'DELN'=>500, 'NEXTN'=>'Laying', 'SITU'=>'Falling', },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling',
+ 'CON8'=>{'down'=>'Onknees'},
+ 'CON8'=>{'down'=>'Onknees'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling', 'NEXTST'=>'Dead' },
+
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept,-swept' },
+
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'+kneelingkicked, -kneelingkicked',
+ 'SITU'=>'Crouch', 'NEXTSTN'=>'Onknees' },
+
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'+highpunched, -highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched,-lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked, -groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+
+);
+
+
+
+# 2. CREATE STATES
+
+foreach $framedesc (@States1)
+{
+ AddStates( \%States, \%FrameLookup, $framedesc );
+}
+
+
+
+# Automatically add NEXTST for states which don't have one.
+
+FixStates( \%FrameLookup, \%States );
+
+TravelingStates( \%FrameLookup, \@Frames, \%States, "falling", 1, 15 );
+TravelingStates( \%FrameLookup, \@Frames, \%States, "getup", 0, 0 );
+
+%States = ( FindShorthands( \%States ), %States );
+
+%::UlmarStates = %States;
+@::UlmarFrames = @Frames;
+}
+
+LoadUlmar();
+
+return 1;
+
diff --git a/data/script/Zoli.pl b/data/script/Zoli.pl
new file mode 100644
index 0000000..2f6d716
--- /dev/null
+++ b/data/script/Zoli.pl
@@ -0,0 +1,261 @@
+# package Zoli;
+
+# Zoli's images are scaled:
+# First 47 images: 0.75
+# Rest of the images: 0.78 (strange zoomout effect)
+
+require 'DataHelper.pl';
+
+# @ISA = qw(Fighter);
+
+@ZoliFrames = LoadFrames( "ZOLIDATA.DAT.pl", 340, 200 );
+%ZoliFrame = CreateFrameLookup( scalar @ZoliFrames - 1,
+"start", 21, "stand", 4, "walk", 13,
+"turn", 9, "falling", 11, "laying", 1,
+"getup", 14, "hurt", 16, "swept", 6,
+"won", 11, "block", 5, "kneeling", 4,
+"onknees", 1, "kneelingpunch",7, "kneelingkick", 4,
+"fun", 7, "threat", 9, "highpunch", 5,
+"lowpunch", 6, "highkick", 8, "lowkick", 6,
+"groinkick", 6, "kneekick", 6, "elbow", 5,
+"spin", 11, "grenade", 15, "uppercut", 9,
+"throw", 16, "highpunched", 9, "lowpunched", 4,
+"groinkicked", 13, "kneelingpunched",4, "kneelingkicked", 3,
+"thrown", 4, "specpunch", 13,
+);
+
+
+
+$ZoliDoodad =
+ { 'T' => 1,
+ 'W' => 64,
+ 'H' => 64,
+ 'SX' => 15,
+ 'SY' => 0,
+ 'FRAMES'=> 6,
+ 'SA' => 1/25,
+ };
+
+
+$ZCon = {
+'forw'=>'Walk',
+'back'=>'Back',
+'jump'=>'Jump',
+'jumpfw'=>'JumpFW',
+'jumpbw'=>'JumpBW',
+'block'=>'Block',
+'down'=>'Kneeling',
+'hpunch'=>'HighPunch',
+'lpunch'=>'LowPunch',
+'hkick'=>'HighKick',
+'lkick'=>'LowKick',
+'lkickFB'=>'GroinKick',
+'lkickF'=>'KneeKick',
+'hpunchF'=>'Elbow',
+'hpunchB'=>'SpinPunch',
+'lpunchBD'=>'Grenade',
+'hpunchD'=>'Uppercut',
+'hpunchFF'=>'SpecPunch',
+};
+
+
+
+
+@ZoliStates1 = (
+{ 'N'=>'Start', 'DEL'=>5, 'S'=>'+start' },
+{ 'N'=>'Stand', 'DEL'=>10, 'S'=>'+stand', 'CON'=>$ZCon, 'SITU'=>'Ready' },
+{ 'N'=>'Walk', 'DEL'=>5, 'S'=>'+walk, walk 3-1', 'CON'=>$ZCon },
+{ 'N'=>'Back', 'DEL'=>5, 'S'=>'walk 1-3,walk 13-1', 'CON'=>$ZCon },
+{ 'N'=>'Turn', 'DEL'=>5, 'S'=>'+turn',
+ 'TURNN'=>1, },
+{ 'N'=>'Falling', 'DEL'=>5, 'S'=>'+falling',
+ 'DEL11'=>500, 'NEXT11'=>'Laying', 'SITU'=>'Falling' }, #, 'DELTAX'=>-20, },
+{ 'N'=>'Laying', 'DEL'=>1000,'S'=>'+laying',
+ 'SITU'=>'Falling' },
+{ 'N'=>'Getup', 'DEL'=>5, 'S'=>'+getup',
+ 'SITU'=>'Falling', # 'DELTAX'=>11,
+ 'CON8'=>{'down'=>'Kneeling 5'},
+ 'CON8'=>{'down'=>'Kneeling 5'},
+},
+{ 'N'=>'Dead', 'DEL'=>10000, 'S'=>'laying 1',
+ 'SITU'=>'Falling' },
+
+{ 'N'=>'Hurt', 'DEL'=>8, 'S'=>'+hurt' },
+{ 'N'=>'Swept', 'DEL'=>5, 'S'=>'+swept,-swept' },
+{ 'N'=>'Won', 'DEL'=>8, 'S'=>'+won',
+ 'NEXTST11'=> 'Won2' },
+{ 'N'=>'Won2', 'DEL'=>1000,'S'=>'won 11',
+ 'NEXTST'=>'Won2',
+},
+{ 'N'=>'Block', 'DEL'=>3, 'S'=>'+block,_block', 'BLOCK5'=>1,
+ 'NEXTST1'=>'Stand', 'CON1'=>{'block'=>'Block 2'},
+ 'NEXTST2'=>'Block 1', 'CON2'=>{'block'=>'Block 3'},
+ 'NEXTST3'=>'Block 2', 'CON3'=>{'block'=>'Block 4'},
+ 'NEXTST4'=>'Block 3', 'CON4'=>{'block'=>'Block 5'},
+ 'NEXTST5'=>'Block 6', 'CON5'=>{'block'=>'Block 5'},
+ 'CON6'=>{'block'=>'Block 5'},
+ 'CON7'=>{'block'=>'Block 6'},
+ 'CON8'=>{'block'=>'Block 7'},
+ 'CON9'=>{'block'=>'Block 8'},
+},
+
+{ 'N'=>'Kneeling', 'DEL'=>5, 'S'=>'+kneeling,+onknees,-kneeling',
+ 'SITU'=>'Crouch',
+ 'NEXTST1'=>'Stand', 'CON1'=>{"down"=>"Kneeling 2"},
+ 'NEXTST2'=>'Kneeling 1', 'CON2'=>{"down"=>"Kneeling 3"},
+ 'NEXTST3'=>'Kneeling 2', 'CON3'=>{"down"=>"Kneeling 4"},
+ 'NEXTST4'=>'Kneeling 3', 'CON4'=>{"down"=>"Kneeling 5"},
+ 'NEXTST5'=>'Kneeling 4', 'CON5'=>{"down"=>"Kneeling 5",
+ 'lkick'=>'KneelingKick', 'hkick'=>'KneelingKick', 'hpunch'=>'Uppercut 6', 'lpunch'=>'KneelingPunch' },
+ 'CON6'=>{"down"=>"Kneeling 5"},
+ 'CON7'=>{"down"=>"Kneeling 6"},
+ 'CON8'=>{"down"=>"Kneeling 7"},
+ 'CON9'=>{"down"=>"Kneeling 8"},
+}, # Should be much lighter
+{ 'N'=>'KneelingPunch', 'DEL'=>5, 'S'=>'+kneelingpunch,-kneelingpunch',
+ 'SITU'=>'Crouch',
+ 'HIT7'=>'Hit', 'NEXTST14'=>'Kneeling 5' },
+{ 'N'=>'KneelingKick', 'DEL'=>8, 'S'=>'+kneelingkick,-kneelingkick',
+ 'SITU'=>'Crouch',
+ 'HIT4'=>'Hit', 'NEXTST8'=>'Kneeling 5' },
+{ 'N'=>'KneelingPunched', 'DEL'=>5, 'S'=>'+kneelingpunched,-kneelingpunched',
+ 'SITU'=>'Crouch', 'NEXTST8'=>'Kneeling 5' },
+{ 'N'=>'KneelingKicked', 'DEL'=>5, 'S'=>'+kneelingkicked,-kneelingkicked',
+ 'SITU'=>'Crouch', 'NEXTST6'=>'Kneeling 5' },
+{ 'N'=>'KneelingKicked','DEL'=>5, 'S'=>'+kneelingkicked,-kneelingkicked' },
+
+JumpStates( \%ZoliFrame,
+ {'lkick'=>'JumpKick', 'hkick'=>'JumpKick',
+ 'lpunch'=>'JumpPunch', 'hpunch'=>'JumpPunch'} ),
+
+
+{ 'N'=>'Fun', 'DEL'=>8, 'S'=>'fun 7-6,+fun', 'CON'=>$ZCon },
+{ 'N'=>'Threat', 'DEL'=>8, 'S'=>'threat 1-7', 'CON'=>$ZCon }, # Threat 8-9 are bad.
+{ 'N'=>'HighPunch', 'DEL'=>5, 'S'=>'+highpunch,-highpunch',
+ 'HIT5'=>'Highhit' },
+{ 'N'=>'LowPunch', 'DEL'=>5, 'S'=>'+lowpunch,-lowpunch',
+ 'HIT6'=>'Hit' },
+{ 'N'=>'HighKick', 'DEL'=>5, 'S'=>'+highkick,-highkick',
+ 'HIT8'=>'Hit' },
+{ 'N'=>'LowKick', 'DEL'=>5, 'S'=>'+lowkick,-lowkick',
+ 'HIT6'=>'Leghit' },
+{ 'N'=>'GroinKick', 'DEL'=>5, 'S'=>'+groinkick,-groinkick',
+ 'HIT6'=>'Groinhit' },
+{ 'N'=>'KneeKick', 'DEL'=>5, 'S'=>'+kneekick,-kneekick',
+ 'HIT6'=>'Hit' },
+{ 'N'=>'Elbow', 'DEL'=>5, 'S'=>'+elbow,-elbow',
+ 'HIT5'=>'Highhit' },
+{ 'N'=>'SpinPunch', 'DEL'=>4, 'S'=>'+spin,-spin',
+ 'HIT11'=>'Highhit' },
+{ 'N'=>'Grenade', 'DEL'=>5, 'S'=>'+grenade',
+ 'DEL12'=>15, 'DOODAD12'=>$ZoliDoodad },
+{ 'N'=>'Uppercut', 'DEL'=>5, 'S'=>'+uppercut,-uppercut',
+ 'HIT9'=>'Uppercut' },
+{ 'N'=>'Throw', 'DEL'=>8, 'S'=>'+throw' },
+{ 'N'=>'HighPunched', 'DEL'=>8, 'S'=>'+highpunched' },
+{ 'N'=>'LowPunched', 'DEL'=>5, 'S'=>'+lowpunched,-lowpunched' },
+{ 'N'=>'GroinKicked', 'DEL'=>7, 'S'=>'+groinkicked' },
+{ 'N'=>'Thrown', 'DEL'=>5, 'S'=>'+thrown' },
+{ 'N'=>'SpecPunch', 'DEL'=>5, 'S'=>'+specpunch', 'DEL8'=>15, 'DELTAX13'=>74,
+ 'HIT8'=>'Uppercut' },
+);
+
+
+
+# 2. CREATE STATES: %ZoliStates
+
+foreach $framedesc (@ZoliStates1)
+{
+ AddStates( \%ZoliStates, \%ZoliFrame, $framedesc );
+}
+
+#$ZoliStates{'Standby'} =
+#{ 'F'=>'stand1', 'DEL'=> 25, 'CON'=> $KCon, 'NEXTST'=>'JumpFW 1' };
+
+
+
+# Automatically add STUFF to Walk and Back
+
+for ( $i=4; $i<=13; ++$i )
+{
+ $j = $ZoliFrame{"walk$i"};
+ OffsetFrame( $ZoliFrames[$j], -($i-4)*16, 0 );
+}
+
+#for ( $i=1; $i<=11; ++$i )
+#{
+# $j = $ZoliFrame{"falling$i"};
+# OffsetFrame( $ZoliFrames[$j], $i*18, 0 );
+#}
+
+#for ( $i=1; $i<=14; ++$i )
+#{
+# $j = $ZoliFrame{"getup$i"};
+# OffsetFrame( $ZoliFrames[$j], 198 - $i*11, 0 );
+#}
+#$j = $ZoliFrame{"laying1"};
+#OffsetFrame( $ZoliFrames[$j], 198, 0 );
+
+for ( $i=1; $i<=3; ++$i )
+{
+ $j = $i+1;
+ $ZoliStates{"Walk $i"}->{NEXTST} = "Stand";
+ $ZoliStates{"Walk $i"}->{CON} = { %{$ZCon}, 'forw'=>"Walk $j" };
+ $ZoliStates{"Back $i"}->{NEXTST} = "Stand";
+ $ZoliStates{"Back $i"}->{CON} = { %{$ZCon}, 'back'=>"Back $j" };
+}
+
+for ( $i=4; $i<=13; ++$i )
+{
+ $j = $i+1;
+ $j = 4 if $j == 14;
+ $ZoliStates{"Walk $i"}->{MOVE} = 4;
+ $ZoliStates{"Walk $i"}->{NEXTST} = "Walk 14";
+ $ZoliStates{"Walk $i"}->{CON} = { %{$ZCon}, 'forw'=>"Walk $j" };
+ $ZoliStates{"Back $i"}->{MOVE} = -4;
+ $ZoliStates{"Back $i"}->{NEXTST} = "Back 14";
+ $ZoliStates{"Back $i"}->{CON} = { %{$ZCon}, 'back'=>"Back $j" };
+}
+
+
+# Automatically add NEXTST for states which don't have one.
+
+while (($key, $value) = each %ZoliStates) {
+ $framename = $value->{'F'};
+ unless ( $framename =~/^\d+$/ )
+ {
+ # Convert non-numeric frames to their numeric counterparts.
+ die "Can't find image $framename in frame $key" unless defined $ZoliFrame{ $framename };
+ $value->{'F'} = $ZoliFrame{ $value->{'F'} };
+ }
+
+ ($st,$lastchar) = $key =~ /(\w+)\s+(\d+)/;
+
+ unless ( defined $value->{'NEXTST'} )
+ {
+ $nextchar = $lastchar + 1;
+ $nextst = "$st $nextchar";
+ unless ( defined $ZoliStates{$nextst} ) {
+ # print "Go to Standby after $key\n";
+ $nextst = 'Stand';
+ }
+ $value->{'NEXTST'} = $nextst;
+ }
+
+ print "$key has no lastchar" unless defined $lastchar;
+ if ( $lastchar == 1 )
+ {
+ $ZoliShorthands{$st} = $ZoliStates{$key};
+ }
+}
+
+
+TravelingStates( \%ZoliFrame, \@ZoliFrames, \%ZoliStates, "falling", 1, 12 );
+TravelingStates( \%ZoliFrame, \@ZoliFrames, \%ZoliStates, "getup", 1, 14 );
+TravelingStates( \%ZoliFrame, \@ZoliFrames, \%ZoliStates, "specpunch", 0, 0 );
+#$frameLookup, $frameArray, $states, $frameName, $from, $to
+
+%ZoliStates = ( %ZoliShorthands, %ZoliStates );
+
+return 1;
+
diff --git a/data/sound/Makefile.am b/data/sound/Makefile.am
new file mode 100644
index 0000000..6902395
--- /dev/null
+++ b/data/sound/Makefile.am
@@ -0,0 +1,15 @@
+## Process this file with automake to produce Makefile.in
+
+sounddatadir = $(pkgdatadir)/sound
+sounddata_DATA = \
+2nd_pm.s3m Last_Ninja_-_The_Wilderness.mid strange_button.voc \
+alarm.voc magic.voc strange_quack.voc \
+ba_gooock.voc thump3.voc aroooga.voc \
+bowling.voc pop.voc thump.voc \
+car_start.voc shades_rollup.voc thump.wav \
+crashhh.voc slip4.voc woman_screams.voc \
+ding.voc splat2.voc woosh.voc \
+evil_laughter.voc splat_.voc woosh.wav \
+splat.wav machine_start.voc
+
+EXTRA_DIST = $(sounddata_DATA)
diff --git a/data/sound/Makefile.in b/data/sound/Makefile.in
new file mode 100644
index 0000000..5c6e89f
--- /dev/null
+++ b/data/sound/Makefile.in
@@ -0,0 +1,209 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+sounddatadir = $(pkgdatadir)/sound
+sounddata_DATA = 2nd_pm.s3m Last_Ninja_-_The_Wilderness.mid strange_button.voc alarm.voc magic.voc strange_quack.voc ba_gooock.voc thump3.voc aroooga.voc bowling.voc pop.voc thump.voc car_start.voc shades_rollup.voc thump.wav crashhh.voc slip4.voc woman_screams.voc ding.voc splat2.voc woosh.voc evil_laughter.voc splat_.voc woosh.wav splat.wav machine_start.voc
+
+
+EXTRA_DIST = $(sounddata_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(sounddata_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps data/sound/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-sounddataDATA: $(sounddata_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(sounddatadir)
+ @list='$(sounddata_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sounddatadir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(sounddatadir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(sounddatadir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(sounddatadir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-sounddataDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(sounddata_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(sounddatadir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = data/sound
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-sounddataDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-sounddataDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(sounddatadir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-sounddataDATA install-sounddataDATA tags distdir \
+info-am info dvi-am dvi check check-am installcheck-am installcheck \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..e9de238
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ chmodcmd=""
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/missing b/missing
new file mode 100755
index 0000000..22e101a
--- /dev/null
+++ b/missing
@@ -0,0 +1,198 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.in; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing - GNU libit 0.0"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`$configure_ac'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`$configure_ac'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`$configure_ac'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case "$f" in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ makeinfo)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequirements for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..8a6a317
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.1 2003/09/01 19:30:18 upi Exp $
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/openmortal.lsm b/openmortal.lsm
new file mode 100644
index 0000000..7ea5ca5
--- /dev/null
+++ b/openmortal.lsm
@@ -0,0 +1,14 @@
+Begin3
+Title: openmortal
+Version: 0.3
+Entered-date:
+Description: Parody of the original fighting game "Mortal Kombat"
+Keywords:
+Author: upi <upi@apocalypse.rulez.org>
+Maintained-by: upi <upi@apocalypse.rulez.org>
+Primary-site: http://apocalypse.rulez.org/~upi/Mortal
+Home-page: http://apocalypse.rulez.org/~upi/Mortal
+Original-site: http://apocalypse.rulez.org/~upi/Mortal
+Platforms: Linux and other Unices
+Copying-policy: GNU Public License
+End
diff --git a/src/Audio.cpp b/src/Audio.cpp
new file mode 100644
index 0000000..1401623
--- /dev/null
+++ b/src/Audio.cpp
@@ -0,0 +1,256 @@
+/***************************************************************************
+ Audio.cpp - description
+ -------------------
+ begin : Sat Jul 26 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include "Audio.h"
+#include "State.h"
+#include "common.h"
+
+#include <SDL/SDL_mixer.h>
+
+#include <string>
+#include <map>
+
+
+typedef std::map<std::string,Mix_Chunk*> SampleMap;
+typedef std::map<std::string,Mix_Music*> MusicMap;
+typedef SampleMap::iterator SampleMapIterator;
+typedef MusicMap::iterator MusicMapIterator;
+
+
+MszAudio* Audio = NULL;
+
+
+class MszAudioPriv
+{
+public:
+ bool m_bAudioOk;
+ int m_iNumChannels;
+ SampleMap m_oSamples;
+ MusicMap m_oMusics;
+};
+
+
+
+#define SELF (*m_poPriv)
+#define CHECKOK if ( ! m_poPriv->m_bAudioOk ) return;
+
+
+MszAudio::MszAudio()
+{
+ Audio = this;
+ m_poPriv = new MszAudioPriv;
+ m_poPriv->m_bAudioOk = false;
+ m_poPriv->m_iNumChannels = 0;
+
+ SDL_version compile_version;
+ const SDL_version *link_version;
+ MIX_VERSION(&compile_version);
+ debug( "compiled with SDL_mixer version: %d.%d.%d\n",
+ compile_version.major, compile_version.minor, compile_version.patch);
+
+ link_version=Mix_Linked_Version();
+ debug("running with SDL_mixer version: %d.%d.%d\n",
+ link_version->major, link_version->minor, link_version->patch);
+ if ( Mix_OpenAudio( MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT,
+ 2 /*stereo*/, 1024*2 /*chunksize*/ ) < 0 )
+ {
+ debug("Mix_OpenAudio: %s\n", Mix_GetError());
+ SELF.m_bAudioOk = false;
+ }
+ else
+ {
+ SELF.m_bAudioOk = true;
+ }
+
+ m_poPriv->m_iNumChannels = Mix_AllocateChannels(8);
+}
+
+
+MszAudio::~MszAudio()
+{
+ delete m_poPriv;
+ m_poPriv = NULL;
+}
+
+
+void MszAudio::LoadSample( const char* a_pcFilename, const char* a_pcSampleName )
+{
+ CHECKOK;
+
+ std::string sSampleName( a_pcSampleName ? a_pcSampleName : a_pcFilename );
+ std::string sSampleFile = DATADIR;
+ sSampleFile += "/sound/";
+ sSampleFile += a_pcFilename;
+
+ if ( m_poPriv->m_oSamples.count( sSampleName ) )
+ {
+ debug( "Key %s already loaded", a_pcSampleName );
+ return;
+ }
+
+ Mix_Chunk *poSample;
+ poSample=Mix_LoadWAV(sSampleFile.c_str());
+ if(!poSample)
+ {
+ debug("Mix_LoadWAV: %s\n", Mix_GetError());
+ return;
+ }
+
+ m_poPriv->m_oSamples[ sSampleName ] = poSample;
+}
+
+
+
+void MszAudio::UnloadSample( const char* a_pcSampleName )
+{
+ SampleMapIterator it = m_poPriv->m_oSamples.find( a_pcSampleName );
+ if ( m_poPriv->m_oSamples.end() == it )
+ {
+ debug( "UnloadSample: sample %s not found", a_pcSampleName );
+ return;
+ }
+
+ Mix_FreeChunk( (*it).second );
+ m_poPriv->m_oSamples.erase( it );
+}
+
+
+void MszAudio::PlaySample( const char* a_pcSampleName )
+{
+ Mix_Chunk* poSample;
+ SampleMapIterator it = m_poPriv->m_oSamples.find(a_pcSampleName);
+ if ( m_poPriv->m_oSamples.end() == it )
+ {
+ // Try to load the sample..
+ LoadSample( a_pcSampleName );
+
+ it = m_poPriv->m_oSamples.find(a_pcSampleName);
+ if ( m_poPriv->m_oSamples.end() == it )
+ {
+ debug( "PlaySample: sample %s not found", a_pcSampleName );
+ return;
+ }
+ }
+
+ poSample = (*it).second;
+
+ int iVolume = g_oState.m_iSoundVolume * 128 / 100;
+ if ( poSample->volume != iVolume )
+ {
+ Mix_VolumeChunk( poSample, iVolume );
+ }
+
+ if ( -1 == Mix_PlayChannel( -1, poSample, 0 ) )
+ {
+ debug( "PlaySample: Mix_PlayChannel: %s\n",Mix_GetError());
+ }
+}
+
+
+void MszAudio::PlayFile( const char* a_pcFileName )
+{
+ Mix_Chunk *poSample;
+ poSample=Mix_LoadWAV("sample.wav");
+ if(!poSample)
+ {
+ debug("Mix_LoadWAV: %s\n", Mix_GetError());
+ return;
+ }
+ if ( -1 == Mix_PlayChannel( -1, poSample, 0 ) )
+ {
+ debug( "PlaySample: Mix_PlayChannel: %s\n",Mix_GetError());
+ }
+ Mix_FreeChunk( poSample );
+}
+
+
+void MszAudio::LoadMusic( const char* a_pcFilename, const char* a_pcMusicName )
+{
+ CHECKOK;
+
+ std::string sMusicName( a_pcMusicName ? a_pcMusicName : a_pcFilename );
+ std::string sMusicFile = DATADIR;
+ sMusicFile += "/sound/";
+ sMusicFile += a_pcFilename;
+
+ if ( m_poPriv->m_oMusics.count( sMusicName ) )
+ {
+ debug( "Key %s already loaded", a_pcMusicName );
+ return;
+ }
+
+ Mix_Music *poMusic;
+ poMusic=Mix_LoadMUS(sMusicFile.c_str());
+ if(!poMusic)
+ {
+ debug("Mix_LoadMUS: %s\n", Mix_GetError());
+ return;
+ }
+
+ m_poPriv->m_oMusics[ sMusicName ] = poMusic;
+}
+
+
+void MszAudio::UnloadMusic( const char* a_pcMusicName )
+{
+ MusicMapIterator it = m_poPriv->m_oMusics.find( a_pcMusicName );
+ if ( m_poPriv->m_oMusics.end() == it )
+ {
+ debug( "UnloadMusic: music %s not found", a_pcMusicName );
+ return;
+ }
+
+ Mix_FreeMusic( (*it).second );
+ m_poPriv->m_oMusics.erase( it );
+}
+
+
+void MszAudio::PlayMusic( const char* a_pcMusicName )
+{
+ MusicMapIterator it = m_poPriv->m_oMusics.find( a_pcMusicName );
+ if ( m_poPriv->m_oMusics.end() == it )
+ {
+ debug( "PlayMusic: music %s not found", a_pcMusicName );
+ return;
+ }
+
+ SetMusicVolume( g_oState.m_iMusicVolume );
+ //Mix_PlayMusic( (*it).second, -1 );
+ Mix_FadeInMusic( (*it).second, -1, 100 );
+}
+
+
+void MszAudio::FadeMusic( int a_iMilliSec )
+{
+ Mix_FadeOutMusic( a_iMilliSec );
+}
+
+
+void MszAudio::SetMusicVolume( int a_iVolume )
+{
+ Mix_VolumeMusic( a_iVolume * 128 / 100 );
+}
+
+
+void MszAudio::StopMusic()
+{
+ Mix_HaltMusic();
+}
+
+
+bool MszAudio::IsMusicPlaying()
+{
+ return Mix_PlayingMusic();
+}
+
+
+
+
+
+
+
diff --git a/src/Audio.h b/src/Audio.h
new file mode 100644
index 0000000..cd90f56
--- /dev/null
+++ b/src/Audio.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+ Audio.h - description
+ -------------------
+ begin : Sat Jul 26 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#ifndef MSZ_AUDIO_H
+#define MSZ_AUDIO_H
+
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+
+class MszAudioPriv;
+
+
+class MszAudio
+{
+public:
+ MszAudio();
+ ~MszAudio();
+
+public:
+ // Sample related methods
+
+ void LoadSample( const char* a_pcFilename, const char* a_pcSampleName=NULL );
+ void UnloadSample( const char* a_pcSampleName );
+ void PlaySample( const char* a_pcSampleName );
+ void PlayFile( const char* a_pcFilename );
+
+ // Music related methods
+
+ void LoadMusic( const char* a_pcFilename, const char* a_pcMusicName=NULL );
+ void UnloadMusic( const char* a_pcMusicName );
+ void PlayMusic( const char* a_pcMusicName );
+ void FadeMusic( int a_iMilliSec );
+ void SetMusicVolume( int a_iVolume );
+ void StopMusic();
+ bool IsMusicPlaying();
+
+protected:
+ // Attributes
+
+ MszAudioPriv* m_poPriv;
+};
+
+
+extern MszAudio* Audio;
+
+#endif // ifdef MSZ_AUDIO_H
diff --git a/src/Backend.cpp b/src/Backend.cpp
new file mode 100644
index 0000000..0f82f2a
--- /dev/null
+++ b/src/Backend.cpp
@@ -0,0 +1,329 @@
+/***************************************************************************
+ Backend.cpp - description
+ -------------------
+ begin : Mon Dec 9 2002
+ copyright : (C) 2002 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#include "common.h"
+#include "Backend.h"
+#include "Audio.h"
+
+#include <string>
+#include <stdarg.h>
+
+
+/***************************************************************************
+ PUBLIC EXPORTED VARIABLES
+***************************************************************************/
+
+PerlInterpreter* my_perl;
+Backend g_oBackend;
+
+
+/***************************************************************************
+ PRIVATE VARIABLES (perl variable space)
+***************************************************************************/
+
+SV
+ *perl_bgx, *perl_bgy,
+ *perl_p1x, *perl_p1y, *perl_p1f, *perl_p1h,
+ *perl_p2x, *perl_p2y, *perl_p2f, *perl_p2h,
+ *perl_time, *perl_over, *perl_ko;
+
+SV
+ *perl_doodad_x, *perl_doodad_y,
+ *perl_doodad_t, *perl_doodad_f,
+ *perl_doodad_text;
+
+SV
+ *perl_sound;
+
+
+
+/***************************************************************************
+ BACKEND CLASS IMPLEMENTATION
+***************************************************************************/
+
+Backend::Backend()
+{
+ m_iBgX = m_iBgY = 0;
+ m_iNumDoodads = m_iNumSounds = 0;
+ for ( int i=0; i<2; ++i )
+ {
+ m_aoPlayers[i].m_iX = m_aoPlayers[i].m_iY = 0;
+ m_aoPlayers[i].m_iFrame = 0;
+ m_aoPlayers[i].m_iHitPoints = 0;
+ }
+}
+
+
+Backend::~Backend()
+{
+ if ( NULL != my_perl )
+ {
+ perl_destruct( my_perl );
+ perl_free( my_perl );
+ my_perl = NULL;
+ }
+}
+
+
+bool Backend::Construct()
+{
+ if ( my_perl != NULL )
+ {
+ // Already inited
+ return false;
+ }
+
+ perl_bgx = NULL;
+ perl_doodad_x = NULL;
+
+ std::string sFileName = DATADIR;
+ sFileName += "/script";
+
+ chdir( sFileName.c_str() );
+
+ char *perl_argv[] = {"", "Backend.pl"};
+ my_perl = perl_alloc();
+ if ( my_perl == NULL )
+ {
+ return false;
+ }
+
+ perl_construct( my_perl );
+ if ( perl_parse( my_perl, NULL, 2, perl_argv, (char**)NULL ) )
+ {
+ char *error = SvPV_nolen(get_sv("@", FALSE));
+ fprintf( stderr, "%s", error );
+ return false;
+ }
+
+ if ( perl_run( my_perl ) )
+ {
+ char *error = SvPV_nolen(get_sv("@", FALSE));
+ fprintf( stderr, "%s", error );
+ return false;
+ }
+
+ return true;
+}
+
+
+void Backend::PerlEvalF( const char* a_pcFormat, ... )
+{
+ va_list ap;
+ va_start( ap, a_pcFormat );
+
+ char acBuffer[1024];
+ vsnprintf( acBuffer, 1023, a_pcFormat, ap );
+ acBuffer[1023] = 0;
+ PERLEVAL(acBuffer);
+
+ va_end( ap );
+}
+
+
+
+void Backend::AdvancePerl()
+{
+ PERLEVAL("GameAdvance();");
+}
+
+
+
+void Backend::ReadFromPerl()
+{
+ if ( perl_bgx == NULL )
+ {
+ perl_bgx = get_sv("bgx", TRUE);
+ perl_bgy = get_sv("bgy", TRUE);
+ perl_p1x = get_sv("p1x", TRUE);
+ perl_p1y = get_sv("p1y", TRUE);
+ perl_p1f = get_sv("p1f", TRUE);
+ perl_p1h = get_sv("p1h", TRUE);
+ perl_p2x = get_sv("p2x", TRUE);
+ perl_p2y = get_sv("p2y", TRUE);
+ perl_p2f = get_sv("p2f", TRUE);
+ perl_p2h = get_sv("p2h", TRUE);
+ perl_time= get_sv("time", TRUE);
+ perl_over= get_sv("over", TRUE);
+ perl_ko = get_sv("ko", TRUE);
+ }
+
+ m_iBgX = SvIV( perl_bgx );
+ m_iBgY = SvIV( perl_bgy );
+ m_aoPlayers[0].m_iX = SvIV( perl_p1x );
+ m_aoPlayers[0].m_iY = SvIV( perl_p1y );
+ m_aoPlayers[0].m_iFrame = SvIV( perl_p1f );
+ m_aoPlayers[0].m_iHitPoints = SvIV( perl_p1h ) / 10;
+ m_aoPlayers[1].m_iX = SvIV( perl_p2x );
+ m_aoPlayers[1].m_iY = SvIV( perl_p2y );
+ m_aoPlayers[1].m_iFrame = SvIV( perl_p2f );
+ m_aoPlayers[1].m_iHitPoints = SvIV( perl_p2h ) / 10;
+ m_iGameTime = SvIV( perl_time );
+ m_iGameOver = SvIV( perl_over );
+ m_bKO = SvIV( perl_ko );
+
+ // READ DOODAD DATA
+
+ if ( perl_doodad_x == NULL )
+ {
+ perl_doodad_x = get_sv("doodad_x", TRUE);
+ perl_doodad_y = get_sv("doodad_y", TRUE);
+ perl_doodad_t = get_sv("doodad_t", TRUE);
+ perl_doodad_f = get_sv("doodad_f", TRUE);
+ perl_doodad_text = get_sv("doodad_text", TRUE);
+ }
+
+ for ( m_iNumDoodads=0; m_iNumDoodads<MAXDOODADS; ++m_iNumDoodads )
+ {
+ PERLEVAL("GetNextDoodadData();");
+
+ SDoodad& oDoodad = m_aoDoodads[m_iNumDoodads];
+
+ oDoodad.m_iType = SvIV(perl_doodad_t);
+
+ if ( oDoodad.m_iType < 0 )
+ {
+ break;
+ }
+
+ oDoodad.m_iX = SvIV(perl_doodad_x);
+ oDoodad.m_iY = SvIV(perl_doodad_y);
+ oDoodad.m_iFrame = SvIV(perl_doodad_f);
+
+ if ( oDoodad.m_iType == 0 )
+ {
+ oDoodad.m_sText = SvPV_nolen(perl_doodad_text);
+ }
+ else
+ {
+ oDoodad.m_sText.clear();
+ }
+ }
+
+
+ // READ SOUND DATA
+
+ if ( perl_sound == NULL )
+ {
+ perl_sound = get_sv("sound", TRUE);
+ }
+
+ for ( m_iNumSounds=0; m_iNumSounds<MAXSOUNDS; ++m_iNumSounds )
+ {
+ PERLEVAL("GetNextSoundData();");
+ const char* pcSound = SvPV_nolen(perl_sound);
+
+ if ( NULL == pcSound
+ || 0 == *pcSound )
+ {
+ break;
+ }
+
+ m_asSounds[ m_iNumSounds ] = pcSound;
+ //Audio->PlaySample( pcSound );
+ }
+}
+
+
+void Backend::PlaySounds()
+{
+ for ( int i=0; i<m_iNumSounds; ++i )
+ {
+ Audio->PlaySample( m_asSounds[i].c_str() );
+ }
+}
+
+
+
+/***************************************************************************
+ PLAYBACK STRING CONVERSION ROUTINES
+***************************************************************************/
+
+
+void Backend::WriteToString( std::string& a_rsOutString )
+{
+ char acBuffer[2048];
+ int iNumChars = sprintf( acBuffer, "%d %d %d %d %d %d %d %d %d %d %d ",
+ m_iBgX, m_iBgY,
+ m_aoPlayers[0].m_iX, m_aoPlayers[0].m_iY, m_aoPlayers[0].m_iFrame, m_aoPlayers[0].m_iHitPoints,
+ m_aoPlayers[1].m_iX, m_aoPlayers[1].m_iY, m_aoPlayers[1].m_iFrame, m_aoPlayers[1].m_iHitPoints,
+ m_iNumDoodads );
+
+ int i;
+ for ( i = 0; i<m_iNumDoodads; ++i )
+ {
+ SDoodad& roDoodad = m_aoDoodads[i];
+ iNumChars += sprintf( acBuffer+iNumChars, "%d %d %d %d %d %s ",
+ roDoodad.m_iX, roDoodad.m_iY, roDoodad.m_iType, roDoodad.m_iFrame,
+ roDoodad.m_sText.size(), roDoodad.m_sText.c_str() );
+ }
+
+ iNumChars += sprintf( acBuffer+iNumChars, "%d ", m_iNumSounds );
+ for ( i = 0; i<m_iNumSounds; ++i )
+ {
+ iNumChars += sprintf( acBuffer+iNumChars, " %d %s",
+ m_asSounds[i].size(), m_asSounds[i].c_str() );
+ }
+
+ // debug( "Frame: '%s'\n", acBuffer );
+ a_rsOutString = acBuffer;
+}
+
+
+void Backend::ReadFromString( const std::string& a_rsString )
+{
+ const char* pcBuffer = a_rsString.c_str();
+
+ int iNumMatches;
+ int iOffset, iTotal;
+ iNumMatches = sscanf( pcBuffer, "%d %d %d %d %d %d %d %d %d %d %d%n",
+ &m_iBgX, &m_iBgY,
+ &m_aoPlayers[0].m_iX, &m_aoPlayers[0].m_iY, &m_aoPlayers[0].m_iFrame, &m_aoPlayers[0].m_iHitPoints,
+ &m_aoPlayers[1].m_iX, &m_aoPlayers[1].m_iY, &m_aoPlayers[1].m_iFrame, &m_aoPlayers[1].m_iHitPoints,
+ &m_iNumDoodads, &iTotal );
+
+ if ( m_iNumDoodads > MAXDOODADS )
+ {
+ m_iNumDoodads = m_iNumSounds = 0;
+ return;
+ }
+
+ int i, j;
+ for ( i=0; i<m_iNumDoodads; ++i )
+ {
+ SDoodad& roDoodad = m_aoDoodads[i];
+ iNumMatches += sscanf( pcBuffer+iTotal, "%d %d %d %d %d %n",
+ &roDoodad.m_iX, &roDoodad.m_iY, &roDoodad.m_iType, &roDoodad.m_iFrame,
+ &j, &iOffset );
+ iTotal += iOffset;
+ roDoodad.m_sText.assign( pcBuffer + iTotal, j );
+ iTotal += j;
+ }
+
+ iNumMatches += sscanf( pcBuffer + iTotal, "%d%n",
+ &m_iNumSounds, &iOffset );
+
+ if ( m_iNumSounds > MAXSOUNDS )
+ {
+ m_iNumSounds = 0;
+ return;
+ }
+
+ iTotal += iOffset;
+
+ for ( i=0; i<m_iNumSounds; ++i )
+ {
+ iNumMatches += sscanf( pcBuffer+iTotal, "%d %n",
+ &j, &iOffset );
+ iTotal += iOffset;
+ m_asSounds[i].assign( pcBuffer + iTotal, j );
+ iTotal += j;
+ }
+}
+
diff --git a/src/Backend.h b/src/Backend.h
new file mode 100644
index 0000000..1b5302c
--- /dev/null
+++ b/src/Backend.h
@@ -0,0 +1,138 @@
+/***************************************************************************
+ Backend.h - description
+ -------------------
+ begin : Sun Dec 8 2002
+ copyright : (C) 2002 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#include <EXTERN.h>
+#include <perl.h>
+#include <string>
+
+class RlePack;
+extern PerlInterpreter *my_perl;
+
+
+#define PERLEVAL(A) eval_pv(A, TRUE);
+
+#define PERLCALL(PROC,A,B) { \
+ dSP; \
+ ENTER; \
+ SAVETMPS; \
+ PUSHMARK(SP); \
+ XPUSHs(sv_2mortal(newSViv(A))); \
+ XPUSHs(sv_2mortal(newSViv(B))); \
+ PUTBACK ; \
+ \
+ call_pv( (PROC), G_DISCARD ); \
+ \
+ FREETMPS; \
+ LEAVE; \
+}
+
+
+
+#define MAXDOODADS 20
+#define MAXSOUNDS 20
+
+
+class Backend
+{
+public:
+
+ // Lifecycle
+
+ Backend();
+ ~Backend();
+ bool Construct();
+
+ // Miscellaneous
+
+ void PerlEvalF( const char* a_pcFormat, ... );
+
+ // Game data
+
+ void AdvancePerl();
+ void ReadFromPerl();
+ void PlaySounds();
+ void WriteToString( std::string& a_rsOutString );
+ void ReadFromString( const std::string& a_rsString );
+
+public:
+ int m_iGameTime;
+ int m_iGameOver;
+ bool m_bKO;
+ int m_iBgX, m_iBgY;
+ int m_iNumDoodads;
+ int m_iNumSounds;
+
+ struct SPlayer
+ {
+ int m_iX, m_iY, m_iFrame, m_iHitPoints;
+ } m_aoPlayers[2];
+
+ struct SDoodad
+ {
+ int m_iX, m_iY, m_iType, m_iFrame;
+ std::string m_sText;
+ } m_aoDoodads[ MAXDOODADS ];
+
+ std::string m_asSounds[ MAXSOUNDS ];
+};
+
+extern Backend g_oBackend;
+
+
+
+// FIGHTER ENUMERABLE
+
+enum FighterEnum {
+ UNKNOWN = 0,
+
+ ULMAR,
+ UPI,
+ ZOLI,
+ CUMI,
+ SIRPI,
+ MACI,
+ BENCE,
+ GRIZLI,
+ DESCANT,
+ SURBA,
+ AMBRUS,
+ DANI,
+ KINGA,
+ MISI,
+
+ LASTFIGHTER
+};
+
+
+enum TintEnum {
+ NO_TINT = 0,
+ RANDOM_TINT,
+ ZOMBIE_TINT,
+ GRAY_TINT,
+ DARK_TINT,
+ INVERTED_TINT,
+};
+
+
+bool IsFighterAvailable( FighterEnum a_enFighter );
+RlePack* LoadFighter( FighterEnum fighter, int offset );
+void TintFighter( RlePack* fighter, TintEnum tint, int offset );
+int DoGame( char* replay, bool isReplay, bool bDebug );
+void PlayerSelect();
+void SetPlayer( int player, FighterEnum fighter );
+
+
+
+extern FighterEnum Fighter1;
+extern FighterEnum Fighter2;
+extern TintEnum FingerTint1;
+extern TintEnum FingerTint2;
+extern RlePack* pack1;
+extern RlePack* pack2;
+
diff --git a/src/Demo.cpp b/src/Demo.cpp
new file mode 100644
index 0000000..09d8d45
--- /dev/null
+++ b/src/Demo.cpp
@@ -0,0 +1,358 @@
+/***************************************************************************
+ Demo.cpp - description
+ -------------------
+ begin : Wed Aug 16 22:18:47 CEST 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#include "FlyingChars.h"
+#include "SDL.h"
+
+
+#include "State.h"
+#include "gfx.h"
+#include "common.h"
+#include "Backend.h"
+#include "Demo.h"
+
+
+
+
+
+
+Demo::Demo()
+{
+ m_poFlyingChars = NULL;
+ m_bAdvanceGame = false;
+}
+
+
+Demo::~Demo()
+{
+ delete m_poFlyingChars;
+ m_poFlyingChars = NULL;
+}
+
+
+int Demo::Advance( int a_iNumFrames, bool a_bFlip )
+{
+ int iRetVal = 1;
+
+ if ( a_iNumFrames > 5 )
+ a_iNumFrames = 5;
+
+ if ( m_poBackground )
+ {
+ SDL_BlitSurface( m_poBackground, NULL, gamescreen, NULL );
+ }
+
+ if ( m_poFlyingChars )
+ {
+ iRetVal &= AdvanceFlyingChars( a_iNumFrames );
+ m_poFlyingChars->Draw();
+ }
+ if ( m_bAdvanceGame )
+ {
+ iRetVal &= AdvanceGame( a_iNumFrames );
+ //@ DRAW GAME?
+ }
+
+ if ( a_bFlip )
+ {
+ SDL_Flip( gamescreen );
+ }
+
+ return iRetVal;
+}
+
+
+int Demo::AdvanceFlyingChars( int a_iNumFrames )
+{
+ m_poFlyingChars->Advance( a_iNumFrames );
+ return ( m_poFlyingChars->IsDone() ? 1 : 0 );
+}
+
+
+
+
+int Demo::AdvanceGame( int a_iNumFrames )
+{
+ for ( int i=0; i<a_iNumFrames; ++i )
+ {
+ g_oBackend.AdvancePerl();
+ }
+ return g_oState.m_bGameOver ? 1 : 0;
+}
+
+
+int Demo::Run()
+{
+ int thisTick, lastTick, firstTick, gameSpeed;
+ SDL_Event event;
+ gameSpeed = 12;
+
+ thisTick = SDL_GetTicks() / gameSpeed;
+ lastTick = thisTick - 1;
+ firstTick = SDL_GetTicks() / gameSpeed;
+ while ( 1 )
+ {
+ // 1. Wait for the next tick (on extremely fast machines..)
+ while (1)
+ {
+ thisTick = SDL_GetTicks() / gameSpeed;
+ if ( thisTick==lastTick )
+ {
+ SDL_Delay(1);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ // 2. Call ADVANCE.
+
+ int iRetVal = Advance(thisTick-lastTick, true);
+ lastTick = thisTick;
+
+ if ( iRetVal )
+ {
+ return 0;
+ }
+
+ // 3. Handle events.
+
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ g_oState.m_bQuitFlag = true;
+ break;
+ case SDL_KEYDOWN:
+ if ( event.key.keysym.sym == SDLK_ESCAPE )
+ {
+ OnMenu();
+ break;
+ }
+ for ( int i=0; i<2; ++i )
+ {
+ for ( int j=0; j<9; ++j )
+ {
+ if ( g_oState.m_aiPlayerKeys[i][j] == event.key.keysym.sym)
+ {
+ g_oState.m_enGameMode = SState::IN_MULTI;
+ }
+ }
+ }
+ break;
+ } // switch
+ } // while SDL_PollEvent
+
+ if ( g_oState.m_enGameMode != SState::IN_DEMO
+ || g_oState.m_bQuitFlag )
+ {
+ return 1;
+ }
+
+ } // while 1;
+}
+
+
+void DoMenu( bool a_bDrawBackground );
+
+
+void Demo::OnMenu()
+{
+ ::DoMenu( true );
+}
+
+
+
+
+class CreditsDemo: public Demo
+{
+public:
+ CreditsDemo()
+ {
+ m_poBackground = LoadBackground( "Credits.png", 240 );
+ SDL_UnlockSurface( m_poBackground );
+ DrawGradientText( "Credits", titleFont, 20, m_poBackground );
+ SDL_Flip( m_poBackground );
+
+ SDL_Rect oRect;
+ oRect.x = 110; oRect.w = gamescreen->w - 220;
+ oRect.y = 100; oRect.h = 350;
+
+ m_poFlyingChars = new FlyingChars( creditsFont, oRect );
+ m_poFlyingChars->AddText( "OPENMORTAL CREDITS\n\n\n"
+ "-- THE OPENMORTAL TEAM ARE --\n\n"
+ "CODING - UPi\n"
+ "MUSIC - Oedipus\n"
+ "GRAPHICS - UPi\n"
+ "\n-- CAST --\n\n"
+ "Boxer - Zoli\n"
+ "Cumi - As himself\n"
+ "Descant - As himself\n"
+ "Fureszes Orult - Ambrus\n"
+ "Grizli - As himself\n"
+ "Kinga - As herself\n"
+ "Macy - As herself\n"
+ "Misi - As himself\n"
+ "Rising-san - Surba\n"
+ "Sirpi - As himself\n"
+ "Taka Ito - Bence\n"
+ "Tokeletlen Katona - Dani\n"
+ "Watasiwa Baka Janajo - Ulmar\n"
+ "Black Dark Evil Mage - UPi\n"
+ "\n-- HOSTING --\n\n"
+ "sourceforge.net\n"
+ "apocalypse.rulez.org\n"
+ "freshmeat.net\n"
+ "\nOpenMortal is Copyright 2003 of the OpenMortal Team\n"
+ "Distributed under the GNU General Public Licence Version 2\n\n",
+ FlyingChars::FC_AlignCenter, true );
+ m_poFlyingChars->AddText( "Thanks to Midway for not harrassing us with legal stuff so far, "
+ "even though we must surely violate at least 50 of their patents, international "
+ "copyrights and registered trademarks.\n\n"
+ "OpenMortal needs your help! If you can contribute music, graphics, improved code, "
+ "additional characters, cash, beer, pizza or any other consumable, please mail us "
+ "at upi@apocalypse.rulez.org! The same address is currently accepting comments and "
+ "fanmail too (hint, hint!).\n\n",
+ FlyingChars::FC_AlignJustify, true );
+ m_poFlyingChars->AddText( "Be sure to check out other stuff from\n"
+ "Apocalypse Production\n"
+ "and\n"
+ "Degec Entertainment\n\n",
+ FlyingChars::FC_AlignCenter, true );
+
+ m_poFlyingChars->AddText( "\n\n\n\n\n\n:)", FlyingChars::FC_AlignRight, true );
+ }
+};
+
+
+
+class Story1Demo: public Demo
+{
+public:
+ Story1Demo()
+ {
+ m_poBackground = LoadBackground( "Story1.png", 240 );
+ SDL_UnlockSurface( m_poBackground );
+
+ SDL_Rect oRect;
+ oRect.x = 50; oRect.w = gamescreen->w - 100;
+ oRect.y = 50; oRect.h = gamescreen->h - 100;
+
+ m_poFlyingChars = new FlyingChars( storyFont, oRect, -1 );
+ m_poFlyingChars->AddText(
+ "We, the Gods of the Evil Killer Black Antipathic Dim (witted) Fire Mages "
+ "no longer tolerate the lack of evildoing.\n\n"
+ "We send them out on a "
+ "mission so diabolical, so evil that the world will never be the same "
+ "again!\n\n"
+ "We order our unworthy followers to "
+ "\nDESTROY THE SATURDAY\n"
+ "and plunge humanity into a dark age of 5 working days and 1 holiday "
+ "per week... FOREVER!\n\n\n\n\n\n\n\n\n",
+ FlyingChars::FC_AlignJustify, true );
+ }
+};
+
+
+
+
+class MainScreenDemo: public Demo
+{
+public:
+ MainScreenDemo()
+ {
+ m_iTimeLeft = 100;
+
+ m_poBackground = LoadBackground( "Mortal.png", 240 );
+ }
+
+ int Advance( int a_iNumFrames, bool a_bFlip )
+ {
+ m_iTimeLeft -= a_iNumFrames;
+ Demo::Advance( a_iNumFrames, true );
+ return ( m_iTimeLeft <= 0 ) ? 1 : 0;
+ }
+
+protected:
+ int m_iTimeLeft;
+};
+
+
+
+
+void DoReplayDemo()
+{
+ static int aiOrder[6] = {-1, -1, -1, -1, -1, -1};
+ static int iNext = 0;
+
+ if ( aiOrder[0]<0 )
+ {
+ // shuffle
+ int i, j, k;
+ for ( i=0; i<6; ++i ) aiOrder[i]=i;
+ for ( i=0; i<6; ++i )
+ {
+ j = rand() % 6;
+ k = aiOrder[i];
+ aiOrder[i] = aiOrder[j];
+ aiOrder[j] = k;
+ }
+ iNext = 0;
+ }
+
+ char acFilename[1024];
+ sprintf( acFilename, DATADIR "/demo%d.om", aiOrder[iNext] );
+ DoGame( acFilename, true, false );
+
+ iNext = ( iNext + 1 ) % 6;
+}
+
+
+
+void DoDemos()
+{
+ #define DoDemos_BREAKONEND \
+ if ( g_oState.m_enGameMode != SState::IN_DEMO \
+ || g_oState.m_bQuitFlag ) \
+ return;
+
+ while (1)
+ {
+ DoDemos_BREAKONEND;
+ {
+ MainScreenDemo oDemo;
+ oDemo.Run();
+ }
+ DoDemos_BREAKONEND;
+ DoReplayDemo();
+ DoDemos_BREAKONEND;
+ {
+ Story1Demo oDemo;
+ oDemo.Run();
+ }
+ DoDemos_BREAKONEND;
+ DoReplayDemo();
+ DoDemos_BREAKONEND;
+ {
+ FighterStatsDemo oDemo;
+ oDemo.Run();
+ }
+ DoDemos_BREAKONEND;
+ DoReplayDemo();
+ DoDemos_BREAKONEND;
+ {
+ CreditsDemo oDemo;
+ oDemo.Run();
+ }
+ DoDemos_BREAKONEND;
+
+ }
+}
diff --git a/src/Demo.h b/src/Demo.h
new file mode 100644
index 0000000..0d54f23
--- /dev/null
+++ b/src/Demo.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ Demo.h - description
+ -------------------
+ begin : Wed Aug 16 22:18:47 CEST 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+
+#ifndef DEMO_H
+#define DEMO_H
+
+class FlyingChars;
+struct SDL_Surface;
+
+
+class Demo
+{
+public:
+ Demo();
+ virtual ~Demo();
+
+ virtual int Run();
+
+protected:
+ virtual int Advance( int a_iNumFrames, bool a_bFlip );
+ virtual int AdvanceFlyingChars( int a_iNumFrames );
+ virtual int AdvanceGame( int a_iNumFrames );
+ virtual void OnMenu();
+
+
+protected:
+ FlyingChars* m_poFlyingChars;
+ bool m_bAdvanceGame;
+ SDL_Surface* m_poBackground;
+};
+
+
+
+class FighterStatsDemo: public Demo
+{
+public:
+ FighterStatsDemo();
+ virtual ~FighterStatsDemo();
+
+ int Advance( int a_iNumFrames, bool a_bFlip );
+
+protected:
+ int m_iTimeLeft;
+ FighterEnum m_enFighter;
+ RlePack* m_poStaff;
+
+ static int mg_iLastFighter; // index of the last fighter in the fighter order
+ static FighterEnum mg_aenFighterOrder[LASTFIGHTER-1];
+};
+
+
+#endif // DEMO_H
diff --git a/src/FighterStats.cpp b/src/FighterStats.cpp
new file mode 100644
index 0000000..3dd09a1
--- /dev/null
+++ b/src/FighterStats.cpp
@@ -0,0 +1,232 @@
+/***************************************************************************
+ FighterStats.cpp - description
+ -------------------
+ begin : Tue Dec 10 2002
+ copyright : (C) 2002 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <stdio.h>
+#include <string>
+
+#include "FlyingChars.h"
+#include "SDL.h"
+#include "SDL_video.h"
+#include "SDL_image.h"
+#include "sge_tt_text.h"
+
+#include "common.h"
+#include "gfx.h"
+#include "RlePack.h"
+#include "Backend.h"
+#include "Demo.h"
+
+
+#define LEFTMARGIN 160
+#define TOPMARGIN 70
+#define RIGHTMARGIN 630
+#define LINEHEIGHT 35
+#define GAPWIDTH 20
+#define DESCMARGIN 50
+
+
+#define LEFTMARGIN2 ((LEFTMARGIN+RIGHTMARGIN+GAPWIDTH)/2)
+
+/*
+void DrawMultiLineText( const char* text, _sge_TTFont* font, int x, int y,
+ int fg, SDL_Surface* target )
+{
+ const char* s1, * s2;
+ char line[1024];
+
+ s1 = s2 = text;
+ while (1)
+ {
+ while ( isspace(*s2) ) s2++;
+ if ( !*s2 )
+ break;
+
+ s1 = s2; // s1: start of line.
+ while ( (*s2 != '\n') && *s2 ) s2++;
+ strncpy( line, s1, s2-s1 );
+ line[s2-s1] = 0;
+ DrawTextMSZ( line, font, x, y, 0, fg, target );
+ y += sge_TTF_FontLineSkip( font );
+ }
+}
+*/
+
+
+
+
+
+int FighterStatsDemo::mg_iLastFighter = -1;
+FighterEnum FighterStatsDemo::mg_aenFighterOrder[LASTFIGHTER-1];
+
+
+FighterStatsDemo::FighterStatsDemo()
+{
+ m_iTimeLeft = 500;
+ m_poStaff = NULL;
+
+ m_poBackground = LoadBackground( "FighterStats.png", 64 );
+ DrawGradientText( "Figher Stats", titleFont, 10, m_poBackground );
+
+ SDL_BlitSurface( m_poBackground, NULL, gamescreen, NULL );
+ SDL_Flip( gamescreen );
+
+ if ( mg_iLastFighter < 0 )
+ {
+ // First run; create shuffled array of figthers.
+ mg_iLastFighter = 0;
+
+ int i, j;
+ FighterEnum k;
+ for ( i=0; i<LASTFIGHTER-1; ++i )
+ {
+ mg_aenFighterOrder[i] = (FighterEnum)(i+1);
+ }
+ for ( i=0; i<LASTFIGHTER-1; ++i )
+ {
+ j = rand() % (LASTFIGHTER-1);
+ k = mg_aenFighterOrder[i];
+ mg_aenFighterOrder[i] = mg_aenFighterOrder[j];
+ mg_aenFighterOrder[j] = k;
+ }
+ }
+
+ mg_iLastFighter = (mg_iLastFighter+1) % (LASTFIGHTER-1);
+ m_enFighter = mg_aenFighterOrder[mg_iLastFighter];
+
+ if ( IsFighterAvailable( m_enFighter ) )
+ {
+ SetPlayer( 0, m_enFighter );
+ PERLEVAL("SelectStart();");
+ }
+ else
+ {
+ std::string sStaffFilename = DATADIR;
+ sStaffFilename += "/characters/STAFF.DAT";
+ m_poStaff = new RlePack( sStaffFilename.c_str() );
+ }
+
+ PERLCALL("GetFighterStats", m_enFighter, 0 );
+ _sge_TTFont* font = impactFont;
+ int y = TOPMARGIN;
+
+
+ AV *StatTags = get_av( "StatTags", FALSE );
+
+ char *s, *sTag;
+
+ s = SvPV_nolen(get_sv("Name", FALSE));
+ DrawTextMSZ( s, inkFont, (LEFTMARGIN + RIGHTMARGIN)/2, y, AlignHCenter, C_WHITE, m_poBackground );
+ y+= 10;
+
+ s = SvPV_nolen(get_sv("Team", FALSE ));
+ sTag = SvPV_nolen( *av_fetch( StatTags, 1, false ) );
+ int i = DrawTextMSZ( sTag, font, LEFTMARGIN, y+=LINEHEIGHT, 0, C_YELLOW, m_poBackground );
+ DrawTextMSZ( s, font, LEFTMARGIN+i, y, 0, C_ORANGE, m_poBackground );
+
+ s = SvPV_nolen(get_sv("Style", FALSE ));
+ sTag = SvPV_nolen( *av_fetch( StatTags, 2, false ) );
+ i = DrawTextMSZ( sTag, font, LEFTMARGIN2, y, 0, C_YELLOW, m_poBackground );
+ DrawTextMSZ( s, font, LEFTMARGIN2+i, y, 0, C_ORANGE, m_poBackground );
+
+ s = SvPV_nolen(get_sv("Age", FALSE ));
+ sTag = SvPV_nolen( *av_fetch( StatTags, 3, false ) );
+ i = DrawTextMSZ( sTag, font, LEFTMARGIN, y+=LINEHEIGHT, 0, C_YELLOW, m_poBackground );
+ DrawTextMSZ( s, font, LEFTMARGIN+i, y, 0, C_ORANGE, m_poBackground );
+
+ s = SvPV_nolen(get_sv("Weight", FALSE ));
+ sTag = SvPV_nolen( *av_fetch( StatTags, 4, false ) );
+ i = DrawTextMSZ( sTag, font, LEFTMARGIN2, y, 0, C_YELLOW, m_poBackground );
+ DrawTextMSZ( s, font, LEFTMARGIN2+i, y, 0, C_ORANGE, m_poBackground );
+
+ s = SvPV_nolen(get_sv("Height", FALSE ));
+ sTag = SvPV_nolen( *av_fetch( StatTags, 5, false ) );
+ i = DrawTextMSZ( sTag, font, LEFTMARGIN, y+=LINEHEIGHT, 0, C_YELLOW, m_poBackground );
+ DrawTextMSZ( s, font, LEFTMARGIN+i, y, 0, C_ORANGE, m_poBackground );
+
+ s = SvPV_nolen(get_sv("Shoe", FALSE ));
+ sTag = SvPV_nolen( *av_fetch( StatTags, 6, false ) );
+ i = DrawTextMSZ( sTag, font, LEFTMARGIN2, y, 0, C_YELLOW, m_poBackground );
+ DrawTextMSZ( s, font, LEFTMARGIN2+i, y, 0, C_ORANGE, m_poBackground );
+
+ s = SvPV_nolen(get_sv("Story", FALSE ));
+ SDL_Rect oFlyingRect;
+ oFlyingRect.x = LEFTMARGIN;
+ oFlyingRect.y = y+DESCMARGIN;
+ oFlyingRect.w = gamescreen->w - oFlyingRect.x - 20;
+ oFlyingRect.h = gamescreen->h - oFlyingRect.y - 10;
+ m_poFlyingChars = new FlyingChars( creditsFont, oFlyingRect );
+ m_poFlyingChars->AddText( s, FlyingChars::FC_AlignJustify, false );
+
+ if ( IsFighterAvailable( m_enFighter ) )
+ {
+ s = SvPV_nolen(get_sv("Keys", TRUE ));
+ m_poFlyingChars->AddText( "\nKEYS\n", FlyingChars::FC_AlignCenter, true );
+ m_poFlyingChars->AddText( s, FlyingChars::FC_AlignCenter, true );
+ }
+ else
+ {
+ m_poFlyingChars->AddText( "Unfortunately this figther is not yet playable.",
+ FlyingChars::FC_AlignLeft, true );
+ }
+}
+
+
+
+FighterStatsDemo::~FighterStatsDemo()
+{
+ delete m_poStaff;
+}
+
+
+
+int FighterStatsDemo::Advance( int a_iNumFrames, bool a_bFlip )
+{
+ if ( a_iNumFrames > 5 ) a_iNumFrames = 5;
+
+ if ( m_poFlyingChars->IsDone() )
+ {
+ m_iTimeLeft -= a_iNumFrames;
+ }
+
+ AdvanceFlyingChars( a_iNumFrames );
+ SDL_BlitSurface( m_poBackground, NULL, gamescreen, NULL );
+ m_poFlyingChars->Draw();
+
+ // 2. Advance as many ticks as necessary..
+
+ if ( IsFighterAvailable( m_enFighter ) )
+ {
+ for (int i=0; i<a_iNumFrames; ++i )
+ {
+ g_oBackend.AdvancePerl();
+ }
+ int p1x = SvIV(get_sv("p1x", TRUE));
+ int p1y = SvIV(get_sv("p1y", TRUE));
+ int p1f = SvIV(get_sv("p1f", TRUE));
+ if (p1f) pack1->draw( ABS(p1f)-1, p1x, p1y, p1f<0 );
+ }
+ else
+ {
+ static FighterEnum f[14] = {
+ UPI, ZOLI, SURBA, ULMAR, MISI, BENCE,
+ DESCANT, KINGA, GRIZLI, SIRPI, MACI, DANI, CUMI,
+ AMBRUS };
+ for ( int i=0; i<14; ++i )
+ {
+ if ( m_enFighter == f[i] )
+ {
+ //m_poStaff->draw( i, 10, 120 );
+ break;
+ }
+ }
+ }
+ SDL_Flip( gamescreen );
+
+ return (m_iTimeLeft > 0) ? 0 : 1;
+}
+
diff --git a/src/FlyingChars.cpp b/src/FlyingChars.cpp
new file mode 100644
index 0000000..fdfa625
--- /dev/null
+++ b/src/FlyingChars.cpp
@@ -0,0 +1,405 @@
+/***************************************************************************
+ FlyingChars.cpp - description
+ -------------------
+ begin : Mon Aug 12 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <FlyingChars.h>
+#include "sge_surface.h"
+#include "common.h"
+
+
+int g_iLineTime = 100;
+int g_iCharTime = 80;
+
+
+FlyingChars::FlyingChars( sge_bmpFont* a_poFont, const SDL_Rect& a_roRect, int a_iFontDisplacement )
+{
+ m_poFont = a_poFont;
+ m_oRect = a_roRect;
+ m_iFontDisplacement = a_iFontDisplacement;
+
+ m_bDone = true;
+ m_iTimeToNextLine = 0;
+ m_iDelay = 0;
+ m_iLastLineY = a_roRect.y;
+ m_pcText = NULL;
+ m_enAlignment = FC_AlignLeft;
+ m_iTextOffset = 0;
+
+ m_bScrolling = false;
+ m_dScrollupRate = (double)(m_poFont->CharHeight+2) / (double)g_iLineTime;
+ m_dScrollup = 0.0;
+}
+
+
+FlyingChars::~FlyingChars()
+{
+}
+
+
+void FlyingChars::AddText( const char* a_pcText,
+ TextAlignment a_enAlignment, bool a_bOneByOne )
+{
+
+ EnqueuedText oNewText;
+ oNewText.m_pcText = a_pcText;
+ oNewText.m_enAlignment = a_enAlignment;
+ m_oEnqueuedTexts.push_back( oNewText );
+
+ if ( a_bOneByOne && m_iLastLineY <= m_oRect.y )
+ {
+ m_iLastLineY = m_oRect.y + m_oRect.h - m_poFont->CharHeight;
+ }
+ else if ( 0 == m_pcText
+ || m_iLastLineY <= m_oRect.y + m_oRect.h - m_poFont->CharHeight )
+ {
+ DequeueText();
+ }
+}
+
+
+bool FlyingChars::IsDone()
+{
+ if ( m_oEnqueuedTexts.size() == 0
+ && ( NULL == m_pcText || 0 == m_pcText[ m_iTextOffset] )
+ && ( m_bDone ) )
+ {
+ return true;
+ }
+ return false;
+}
+
+
+void FlyingChars::DequeueText()
+{
+ if ( 0 == m_oEnqueuedTexts.size() )
+ {
+ return;
+ }
+
+ EnqueuedText& oEnqueuedText = m_oEnqueuedTexts.front();
+ m_oEnqueuedTexts.pop_front();
+
+ m_pcText = oEnqueuedText.m_pcText;
+ m_enAlignment = oEnqueuedText.m_enAlignment;
+ m_iTextOffset = 0;
+
+ while ( m_iLastLineY <= m_oRect.y + m_oRect.h - m_poFont->CharHeight )
+ {
+ AddNextLine();
+ m_iTimeToNextLine += g_iLineTime;
+
+ if ( 0 == m_pcText[m_iTextOffset] )
+ {
+ break;
+ }
+ }
+}
+
+
+void FlyingChars::Advance( int a_iNumFrames )
+{
+
+ if ( a_iNumFrames > 5 ) a_iNumFrames = 5;
+ if ( a_iNumFrames <= 0 ) a_iNumFrames = 0;
+
+ m_bDone = true;
+
+ m_iTimeToNextLine -= a_iNumFrames;
+ if ( m_iTimeToNextLine < 0 )
+ {
+ m_iTimeToNextLine += g_iLineTime;
+ m_iDelay = 0;
+
+ if ( !m_pcText
+ || 0 == m_pcText[m_iTextOffset] )
+ {
+ DequeueText();
+ }
+ else
+ {
+ AddNextLine();
+ }
+ }
+
+ m_dScrollup += a_iNumFrames * m_dScrollupRate;
+ int iScrollup = (int) m_dScrollup;
+ m_dScrollup -= iScrollup;
+ iScrollup *= 2;
+
+ for ( FlyingLetterIterator it=m_oLetters.begin(); it!=m_oLetters.end(); ++it )
+ {
+ FlyingLetter& roLetter = *it;
+ if ( m_bScrolling )
+ {
+ roLetter.m_iDY -= iScrollup;
+ roLetter.m_iY -= iScrollup;
+
+ if ( roLetter.m_iDY < m_oRect.y * 2
+ && roLetter.m_iDY >= 0 )
+ {
+ roLetter.m_iDY = -100;
+ roLetter.m_iTime = 40;
+ }
+ }
+
+ if (roLetter.m_iDelay > 0)
+ {
+ roLetter.m_iDelay -= a_iNumFrames;
+ continue;
+ }
+
+ if ( roLetter.m_iTime > 0 )
+ {
+ m_bDone = false;
+
+ int iEstX = roLetter.m_iSX * roLetter.m_iTime / 2 + roLetter.m_iX ;
+ if ( iEstX > roLetter.m_iDX )
+ {
+ roLetter.m_iSX -= a_iNumFrames;
+ }
+ else if ( iEstX < roLetter.m_iDX )
+ {
+ roLetter.m_iSX += a_iNumFrames;
+ }
+ roLetter.m_iX += roLetter.m_iSX * a_iNumFrames;
+ if ( roLetter.m_iSY * roLetter.m_iTime / 2 + roLetter.m_iY >= roLetter.m_iDY )
+ {
+ roLetter.m_iSY -= a_iNumFrames;
+ }
+ else
+ {
+ roLetter.m_iSY += a_iNumFrames;
+ }
+ roLetter.m_iY += roLetter.m_iSY * a_iNumFrames;
+
+ roLetter.m_iTime -= a_iNumFrames;
+
+ if ( roLetter.m_iTime <= 0 )
+ {
+ roLetter.m_iX = roLetter.m_iDX;
+ roLetter.m_iY = roLetter.m_iDY;
+ roLetter.m_iSX = roLetter.m_iSY = 0;
+ roLetter.m_iTime = 0;
+ }
+ }
+ }
+
+}
+
+
+void FlyingChars::Draw()
+{
+ for ( FlyingLetterIterator it=m_oLetters.begin(); it!=m_oLetters.end(); ++it )
+ {
+ FlyingLetter& roLetter = *it;
+ int iDestX, iDestY;
+
+ if (roLetter.m_iDelay > 0)
+ {
+ continue;
+ }
+ else if ( roLetter.m_iTime > 0 )
+ {
+ iDestX = roLetter.m_iX;
+ iDestY = roLetter.m_iY;
+ }
+ else
+ {
+ iDestX = roLetter.m_iX;
+ iDestY = roLetter.m_iY;
+ }
+
+ int iSrcX, iSrcW;
+
+ if ( ! m_poFont->CharPos )
+ {
+ iSrcX = roLetter.m_cLetter * m_poFont->CharWidth;
+ iSrcW = m_poFont->CharWidth;
+ }
+ else
+ {
+ int iOfs = (roLetter.m_cLetter-33)*2 + 1;
+ iSrcX = m_poFont->CharPos[iOfs];
+ iSrcW = m_poFont->CharPos[iOfs+1] - iSrcX;
+ }
+
+ //debug( "Letter %c at %d,%d\n", roLetter.m_cLetter, iDestX/2, iDestY/2 );
+
+ sge_Blit( m_poFont->FontSurface, gamescreen, iSrcX, m_poFont->yoffs,
+ iDestX/2, iDestY/2, iSrcW, m_poFont->CharHeight );
+ }
+}
+
+
+void FlyingChars::AddNextLine()
+{
+ if ( NULL == m_pcText )
+ {
+ return;
+ }
+
+ // 1. SCROLL UP EVERYTHING IF NECESSARY
+
+ if ( m_iLastLineY > m_oRect.y + m_oRect.h - m_poFont->CharHeight )
+ {
+ // scroll up every character
+ if ( !m_bScrolling )
+ {
+ m_bScrolling = true;
+ m_iTimeToNextLine = (m_iLastLineY - (m_oRect.y + m_oRect.h - m_poFont->CharHeight)) / m_dScrollupRate;
+ return;
+ }
+ m_iLastLineY = m_oRect.y + m_oRect.h - m_poFont->CharHeight;
+ }
+
+ SDL_Rect oRect;
+ const char* pcLineStart = m_pcText + m_iTextOffset;
+ if ( '\n' == *pcLineStart ) ++pcLineStart;
+ while (*pcLineStart == 32 || *pcLineStart == '\t' ) ++pcLineStart;
+ if ( 0 == *pcLineStart )
+ {
+ m_iTextOffset = pcLineStart - m_pcText;
+ return;
+ }
+
+ // 2. CALCULATE LINE WIDTH AND CONTENTS
+
+ const char* pcLineEnd = pcLineStart;
+ const char* pcNextWord = pcLineEnd;
+ int iNumWords = 0;
+ int iLineWidth = 0;
+ int iWidth = 0;
+
+ while (1)
+ {
+ ++iNumWords;
+ if ( '\n' == *pcNextWord
+ || 0 == *pcNextWord)
+ {
+ break;
+ }
+
+ // Skip the next 'white space' part
+ while (*pcNextWord == 32 || *pcNextWord == '\t' )
+ {
+ iWidth += GetCharWidth( *pcNextWord );
+ ++pcNextWord;
+ }
+ // Skip the next 'non-whitespace' part
+ while (*pcNextWord != 32 && *pcNextWord != '\t'
+ && *pcNextWord != '\n' && *pcNextWord != 0 )
+ {
+ iWidth += GetCharWidth( *pcNextWord );
+ ++pcNextWord;
+ }
+
+ if ( iWidth > m_oRect.w )
+ {
+ // overflow
+ break;
+ }
+ pcLineEnd = pcNextWord;
+ iLineWidth = iWidth;
+ }
+
+ if ( pcLineEnd == pcLineStart )
+ {
+ pcLineEnd = pcNextWord;
+ iLineWidth = iWidth;
+ }
+
+ // 3. ADD LETTERS IN LINE
+
+ double dX = m_oRect.x;
+ double dSpaceLength = 0.0;
+
+ switch ( m_enAlignment )
+ {
+ case FC_AlignJustify:
+ if ( '\n' == *pcLineEnd
+ || 0 == *pcLineEnd )
+ {
+ }
+ else
+ {
+ dSpaceLength = (m_oRect.w - iLineWidth) / double( iNumWords > 2 ? iNumWords-2 : 1 );
+ }
+
+ break;
+
+ case FC_AlignCenter:
+ dX += (m_oRect.w - iLineWidth) /2;
+ break;
+
+ case FC_AlignRight:
+ dX += (m_oRect.w - iLineWidth);
+ break;
+
+ default:
+ break;
+ }
+
+ FlyingLetter oLetter;
+ oLetter.m_iDY = m_iLastLineY * 2;
+
+ for ( const char *pcChar = pcLineStart; pcChar<pcLineEnd; ++pcChar )
+ {
+ if ( *pcChar < 33 )
+ {
+ if ( *pcChar == 32 || *pcChar == '\t' )
+ {
+ dX += dSpaceLength;
+ // debug( "dX = %3.2f dSpaceLength = %2.2f\n", (float)dX, (float)dSpaceLength );
+ }
+
+ int iWidth = GetCharWidth( *pcChar );
+ dX += iWidth;
+ //debug( "dX = %3.2f iWidth = %d\n", (float)dX, iWidth );
+ continue;
+ }
+
+ oRect = sge_BF_TextSize( m_poFont, pcLineStart, pcChar-pcLineStart );
+
+ oLetter.m_iDX = (int) dX * 2;
+ oLetter.m_iX = rand() % (gamescreen->w * 2);
+ oLetter.m_iY = gamescreen->h * 2;
+ oLetter.m_iSX = 0;
+ oLetter.m_iSY = -45 + rand() % 15 ;
+ oLetter.m_iDelay = m_iDelay++;
+ oLetter.m_iTime = g_iCharTime;
+ oLetter.m_cLetter = *pcChar;
+
+ m_oLetters.push_back(oLetter);
+ dX += GetCharWidth( *pcChar );
+ }
+
+ m_iTextOffset = pcLineEnd - m_pcText;
+ m_iLastLineY += m_poFont->CharHeight + 2;
+}
+
+
+int FlyingChars::GetCharWidth( char a_cChar )
+{
+ if ( a_cChar == 0 )
+ {
+ return 0;
+ }
+ else if ( m_poFont->CharPos )
+ {
+ if ( a_cChar < 33 )
+ {
+ return m_poFont->CharPos[3] - m_poFont->CharPos[2] + 1;
+ }
+ else
+ {
+ int iOfs = (a_cChar - 33) * 2 + 1;
+ return m_poFont->CharPos[iOfs+1] - m_poFont->CharPos[iOfs] + m_iFontDisplacement;
+ }
+ }
+
+ return m_poFont->CharWidth;
+}
diff --git a/src/FlyingChars.h b/src/FlyingChars.h
new file mode 100644
index 0000000..0d819b6
--- /dev/null
+++ b/src/FlyingChars.h
@@ -0,0 +1,89 @@
+/***************************************************************************
+ FlyingChars.h - description
+ -------------------
+ begin : Mon Aug 12 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+
+#ifndef FLYINGCHARS_H
+#define FLYINGCHARS_H
+
+
+#include "sge_bm_text.h"
+#include <vector>
+#include <list>
+
+
+
+struct FlyingLetter
+{
+ int m_iX, m_iY;
+ int m_iSX, m_iSY;
+ int m_iDX, m_iDY;
+ int m_iDelay;
+ int m_iTime;
+ char m_cLetter;
+};
+
+
+class FlyingChars
+{
+public:
+
+ enum TextAlignment {
+ FC_AlignLeft,
+ FC_AlignRight,
+ FC_AlignCenter,
+ FC_AlignJustify,
+ };
+
+public:
+ FlyingChars( sge_bmpFont* a_poFont, const SDL_Rect& a_roRect, int a_iFontDisplacement = 0 );
+ ~FlyingChars();
+
+ void AddText( const char* a_pcText, TextAlignment a_enAlignment, bool bOneByOne );
+
+ void Advance( int a_iNumFrames );
+ void Draw();
+ bool IsDone();
+ int GetCount();
+
+protected:
+ void AddNextLine();
+ int GetCharWidth( char a_cChar );
+ void DequeueText();
+
+protected:
+
+ struct EnqueuedText
+ {
+ const char* m_pcText;
+ TextAlignment m_enAlignment;
+ };
+ std::list<EnqueuedText> m_oEnqueuedTexts;
+ bool m_bDone;
+
+ bool m_bScrolling;
+ double m_dScrollupRate;
+ double m_dScrollup;
+
+ typedef std::vector<FlyingLetter> FlyingLetterList;
+ typedef FlyingLetterList::iterator FlyingLetterIterator;
+
+ sge_bmpFont* m_poFont;
+ int m_iFontDisplacement;
+ FlyingLetterList m_oLetters;
+ int m_iTimeToNextLine;
+
+ SDL_Rect m_oRect;
+ const char* m_pcText;
+ TextAlignment m_enAlignment;
+ int m_iTextOffset;
+ int m_iLastLineY;
+ int m_iDelay;
+};
+
+#endif // FLYINGCHARS_H
diff --git a/src/Game.cpp b/src/Game.cpp
new file mode 100644
index 0000000..bc874c0
--- /dev/null
+++ b/src/Game.cpp
@@ -0,0 +1,724 @@
+/***************************************************************************
+ Game.cpp - description
+ -------------------
+ begin : Mon Sep 24 2001
+ copyright : (C) 2001 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <string.h>
+#include <stdio.h>
+#include <SDL/SDL_image.h>
+#include "sge_surface.h"
+#include "sge_primitives.h"
+#include "sge_bm_text.h"
+#include <SDL/SDL_events.h>
+#include <SDL/SDL_keysym.h>
+#include <fstream>
+
+#include "common.h"
+#include "gfx.h"
+#include "Backend.h"
+#include "RlePack.h"
+#include "State.h"
+#include "Game.h"
+#include "Audio.h"
+
+
+
+/*
+
+GAME PALETTE
+
+From To Num Desc
+---------------------------------------
+ 0 .. 63 64 Background
+ 64 .. 111 48 Doodads
+112 .. 175 64 1st Fighter
+176 .. 239 64 2nd Fighter
+240 .. 255 16 basic colors
+
+*/
+
+#define MAXFRAMESKIP 5
+
+
+
+struct SFpsCounter
+{
+ int m_iLastCheck; // Last second then Tick() was called
+ int m_iFrames; // The number of frames in this second so far
+ int m_iFps; // The number of frames in the last second
+
+ void Reset()
+ {
+ m_iLastCheck = m_iFrames = m_iFps = 0;
+ }
+
+ void Tick()
+ {
+ int iSecond = SDL_GetTicks() / 1000;
+ if ( iSecond > m_iLastCheck )
+ {
+ m_iLastCheck = iSecond;
+ m_iFps = m_iFrames;
+ m_iFrames = 0;
+ fprintf( stderr, "%d ", m_iFps);
+ }
+ ++m_iFrames;
+ }
+
+} oFpsCounter;
+
+
+
+
+
+
+
+
+/***************************************************************************
+ GAME PUBLIC METHODS
+***************************************************************************/
+
+Game::Game( bool a_bIsReplay, bool a_bDebug)
+{
+ m_bIsReplay = a_bIsReplay;
+ m_bDebug = a_bDebug;
+
+ m_poBackground = LoadBackground( "level1.png", 64 );
+ m_poDoodads = LoadBackground( "Doodads.png", 48, 64 );
+
+ m_aiRoundsWonByPlayer[0] = m_aiRoundsWonByPlayer[1] = 0;
+ m_iNumberOfRounds = 0;
+}
+
+
+Game::~Game()
+{
+ SDL_FreeSurface( m_poBackground );
+ m_poBackground = NULL;
+ SDL_FreeSurface( m_poDoodads );
+ m_poDoodads = NULL;
+}
+
+
+int Game::Run()
+{
+ do
+ {
+ m_sReplayString.clear();
+ m_aReplayOffsets.clear();
+ DoOneRound();
+
+ if ( g_oState.m_bQuitFlag
+ || SState::IN_DEMO == g_oState.m_enGameMode )
+ {
+ return -1;
+ }
+ } while ( m_aiRoundsWonByPlayer[0] < 2
+ && m_aiRoundsWonByPlayer[1] < 2
+ && m_iNumberOfRounds < 3 );
+
+ if ( m_aiRoundsWonByPlayer[1] > m_aiRoundsWonByPlayer[0] ) return 1;
+ if ( m_aiRoundsWonByPlayer[1] < m_aiRoundsWonByPlayer[0] ) return 0;
+ return -1;
+}
+
+
+std::string& Game::GetReplay()
+{
+ return m_sReplayString;
+}
+
+
+/***************************************************************************
+ GAME DRAWING METHODS
+***************************************************************************/
+
+
+void Game::DrawHitPointDisplay()
+{
+ int hp1 = g_oBackend.m_aoPlayers[0].m_iHitPoints;// * 100 / g_oState.m_iHitPoints;
+ int hp2 = g_oBackend.m_aoPlayers[1].m_iHitPoints;// * 100 / g_oState.m_iHitPoints;
+ SDL_Rect src, dst;
+
+ src.y = 154;
+ src.h = 20;
+ dst.y = 15;
+
+ // Player 1, green part.
+ dst.x = 40;
+ src.x = 0;
+ src.w = hp1*2;
+ SDL_BlitSurface( m_poDoodads, &src, gamescreen, &dst );
+
+ // Player 1, red part.
+ dst.x += hp1*2;
+ src.x = (100 + hp1)*2;
+ src.w = (100-hp1)*2;
+ SDL_BlitSurface( m_poDoodads, &src, gamescreen, &dst );
+
+ // Player 2, red part.
+ dst.x = 400;
+ src.x = 200;
+ src.w = (100-hp2)*2;
+ SDL_BlitSurface( m_poDoodads, &src, gamescreen, &dst );
+
+ // Player 2, green part.
+ dst.x = 400 + (100-hp2)*2;
+ src.x = (100-hp2)*2;
+ src.w = hp2*2;
+ SDL_BlitSurface( m_poDoodads, &src, gamescreen, &dst );
+
+ // "Won" icon for Player 1
+ src.x = 0; src.y = 276; src.w = 32; src.h = 32;
+ if ( m_aiRoundsWonByPlayer[0] > 0 )
+ {
+ dst.x = 4; dst.y = 11;
+ SDL_BlitSurface( m_poDoodads, &src, gamescreen, &dst );
+ }
+ if ( m_aiRoundsWonByPlayer[1] > 0 )
+ {
+ dst.x = 604; dst.y = 11;
+ SDL_BlitSurface( m_poDoodads, &src, gamescreen, &dst );
+ }
+}
+
+
+
+void Game::DrawBackground()
+{
+ sge_Blit( m_poBackground, gamescreen,
+ g_oBackend.m_iBgX, g_oBackend.m_iBgY,
+ 0, 0, SCREENWIDTH, SCREENHEIGHT );
+}
+
+
+
+void Game::DrawPoly( const char* sName, int color )
+{
+ AV *iList;
+ int n;
+
+ iList = get_av( sName, FALSE );
+ if ( iList == NULL )
+ {
+ return;
+ }
+
+ n = av_len( iList ) + 1;
+
+ if ( n< 2 )
+ {
+ return;
+ }
+
+ for ( int i=0; i<n; i += 2 )
+ {
+ int j = (i+2) % n;
+
+ int x1 = SvIV( *av_fetch( iList, i, false) );
+ int y1 = SvIV( *av_fetch( iList, i+1, false) );
+ int x2 = SvIV( *av_fetch( iList, j, false) );
+ int y2 = SvIV( *av_fetch( iList, j+1, false) );
+
+ sge_Line( gamescreen, x1, y1, x2, y2, color ) ;
+ }
+}
+
+
+
+
+void Game::DrawDoodads()
+{
+ for ( int i=0; i<g_oBackend.m_iNumDoodads; ++i )
+ {
+ Backend::SDoodad& roDoodad = g_oBackend.m_aoDoodads[i];
+ if ( 0 == roDoodad.m_iType )
+ {
+ // Handle text doodads
+ const char *s = roDoodad.m_sText.c_str();
+
+ int iWidth = sge_BF_TextSize(fastFont, s).w;
+ int iDoodadX = roDoodad.m_iX - iWidth/2;
+ if ( iDoodadX + iWidth > 640 ) iDoodadX = 640 - iWidth;
+ if ( iDoodadX < 0 ) iDoodadX = 0;
+ int iDoodadY = roDoodad.m_iY;
+
+ sge_BF_textout( gamescreen, fastFont, s, iDoodadX, iDoodadY );
+ continue;
+ }
+
+ SDL_Rect rsrc, rdst;
+ rdst.x = roDoodad.m_iX;
+ rdst.y = roDoodad.m_iY;
+ rsrc.x = 64 * roDoodad.m_iFrame;
+ rsrc.y = 0;
+ rsrc.w = 64;
+ rsrc.h = 64;
+
+ SDL_BlitSurface( m_poDoodads, &rsrc, gamescreen, &rdst );
+ //debug( "Doodad x: %d, y: %d, t: %d, f: %d\n", dx, dy, dt, df );
+ }
+}
+
+
+void Game::Draw()
+{
+ DrawBackground();
+
+ for ( int i=0; i<2; ++i )
+ {
+ int iFrame = g_oBackend.m_aoPlayers[i].m_iFrame;
+ if ( 0 != iFrame )
+ {
+ (i ? pack2 : pack1)->draw( ABS(iFrame)-1,
+ g_oBackend.m_aoPlayers[i].m_iX,
+ g_oBackend.m_aoPlayers[i].m_iY,
+ iFrame<0 );
+ }
+ }
+
+ if ( m_bDebug )
+ {
+ DrawPoly( "p1head", C_LIGHTRED );
+ DrawPoly( "p1body", C_LIGHTGREEN );
+ DrawPoly( "p1legs", C_LIGHTBLUE );
+ DrawPoly( "p1hit", C_YELLOW );
+ DrawPoly( "p2head", C_LIGHTRED );
+ DrawPoly( "p2body", C_LIGHTGREEN );
+ DrawPoly( "p2legs", C_LIGHTBLUE );
+ DrawPoly( "p2hit", C_YELLOW );
+ }
+
+ DrawDoodads();
+ DrawHitPointDisplay();
+
+ if ( Ph_NORMAL == m_enGamePhase )
+ {
+ char s[100];
+ sprintf( s, "%d", g_oBackend.m_iGameTime );
+ DrawTextMSZ( s, inkFont, 320, 10, AlignHCenter, C_LIGHTCYAN, gamescreen );
+ }
+ else if ( Ph_START == m_enGamePhase )
+ {
+ char s[100];
+ sprintf( s, "Round %d", m_iNumberOfRounds+1 );
+ DrawTextMSZ( s, inkFont, 320, 200, AlignHCenter, C_WHITE, gamescreen );
+ }
+ else if ( Ph_REWIND == m_enGamePhase )
+ {
+ DrawTextMSZ( "REW", inkFont, 320, 10, AlignHCenter, C_WHITE, gamescreen );
+ }
+ else if ( Ph_SLOWFORWARD == m_enGamePhase )
+ {
+ DrawTextMSZ( "REPLAY", inkFont, 320, 10, AlignHCenter, C_WHITE, gamescreen );
+ }
+ else if ( Ph_REPLAY == m_enGamePhase )
+ {
+ DrawTextMSZ( "DEMO", inkFont, 320, 10, AlignHCenter, C_WHITE, gamescreen );
+ }
+
+ if ( oFpsCounter.m_iFps > 0 )
+ {
+ sge_BF_textoutf( gamescreen, fastFont, 2, 2, "%d fps", oFpsCounter.m_iFps );
+ }
+
+ SDL_Flip( gamescreen );
+}
+
+
+
+/***************************************************************************
+ GAME PROTECTED METHODS
+***************************************************************************/
+
+
+
+/**
+This method reads and updates the game's variables. In replay mode,
+this is done by parsing the replay string. Otherwise the perl
+backend is advanced the given number of steps.
+
+Whichever the case, the variables will be available in g_oBackend.
+*/
+
+void Game::Advance( int a_iNumFrames )
+{
+ if ( m_bIsReplay )
+ {
+ // Replay mode...
+
+ m_iFrame += a_iNumFrames;
+ if ( m_iFrame >= ((int)m_aReplayOffsets.size())-1 ) m_iFrame = m_aReplayOffsets.size() - 2;
+ if ( m_iFrame <= 0 ) m_iFrame = 0;
+ std::string sFrameDesc = m_sReplayString.substr(
+ m_aReplayOffsets[m_iFrame],
+ m_aReplayOffsets[m_iFrame+1] - m_aReplayOffsets[m_iFrame] );
+
+ g_oBackend.ReadFromString( sFrameDesc );
+ return;
+ }
+
+ while ( a_iNumFrames > 0 )
+ {
+ -- a_iNumFrames;
+ std::string sFrameDesc;
+ g_oBackend.AdvancePerl();
+ g_oBackend.ReadFromPerl();
+ g_oBackend.PlaySounds();
+
+ g_oBackend.WriteToString( sFrameDesc );
+ m_sReplayString += sFrameDesc;
+ m_sReplayString += '\n';
+ m_aReplayOffsets.push_back( m_sReplayString.size() );
+ }
+}
+
+
+
+/** ProcessEvents reads events from the SDL event system.
+
+Relevant key events are fed to the backend.
+Esc brings up the menu.
+
+Returns 1 on quit event, 0 otherwise.
+*/
+
+int Game::ProcessEvents()
+{
+ SDL_Event event;
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ g_oState.m_bQuitFlag = true;
+ return 1;
+
+ case SDL_KEYDOWN:
+ {
+ if ( event.key.keysym.sym == SDLK_ESCAPE )
+ return 1;
+
+ if ( Ph_NORMAL != m_enGamePhase )
+ break;
+
+ for (int i=0; i<2; i++)
+ {
+ for (int j=0; j<9; j++ )
+ {
+ if (g_oState.m_aiPlayerKeys[i][j] == event.key.keysym.sym)
+ {
+ PERLCALL( "KeyDown", i, j );
+ }
+ }
+ }
+ break;
+ }
+
+ case SDL_KEYUP:
+ {
+ if ( Ph_NORMAL != m_enGamePhase )
+ break;
+
+ for (int i=0; i<2; i++)
+ {
+ for (int j=0; j<9; j++ )
+ {
+ if (g_oState.m_aiPlayerKeys[i][j] == event.key.keysym.sym)
+ {
+ PERLCALL( "KeyUp", i, j );
+ }
+ }
+ }
+ break;
+ }
+ } // End of switch
+ } // End of while SDL_PollEvent;
+
+ return 0;
+}
+
+
+
+void Game::HurryUp()
+{
+ Audio->PlaySample( "aroooga.voc" );
+ DrawGradientText( "HURRY UP!", titleFont, 200, gamescreen );
+ SDL_Delay( 1000 );
+ Audio->PlaySample( "machine_start.voc" );
+}
+
+
+void Game::TimeUp()
+{
+ DrawGradientText( "TIME IS UP!", titleFont, 200, gamescreen );
+ SDL_Delay( 1000 );
+}
+
+
+void Game::InstantReplay( int a_iKoAt )
+{
+ int iCurrentFrame = m_aReplayOffsets.size() - 200;
+ int iThisTick, iLastTick, iGameSpeed;
+
+ m_enGamePhase = Ph_REWIND;
+ iGameSpeed = 8;
+ iThisTick = SDL_GetTicks() / iGameSpeed;
+ iLastTick = iThisTick - 1;
+
+ while ( iCurrentFrame < (int)m_aReplayOffsets.size() - 150 )
+ {
+ // 1. Wait for the next tick (on extremely fast machines..)
+ while (iThisTick == iLastTick)
+ {
+ iThisTick = SDL_GetTicks() / iGameSpeed;
+ if ( iThisTick==iLastTick ) SDL_Delay(1);
+ }
+
+ // 2. Advance as many ticks as necessary..
+
+ int iNumTicks = iThisTick - iLastTick;
+ if ( iNumTicks > 10 ) iNumTicks = 10;
+ if ( iNumTicks < 0 ) iNumTicks = 0;
+ iCurrentFrame += ( Ph_REWIND == m_enGamePhase ) ? -iNumTicks : +iNumTicks ;
+
+ if ( Ph_REWIND == m_enGamePhase
+ && ( iCurrentFrame < a_iKoAt - 200 || iCurrentFrame <= 0 )
+ )
+ {
+ m_enGamePhase = Ph_SLOWFORWARD;
+ iGameSpeed = 16;
+ SDL_Delay(500);
+ }
+ iLastTick = iThisTick;
+ if ( iCurrentFrame < 0 ) iCurrentFrame = 0;
+
+ m_iFrame = iCurrentFrame;
+ if ( m_iFrame >= ((int)m_aReplayOffsets.size())-1 ) m_iFrame = m_aReplayOffsets.size() - 2;
+ if ( m_iFrame <= 0 ) m_iFrame = 0;
+ std::string sFrameDesc = m_sReplayString.substr(
+ m_aReplayOffsets[m_iFrame],
+ m_aReplayOffsets[m_iFrame+1] - m_aReplayOffsets[m_iFrame] );
+
+ //debug( "PB: Frame %d ofs %d-%d; data: '%s'\n", m_iFrame,
+ // m_aReplayOffsets[m_iFrame], m_aReplayOffsets[m_iFrame+1], sFrameDesc.c_str() );
+
+ g_oBackend.ReadFromString( sFrameDesc );
+
+ if ( ProcessEvents() )
+ {
+ break;
+ }
+ oFpsCounter.Tick();
+
+ // 3. Draw the next game screen..
+
+ Draw();
+
+ if ( g_oState.m_bQuitFlag )
+ {
+ break;
+ }
+ }
+
+}
+
+
+void Game::DoOneRound()
+{
+ m_enGamePhase = Ph_START;
+
+ g_oBackend.PerlEvalF( "GameStart(%d);", g_oState.m_iHitPoints );
+
+ int iKoFrame = -1;
+ double dGameTime = 2 * 1000;
+ int iThisTick, iLastTick, iGameSpeed;
+ bool bHurryUp = false;
+
+ iGameSpeed = 12;
+ iThisTick = SDL_GetTicks() / iGameSpeed;
+ iLastTick = iThisTick - 1;
+
+ oFpsCounter.Reset();
+
+ // 1. DO THE NORMAL GAME ROUND and HURRYUP
+
+ while ( dGameTime > 0 )
+ {
+
+ // 1. Wait for the next tick (on extremely fast machines..)
+ while (iThisTick == iLastTick)
+ {
+ iThisTick = SDL_GetTicks() / iGameSpeed;
+ if ( iThisTick==iLastTick ) SDL_Delay(1);
+ }
+
+ // 2. Advance as many ticks as necessary..
+
+ int iNumTicks = iThisTick - iLastTick;
+ if ( iNumTicks > MAXFRAMESKIP ) iNumTicks = MAXFRAMESKIP;
+ Advance( iNumTicks );
+ dGameTime -= iNumTicks * iGameSpeed;
+
+ if ( Ph_START == m_enGamePhase )
+ {
+ if ( dGameTime < 0 )
+ {
+ m_enGamePhase = Ph_NORMAL;
+ dGameTime = g_oState.m_iGameTime * 1000;
+ }
+ }
+ else if ( Ph_NORMAL == m_enGamePhase )
+ {
+ if ( dGameTime < 10 * 1000
+ && !bHurryUp )
+ {
+ bHurryUp = true;
+ HurryUp();
+ iGameSpeed = iGameSpeed * 3 / 4;
+ }
+ if ( g_oBackend.m_bKO )
+ {
+ m_enGamePhase = Ph_KO;
+ dGameTime = 10 * 1000;
+ iKoFrame = m_aReplayOffsets.size();
+ }
+ else if ( dGameTime < 0 )
+ {
+ m_enGamePhase = Ph_TIMEUP;
+ TimeUp();
+ break;
+ }
+ }
+
+ g_oBackend.m_iGameTime = (int) ((dGameTime + 500.0) / 1000.0);
+ iLastTick = iThisTick;
+
+ if ( ProcessEvents() )
+ {
+ break;
+ }
+
+ oFpsCounter.Tick();
+
+ // 3. Draw the next game screen..
+
+ Draw();
+
+ if ( g_oBackend.m_iGameOver || g_oState.m_bQuitFlag )
+ {
+ break;
+ }
+ }
+
+ // 3. DO THE REPLAY (IF THERE WAS A KO)
+
+ if ( iKoFrame>0 )
+ {
+ InstantReplay( iKoFrame );
+ }
+
+ // 4. END OF ROUND
+
+
+ int p1h = g_oBackend.m_aoPlayers[0].m_iHitPoints;
+ int p2h = g_oBackend.m_aoPlayers[1].m_iHitPoints;
+ debug( "Game over; p1h = %d; p2h = %d\n", p1h, p2h );
+
+ if ( p1h > p2h ) ++m_aiRoundsWonByPlayer[0];
+ if ( p2h > p1h ) ++m_aiRoundsWonByPlayer[1];
+ ++m_iNumberOfRounds;
+}
+
+
+
+void Game::DoReplay( const char* a_pcReplayFile )
+{
+ std::ifstream oInput( a_pcReplayFile );
+ int iPlayer1, iPlayer2;
+ oInput >> iPlayer1 >> iPlayer2;
+
+ std::string sLine;
+ std::getline( oInput, sLine );
+ SetPlayer( 0, (FighterEnum) iPlayer1 );
+ SetPlayer( 1, (FighterEnum) iPlayer2 );
+
+ int iCurrentFrame = 0;
+ int iThisTick, iLastTick, iGameSpeed;
+
+ m_enGamePhase = Ph_REPLAY;
+ iGameSpeed = 12;
+ iThisTick = SDL_GetTicks() / iGameSpeed;
+ iLastTick = iThisTick - 1;
+
+ while ( !oInput.eof() )
+ {
+ // 1. Wait for the next tick (on extremely fast machines..)
+ while (iThisTick == iLastTick)
+ {
+ iThisTick = SDL_GetTicks() / iGameSpeed;
+ if ( iThisTick==iLastTick ) SDL_Delay(1);
+ }
+
+ // 2. Advance as many ticks as necessary..
+
+ int iNumTicks = iThisTick - iLastTick;
+ if ( iNumTicks > 5 ) iNumTicks = 5;
+
+ for ( int i=0; i< iNumTicks; ++i )
+ {
+ std::getline( oInput, sLine );
+ }
+
+ iLastTick = iThisTick;
+
+ g_oBackend.ReadFromString( sLine );
+
+ if ( ProcessEvents() )
+ {
+ break;
+ }
+ oFpsCounter.Tick();
+
+ // 3. Draw the next game screen..
+
+ Draw();
+
+ if ( g_oState.m_bQuitFlag )
+ {
+ break;
+ }
+ }
+}
+
+
+
+int DoGame( char* a_pcReplayFile, bool a_bIsReplay, bool a_bDebug )
+{
+ Game oGame( a_bIsReplay, a_bDebug );
+
+ if ( a_bIsReplay )
+ {
+ if ( NULL == a_pcReplayFile )
+ {
+ return 0;
+ }
+ oGame.DoReplay( a_pcReplayFile );
+ return 0;
+ }
+ else
+ {
+ int iRetval = oGame.Run();
+ if ( NULL != a_pcReplayFile )
+ {
+ std::ofstream oOutput( a_pcReplayFile );
+ oOutput << Fighter1 << ' ' << Fighter2 << '\n' << oGame.GetReplay();
+ }
+ return iRetval;
+ }
+}
+
+
diff --git a/src/Game.h b/src/Game.h
new file mode 100644
index 0000000..55b7285
--- /dev/null
+++ b/src/Game.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+ Game.h - description
+ -------------------
+ begin : Mon Aug 27 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#ifndef GAME_H
+#define GAME_H
+
+#include <string>
+#include <vector>
+
+struct SDL_Surface;
+
+
+
+class Game
+{
+public:
+ Game( bool a_bIsReplay, bool a_bDebug );
+ ~Game();
+ int Run();
+ std::string& GetReplay();
+ void DoReplay( const char* a_pcReplayFile );
+
+protected:
+ void Draw();
+ void DrawHitPointDisplay();
+ void DrawBackground();
+ void DrawDoodads();
+ void DrawPoly( const char* a_pcName, int a_iColor );
+
+ void DoOneRound();
+
+ void Advance( int a_iNumFrames );
+ int ProcessEvents();
+ void HurryUp();
+ void TimeUp();
+ void InstantReplay( int a_iKoAt );
+
+protected:
+ bool m_bIsReplay;
+ bool m_bDebug;
+ SDL_Surface* m_poBackground;
+ SDL_Surface* m_poDoodads;
+
+ int m_aiRoundsWonByPlayer[2];
+ int m_iNumberOfRounds;
+ int m_iFrame;
+
+ std::string m_sReplayString;
+ std::vector<int> m_aReplayOffsets;
+
+ enum // This enum assumes its values during DoOneRound
+ {
+ Ph_START, // "Round X" displayed, fighters getting ready
+ Ph_NORMAL, // During the fight
+ Ph_TIMEUP, // Time is up, no KO, no replay.
+ Ph_KO, // There is a KO, forward until the guy is down
+ Ph_REWIND, // There was a KO, rewinding until before the KO
+ Ph_SLOWFORWARD, // Playing back the KO
+
+ Ph_REPLAY, // Replay mode
+ } m_enGamePhase;
+};
+
+#endif
diff --git a/src/GameOver.cpp b/src/GameOver.cpp
new file mode 100644
index 0000000..31c28c4
--- /dev/null
+++ b/src/GameOver.cpp
@@ -0,0 +1,213 @@
+/***************************************************************************
+ GameOver.cpp - description
+ -------------------
+ begin : Wed Aug 21 20:25:30 CEST 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include "SDL.h"
+#include "gfx.h"
+#include "Backend.h"
+#include "common.h"
+#include "State.h"
+#include "RlePack.h"
+#include "Audio.h"
+
+#include <stdio.h>
+
+
+void DoMenu( bool );
+
+
+void GameOver( int a_iPlayerWon )
+{
+ SDL_Surface* poBackground = LoadBackground( "GameOver.png", 112 );
+ DrawGradientText( "Final Judgement", titleFont, 20, poBackground );
+ DrawTextMSZ( "Continue?", inkFont, 320, 100, AlignHCenter, C_LIGHTCYAN, poBackground );
+
+ SDL_Surface* poFoot = LoadBackground( "Foot.png", 112 );
+
+ SDL_BlitSurface( poBackground, NULL, gamescreen, NULL );
+
+ char acString[100];
+ sprintf( acString, "JudgementStart(%d);", a_iPlayerWon );
+ PERLEVAL( acString );
+
+ int thisTick, lastTick, firstTick, iGameSpeed;
+ iGameSpeed = 14 ;
+ firstTick = thisTick = SDL_GetTicks() / iGameSpeed;
+ lastTick = thisTick - 1;
+
+ int iTimeLeft = 8000 / iGameSpeed;
+ int FOOTHEIGHT = poFoot->h;
+ int GROUNDLEVEL = 440;
+ int iFootY = -FOOTHEIGHT;
+ bool bTimeUp = false;
+ bool bKeyPressed = false;
+ int iCounter = -1;
+
+ SDL_Event event;
+
+ while (1)
+ {
+ // 1. Wait for the next tick (on extremely fast machines..)
+ while (1)
+ {
+ thisTick = SDL_GetTicks() / iGameSpeed;
+ if ( thisTick==lastTick )
+ {
+ SDL_Delay(1);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ // 2. Advance as many ticks as necessary..
+
+ if ( thisTick - lastTick > 5 )
+ {
+ iTimeLeft -= 5;
+ }
+ else
+ {
+ iTimeLeft = iTimeLeft - thisTick + lastTick;
+ }
+
+ if ( iTimeLeft < 0 && !bTimeUp )
+ {
+ bTimeUp = true;
+ Audio->FadeMusic( 1500 );
+ }
+
+ if ( bTimeUp )
+ {
+ iFootY += 12 * (thisTick - lastTick );
+ if ( iFootY > GROUNDLEVEL - FOOTHEIGHT )
+ {
+ break;
+ }
+ }
+
+ int iNumFrames = thisTick - lastTick;
+ for ( int i=0; i<iNumFrames; ++i )
+ {
+ g_oBackend.AdvancePerl();
+ };
+ lastTick = thisTick;
+
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ g_oState.m_bQuitFlag = true;
+ break;
+
+ case SDL_KEYDOWN:
+ {
+ if ( event.key.keysym.sym == SDLK_ESCAPE )
+ {
+ DoMenu( true );
+ break;
+ }
+
+ for (int j=4; j<9; j++ )
+ {
+ if (g_oState.m_aiPlayerKeys[1-a_iPlayerWon][j] == event.key.keysym.sym)
+ {
+ bKeyPressed = true;
+ break;
+ }
+ }
+ }
+ break;
+ } // switch statement
+ } // Polling events
+
+ int p1x = SvIV(get_sv("p1x", FALSE));
+ int p1y = SvIV(get_sv("p1y", FALSE)) - 15;
+ int p1f = SvIV(get_sv("p1f", FALSE));
+ int p2x = SvIV(get_sv("p2x", FALSE));
+ int p2y = SvIV(get_sv("p2y", FALSE)) - 15;
+ int p2f = SvIV(get_sv("p2f", FALSE));
+
+ SDL_BlitSurface( poBackground, NULL, gamescreen, NULL );
+
+ if ( a_iPlayerWon )
+ {
+ if (p2f) pack2->draw( ABS(p2f)-1, p2x, p2y, p2f<0 );
+ }
+ else
+ {
+ if (p1f) pack1->draw( ABS(p1f)-1, p1x, p1y, p1f<0 );
+ }
+
+ if ( bTimeUp )
+ {
+ SDL_Rect oRect;
+ oRect.x = 0;
+ oRect.y = iFootY + FOOTHEIGHT - 10;
+ oRect.w = gamescreen->w;
+ oRect.h = gamescreen->h - oRect.y;
+ SDL_SetClipRect(gamescreen, &oRect);
+ }
+ if ( a_iPlayerWon )
+ {
+ if (p1f) pack1->draw( ABS(p1f)-1, p1x, p1y, p1f<0 );
+ }
+ else
+ {
+ if (p2f) pack2->draw( ABS(p2f)-1, p2x, p2y, p2f<0 );
+ }
+ SDL_SetClipRect( gamescreen, NULL );
+
+ if ( !bTimeUp )
+ {
+ int iNewCounter = iTimeLeft * iGameSpeed / 1000;
+ sprintf( acString, "%d", iNewCounter );
+ DrawTextMSZ( acString, inkFont, 320, 130, AlignHCenter, C_LIGHTCYAN, gamescreen );
+ if ( iNewCounter != iCounter )
+ {
+ Audio->PlaySample( "alarm.voc" );
+ iCounter = iNewCounter;
+ }
+ }
+ else
+ {
+ SDL_Rect oRect;
+ oRect.x = 40;
+ oRect.y = iFootY;
+ SDL_BlitSurface( poFoot, NULL, gamescreen, &oRect );
+ }
+
+ SDL_Flip( gamescreen );
+
+ if ( g_oState.m_bQuitFlag || bKeyPressed )
+ {
+ break;
+ }
+ }
+
+ SDL_FillRect( gamescreen, NULL, C_BLACK );
+ if ( bTimeUp )
+ {
+ SDL_UnlockSurface( gamescreen );
+ DrawGradientText( "SPLAT!", titleFont, 220, gamescreen );
+ Audio->PlaySample( "splat2.voc" );
+ SDL_Flip( gamescreen );
+ SDL_Delay( 1500 );
+ g_oState.m_enGameMode = SState::IN_DEMO;
+ }
+ else
+ {
+ SDL_Flip( gamescreen );
+ }
+
+ SDL_FreeSurface( poBackground );
+ return;
+}
+
+
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..ad681cd
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,27 @@
+## Process this file with automake to produce Makefile.in
+
+bin_PROGRAMS = openmortal
+openmortal_SOURCES = Audio.cpp Backend.cpp common.cpp \
+ Demo.cpp FighterStats.cpp FlyingChars.cpp Game.cpp gfx.cpp main.cpp \
+ menu.cpp PlayerSelect.cpp RlePack.cpp sge_bm_text.cpp \
+ sge_primitives.cpp sge_surface.cpp sge_tt_text.cpp State.cpp \
+ GameOver.cpp
+
+EXTRA_DIST = Audio.h Backend.h common.h Demo.h FlyingChars.h gfx.h \
+ menu.h RlePack.h sge_bm_text.h sge_config.h sge_internal.h \
+ sge_primitives.h sge_surface.h sge_tt_text.h State.h \
+ Game.h \
+ Audio.cpp Backend.cpp common.cpp \
+ Demo.cpp FighterStats.cpp FlyingChars.cpp Game.cpp gfx.cpp main.cpp \
+ menu.cpp PlayerSelect.cpp RlePack.cpp sge_bm_text.cpp \
+ sge_primitives.cpp sge_surface.cpp sge_tt_text.cpp State.cpp \
+ GameOver.cpp
+
+CXXFLAGS= @CXXFLAGS@ -DDATADIR=\"${pkgdatadir}\" -Wall
+
+# set the include path found by configure
+#INCLUDES= $(all_includes)
+
+# the library search path.
+#msz_LDFLAGS = $(all_libraries)
+
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..a1326f3
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,336 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AUTODIRS = @AUTODIRS@
+CXX = @CXX@
+FT2_CFLAGS = @FT2_CFLAGS@
+FT2_CONFIG = @FT2_CONFIG@
+FT2_LIBS = @FT2_LIBS@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+PERL = @PERL@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+VERSION = @VERSION@
+perl_embed_ccflags = @perl_embed_ccflags@
+perl_embed_ldflags = @perl_embed_ldflags@
+
+bin_PROGRAMS = openmortal
+openmortal_SOURCES = Audio.cpp Backend.cpp common.cpp Demo.cpp FighterStats.cpp FlyingChars.cpp Game.cpp gfx.cpp main.cpp menu.cpp PlayerSelect.cpp RlePack.cpp sge_bm_text.cpp sge_primitives.cpp sge_surface.cpp sge_tt_text.cpp State.cpp GameOver.cpp
+
+
+EXTRA_DIST = Audio.h Backend.h common.h Demo.h FlyingChars.h gfx.h menu.h RlePack.h sge_bm_text.h sge_config.h sge_internal.h sge_primitives.h sge_surface.h sge_tt_text.h State.h Game.h Audio.cpp Backend.cpp common.cpp Demo.cpp FighterStats.cpp FlyingChars.cpp Game.cpp gfx.cpp main.cpp menu.cpp PlayerSelect.cpp RlePack.cpp sge_bm_text.cpp sge_primitives.cpp sge_surface.cpp sge_tt_text.cpp State.cpp GameOver.cpp
+
+
+CXXFLAGS = @CXXFLAGS@ -DDATADIR=\"${pkgdatadir}\" -Wall
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(bin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I..
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+openmortal_OBJECTS = Audio.o Backend.o common.o Demo.o FighterStats.o \
+FlyingChars.o Game.o gfx.o main.o menu.o PlayerSelect.o RlePack.o \
+sge_bm_text.o sge_primitives.o sge_surface.o sge_tt_text.o State.o \
+GameOver.o
+openmortal_LDADD = $(LDADD)
+openmortal_DEPENDENCIES =
+openmortal_LDFLAGS =
+CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+SOURCES = $(openmortal_SOURCES)
+OBJECTS = $(openmortal_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .cpp .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ list='$(bin_PROGRAMS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ done
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+openmortal: $(openmortal_OBJECTS) $(openmortal_DEPENDENCIES)
+ @rm -f openmortal
+ $(CXXLINK) $(openmortal_LDFLAGS) $(openmortal_OBJECTS) $(openmortal_LDADD) $(LIBS)
+.cpp.o:
+ $(CXXCOMPILE) -c $<
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = src
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+Audio.o: Audio.cpp Audio.h State.h common.h
+Backend.o: Backend.cpp common.h Backend.h Audio.h
+common.o: common.cpp common.h
+Demo.o: Demo.cpp FlyingChars.h sge_bm_text.h sge_internal.h sge_config.h \
+ State.h gfx.h common.h Backend.h Demo.h
+FighterStats.o: FighterStats.cpp FlyingChars.h sge_bm_text.h \
+ sge_internal.h sge_config.h sge_tt_text.h common.h gfx.h \
+ RlePack.h Backend.h Demo.h
+FlyingChars.o: FlyingChars.cpp FlyingChars.h sge_bm_text.h \
+ sge_internal.h sge_config.h sge_surface.h common.h
+Game.o: Game.cpp sge_surface.h sge_internal.h sge_config.h \
+ sge_primitives.h sge_bm_text.h common.h gfx.h Backend.h \
+ RlePack.h State.h Game.h Audio.h
+GameOver.o: GameOver.cpp gfx.h Backend.h common.h State.h RlePack.h \
+ Audio.h
+gfx.o: gfx.cpp sge_tt_text.h sge_internal.h sge_config.h sge_surface.h \
+ common.h gfx.h State.h
+main.o: main.cpp ../config.h FlyingChars.h sge_bm_text.h sge_internal.h \
+ sge_config.h sge_tt_text.h sge_surface.h common.h gfx.h Audio.h \
+ RlePack.h Backend.h State.h
+menu.o: menu.cpp menu.h gfx.h State.h common.h Audio.h Backend.h
+PlayerSelect.o: PlayerSelect.cpp sge_primitives.h sge_internal.h \
+ sge_config.h common.h Audio.h gfx.h RlePack.h Backend.h State.h
+RlePack.o: RlePack.cpp common.h RlePack.h
+sge_bm_text.o: sge_bm_text.cpp sge_surface.h sge_internal.h sge_config.h \
+ sge_bm_text.h sge_tt_text.h
+sge_primitives.o: sge_primitives.cpp sge_primitives.h sge_internal.h \
+ sge_config.h sge_surface.h
+sge_surface.o: sge_surface.cpp sge_surface.h sge_internal.h sge_config.h
+sge_tt_text.o: sge_tt_text.cpp sge_surface.h sge_internal.h sge_config.h \
+ sge_primitives.h sge_tt_text.h
+State.o: State.cpp ../config.h common.h State.h Backend.h
+
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
+ mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-binPROGRAMS clean-compile clean-tags clean-generic \
+ mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-binPROGRAMS distclean-compile distclean-tags \
+ distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-binPROGRAMS \
+ maintainer-clean-compile maintainer-clean-tags \
+ maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
+check-am installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+# set the include path found by configure
+#INCLUDES= $(all_includes)
+
+# the library search path.
+#msz_LDFLAGS = $(all_libraries)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/PlayerSelect.cpp b/src/PlayerSelect.cpp
new file mode 100644
index 0000000..065d504
--- /dev/null
+++ b/src/PlayerSelect.cpp
@@ -0,0 +1,496 @@
+/***************************************************************************
+ PlayerSelect.cpp - description
+ -------------------
+ begin : Sun Dec 8 2002
+ copyright : (C) 2002 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <stdio.h>
+
+#include <SDL/SDL.h>
+#include <SDL/SDL_video.h>
+#include <SDL/SDL_image.h>
+#include "sge_primitives.h"
+
+#include "common.h"
+#include "Audio.h"
+#include "gfx.h"
+#include "RlePack.h"
+#include "Backend.h"
+#include "State.h"
+
+
+#define CHOOSERLEFT 158
+#define CHOOSERTOP 98
+#define CHOOSERHEIGHT 80
+#define CHOOSERWIDTH 80
+#define CHOOSERROWS 4
+#define CHOOSERCOLS 4
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+
+/***************************************************************************
+ PUBLIC EXPORTED VARIABLES
+***************************************************************************/
+
+FighterEnum Fighter1 = ZOLI;
+FighterEnum Fighter2 = ZOLI;
+RlePack* pack1;
+RlePack* pack2;
+
+
+/***************************************************************************
+ PRIVATE VARIABLES (perl variable space)
+***************************************************************************/
+
+int p1 = 0;
+int p2 = 3;
+bool done1 = false;
+bool done2 = false;
+
+
+
+FighterEnum ChooserCells[CHOOSERROWS][CHOOSERCOLS] = {
+ { ZOLI, UPI, CUMI, SIRPI },
+ { ULMAR, MACI, BENCE, GRIZLI },
+ { AMBRUS, DESCANT, SURBA, DANI },
+ { UNKNOWN, KINGA, MISI, UNKNOWN },
+};
+
+
+
+
+bool IsFighterAvailable( FighterEnum a_enFighter )
+{
+ static bool g_abFighterAvailable[ LASTFIGHTER ] =
+ {
+ false,
+ true, true, true, true,
+ true, true, true, true,
+ true, false, false, false,
+ false, false
+ };
+
+ if ( a_enFighter < UNKNOWN
+ || a_enFighter >= LASTFIGHTER )
+ {
+ return false;
+ }
+
+ return g_abFighterAvailable[ a_enFighter ];
+}
+
+
+
+RlePack* LoadFighter( FighterEnum fighter, int offset )
+{
+ char filename[FILENAME_MAX+1];
+ const char* s;
+
+ switch (fighter)
+ {
+ case ZOLI: s = "ZOLIDATA.DAT"; break;
+ case UPI: s = "UPIDATA.DAT"; break;
+ case ULMAR: s = "ULMARDATA.DAT"; break;
+ case CUMI: s = "CUMIDATA.DAT"; break;
+ case SIRPI: s = "SIRPIDATA.DAT"; break;
+ case MACI: s = "MACIDATA.DAT"; break;
+ case BENCE: s = "BENCEDATA.DAT"; break;
+ case DESCANT: s = "DESCANTDATA.DAT"; break;
+ case GRIZLI: s = "GRIZLIDATA.DAT"; break;
+ default: s = "ZOLIDATA.DAT"; break;
+ }
+
+ strcpy( filename, DATADIR );
+ strcat( filename, "/characters/" );
+ strcat( filename, s );
+
+ RlePack* pack = new RlePack( filename );
+ pack->offsetSprites( offset );
+ SDL_SetColors( gamescreen, pack->getPalette(), offset, 64 );
+ return pack;
+}
+
+
+void TintFighter( RlePack* fighter, TintEnum tint, int offset )
+{
+ if ( tint == RANDOM_TINT )
+ {
+ switch (rand() % 4 )
+ {
+ case 0: tint = ZOMBIE_TINT; break;
+ case 1: tint = GRAY_TINT; break;
+ case 2: tint = DARK_TINT; break;
+ case 3: tint = INVERTED_TINT; break;
+ }
+ }
+
+ SDL_Color palette[64];
+ int i;
+
+ memcpy( palette, fighter->getPalette(), sizeof(palette) );
+
+ switch( tint )
+ {
+ case ZOMBIE_TINT:
+ {
+ for ( i=0; i<64; ++i )
+ {
+ palette[i].r = 0;
+ palette[i].b = 0;
+ }
+ break;
+ }
+
+ case GRAY_TINT:
+ {
+ int j;
+ for ( i=0; i<64; ++i )
+ {
+ j = (palette[i].r + palette[i].g + palette[i].b)/4;
+ palette[i].r = j;
+ palette[i].g = j;
+ palette[i].b = j;
+ }
+ break;
+ }
+
+ case DARK_TINT:
+ {
+ for ( i=0; i<64; ++i )
+ {
+ palette[i].r = int(palette[i].r) * 2 / 3;
+ palette[i].g = int(palette[i].g) * 2 / 3;
+ palette[i].b = int(palette[i].b) * 2 / 3;
+ }
+ break;
+ }
+
+ case INVERTED_TINT:
+ {
+ for ( i=0; i<64; ++i )
+ {
+ palette[i].r = 255 - palette[i].r;
+ palette[i].g = 255 - palette[i].g;
+ palette[i].b = 255 - palette[i].b;
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ SDL_SetColors( gamescreen, palette, offset, 64 );
+}
+
+
+
+void SetPlayer( int player, FighterEnum fighter )
+{
+ int offset = player ? 176 : 112;
+ RlePack* pack = LoadFighter( fighter, offset );
+
+ if ( player )
+ {
+ delete pack2;
+ pack2 = pack;
+ }
+ else
+ {
+ delete pack1;
+ pack1 = pack;
+ }
+ PERLCALL( "SetPlayerNumber", player, fighter );
+
+ FighterEnum& thisPlayer = player ? Fighter2 : Fighter1;
+
+ thisPlayer = fighter;
+ if ( pack2 )
+ {
+ TintFighter( pack2, Fighter1 == Fighter2 ? RANDOM_TINT : NO_TINT, 176 );
+ }
+}
+
+
+
+
+
+
+
+void handleKey( int player, int key )
+{
+ int& p = player ? p2 : p1;
+ int oldp = p;
+ bool& done = player ? done2 : done1;
+ if ( done )
+ {
+ return;
+ }
+
+
+ switch ( key )
+ {
+ case 0: // up
+ if ( p >= CHOOSERCOLS ) p -= CHOOSERCOLS;
+ break;
+ case 1: // down
+ if ( (p/CHOOSERCOLS) < (CHOOSERROWS-1) ) p += CHOOSERCOLS;
+ break;
+ case 2: // left
+ if ( (p % CHOOSERCOLS) > 0 ) p--;
+ break;
+ case 3: // right
+ if ( (p % CHOOSERCOLS) < (CHOOSERCOLS-1) ) p++;
+ break;
+ default:
+ if ( ChooserCells[p/4][p%4] )
+ {
+ done = true;
+ PERLCALL( "PlayerSelected", player, 0 );
+ Audio->PlaySample("magic.voc");
+ return;
+ }
+ }
+
+ if ( !IsFighterAvailable( ChooserCells[p/CHOOSERCOLS][p%CHOOSERCOLS] ) )
+ {
+ p = oldp;
+ }
+
+ if ( oldp != p )
+ {
+ Audio->PlaySample("strange_quack.voc");
+ SetPlayer( player, ChooserCells[p/CHOOSERCOLS][p%CHOOSERCOLS] );
+ }
+}
+
+
+void drawRect( int pos, int color )
+{
+ int row = pos / CHOOSERCOLS;
+ int col = pos % CHOOSERCOLS;
+ SDL_Rect r, r1;
+
+ r.x = CHOOSERLEFT + col * CHOOSERWIDTH;
+ r.y = CHOOSERTOP + row * CHOOSERHEIGHT;
+ r.w = CHOOSERWIDTH + 5;
+ r.h = 5;
+ r1 = r;
+ SDL_FillRect( gamescreen, &r1, color );
+
+ r.y += CHOOSERHEIGHT;
+ r1 = r;
+ SDL_FillRect( gamescreen, &r1, color );
+
+ r.y -= CHOOSERHEIGHT;
+ r.w = 5;
+ r.h = CHOOSERHEIGHT + 5;
+ r1 = r;
+ SDL_FillRect( gamescreen, &r1, color );
+
+ r.x += CHOOSERWIDTH;
+ r1 = r;
+ SDL_FillRect( gamescreen, &r1, color );
+}
+
+
+void checkPlayer( SDL_Surface* background, int row, int col )
+{
+ int x1, y1;
+
+ x1 = CHOOSERLEFT + col * CHOOSERWIDTH +5;
+ y1 = CHOOSERTOP + row * CHOOSERHEIGHT +5;
+
+ sge_Line(background, x1+5, y1+5, x1 + CHOOSERWIDTH-10, y1 + CHOOSERHEIGHT-10, 252);
+ sge_Line(background, x1 + CHOOSERWIDTH-10, y1+5, x1+5, y1 + CHOOSERHEIGHT-10, 252);
+ x1++;
+ sge_Line(background, x1+5, y1+5, x1 + CHOOSERWIDTH-10, y1 + CHOOSERHEIGHT-10, 252);
+ sge_Line(background, x1 + CHOOSERWIDTH-10, y1+5, x1+5, y1 + CHOOSERHEIGHT-10, 252);
+ y1++;
+ sge_Line(background, x1+5, y1+5, x1 + CHOOSERWIDTH-10, y1 + CHOOSERHEIGHT-10, 252);
+ sge_Line(background, x1 + CHOOSERWIDTH-10, y1+5, x1+5, y1 + CHOOSERHEIGHT-10, 252);
+ x1--;
+ sge_Line(background, x1+5, y1+5, x1 + CHOOSERWIDTH-10, y1 + CHOOSERHEIGHT-10, 252);
+ sge_Line(background, x1 + CHOOSERWIDTH-10, y1+5, x1+5, y1 + CHOOSERHEIGHT-10, 252);
+}
+
+
+void PlayerSelect()
+{
+ SDL_FillRect( gamescreen, NULL, C_BLACK );
+ SDL_Flip( gamescreen );
+
+ char filename[FILENAME_MAX+1];
+ strcpy( filename, DATADIR );
+ strcat( filename, "/gfx/" );
+ strcat( filename, "PlayerSelect.png" );
+
+ SDL_Surface* background = IMG_Load( filename );
+ if (!background)
+ {
+ debug( "Can't load file: %s\n", filename );
+ g_oState.m_bQuitFlag = true;
+ return;
+ }
+
+ SDL_Palette* pal = background->format->palette;
+ if ( pal )
+ {
+ int ncolors = pal->ncolors;
+ if (ncolors>111) ncolors = 111;
+ SDL_SetColors( gamescreen, pal->colors, 0, ncolors );
+ }
+ background = SDL_DisplayFormat( background );
+
+ DrawGradientText( "Choose A Fighter Dammit", titleFont, 10, background );
+
+ for ( int i=0; i<CHOOSERROWS; ++i )
+ {
+ for ( int j=0; j<CHOOSERCOLS; ++j )
+ {
+ if ( !IsFighterAvailable(ChooserCells[i][j]) &&
+ UNKNOWN != ChooserCells[i][j] )
+ {
+ checkPlayer( background, i, j );
+ }
+ }
+ }
+
+ if (pack1) SDL_SetColors( gamescreen, pack1->getPalette(), 112, 64 );
+ if (pack2) SDL_SetColors( gamescreen, pack2->getPalette(), 176, 64 );
+
+ PERLEVAL( "SelectStart();" );
+
+ done1 = done2 = false;
+
+ int thisTick, lastTick, gameSpeed;
+
+ gameSpeed = 12 ;
+ thisTick = SDL_GetTicks() / gameSpeed;
+ lastTick = thisTick - 1;
+
+ int i = 0;
+ bool bDraw = true;
+ int over = 0;
+
+ int iCourtain = 0;
+ int iCourtainSpeed = 0;
+ int iCourtainTime = 80;
+
+ SDL_Event event;
+
+ while (1)
+ {
+ // 1. Wait for the next tick (on extremely fast machines..)
+ while (1)
+ {
+ thisTick = SDL_GetTicks() / gameSpeed;
+ if ( thisTick==lastTick )
+ {
+ SDL_Delay(1);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ // 2. Advance as many ticks as necessary..
+
+ if ( iCourtainTime > 0 )
+ {
+ int iAdvance = thisTick - lastTick;
+ if ( iAdvance > 5 ) iAdvance = 5;
+
+ if ( iCourtain + iCourtainSpeed * iCourtainTime /2 < 320 * 4 )
+ iCourtainSpeed += iAdvance;
+ else
+ iCourtainSpeed -= iAdvance;
+
+ iCourtain += iCourtainSpeed * iAdvance;
+ iCourtainTime -= iAdvance;
+
+ if ( iCourtainTime > 0 )
+ {
+ SDL_Rect oRect;
+ oRect.x = 320 - iCourtain/4; oRect.y = 0;
+ oRect.w = iCourtain / 2; oRect.h = gamescreen->h;
+ if ( oRect.x < 0 ) oRect.x = 0;
+ if ( oRect.w > gamescreen->w ) oRect.w = gamescreen->w;
+ SDL_SetClipRect( gamescreen, &oRect );
+ }
+ else
+ {
+ SDL_SetClipRect( gamescreen, NULL );
+ }
+ }
+
+ int iNumFrames = thisTick - lastTick;
+ if ( iNumFrames>5 ) iNumFrames = 5;
+ for ( int i=0; i<iNumFrames; ++i )
+ {
+ g_oBackend.AdvancePerl();
+ }
+ lastTick = thisTick;
+
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ g_oState.m_bQuitFlag = true;
+ break;
+ case SDL_KEYDOWN:
+ {
+ if ( event.key.keysym.sym == SDLK_ESCAPE )
+ {
+ DoMenu( false );
+ break;
+ }
+
+ for (int i=0; i<2; i++)
+ {
+ for (int j=0; j<9; j++ )
+ {
+ if (g_oState.m_aiPlayerKeys[i][j] == event.key.keysym.sym)
+ {
+ drawRect( p1, 240 );
+ drawRect( p2, 240 );
+ handleKey( i, j );
+ }
+ }
+ }
+ }
+ break;
+ } // switch statement
+ } // Polling events
+
+ int p1x = SvIV(get_sv("p1x", FALSE));
+ int p1y = SvIV(get_sv("p1y", FALSE));
+ int p1f = SvIV(get_sv("p1f", FALSE));
+ int p2x = SvIV(get_sv("p2x", FALSE));
+ int p2y = SvIV(get_sv("p2y", FALSE));
+ int p2f = SvIV(get_sv("p2f", FALSE));
+ over = SvIV(get_sv("over", FALSE));
+
+ SDL_BlitSurface( background, NULL, gamescreen, NULL );
+ if (p1f) pack1->draw( ABS(p1f)-1, p1x, p1y, p1f<0 );
+ if (p2f) pack2->draw( ABS(p2f)-1, p2x, p2y, p2f<0 );
+
+ if ( !done1) drawRect( p1, 250 );
+ if ( !done2) drawRect( p2, 253 );
+ SDL_Flip( gamescreen );
+
+ if (over || g_oState.m_bQuitFlag || SState::IN_DEMO == g_oState.m_enGameMode) break;
+ }
+
+ SDL_FreeSurface( background );
+ SDL_SetClipRect( gamescreen, NULL );
+ return;
+}
+
diff --git a/src/RlePack.cpp b/src/RlePack.cpp
new file mode 100644
index 0000000..d6407b6
--- /dev/null
+++ b/src/RlePack.cpp
@@ -0,0 +1,544 @@
+/***************************************************************************
+ RlePack.cpp - description
+ -------------------
+ begin : Mon Sep 24 2001
+ copyright : (C) 2001 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <SDL/SDL.h>
+#include <SDL/SDL_video.h>
+
+#include "common.h"
+#include "RlePack.h"
+
+
+typedef struct RLE_SPRITE /* a RLE compressed sprite */
+{
+ int w, h; /* width and height in pixels */
+ int color_depth; /* color depth of the image */
+ int size; /* size of sprite data in bytes */
+ signed char dat[0];
+} RLE_SPRITE;
+
+
+struct RlePack_P
+{
+ SDL_Color palette[256];
+ int count, arraysize;
+ RLE_SPRITE** sprites;
+};
+
+RlePack::RlePack( const char* filename )
+{
+ p = new RlePack_P;
+ p->count = p->arraysize = 0;
+ p->sprites = NULL;
+
+ //@ Load file and stuff
+ FILE* f;
+
+ f = fopen( filename, "rb" );
+ if (f==NULL)
+ {
+ debug( "Can't open file '%s'.\n", filename );
+ return;
+ }
+
+ int datacount;
+
+ #define READDW(I) { \
+ unsigned char data[4]; \
+ fread( data, 4, 1, f ); \
+ (I) = (data[0]<<24) + (data[1]<<16) + (data[2]<<8) + data[3]; }
+ #define READW(I) { \
+ unsigned char data[2]; \
+ fread( data, 2, 1, f ); \
+ (I) = (data[0]<<8) + data[1]; }
+ #define READCH(S,C) { \
+ fread( S, C, 1, f ); S[C] = 0; }
+
+ fseek( f, 8, SEEK_SET ); // Skip header
+ READDW( datacount );
+
+ debug( "File '%s' contains %d entries.\n", filename, datacount );
+ if (datacount>500) datacount = 500; // Sanity
+
+ p->arraysize = datacount;
+ p->sprites = new (RLE_SPRITE*)[ datacount ];
+
+ while( (!feof(f)) && (!ferror(f)) && (datacount>0) )
+ {
+ char s[10];
+ READCH( s, 4 );
+ if ( !strcmp( s, "prop" )) // Found a property
+ {
+ fseek( f, 4, SEEK_CUR );
+ unsigned int propsize;
+ READDW( propsize );
+ fseek( f, propsize, SEEK_CUR );
+ }
+ else if (!strcmp( s, "RLE " )) // Found an RLE_SPRITE
+ {
+ datacount--;
+
+ unsigned int length, bpp, width, height, size;
+
+ READDW( length );
+ READDW( length );
+ READW( bpp );
+ READW( width );
+ READW( height );
+ READDW( size );
+
+ RLE_SPRITE* sprite = (RLE_SPRITE*) malloc( sizeof(RLE_SPRITE) + size );
+ p->sprites[ p->count ] = sprite;
+ (p->count)++;
+ sprite->w = width;
+ sprite->h = height;
+ sprite->color_depth = bpp;
+ sprite->size = size;
+ fread( sprite->dat, 1, size, f );
+ }
+ else if (!strcmp( s, "PAL ")) // Found a palette
+ {
+ datacount--;
+
+ unsigned int length, pallength;
+ READDW( length );
+ READDW( length );
+ pallength = length>1024 ? 1024 : length;
+ pallength /= 4;
+
+ for (uint i=0; i< pallength; i++)
+ {
+ char c[4];
+ fread( c, 4, 1, f );
+ p->palette[i].r = c[0]*4;
+ p->palette[i].g = c[1]*4;
+ p->palette[i].b = c[2]*4;
+ p->palette[i].unused = 0;
+ }
+
+ fseek( f, length - pallength*4, SEEK_CUR );
+ }
+ else // Found something else
+ {
+ debug( "Unknown: %s.", s );
+ datacount--;
+
+ unsigned int length;
+ READDW( length );
+ READDW( length );
+ fseek( f, length, SEEK_CUR );
+ }
+ }
+
+ fclose( f );
+}
+
+RlePack::~RlePack()
+{
+ if (!p)
+ return;
+
+ if (p->sprites)
+ {
+ for ( int i=0; i<p->count; ++i )
+ {
+ delete p->sprites[i];
+ p->sprites[i] = NULL;
+ }
+ delete[] p->sprites;
+ p->sprites = NULL;
+ }
+
+ delete( p );
+ p = NULL;
+}
+
+void OffsetRLESprite( RLE_SPRITE* spr, int offset )
+{
+ if (!spr || !offset) return;
+
+ signed char *s = spr->dat;
+ signed char c;
+ int y;
+
+ for (y=0; y<spr->h; y++)
+ {
+ c = *s++;
+
+ while (c)
+ {
+ // For positive c: solid pixels.
+ for ( ; c>0; c-- )
+ {
+ *s = (*s) + offset;
+ s++;
+ }
+ c = *s++;
+ }
+ }
+}
+
+void RlePack::offsetSprites( int offset )
+{
+ if ( (offset<=0) || (offset>255) )
+ return;
+
+ int i;
+
+ // Offset every RLE_SPRITE
+
+ for ( i=0; i<p->count; ++i )
+ {
+ OffsetRLESprite( p->sprites[i], offset );
+ }
+}
+
+SDL_Color* RlePack::getPalette()
+{
+ return p->palette;
+}
+
+
+void draw_rle_sprite_v_flip( RLE_SPRITE* src, int dx, int dy )
+{
+#define RLE_PTR signed char*
+#define RLE_IS_EOL(c) ((c) == 0)
+#define PIXEL_PTR unsigned char*
+#define OFFSET_PIXEL_PTR(p,x) ((PIXEL_PTR) (p) + (x))
+#define INC_PIXEL_PTR(p) ((p)++)
+#define DEC_PIXEL_PTR(p) ((p)--)
+#define PUT_PIXEL(p,c) (*((unsigned char *)(p)) = (c))
+//#define PUT_PIXEL(p,c) bmp_write8((unsigned long) (p), (c))
+
+ int x, y, w, h; // width and height of visible area
+ int dxbeg, dybeg; // beginning in destination
+ int sxbeg, sybeg; // beginning in source
+ RLE_PTR s;
+
+ SDL_Surface* dst = gamescreen;
+ // Clip to dst->clip_rect
+ int dst_cl = dst->clip_rect.x;
+ int dst_cr = dst->clip_rect.w + dst_cl;
+ int dst_ct = dst->clip_rect.y;
+ int dst_cb = dst->clip_rect.h + dst_ct;
+
+// if (dst->clip)
+ if (1)
+ {
+
+ int tmp;
+
+ dxbeg = dx;
+ if ( dst_cl > dx ) dxbeg = dst_cl;
+
+ tmp = dx + src->w - dst_cr;
+ sxbeg = ((tmp < 0) ? 0 : tmp);
+
+ tmp = dx + src->w;
+ if (tmp > dst_cr ) tmp = dst_cr;
+ w = tmp - dxbeg;
+ if (w <= 0)
+ return;
+
+ tmp = dst_ct - dy;
+ sybeg = ((tmp < 0) ? 0 : tmp);
+ dybeg = sybeg + dy;
+
+ tmp = dst_cb - dy;
+ h = ((tmp > src->h) ? src->h : tmp) - sybeg;
+ if (h <= 0)
+ return;
+ }
+ else {
+ w = src->w;
+ h = src->h;
+ sxbeg = 0;
+ sybeg = 0;
+ dxbeg = dx;
+ dybeg = dy;
+ }
+
+ s = (RLE_PTR) (src->dat);
+ dxbeg += w;
+
+ /* Clip top. */
+ for (y = sybeg - 1; y >= 0; y--) {
+ long c = *s++;
+
+ while (!RLE_IS_EOL(c)) {
+ if (c > 0)
+ s += c;
+ c = *s++;
+ }
+ }
+
+ //@@@ bmp_select(dst);
+
+ /* Visible part. */
+ for (y = 0; y < h; y++) {
+ //@@@ PIXEL_PTR d = OFFSET_PIXEL_PTR(bmp_write_line(dst, dybeg + y), dxbeg);
+ PIXEL_PTR d = (PIXEL_PTR) dst->pixels;
+ d += (dybeg+y)*dst->pitch;
+ d = OFFSET_PIXEL_PTR( d, dxbeg );
+ long c = *s++;
+
+ /* Clip left. */
+ for (x = sxbeg; x > 0; ) {
+ if (RLE_IS_EOL(c))
+ goto next_line;
+ else if (c > 0) {
+ /* Run of solid pixels. */
+ if ((x - c) >= 0) {
+ /* Fully clipped. */
+ x -= c;
+ s += c;
+ }
+ else {
+ /* Visible on the right. */
+ c -= x;
+ s += x;
+ break;
+ }
+ }
+ else {
+ /* Run of transparent pixels. */
+ if ((x + c) >= 0) {
+ /* Fully clipped. */
+ x += c;
+ }
+ else {
+ /* Visible on the right. */
+ c += x;
+ break;
+ }
+ }
+
+ c = *s++;
+ }
+
+ /* Visible part. */
+ for (x = w; x > 0; ) {
+ if (RLE_IS_EOL(c))
+ goto next_line;
+ else if (c > 0) {
+ /* Run of solid pixels. */
+ if ((x - c) >= 0) {
+ /* Fully visible. */
+ x -= c;
+ for (c--; c >= 0; s++, DEC_PIXEL_PTR(d), c--) {
+ unsigned long col = *s;
+ PUT_PIXEL(d, col);
+ }
+ }
+ else {
+ /* Clipped on the right. */
+ c -= x;
+ for (x--; x >= 0; s++, DEC_PIXEL_PTR(d), x--) {
+ unsigned long col = *s;
+ PUT_PIXEL(d, col);
+ }
+ break;
+ }
+ }
+ else {
+ /* Run of transparent pixels. */
+ x += c;
+ d = OFFSET_PIXEL_PTR(d, c);
+ }
+
+ c = *s++;
+ }
+
+ /* Clip right. */
+ while (!RLE_IS_EOL(c)) {
+ if (c > 0)
+ s += c;
+ c = *s++;
+ }
+
+ next_line: ;
+ }
+
+ //@@@bmp_unwrite_line(dst);
+}
+
+void draw_rle_sprite( RLE_SPRITE* src, int dx, int dy )
+{
+#define RLE_PTR signed char*
+#define RLE_IS_EOL(c) ((c) == 0)
+#define PIXEL_PTR unsigned char*
+#define OFFSET_PIXEL_PTR(p,x) ((PIXEL_PTR) (p) + (x))
+#define INC_PIXEL_PTR(p) ((p)++)
+#define DEC_PIXEL_PTR(p) ((p)--)
+#define PUT_PIXEL(p,c) (*((unsigned char *)(p)) = (c))
+//#define PUT_PIXEL(p,c) bmp_write8((unsigned long) (p), (c))
+
+ int x, y, w, h; // width and height of visible area
+ int dxbeg, dybeg; // beginning in destination
+ int sxbeg, sybeg; // beginning in source
+ RLE_PTR s;
+
+ SDL_Surface* dst = gamescreen;
+ // Clip to dst->clip_rect
+ int dst_cl = dst->clip_rect.x;
+ int dst_cr = dst->clip_rect.w + dst_cl;
+ int dst_ct = dst->clip_rect.y;
+ int dst_cb = dst->clip_rect.h + dst_ct;
+
+// if (dst->clip)
+ if (1)
+ {
+
+ int tmp;
+
+ tmp = dst_cl - dx;
+ sxbeg = ((tmp < 0) ? 0 : tmp);
+ dxbeg = sxbeg + dx;
+
+ tmp = dst_cr - dx;
+ w = ((tmp > src->w) ? src->w : tmp) - sxbeg;
+ if ( w<=0 ) return;
+
+ tmp = dst_ct - dy;
+ sybeg = ((tmp < 0) ? 0 : tmp);
+ dybeg = sybeg + dy;
+
+ tmp = dst_cb - dy;
+ h = ((tmp > src->h) ? src->h : tmp) - sybeg;
+ if ( h<=0 ) return;
+ }
+ else {
+ w = src->w;
+ h = src->h;
+ sxbeg = 0;
+ sybeg = 0;
+ dxbeg = dx;
+ dybeg = dy;
+ }
+
+ s = (RLE_PTR) (src->dat);
+
+ /* Clip top. */
+ for (y = sybeg - 1; y >= 0; y--) {
+ long c = *s++;
+
+ while (!RLE_IS_EOL(c)) {
+ if (c > 0)
+ s += c;
+ c = *s++;
+ }
+ }
+
+ //@@@ bmp_select(dst);
+
+ /* Visible part. */
+ for (y = 0; y < h; y++) {
+ //@@@ PIXEL_PTR d = OFFSET_PIXEL_PTR(bmp_write_line(dst, dybeg + y), dxbeg);
+ PIXEL_PTR d = (PIXEL_PTR) dst->pixels;
+ d += (dybeg+y)*dst->pitch;
+ d = OFFSET_PIXEL_PTR( d, dxbeg );
+ long c = *s++;
+
+ /* Clip left. */
+ for (x = sxbeg; x > 0; ) {
+ if (RLE_IS_EOL(c))
+ goto next_line;
+ else if (c > 0) {
+ /* Run of solid pixels. */
+ if ((x - c) >= 0) {
+ /* Fully clipped. */
+ x -= c;
+ s += c;
+ }
+ else {
+ /* Visible on the right. */
+ c -= x;
+ s += x;
+ break;
+ }
+ }
+ else {
+ /* Run of transparent pixels. */
+ if ((x + c) >= 0) {
+ /* Fully clipped. */
+ x += c;
+ }
+ else {
+ /* Visible on the right. */
+ c += x;
+ break;
+ }
+ }
+
+ c = *s++;
+ }
+
+ /* Visible part. */
+ for (x = w; x > 0; ) {
+ if (RLE_IS_EOL(c))
+ goto next_line;
+ else if (c > 0) {
+ /* Run of solid pixels. */
+ if ((x - c) >= 0) {
+ /* Fully visible. */
+ x -= c;
+ for (c--; c >= 0; s++, INC_PIXEL_PTR(d), c--) {
+ unsigned long col = *s;
+ PUT_PIXEL(d, col);
+ }
+ }
+ else {
+ /* Clipped on the right. */
+ c -= x;
+ for (x--; x >= 0; s++, INC_PIXEL_PTR(d), x--) {
+ unsigned long col = *s;
+ PUT_PIXEL(d, col);
+ }
+ break;
+ }
+ }
+ else {
+ /* Run of transparent pixels. */
+ x += c;
+ d = OFFSET_PIXEL_PTR(d, -c);
+ }
+
+ c = *s++;
+ }
+
+ /* Clip right. */
+ while (!RLE_IS_EOL(c)) {
+ if (c > 0)
+ s += c;
+ c = *s++;
+ }
+
+ next_line: ;
+ }
+
+ //@@@bmp_unwrite_line(dst);
+}
+
+void RlePack::draw( int index, int x, int y, bool flipped )
+{
+ if ( (index<0) || (index>=p->count) )
+ return;
+
+ RLE_SPRITE* sprite = p->sprites[index];
+ if (!sprite)
+ return;
+
+ if ( flipped )
+ draw_rle_sprite_v_flip( sprite, x, y );
+ else
+ draw_rle_sprite( sprite, x, y );
+
+}
+
diff --git a/src/RlePack.h b/src/RlePack.h
new file mode 100644
index 0000000..91c2f32
--- /dev/null
+++ b/src/RlePack.h
@@ -0,0 +1,28 @@
+/***************************************************************************
+ RlePack.h - description
+ -------------------
+ begin : Mon Sep 24 2001
+ copyright : (C) 2001 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#ifndef __RLEPACK_H
+#define __RLEPACK_H
+
+struct RlePack_P;
+
+class RlePack
+{
+public:
+ RlePack( const char* filename );
+ ~RlePack();
+
+ void offsetSprites( int offset );
+ SDL_Color* getPalette();
+ void draw( int index, int x, int y, bool flipped=false );
+
+private:
+ RlePack_P* p;
+};
+
+#endif
diff --git a/src/State.cpp b/src/State.cpp
new file mode 100644
index 0000000..d77fc24
--- /dev/null
+++ b/src/State.cpp
@@ -0,0 +1,137 @@
+/***************************************************************************
+ State.cpp - description
+ -------------------
+ begin : Mon Aug 12 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include "../config.h"
+#include "SDL.h"
+#include "common.h"
+#include "State.h"
+
+#include <string>
+#include <fstream>
+
+#include "Backend.h"
+SState g_oState;
+
+
+
+std::string GetConfigHeader()
+{
+ std::string sHeader( "Simple config file " );
+ sHeader += PACKAGE " " VERSION;
+ return sHeader;
+}
+
+
+std::string GetConfigFilename()
+{
+#ifdef _WINDOWS
+ if ( NULL != g_oState.m_pcArgv0 )
+ {
+ return std::string(g_oState.m_pcArgv0) + ".ini";
+ }
+ return "c:\openmortal.ini";
+#else
+ return "/home/upi/.openmortalrc";
+#endif
+}
+
+
+
+void SState::ToggleFullscreen()
+{
+ m_bFullscreen = !m_bFullscreen;
+
+ bool bPaletted = ( gamescreen->format->BitsPerPixel <= 8 );
+ SDL_Color aoPalette[256];
+ int iNumColors = 0;
+
+ if ( bPaletted )
+ {
+ iNumColors = gamescreen->format->palette->ncolors;
+ if ( iNumColors > 256 ) iNumColors = 256;
+ for ( int i=0; i<iNumColors; ++i )
+ {
+ aoPalette[i].r = gamescreen->format->palette->colors[i].r;
+ aoPalette[i].g = gamescreen->format->palette->colors[i].g;
+ aoPalette[i].b = gamescreen->format->palette->colors[i].b;
+ aoPalette[i].unused = 0;
+ }
+ }
+
+ gamescreen = SDL_SetVideoMode( gamescreen->w, gamescreen->h,
+ gamescreen->format->BitsPerPixel,
+ m_bFullscreen ? SDL_FULLSCREEN : SDL_SWSURFACE );
+
+ if ( bPaletted )
+ {
+ SDL_SetPalette( gamescreen, SDL_LOGPAL | SDL_PHYSPAL, aoPalette, 0, iNumColors );
+ }
+}
+
+
+
+void SState::Load()
+{
+ std::string sFilename = GetConfigFilename();
+ g_oBackend.PerlEvalF( "ParseConfig('%s');", sFilename.c_str() );
+
+ SV* poSv;
+ poSv = get_sv("GAMETIME", FALSE); if (poSv) m_iGameTime = SvIV( poSv );
+ poSv = get_sv("HITPOINTS", FALSE); if (poSv) m_iHitPoints = SvIV( poSv );
+ poSv = get_sv("FULLSCREEN", FALSE); if (poSv) m_bFullscreen = SvIV( poSv );
+ poSv = get_sv("CHANNELS", FALSE); if (poSv) m_iChannels = SvIV( poSv );
+ poSv = get_sv("MIXINGRATE", FALSE); if (poSv) m_iMixingRate = SvIV( poSv );
+ poSv = get_sv("MIXINGBITS", FALSE); if (poSv) m_iMixingBits = SvIV( poSv );
+ poSv = get_sv("MUSICVOLUME", FALSE); if (poSv) m_iMusicVolume = SvIV( poSv );
+ poSv = get_sv("SOUNDVOLUME", FALSE); if (poSv) m_iSoundVolume = SvIV( poSv );
+
+ char pcBuffer[1024];
+ for ( int i=0; i<2; ++i )
+ {
+ for ( int j=0; j<9; ++j )
+ {
+ sprintf( pcBuffer, "PLAYER%dKEY%d", i, j );
+ poSv = get_sv(pcBuffer, FALSE); if (poSv) m_aiPlayerKeys[i][j] = SvIV( poSv );
+ }
+ }
+}
+
+
+void SState::Save()
+{
+ std::string sFilename = GetConfigFilename();
+ std::ofstream oStream( sFilename.c_str(), std::ios_base::out | std::ios_base::trunc );
+ if ( oStream.rdstate() & std::ios::failbit )
+ {
+ debug( "Unable to open config file: %s\n", sFilename.c_str() );
+ return;
+ }
+
+ oStream << GetConfigHeader() << '\n';
+ oStream << "GAMETIME=" << m_iGameTime << '\n';
+ oStream << "HITPOINTS=" << m_iHitPoints << '\n';
+ oStream << "FULLSCREEN=" << m_bFullscreen << '\n';
+ oStream << "CHANNELS=" << m_iChannels << '\n';
+ oStream << "MIXINGRATE=" << m_iMixingRate << '\n';
+ oStream << "MIXINGBITS=" << m_iMixingBits << '\n';
+ oStream << "MUSICVOLUME=" << m_iMusicVolume << '\n';
+ oStream << "SOUNDVOLUME=" << m_iSoundVolume << '\n';
+
+ for ( int i=0; i<2; ++i )
+ {
+ for ( int j=0; j<9; ++j )
+ {
+ oStream << "PLAYER" <<i<< "KEY" <<j<< '=' << m_aiPlayerKeys[i][j] << '\n';
+ }
+ }
+
+ oStream.flush();
+ oStream.close();
+}
+
+
diff --git a/src/State.h b/src/State.h
new file mode 100644
index 0000000..ca26a6e
--- /dev/null
+++ b/src/State.h
@@ -0,0 +1,97 @@
+/***************************************************************************
+ State.h - description
+ -------------------
+ begin : Mon Aug 12 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#ifndef STATE_H
+#define STATE_H
+
+#include "SDL_mixer.h"
+#include "SDL_keysym.h"
+
+struct SState
+{
+ enum TGameMode {
+ IN_DEMO,
+ IN_SINGLE,
+ IN_MULTI,
+ } m_enGameMode;
+
+
+ bool m_bQuitFlag; // true if quit event came
+ const char* m_pcArgv0; // Set by main to argv[0]
+
+ // VARIABLES DURING GAMEPLAY (OR REPLAY)
+
+ bool m_bGameOver; // true if the game is over
+ bool m_bIsReplay; // true if in replay mode
+ FILE* m_poReplayFile; // the file to load/save replay from/to, or NULL
+
+
+ // CONFIGURATION VARIABLES
+
+ int m_iGameTime; // Time of rounds in seconds.
+ int m_iHitPoints; // The initial number of hit points.
+
+ bool m_bFullscreen; // True in fullscreen mode.
+
+ int m_iChannels; // 1: mono, 2: stereo
+ int m_iMixingRate; // The mixing rate, in kHz
+ int m_iMixingBits; // 1: 8bit, 2: 16bit
+ int m_iMusicVolume; // Volume of music; 0: off, 100: max
+ int m_iSoundVolume; // Volume of sound effects; 0: off, 100: max
+
+ int m_aiPlayerKeys[2][9]; // Player keysyms
+
+ SState()
+ {
+ m_enGameMode = IN_DEMO;
+
+ m_bQuitFlag = false;
+ m_pcArgv0 = NULL;
+
+ m_bGameOver = true;
+ m_bIsReplay = false;
+ m_poReplayFile = NULL;
+
+ m_iGameTime = 60;
+ m_iHitPoints = 100;
+
+ #ifdef _WINDOWS
+ m_bFullscreen = true;
+ #else
+ m_bFullscreen = false;
+ #endif
+
+ m_iChannels = 2;
+ m_iMixingRate = MIX_DEFAULT_FREQUENCY;
+ m_iMixingBits = 2;
+ m_iMusicVolume = 50;
+ m_iSoundVolume = 100;
+
+ static const int aiDefaultKeys[2][9] = {
+ { SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_PAGEDOWN,
+ SDLK_DELETE, SDLK_INSERT, SDLK_END, SDLK_HOME },
+ { SDLK_w, SDLK_s, SDLK_a, SDLK_d, SDLK_x,
+ SDLK_f, SDLK_r, SDLK_g, SDLK_t }
+ };
+
+ for ( int i=0; i<2; ++i )
+ for ( int j=0; j<9; ++j )
+ m_aiPlayerKeys[i][j] = aiDefaultKeys[i][j];
+
+ };
+
+ void Load();
+ void Save();
+ void ToggleFullscreen();
+};
+
+
+extern SState g_oState;
+
+#endif
diff --git a/src/common.cpp b/src/common.cpp
new file mode 100644
index 0000000..6b42d35
--- /dev/null
+++ b/src/common.cpp
@@ -0,0 +1,23 @@
+/***************************************************************************
+ common.cpp - description
+ -------------------
+ begin : Fri Aug 24 2001
+ copyright : (C) 2001 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "common.h"
+
+
+SDL_Surface* gamescreen = NULL;
+
+void debug( const char* format, ... )
+{
+ va_list ap;
+ va_start( ap, format );
+ vfprintf( stderr, format, ap );
+ va_end( ap );
+}
diff --git a/src/common.h b/src/common.h
new file mode 100644
index 0000000..a02f4e3
--- /dev/null
+++ b/src/common.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ common.h - description
+ -------------------
+ begin : Fri Aug 24 2001
+ copyright : (C) 2001 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#ifndef __COMMON_H
+#define __COMMON_H
+
+
+
+struct SDL_Surface;
+
+#define SCREENWIDTH 640
+#define SCREENHEIGHT 480
+#define GAMEBITS 3
+#define GAMEBITS2 (1<<GAMEBITS)
+
+void debug( const char* format, ... );
+#define ABS(A) ( (A>=0) ? (A) : -(A) )
+
+#ifdef _SDL_video_h
+
+extern SDL_Surface* gamescreen;
+
+
+void DoMenu( bool a_bDrawBackground );
+void GameOver( int a_iPlayerWon );
+void DoDemos();
+void PlayerSelect();
+
+
+#define C_BLACK 240
+#define C_BLUE 241
+#define C_GREEN 242
+#define C_CYAN 243
+
+#define C_RED 244
+#define C_MAGENTA 245
+#define C_ORANGE 246
+#define C_LIGHTGRAY 247
+
+#define C_DARKGRAY 248
+#define C_LIGHTBLUE 249
+#define C_LIGHTGREEN 250
+#define C_LIGHTCYAN 251
+
+#define C_LIGHTRED 252
+#define C_LIGHTMAGENTA 253
+#define C_YELLOW 254
+#define C_WHITE 255
+
+
+#endif
+
+#endif
diff --git a/src/gfx.cpp b/src/gfx.cpp
new file mode 100644
index 0000000..b008889
--- /dev/null
+++ b/src/gfx.cpp
@@ -0,0 +1,274 @@
+/***************************************************************************
+ gfx.cpp - description
+ -------------------
+ begin : Tue Apr 10 2001
+ copyright : (C) 2001 by UPi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <string.h>
+
+#include <SDL/SDL.h>
+#include <SDL/SDL_video.h>
+#include <SDL/SDL_image.h>
+#include <SDL/SDL_ttf.h>
+#include "sge_tt_text.h"
+#include "sge_surface.h"
+
+#ifndef __COMMON_H
+#include "common.h"
+#endif
+#ifndef _GFX_H
+#include "gfx.h"
+#endif
+#include "State.h"
+
+
+void sge_TTF_SizeText( _sge_TTFont*font, const char* string, int* x, int* y )
+{
+ SDL_Rect r = sge_TTF_TextSize( font, (char*) string );
+ *x = r.w;
+ *y = r.h;
+}
+
+int DrawTextMSZ( const char* string, _sge_TTFont* font, int x, int y, int flags,
+ int fg, SDL_Surface* target )
+{
+ int retval = 0;
+
+ if (!string || !*string) return retval;
+
+ if (flags & UseTilde)
+ {
+ char *str2 = strdup( string );
+ char onechar[2];
+ char *c1, *c2, *c3;
+ int w = 0;
+ int i, j;
+ bool notend;
+
+ if (flags & AlignHCenter)
+ {
+ // Determine width of the string without the stupid tildes
+ c1 = c2 = str2;
+ notend = true;
+
+
+ while (notend)
+ {
+ c2 = c1; // c1: start of this run
+ while (*c2 && (*c2!='~')) c2++; // c2: end of this run
+ notend = *c2;
+ *c2 = 0;
+
+ sge_TTF_SizeText( font, c1, &i, &j);
+ w += i;
+
+ if (notend) { *c2='~'; c1=c2+1; } // next run..
+ }
+
+ x -= w/2;
+ }
+
+ flags &= ~(UseTilde | AlignHCenter);
+
+ c1 = str2;
+ onechar[1]=0;
+ notend = true;
+
+ while (1)
+ {
+ c2 = c1;
+ while (*c2 && (*c2!='~')) c2++; // c2: end of this run
+ notend = *c2;
+ *c2 = 0;
+
+ sge_TTF_SizeText( font, c1, &i, &j);
+ DrawTextMSZ( c1, font, x, y, flags, fg, target );
+ x += i;
+
+ // At this point, we're either at a ~ or end of the text (notend)
+ if (!notend) break;
+
+ onechar[0]= *++c2; // Could be 0, if ~ at end.
+ if (!onechar[0]) break;
+ sge_TTF_SizeText( font, onechar, &i, &j);
+ DrawTextMSZ( onechar, font, x, y, flags, C_LIGHTCYAN, target );
+ x += i;
+ retval += i;
+ c1 = c2+1;
+
+
+ if (!*c1) break; // ~X was end of string
+ }
+
+ delete( str2 );
+ return retval;
+ }
+
+ SDL_Rect dest;
+ int w, h;
+ sge_TTF_SizeText( font, string, &w, &h );
+ dest.w = retval = w;
+ dest.h = h;
+ dest.x = flags & AlignHCenter ? x-dest.w/2 : x;
+ dest.y = flags & AlignVCenter ? y-dest.h/2 : y;
+
+ //debug( "X: %d, Y: %d, W: %d, H: %d\n", dest.x, dest.y, dest.w, dest.h );
+ if ( flags & UseShadow )
+ {
+ sge_tt_textout_UTF8( target, font, string, dest.x+2, dest.y+2+sge_TTF_FontAscent(font), C_BLACK, C_BLACK, 255 );
+ }
+
+ sge_TTF_AAOn();
+ dest = sge_tt_textout_UTF8( target, font, string, dest.x, dest.y+sge_TTF_FontAscent(font), fg, C_BLACK, 255 );
+ sge_TTF_AAOff();
+
+ return dest.w;
+}
+
+
+
+void DrawGradientText( const char* text, _sge_TTFont* font, int y, SDL_Surface* target )
+{
+ int i, j;
+
+ // 1. CREATE OFFSCREEN SURFACE
+
+ SDL_Rect size = sge_TTF_TextSize( font, (char*)text );
+ size.w += 2;
+ size.h += 2;
+ size.x = 320 - size.w / 2;
+ if ( size.x < 0 ) size.x = 0;
+ size.y = y;
+ SDL_Surface* surface = SDL_CreateRGBSurface( SDL_SRCCOLORKEY, size.w, size.h, 8, 0,0,0,0 );
+
+ if ( NULL == surface )
+ {
+ debug( "DrawGradientText: Couldn't allocate %d by %d surface!\n", size.w, size.h );
+ return;
+ }
+
+ // 2. SET OFFSCREEN SURFACE COLORS
+
+ SDL_SetColorKey( surface, SDL_SRCCOLORKEY, 0 );
+ SDL_Color colors[256];
+ colors[0].r = colors[0].g = colors[0].b = 0;
+ colors[1] = colors[0];
+
+ // The rest is red->yellow gradient.
+
+ for ( i=2; i<255; ++i )
+ {
+ int j = i > 25 ? i-25 : 0;
+ colors[i].r = 255;
+ colors[i].g = 255-j;
+ colors[i].b = 0;
+ }
+
+ SDL_SetColors( surface, colors, 0, 256 );
+
+ // 3. DRAW TEXT, APPLY BORDER, APPLY GRADIENT.
+
+ int y1 = sge_TTF_FontAscent(font);
+ sge_tt_textout_UTF8( surface, font, text,
+ 1, y1, 255, 0, 255);
+
+
+ for ( int y=1; y<size.h-1; ++y )
+ {
+ int color = 254 * y / (size.h-1) + 1;
+ unsigned char *p0, *p1, *p2;
+ p1 = (unsigned char*) surface->pixels;
+ p1 += surface->pitch * y + 1;
+ p0 = p1 - surface->pitch;
+ p2 = p1 + surface->pitch;
+
+ for ( int x=1; x<size.w-1; ++x, ++p0, ++p1, ++p2 )
+ {
+ if ( *p1 > 2 )
+ {
+ *p1 = color;
+ }
+ else
+ {
+ if ( (*(p1-1) > 2) || (*(p1+1) > 2) || *p0 > 2 || *p2 > 2 )
+ {
+ *p1 = 1;
+ }
+ }
+ }
+ }
+
+ // 4. FINALLY
+
+ SDL_BlitSurface( surface, NULL, target, &size );
+ SDL_FreeSurface( surface );
+ SDL_UpdateRect( target, size.x, size.y, size.w, size.h );
+}
+
+
+
+SDL_Color MakeColor( Uint8 r, Uint8 g, Uint8 b )
+{
+ SDL_Color color;
+ color.r = r; color.g = g; color.b = b; color.unused = 0;
+ return color;
+}
+
+
+SDLKey GetKey()
+{
+ SDL_Event event;
+
+ while (SDL_WaitEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ g_oState.m_bQuitFlag = true;
+ return SDLK_ESCAPE;
+
+ case SDL_KEYDOWN:
+ {
+ return event.key.keysym.sym;
+ }
+ break;
+ } // switch statement
+ } // Polling events
+
+ return SDLK_ESCAPE;
+}
+
+
+
+SDL_Surface* LoadBackground( const char* a_pcFilename, int a_iNumColors, int a_iPaletteOffset )
+{
+ char filepath[FILENAME_MAX+1];
+ strcpy( filepath, DATADIR );
+ strcat( filepath, "/gfx/" );
+ strcat( filepath, a_pcFilename );
+
+ SDL_Surface* poBackground = IMG_Load( filepath );
+ if (!poBackground)
+ {
+ debug( "Can't load file: %s\n", filepath );
+ return NULL;
+ }
+
+ SDL_Palette* pal = poBackground->format->palette;
+ if ( pal )
+ {
+ int ncolors = pal->ncolors;
+ if (ncolors>a_iNumColors) ncolors = a_iNumColors;
+ if (ncolors+a_iPaletteOffset > 255) ncolors = 255 - a_iPaletteOffset;
+ SDL_SetColors( gamescreen, pal->colors, a_iPaletteOffset, ncolors );
+ }
+
+ SDL_Surface* poRetval = SDL_DisplayFormat( poBackground );
+ SDL_FreeSurface( poBackground );
+
+ return poRetval;
+}
+
+
diff --git a/src/gfx.h b/src/gfx.h
new file mode 100644
index 0000000..a150ac5
--- /dev/null
+++ b/src/gfx.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+ gfx.h - description
+ -------------------
+ begin : Tue Apr 10 2001
+ copyright : (C) 2001 by UPi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#ifndef _GFX_H
+#define _GFX_H
+
+
+struct _sge_TTFont;
+
+enum GFX_Constants {
+ AlignHCenter = 1,
+ AlignVCenter = 2,
+ AlignCenter = 3,
+ UseTilde = 4,
+ UseShadow = 8,
+};
+
+int DrawTextMSZ( const char* text, _sge_TTFont* font, int x, int y,
+ int flags, int fg, SDL_Surface* target );
+
+void DrawGradientText( const char* text, _sge_TTFont* font, int y,
+ SDL_Surface* target );
+
+SDL_Color MakeColor( Uint8 r, Uint8 g, Uint8 b );
+
+SDLKey GetKey();
+SDL_Surface* LoadBackground( const char* a_pcFilename, int a_iNumColors, int a_iPaletteOffset=0 );
+
+extern _sge_TTFont* titleFont; // Largest font, for titles
+extern _sge_TTFont* inkFont; // Medium-size front, headings
+extern _sge_TTFont* impactFont; // Smallest font, for long descriptions
+
+#ifdef sge_bm_text_H
+extern sge_bmpFont* fastFont; // In-game text, e.g. combo text
+extern sge_bmpFont* creditsFont;
+extern sge_bmpFont* storyFont;
+#endif
+
+#endif
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..65800f7
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,372 @@
+/***************************************************************************
+ main.cpp - description
+ -------------------
+ begin : Wed Aug 22 10:18:47 CEST 2001
+ copyright : (C) 2001 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "FlyingChars.h"
+
+#include "SDL_video.h"
+#include "sge_tt_text.h"
+#include "sge_bm_text.h"
+#include "sge_surface.h"
+#include "SDL.h"
+#include "SDL_image.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <string>
+
+#include "common.h"
+#include "gfx.h"
+#include "Audio.h"
+#include "RlePack.h"
+#include "Backend.h"
+#include "State.h"
+
+
+_sge_TTFont* inkFont;
+_sge_TTFont* impactFont;
+_sge_TTFont* titleFont;
+sge_bmpFont* fastFont;
+sge_bmpFont* creditsFont;
+sge_bmpFont* storyFont;
+
+SDL_Color Colors[] =
+{
+ { 0, 0, 0, 0 }, { 0, 0, 42, 0 }, { 0, 42, 0, 0 }, { 0, 42, 42, 0 },
+ { 42, 0, 0, 0 }, { 42, 0, 42, 0 }, { 63, 42, 0, 0 }, { 42, 42, 42, 0 },
+ { 21, 21, 21, 0 }, { 21, 21, 63, 0 }, { 21, 63, 21, 0 }, { 21, 63, 63, 0 },
+ { 63, 21, 21, 0 }, { 63, 21, 63, 0 }, { 63, 63, 21, 0 }, { 63, 63, 63, 0 }
+};
+
+
+void Complain( const char* a_pcError )
+{
+ fprintf( stderr, "%s", a_pcError );
+}
+
+
+_sge_TTFont* LoadTTF( const char* a_pcFilename, int a_iSize )
+{
+ std::string sPath = std::string(DATADIR) + "/fonts/" + a_pcFilename;
+ _sge_TTFont* poFont = sge_TTF_OpenFont( sPath.c_str(), a_iSize );
+
+ if ( NULL == poFont )
+ {
+ Complain( ("Couldn't load font: " + sPath).c_str() );
+ }
+
+ return poFont;
+}
+
+
+sge_bmpFont* LoadBMPFont( const char* a_pcFilename )
+{
+ std::string sPath = std::string(DATADIR) + "/fonts/" + a_pcFilename;
+ sge_bmpFont* poFont = sge_BF_OpenFont( sPath.c_str(), SGE_BFSFONT | SGE_BFTRANSP );
+ if ( NULL == poFont )
+ {
+ Complain( ("Couldn't load font: " + sPath).c_str() );
+ }
+ return poFont;
+}
+
+
+int init( int iFlags )
+{
+ if (SDL_Init(SDL_INIT_VIDEO /*| SDL_INIT_AUDIO*/) < 0)
+ {
+ fprintf(stderr, "Failed to initialize SDL: %s\n", SDL_GetError());
+ return -1;
+ }
+ atexit(SDL_Quit);
+
+ int d = SDL_VideoModeOK(640, 480, 8, iFlags);
+ if (d == 0)
+ {
+ fprintf(stderr, "requested video mode not available\n");
+// return -1;
+ }
+
+ gamescreen = SDL_SetVideoMode(640, 480, 8, iFlags);
+ if (gamescreen == NULL)
+ {
+ fprintf(stderr, "failed to set video mode: %s\n", SDL_GetError());
+ return -1;
+ }
+
+ SDL_WM_SetCaption( "OpenMortal", "OpenMortal" );
+ std::string sPath = std::string(DATADIR) + "/gfx/icon.png";
+ SDL_WM_SetIcon(IMG_Load(sPath.c_str()), NULL);
+ SDL_ShowCursor( SDL_DISABLE );
+
+ for ( int i=0; i<16; ++i ) { Colors[i].r *=4; Colors[i].g *=4; Colors[i].b *=4; }
+ SDL_SetColors( gamescreen, Colors, 256-16, 16 );
+
+ if ( sge_TTF_Init() )
+ {
+ fprintf(stderr, "couldn't start ttf engine: %s\n", SDL_GetError());
+ return -1;
+ }
+
+ sge_TTF_AAOff();
+
+ inkFont = LoadTTF( "aardvark.ttf", 24 );
+ if ( !inkFont ) return -1;
+ impactFont = LoadTTF( "gooddogc.ttf", 20 );
+ if ( !impactFont ) return -1;
+ titleFont = LoadTTF( "manslem.ttf", 40 );
+ if ( !titleFont ) return -1;
+
+ fastFont = LoadBMPFont( "impactfont2.png" );
+ if ( !fastFont ) return -1;
+ //SDL_SetColorKey( fastFont->FontSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL,
+ // sge_GetPixel(fastFont->FontSurface,0,fastFont->FontSurface->h-1) );
+ creditsFont = LoadBMPFont( "fangfont.png" );
+ storyFont = LoadBMPFont( "glossyfont.png" );
+ if ( !creditsFont ) return -1;
+
+ return 0;
+}
+
+
+int init2()
+{
+ if ( !g_oBackend.Construct() )
+ {
+ fprintf(stderr, "couldn't start backend.\n" );
+ return -1;
+ }
+ return 0;
+}
+
+
+
+
+
+int DrawMainScreen()
+{
+ SDL_Surface* background = LoadBackground( "Mortal.png", 240 );
+ SDL_Rect r;
+ r.x = r.y = 0;
+
+ std::string sStaffFilename = DATADIR;
+ sStaffFilename += "/characters/STAFF.DAT";
+ RlePack pack( sStaffFilename.c_str() );
+ SDL_SetColors( gamescreen, pack.getPalette(), 0, 240 );
+ SDL_BlitSurface( background, NULL, gamescreen, &r );
+ SDL_Flip( gamescreen );
+
+ FighterEnum f[14] = {
+ UPI, ZOLI, SURBA, ULMAR, MISI, BENCE,
+ DESCANT, KINGA, GRIZLI, SIRPI, MACI, DANI, CUMI,
+ AMBRUS };
+ char* filename[14] = {
+ "UPi.pl", "Zoli.pl", NULL, "Ulmar.pl", NULL, "Bence.pl",
+ "Descant.pl", NULL, "Grizli.pl", "Sirpi.pl", "Maci.pl", NULL, "Cumi.pl",
+ NULL };
+ int x[14] = {
+ 0, 26, 67, 125, 159, 209,
+ 249, 289, 358, 397, 451, 489, 532, 161 };
+ int y[14] = {
+ 5, 4, 5, 5, 5, 7,
+ 4, 0, 7, 5, 5, 6, 5, 243 };
+
+ char s[100];
+ int i;
+
+ for ( i=0; i<14; ++i )
+ {
+ pack.draw( i, x[i], y[i], false );
+ SDL_Flip( gamescreen );
+ if ( filename[i] != NULL )
+ {
+ debug( "Loading fighter %s", filename[i] );
+ sprintf( s, "require '%s';", filename[i] );
+ PERLEVAL(s);
+ char *error = SvPV_nolen(get_sv("@", FALSE));
+ if ( error )
+ {
+ fprintf( stderr, "%s", error );
+ }
+ }
+ }
+
+ int retval = 0;
+ i = 0;
+ SDL_Event event;
+
+ /*
+ while (retval == 0)
+ {
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ SDL_FreeSurface( background );
+ retval = -1;
+ case SDL_KEYDOWN:
+ SDL_FreeSurface( background );
+ retval = -1;
+
+ }
+ }
+ SDL_Delay( 100 );
+ i ++;
+ if ( i > 30 )
+ break;
+ }
+ */
+
+ SDL_FreeSurface( background );
+ return retval;
+
+}
+
+
+
+int main(int argc, char *argv[])
+{
+ srand( (unsigned int)time(NULL) );
+ if ( 0 != init2() )
+ {
+ fprintf( stderr, "init2() failed." );
+ return -1;
+ }
+
+ g_oState.m_pcArgv0 = argv[0];
+ g_oState.Load();
+
+ bool bDebug = false;
+
+ int iFlags = SDL_SWSURFACE | SDL_HWPALETTE;
+ if ( g_oState.m_bFullscreen )
+ {
+ iFlags |= SDL_FULLSCREEN;
+ }
+
+ for ( int i=1; i<argc; ++i )
+ {
+ if ( !strcmp(argv[i], "-debug") )
+ {
+ bDebug = true;
+ }
+ else if ( !strcmp(argv[i], "-fullscreen") )
+ {
+ iFlags |= SDL_FULLSCREEN;
+ }
+ else if ( !strcmp(argv[i], "-hwsurface") )
+ {
+ iFlags |= SDL_HWSURFACE;
+ }
+ else if ( !strcmp(argv[i], "-doublebuf") )
+ {
+ iFlags |= SDL_DOUBLEBUF;
+ }
+ else if ( !strcmp(argv[i], "-anyformat") )
+ {
+ iFlags |= SDL_ANYFORMAT;
+ }
+ else
+ {
+ printf( "Usage: %s [-debug] [-fullscreen] [-hwsurface] [-doublebuf] [-anyformat]\n", argv[0] );
+ return 0;
+ }
+ }
+
+ if (init( iFlags )<0)
+ {
+ return -1;
+ }
+
+ new MszAudio;
+ Audio->LoadMusic( "Last_Ninja_-_The_Wilderness.mid", "DemoMusic" );
+ Audio->PlayMusic( "DemoMusic" );
+ Audio->LoadMusic( "2nd_pm.s3m", "GameMusic" );
+
+ DrawMainScreen();
+
+ //game.execute();
+ SetPlayer( 0, ZOLI );
+ SetPlayer( 1, SIRPI );
+
+ int nextFighter = 0;
+ int describeOrder[ (int)LASTFIGHTER ];
+ int i;
+
+ for ( i=0; i<(int)LASTFIGHTER; ++i ) describeOrder[i] = i;
+ for ( i=0; i<100; ++i )
+ {
+ int j = rand() % (int)LASTFIGHTER;
+ int k = rand() % (int)LASTFIGHTER;
+ int l;
+ l = describeOrder[j];
+ describeOrder[j] = describeOrder[k];
+ describeOrder[k] = l;
+ }
+
+ /*
+ {
+ int iGameNumber=0;
+ char acReplayFile[1024];
+
+ for ( i=0; i<15; ++i )
+ {
+ sprintf( acReplayFile, DATADIR "/msz%i.replay", i );
+ DrawTextMSZ( acReplayFile, impactFont, 10, 10, 0, C_WHITE, gamescreen );
+ SDL_Delay(5000 );
+
+ DoGame( acReplayFile, true, bDebug );
+ }
+ }
+ */
+
+ while ( 1 )
+ {
+ if ( g_oState.m_bQuitFlag ) break;
+ DoDemos();
+ if ( g_oState.m_bQuitFlag ) break;
+
+ Audio->PlaySample( "car_start.voc" );
+ Audio->PlayMusic( "GameMusic" );
+
+ while ( g_oState.m_enGameMode != SState::IN_DEMO
+ && !g_oState.m_bQuitFlag )
+ {
+ PlayerSelect();
+ if ( g_oState.m_bQuitFlag || g_oState.m_enGameMode == SState::IN_DEMO ) break;
+
+ //sprintf( acReplayFile, "/tmp/msz%d.replay", ++iGameNumber );
+
+ int iGameResult = DoGame( NULL, false, bDebug );
+ //int iGameResult = DoGame( acReplayFile, false, bDebug );
+ //DoGame( acReplayFile, true, bDebug );
+ if ( g_oState.m_bQuitFlag || g_oState.m_enGameMode == SState::IN_DEMO ) break;
+
+ debug ( "iGameResult = %d\n", iGameResult );
+
+ if ( iGameResult >= 0 )
+ {
+ GameOver( iGameResult );
+ }
+ if ( g_oState.m_bQuitFlag || g_oState.m_enGameMode == SState::IN_DEMO ) break;
+ }
+
+ if ( g_oState.m_bQuitFlag ) break;
+ Audio->PlayMusic( "DemoMusic" );
+ }
+
+ g_oState.Save();
+ return EXIT_SUCCESS;
+}
diff --git a/src/menu.cpp b/src/menu.cpp
new file mode 100644
index 0000000..8f943ee
--- /dev/null
+++ b/src/menu.cpp
@@ -0,0 +1,751 @@
+/***************************************************************************
+ menu.cpp - description
+ -------------------
+ begin : Sun Aug 3 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+#include <SDL/SDL.h>
+#include <SDL/SDL_video.h>
+
+#include "menu.h"
+#include "gfx.h"
+#include "State.h"
+#include "common.h"
+#include "Audio.h"
+#include "Backend.h"
+
+
+enum
+{
+/* Master menu structure:
+MAIN MENU
+*/
+MENU_UNKNOWN,
+ MENU_SURRENDER,
+ MENU_SINGLE_PLAYER,
+ MENU_EASY,
+ MENU_MEDIUM,
+ MENU_HARD,
+ MENU_MULTI_PLAYER,
+ MENU_OPTIONS,
+ MENU_GAME_TIME, // ( :30 - 5:00 )
+ MENU_TOTAL_HIT_POINTS, // ( 25 - 1000 )
+ MENU_SOUND,
+ MENU_CHANNELS, // MONO / STEREO
+ MENU_MIXING_RATE, // 11kHz / 22kHz / 44.1 kHz
+ MENU_BITS, // 8 bit / 16 bit
+ MENU_MUSIC_VOLUME, // (0% - 100%)
+ MENU_SOUND_VOLUME, // (0% - 100%)
+ MENU_SOUND_OK,
+ MENU_FULLSCREEN,
+ MENU_KEYS_RIGHT,
+ MENU_KEYS_LEFT,
+ MENU_OPTIONS_OK,
+ MENU_INFO,
+ MENU_QUIT, // (confirm)
+};
+
+
+const char* g_ppcGameTime[] = { "0:30", "0:45", "1:00", "1:15", "1:30", "1:45", "2:00", "3:00", "5:00", NULL };
+const int g_piGameTime[] = { 30, 45, 60, 75, 90, 105, 120, 180, 300 };
+const char* g_ppcHitPoints[] = { "BABY", "VERY LOW", "LOW", "NORMAL", "HIGH", "VERY HIGH", "NEAR IMMORTAL", NULL };
+const int g_piHitPoints[] = { 1, 10, 50, 100, 150, 200, 500 };
+const char* g_ppcChannels[] = { "MONO", "STEREO", NULL };
+const int g_piChannels[] = { 1, 2 };
+const char* g_ppcMixingRate[] = { "LOW", "MEDIUM", "HIGH", NULL };
+const int g_piMixingRate[] = { 1, 2, 3 };
+const char* g_ppcMixingBits[] = { "8 bit", "16 bit", NULL };
+const int g_piMixingBits[] = { 1, 2 };
+const char* g_ppcVolume[] = { "OFF", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%", NULL };
+const int g_piVolume[] = { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
+
+
+
+SDL_Surface* poBackground = NULL;
+
+
+
+void InputKeys( int a_iPlayerNumber )
+{
+ SDL_BlitSurface( poBackground, NULL, gamescreen, NULL );
+ DrawGradientText( "Input keys", titleFont, 20, gamescreen );
+ SDL_Flip( gamescreen );
+
+ static const char* apcKeyNames[9] = { "up", "down", "left", "right", "block",
+ "low punch", "high punch", "low kick", "high kick" };
+ char acBuffer[1024];
+ int iY = 70;
+
+ for ( int i=0; i<9; ++i )
+ {
+ sprintf( acBuffer, "%s player-'%s'?", a_iPlayerNumber ? "Left" : "Right", apcKeyNames[i] );
+ DrawTextMSZ( acBuffer, inkFont, 10, iY, UseShadow, C_WHITE, gamescreen );
+
+ SDLKey enKey = GetKey();
+
+ if ( SDLK_ESCAPE == enKey )
+ {
+ SDL_BlitSurface( poBackground, NULL, gamescreen, NULL );
+ SDL_Flip( gamescreen );
+ return;
+ }
+ g_oBackend.PerlEvalF( "GetKeysym(%d);", enKey );
+ DrawTextMSZ( SvPV_nolen(get_sv("keysym",TRUE)), inkFont, 530, iY, UseShadow, C_WHITE, gamescreen );
+ g_oState.m_aiPlayerKeys[a_iPlayerNumber][i] = enKey;
+ iY += 35;
+ }
+
+ DrawTextMSZ( "Thanks!", inkFont, 320, iY + 20, UseShadow | AlignCenter, C_WHITE, gamescreen );
+ GetKey();
+ SDL_BlitSurface( poBackground, NULL, gamescreen, NULL );
+ SDL_Flip( gamescreen );
+}
+
+
+
+/***************************************************************************
+ MENUITEM DEFINITION
+ ***************************************************************************/
+
+
+
+MenuItem::MenuItem( Menu* a_poMenu, const char* a_pcUtf8Text, int a_iCode )
+: m_sUtf8Text( a_pcUtf8Text )
+{
+ m_poMenu = a_poMenu;
+ m_iCode = a_iCode;
+
+ m_oPosition.x = m_oPosition.y = 100;
+ m_oPosition.w = m_oPosition.h = 100;
+ m_bCenter = true;
+ m_iHighColor = C_WHITE;
+ m_iLowColor = C_LIGHTGRAY;
+ m_iInactiveColor = C_DARKGRAY;
+ m_iBackgroundColor = C_BLACK;
+ m_bActive = false;
+ m_bEnabled = true;
+}
+
+
+MenuItem::~MenuItem()
+{
+}
+
+void MenuItem::Draw()
+{
+ if ( NULL != poBackground )
+ {
+ SDL_BlitSurface( poBackground, &m_oPosition, gamescreen, &m_oPosition );
+ }
+ else
+ {
+ SDL_FillRect( gamescreen, &m_oPosition, 0 );
+ }
+
+ int iX = m_oPosition.x;
+ int iY = m_oPosition.y;
+
+ if ( m_bCenter )
+ {
+ iX += m_oPosition.w / 2;
+ }
+
+ DrawTextMSZ( m_sUtf8Text.c_str(), inkFont, iX, iY,
+ UseTilde | UseShadow | (m_bCenter ? AlignHCenter : 0),
+ m_bEnabled ? (m_bActive ? m_iHighColor : m_iLowColor) : m_iInactiveColor,
+ gamescreen );
+
+ SDL_UpdateRect( gamescreen, m_oPosition.x, m_oPosition.y, m_oPosition.w, m_oPosition.h );
+}
+
+
+void MenuItem::Clear()
+{
+// debug( "Clear: %d:%d %dx%d\n", m_oPosition.x, m_oPosition.y, m_oPosition.w, m_oPosition.h );
+ if (poBackground )
+ {
+ SDL_Rect oDest = m_oPosition;
+ SDL_BlitSurface( poBackground, &m_oPosition, gamescreen, &oDest );
+ }
+ else
+ {
+ SDL_FillRect( gamescreen, &m_oPosition, C_WHITE );
+ }
+
+ SDL_UpdateRect( gamescreen, m_oPosition.x, m_oPosition.y, m_oPosition.w, m_oPosition.h );
+}
+
+
+void MenuItem::Activate()
+{
+ if ( m_poMenu )
+ {
+ m_poMenu->ItemActivated( m_iCode, this );
+ }
+}
+
+
+void MenuItem::SetText( const char* a_pcUtf8Text, bool a_bCenter )
+{
+ m_sUtf8Text = a_pcUtf8Text;
+ m_bCenter = a_bCenter;
+ Draw();
+}
+
+void MenuItem::SetPosition( const SDL_Rect& a_roPosition )
+{
+ m_oPosition = a_roPosition;
+}
+
+void MenuItem::SetActive( bool a_bActive )
+{
+ if ( m_bActive == a_bActive )
+ {
+ return;
+ }
+ m_bActive = a_bActive;
+ Draw();
+}
+
+void MenuItem::SetEnabled( bool a_bEnabled )
+{
+ if ( m_bEnabled == a_bEnabled )
+ {
+ return;
+ }
+ m_bEnabled = a_bEnabled;
+ Draw();
+}
+
+
+
+
+/***************************************************************************
+ ENUMMENUITEM DEFINITION
+ ***************************************************************************/
+
+
+
+EnumMenuItem::EnumMenuItem( Menu* a_poMenu, int a_iInitialValue, const char* a_pcUtf8Text, int a_iCode )
+: MenuItem( a_poMenu, a_pcUtf8Text, a_iCode )
+{
+ m_sUtf8Title = a_pcUtf8Text;
+ m_iMax = -1;
+ m_iValue = a_iInitialValue;
+}
+
+EnumMenuItem::~EnumMenuItem()
+{
+}
+
+
+void EnumMenuItem::Draw()
+{
+ m_sUtf8Text = m_sUtf8Title;
+ if ( m_iValue <= m_iMax )
+ {
+ m_sUtf8Text += m_ppcNames[m_iValue];
+ }
+ if ( m_iValue > 0 )
+ {
+ m_sUtf8Text = "< " + m_sUtf8Text;
+ }
+ if ( m_iValue < m_iMax )
+ {
+ m_sUtf8Text += " >";
+ }
+
+ MenuItem::Draw();
+}
+
+
+void EnumMenuItem::Increment()
+{
+ if ( m_iValue < m_iMax )
+ {
+ ++m_iValue;
+ Draw();
+ m_poMenu->ItemChanged( m_iCode, m_piValues[m_iValue], this );
+ Audio->PlaySample( "ding.voc" );
+ }
+}
+
+
+void EnumMenuItem::Decrement()
+{
+ if ( m_iValue > 0 )
+ {
+ --m_iValue;
+ Draw();
+ m_poMenu->ItemChanged( m_iCode, m_piValues[m_iValue], this );
+ Audio->PlaySample( "ding.voc" );
+ }
+}
+
+
+void EnumMenuItem::SetEnumValues( const char ** a_ppcNames, const int * a_piValues )
+{
+ m_ppcNames = a_ppcNames;
+ m_piValues = a_piValues;
+
+ int i;
+ bool bFoundValue = false;
+
+ for ( i=0; NULL != a_ppcNames[i]; ++i )
+ {
+ if ( !bFoundValue &&
+ m_iValue == a_piValues[i] )
+ {
+ bFoundValue = true;
+ m_iValue = i;
+ }
+ }
+
+ if ( !bFoundValue )
+ {
+ m_iValue = 0;
+ }
+
+ m_iMax = i-1;
+}
+
+
+
+
+
+
+/***************************************************************************
+ MENU DEFINITION
+ ***************************************************************************/
+
+
+Menu::Menu( const char* a_pcTitle )
+: m_sTitle( a_pcTitle )
+{
+ m_iCurrentItem = 0;
+ m_iReturnCode = -1;
+ m_bDone = false;
+}
+
+
+Menu::~Menu()
+{
+ ItemIterator it;
+ for ( it = m_oItems.begin(); it != m_oItems.end(); ++it )
+ {
+ delete *it;
+ }
+}
+
+
+MenuItem* Menu::AddMenuItem( const char* a_pcUtf8Text, SDLKey a_tShortcut, int a_iCode )
+{
+ MenuItem* poItem = new MenuItem( this, a_pcUtf8Text, a_iCode );
+ return AddMenuItem( poItem );
+}
+
+
+
+EnumMenuItem* Menu::AddEnumMenuItem( const char* a_pcUtf8Text, int a_iInitialValue,
+ const char** a_ppcNames, const int* a_piValues, int a_iCode )
+{
+ EnumMenuItem* poItem = new EnumMenuItem( this, a_iInitialValue, a_pcUtf8Text, a_iCode );
+ poItem->SetEnumValues( a_ppcNames, a_piValues );
+
+ AddMenuItem( poItem );
+ return poItem;
+}
+
+
+
+MenuItem* Menu::AddMenuItem( MenuItem* a_poItem )
+{
+ m_oItems.push_back( a_poItem );
+
+ SDL_Rect oRect;
+ oRect.x = 0; oRect.w = gamescreen->w;
+ oRect.y = m_oItems.size() * 45 + 100;
+ oRect.h = 45;
+
+ a_poItem->SetPosition( oRect );
+
+ return a_poItem;
+}
+
+
+void Menu::AddOkCancel( int a_iOkCode )
+{
+ SDL_Rect oRect;
+ oRect.x = 0; oRect.w = 150;
+ oRect.y = gamescreen->h - 50; oRect.h = 30;
+
+ MenuItem* poItem = AddMenuItem( "~OK", SDLK_o, a_iOkCode );
+ poItem->SetPosition( oRect );
+
+// poItem = AddMenuItem( "Cancel", SDLK_UNKNOWN, 0 );
+ oRect.x = gamescreen->w - 150;
+ poItem->SetPosition( oRect );
+}
+
+
+void Menu::InvokeSubmenu( Menu* a_poMenu )
+{
+ Audio->PlaySample( "strange_button.voc" );
+ Clear();
+ m_iReturnCode = a_poMenu->Run();
+ if ( m_iReturnCode < 0 )
+ {
+ Audio->PlaySample( "pop.voc" );
+ Draw();
+ }
+ else
+ {
+ m_iReturnCode --;
+ m_bDone = true;
+ }
+}
+
+
+void Menu::ItemActivated( int a_iItemCode, MenuItem* a_poMenuItem )
+{
+ debug( "Menu::ItemActivated( %d )\n", a_iItemCode );
+
+ switch ( a_iItemCode )
+ {
+ case MENU_QUIT:
+ m_bDone = true;
+ m_iReturnCode = 100;
+ g_oState.m_bQuitFlag = true;
+ break;
+
+ case MENU_SURRENDER:
+ m_bDone = true;
+ m_iReturnCode = 100;
+ g_oState.m_enGameMode = SState::IN_DEMO;
+ break;
+
+ case MENU_MULTI_PLAYER:
+ m_bDone = true;
+ m_iReturnCode = 100;
+ g_oState.m_enGameMode = SState::IN_MULTI;
+ break;
+
+ case MENU_FULLSCREEN:
+ Audio->PlaySample( "strange_button.voc" );
+ g_oState.ToggleFullscreen();
+ if ( NULL != poBackground )
+ {
+ SDL_BlitSurface( poBackground, NULL, gamescreen, NULL );
+ }
+ else
+ {
+ SDL_FillRect( gamescreen, NULL, 0 );
+ }
+ a_poMenuItem->SetText( g_oState.m_bFullscreen ? "~FULLSCREEN ON" : "~FULLSCREEN OFF", true );
+ Draw();
+ break;
+
+ case MENU_OPTIONS_OK:
+ m_bDone = true;
+ m_iReturnCode = -1;
+ break;
+
+ case MENU_OPTIONS:
+ {
+ Menu* poMenu = new Menu( "Options" );
+ poMenu->AddEnumMenuItem( "GAME TIME: ", g_oState.m_iGameTime, g_ppcGameTime, g_piGameTime, MENU_GAME_TIME );
+ poMenu->AddEnumMenuItem( "HIT POINTS: ", g_oState.m_iHitPoints, g_ppcHitPoints, g_piHitPoints, MENU_TOTAL_HIT_POINTS );
+ poMenu->AddMenuItem( "~SOUND", SDLK_s, MENU_SOUND );
+ poMenu->AddMenuItem( g_oState.m_bFullscreen ? "~FULLSCREEN ON" : "~FULLSCREEN OFF", SDLK_f, MENU_FULLSCREEN );
+ poMenu->AddMenuItem( "~RIGHT PLAYER KEYS", SDLK_r, MENU_KEYS_RIGHT );
+ poMenu->AddMenuItem( "~LEFT PLAYER KEYS", SDLK_l, MENU_KEYS_LEFT );
+ poMenu->AddOkCancel( MENU_OPTIONS_OK );
+
+ InvokeSubmenu( poMenu );
+ delete poMenu;
+ break;
+ }
+
+ case MENU_SOUND:
+ {
+ Menu* poMenu = new Menu( "Sound" );
+ poMenu->AddEnumMenuItem( "CHANNELS: ", 1, g_ppcChannels, g_piChannels, MENU_CHANNELS )->SetEnabled(false);
+ poMenu->AddEnumMenuItem( "SOUND QUALITY: ", 2, g_ppcMixingRate, g_piMixingRate, MENU_MIXING_RATE )->SetEnabled(false);
+ poMenu->AddEnumMenuItem( "SOUND FIDELITY: ", 2, g_ppcMixingBits, g_piMixingBits, MENU_BITS )->SetEnabled(false);
+ poMenu->AddEnumMenuItem( "MUSIC VOLUME: ", g_oState.m_iMusicVolume, g_ppcVolume, g_piVolume, MENU_MUSIC_VOLUME );
+ poMenu->AddEnumMenuItem( "EFFECTS VOLUME: ", g_oState.m_iSoundVolume, g_ppcVolume, g_piVolume, MENU_SOUND_VOLUME );
+ poMenu->AddOkCancel( MENU_SOUND_OK );
+
+ InvokeSubmenu( poMenu );
+ delete poMenu;
+ break;
+ }
+
+ case MENU_SOUND_OK:
+ m_bDone = true;
+ m_iReturnCode = -1;
+ break;
+
+ case MENU_KEYS_LEFT:
+ InputKeys(1);
+ Draw();
+ break;
+
+ case MENU_KEYS_RIGHT:
+ InputKeys(0);
+ Draw();
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+
+void Menu::ItemChanged( int a_iItemCode, int a_iValue, MenuItem* a_poMenuItem )
+{
+ debug( "Menu::ItemActivated( %d )\n", a_iItemCode );
+
+ switch ( a_iItemCode )
+ {
+ case MENU_MUSIC_VOLUME:
+ g_oState.m_iMusicVolume = a_iValue;
+ Audio->SetMusicVolume( a_iValue );
+ break;
+
+ case MENU_SOUND_VOLUME:
+ g_oState.m_iSoundVolume = a_iValue;
+ break;
+
+ case MENU_GAME_TIME:
+ g_oState.m_iGameTime = a_iValue;
+ break;
+
+ case MENU_TOTAL_HIT_POINTS:
+ g_oState.m_iHitPoints = a_iValue;
+ break;
+ } // end of switch a_iItemCode
+}
+
+
+/** Run executes the menus, maybe invoking submenus as well. The
+menus modify the global game state.
+
+Returns 0, or the number of parent menus that should be cleared. */
+
+int Menu::Run()
+{
+ if ( m_oItems[m_iCurrentItem]->GetEnabled() )
+ {
+ m_oItems[m_iCurrentItem]->SetActive(true);
+ }
+ else
+ {
+ FocusNext();
+ }
+
+ Draw();
+
+ while ( !m_bDone )
+ {
+ SDLKey enKey = GetKey();
+
+ if ( g_oState.m_bQuitFlag ||
+ SDLK_ESCAPE == enKey )
+ {
+ m_bDone = true;
+ m_iReturnCode = -1;
+ break;
+ }
+
+ switch ( enKey )
+ {
+ case SDLK_UP:
+ {
+ FocusPrev();
+ break;
+ } // end of SDLK_UP
+
+
+ case SDLK_DOWN:
+ {
+ FocusNext();
+ break;
+ } // end of SDLK_DOWN
+
+ case SDLK_LEFT:
+ {
+ MenuItem* poItem = m_oItems[m_iCurrentItem];
+ poItem->Decrement();
+ break;
+ }
+
+ case SDLK_RIGHT:
+ {
+ MenuItem* poItem = m_oItems[m_iCurrentItem];
+ poItem->Increment();
+ break;
+ }
+
+ case SDLK_RETURN:
+ {
+ MenuItem* poItem = m_oItems[m_iCurrentItem];
+ if ( poItem->GetEnabled() )
+ {
+ poItem->Activate();
+ }
+ }
+
+ default:
+ break;
+ } // end of switch
+ }
+
+ Clear();
+
+ return m_iReturnCode;
+}
+
+
+void Menu::Draw()
+{
+ DrawGradientText( m_sTitle.c_str(), titleFont, 20, gamescreen );
+
+ for ( ItemIterator it=m_oItems.begin(); it!=m_oItems.end(); ++it )
+ {
+ (*it)->Draw();
+ }
+
+ SDL_Flip( gamescreen );
+
+}
+
+
+
+void Menu::FocusNext()
+{
+ MenuItem* poItem = NULL;
+ int iNextItem;
+
+ for ( iNextItem = m_iCurrentItem+1; iNextItem < (int) m_oItems.size(); ++iNextItem )
+ {
+ poItem = m_oItems[iNextItem];
+ if ( poItem->GetEnabled() )
+ {
+ break;
+ }
+ poItem = NULL;
+ }
+
+ if ( NULL != poItem )
+ {
+ Audio->PlaySample("strange_quack.voc");
+ m_oItems[m_iCurrentItem]->SetActive(false);
+ m_oItems[iNextItem]->SetActive(true);
+ m_iCurrentItem = iNextItem;
+ }
+}
+
+
+
+void Menu::FocusPrev()
+{
+ MenuItem* poItem = NULL;
+ int iPrevItem;
+
+ for ( iPrevItem = m_iCurrentItem-1; iPrevItem >= 0; --iPrevItem )
+ {
+ poItem = m_oItems[iPrevItem];
+ if ( poItem->GetEnabled() )
+ {
+ break;
+ }
+ poItem = NULL;
+ }
+
+ if ( NULL != poItem )
+ {
+ Audio->PlaySample("strange_quack.voc");
+ m_oItems[m_iCurrentItem]->SetActive(false);
+ m_oItems[iPrevItem]->SetActive(true);
+ m_iCurrentItem = iPrevItem;
+ }
+}
+
+
+
+void Menu::Clear()
+{
+ if (poBackground)
+ {
+ SDL_BlitSurface( poBackground, 0, gamescreen, 0 );
+ }
+ else
+ {
+ SDL_FillRect( gamescreen, NULL, 0 );
+ }
+}
+
+
+void DoMenu( bool a_bDrawBackground )
+{
+ Audio->PlaySample( "crashhh.voc" );
+
+ poBackground = SDL_ConvertSurface( gamescreen, gamescreen->format, SDL_SWSURFACE );
+ if ( NULL == poBackground )
+ {
+ debug( "DoMenu: Couldn't allocate background.\n" );
+ }
+ else
+ {
+ int i;
+ SDL_Rect oRect;
+ oRect.x = 0; oRect.w = poBackground->w; oRect.h = 1;
+
+ for ( i=0; i<poBackground->h; i += 2 )
+ {
+ oRect.y = i;
+ SDL_FillRect( poBackground, &oRect, C_BLACK );
+ }
+
+ oRect.w = 1; oRect.y = 0; oRect.h = poBackground->h;
+
+ for ( i=0; i<poBackground->w; i+=2 )
+ {
+ oRect.x = i;
+ SDL_FillRect(poBackground, &oRect, C_BLACK );
+ }
+
+ SDL_BlitSurface( poBackground, 0, gamescreen, 0 );
+ SDL_Flip( gamescreen );
+ }
+
+ Menu oMenu( "Main Menu" );
+
+ if ( SState::IN_DEMO == g_oState.m_enGameMode )
+ {
+ oMenu.AddMenuItem( "~SINGLE PLAYER GAME", SDLK_s, MENU_SINGLE_PLAYER )->SetEnabled(false);
+ oMenu.AddMenuItem( "~MULTI PLAYER GAME", SDLK_m, MENU_MULTI_PLAYER );
+ }
+ else
+ {
+ oMenu.AddMenuItem( "~SURRENDER GAME", SDLK_s, MENU_SURRENDER );
+ }
+ oMenu.AddMenuItem( "~OPTIONS", SDLK_o, MENU_OPTIONS );
+ oMenu.AddMenuItem( "~INFO", SDLK_i, MENU_INFO )->SetEnabled(false);
+ oMenu.AddMenuItem( "QUIT", SDLK_UNKNOWN, MENU_QUIT );
+
+ oMenu.Run();
+
+ Audio->PlaySample("shades_rollup.voc");
+
+ //SDL_BlitSurface( poBackground, 0, gamescreen, 0 );
+ //SDL_Flip( gamescreen );
+ SDL_FreeSurface( poBackground );
+ poBackground = NULL;
+}
+
+
diff --git a/src/menu.h b/src/menu.h
new file mode 100644
index 0000000..9eda289
--- /dev/null
+++ b/src/menu.h
@@ -0,0 +1,119 @@
+/***************************************************************************
+ menu.h - description
+ -------------------
+ begin : Sun Aug 3 2003
+ copyright : (C) 2003 by upi
+ email : upi@apocalypse.rulez.org
+ ***************************************************************************/
+
+
+#ifndef MENU_H
+#define MENU_H
+
+
+#include <string>
+#include <vector>
+
+class MenuItem;
+class EnumMenuItem;
+
+class Menu
+{
+public:
+ Menu( const char* a_pcTitle );
+ ~Menu();
+
+ MenuItem* AddMenuItem( const char* a_pcUtf8Text, SDLKey a_tShortcut = SDLK_UNKNOWN, int a_iCode = 0 );
+ EnumMenuItem* AddEnumMenuItem( const char* a_pcUtf8Text, int a_iInitialValue,
+ const char** a_ppcNames, const int* a_piValues, int a_iCode = 0 );
+ MenuItem* AddMenuItem( MenuItem* a_poItem );
+ void AddOkCancel( int a_iOkCode = 0 );
+ void ItemActivated( int a_iItemCode, MenuItem* a_poMenuItem );
+ void ItemChanged( int a_iItemCode, int a_iValue, MenuItem* a_poMenuItem );
+ int Run();
+
+ void Draw();
+ void Clear();
+
+protected:
+
+ void FocusNext();
+ void FocusPrev();
+ void InvokeSubmenu( Menu* a_poSubmenu );
+
+ typedef std::vector<MenuItem*> ItemList;
+ typedef ItemList::iterator ItemIterator;
+
+ std::string m_sTitle;
+ ItemList m_oItems;
+ int m_iCurrentItem;
+ int m_iReturnCode;
+ bool m_bDone;
+};
+
+
+
+class MenuItem
+{
+public:
+ MenuItem( Menu* a_poMenu, const char* a_pcUtf8Text, int a_iCode = -1 );
+ virtual ~MenuItem();
+
+ virtual void Draw();
+ virtual void Clear();
+ virtual void Activate();
+ virtual void Increment() {};
+ virtual void Decrement() {};
+
+ virtual void SetText( const char* a_pcUtf8Text, bool a_bCenter );
+ virtual void SetPosition( const SDL_Rect& a_roPosition );
+ virtual void SetActive( bool a_bActive );
+ virtual void SetEnabled( bool a_bEnabled );
+
+ virtual bool GetEnabled() { return m_bEnabled; }
+
+protected:
+ Menu* m_poMenu;
+
+ // appearance
+ std::string m_sUtf8Text;
+ SDL_Rect m_oPosition;
+ bool m_bCenter;
+ Uint32 m_iHighColor;
+ Uint32 m_iLowColor;
+ Uint32 m_iInactiveColor;
+ Uint32 m_iBackgroundColor;
+
+ // data content
+ int m_iCode;
+ bool m_bActive;
+ bool m_bEnabled;
+};
+
+
+
+class EnumMenuItem: public MenuItem
+{
+public:
+ EnumMenuItem( Menu* a_poMenu, int a_iInitialValue, const char* a_pcUtf8Text, int a_iCode = -1 );
+ virtual ~EnumMenuItem();
+
+ virtual void Draw();
+ virtual void Increment();
+ virtual void Decrement();
+
+ virtual void SetEnumValues( const char ** a_ppcNames, const int * a_piValues );
+
+protected:
+ int m_iValue;
+ int m_iMax;
+ std::string m_sUtf8Title;
+ const char** m_ppcNames;
+ const int* m_piValues;
+};
+
+
+
+void DoMenu( bool a_bDrawBackground );
+
+#endif
diff --git a/src/sge_bm_text.cpp b/src/sge_bm_text.cpp
new file mode 100644
index 0000000..9fca2a0
--- /dev/null
+++ b/src/sge_bm_text.cpp
@@ -0,0 +1,552 @@
+/*
+* SDL Graphics Extension
+* Text/Bitmap font functions
+*
+* Started 990815
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+/*
+* Some of this is taken from SDL_DrawText by Garrett Banuk (mongoose@wpi.edu)
+* http://www.wpi.edu/~mongoose/SDL_Console
+* Thanks to Karl Bartel for the SFont format!
+*/
+
+#include <SDL/SDL.h>
+#include <stdarg.h>
+#include <string.h>
+#include <math.h>
+#include <new>
+#include "sge_surface.h"
+#include "sge_bm_text.h"
+#include "sge_tt_text.h"
+
+#ifdef _SGE_HAVE_IMG
+#include <SDL/SDL_image.h>
+#endif
+
+using namespace std;
+
+/* Globals used for sge_Update/sge_Lock (defined in sge_surface) */
+extern Uint8 _sge_update;
+extern Uint8 _sge_lock;
+
+//==================================================================================
+// Creates a new font from a surface
+//==================================================================================
+sge_bmpFont* sge_BF_CreateFont(SDL_Surface *surface, Uint8 flags)
+{
+ sge_bmpFont *font;
+
+ font = new(nothrow) sge_bmpFont; if(font==NULL){SDL_SetError("SGE - Out of memory");return NULL;}
+
+ if(!(flags&SGE_BFNOCONVERT) && !(flags&SGE_BFSFONT)){ /* Get a converted copy */
+ font->FontSurface = SDL_DisplayFormat(surface);
+ if(font->FontSurface==NULL){SDL_SetError("SGE - Out of memory");return NULL;}
+
+ if(flags&SGE_BFPALETTE){ //We want an 8bit surface
+ SDL_Surface *tmp;
+ tmp = SDL_AllocSurface(SDL_SWSURFACE, surface->w, surface->h, 8, 0, 0, 0, 0);
+ if(tmp==NULL){SDL_SetError("SGE - Out of memory");SDL_FreeSurface(font->FontSurface);return NULL;}
+
+ //Set the palette
+ tmp->format->palette->colors[0].r = 0;
+ tmp->format->palette->colors[0].g = 0;
+ tmp->format->palette->colors[0].b = 0;
+ tmp->format->palette->colors[1].r = 255;
+ tmp->format->palette->colors[1].g = 255;
+ tmp->format->palette->colors[1].b = 255;
+
+ if (SDL_MUSTLOCK(font->FontSurface) && _sge_lock)
+ if (SDL_LockSurface(font->FontSurface) < 0){
+ SDL_SetError("SGE - Locking error");
+ SDL_FreeSurface(font->FontSurface);
+ return NULL;
+ }
+
+ //Copy the font to the 8bit surface
+ Sint16 x,y;
+ Uint32 bc=sge_GetPixel(font->FontSurface,0,surface->h-1);
+ for(y=0; y<font->FontSurface->h; y++){
+ for(x=0; x<font->FontSurface->w; x++){
+ if(sge_GetPixel(font->FontSurface,x,y)==bc)
+ *((Uint8 *)tmp->pixels + y * tmp->pitch + x)=0;
+ else
+ *((Uint8 *)tmp->pixels + y * tmp->pitch + x)=1;
+ }
+ }
+
+ if (SDL_MUSTLOCK(font->FontSurface) && _sge_lock) {
+ SDL_UnlockSurface(font->FontSurface);
+ }
+
+ //sge_Blit(surface, tmp, 0,0,0,0,surface->w, surface->h);
+ SDL_FreeSurface(font->FontSurface);
+ font->FontSurface=tmp;
+ }
+
+
+ if((flags&SGE_FLAG8))
+ SDL_FreeSurface(surface);
+ }
+ else if(flags&SGE_FLAG8) /* Use the source */
+ font->FontSurface = surface;
+ else /* Get a copy */
+ font->FontSurface = sge_copy_surface(surface);
+
+ if(font->FontSurface==NULL){SDL_SetError("SGE - Out of memory");return NULL;}
+
+ SDL_Surface *fnt = font->FontSurface; //Shorthand
+ font->Chars=0;
+
+ if(!(flags&SGE_BFSFONT)){ /* Fixed width font */
+ font->CharWidth = font->FontSurface->w/256;
+ font->CharHeight = font->FontSurface->h;
+ font->CharPos = NULL;
+ font->yoffs = 0;
+ font->Chars=256;
+ }
+ else{ /* Karl Bartel's sfont */
+ Sint16 x=0;
+ int i=0;
+ font->CharPos = new(nothrow) Sint16[512];
+ if(!font->CharPos){SDL_SetError("SGE - Out of memory");sge_BF_CloseFont(font);return NULL;}
+ Uint32 color = sge_GetPixel(fnt,0,0);
+
+ while (x<fnt->w && font->Chars<256){
+ if (sge_GetPixel(fnt,x,0)==color) {
+ font->CharPos[i++]=x;
+
+ while (x<fnt->w-1 && sge_GetPixel(fnt,x,0)==color)
+ x++;
+
+ font->CharPos[i++]=x;
+ font->Chars++;
+ }
+ x++;
+ }
+
+ font->CharHeight = font->FontSurface->h-1;
+ font->CharWidth = 0;
+ font->yoffs = 1;
+ }
+
+ /* Set font as transparent if the flag is set */
+ if (SDL_MUSTLOCK(font->FontSurface) && _sge_lock)
+ if (SDL_LockSurface(font->FontSurface) < 0){
+ return font;
+ }
+ font->bcolor=sge_GetPixel(font->FontSurface,0,font->FontSurface->h-1);
+ if (SDL_MUSTLOCK(font->FontSurface) && _sge_lock) {
+ SDL_UnlockSurface(font->FontSurface);
+ }
+ if(flags&SGE_BFTRANSP || flags&SGE_BFSFONT)
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) >= \
+ SDL_VERSIONNUM(1, 1, 4)
+ SDL_SetColorKey(font->FontSurface,SDL_SRCCOLORKEY, font->bcolor); //Some versions of SDL have a bug with SDL_RLEACCEL
+ #else
+ SDL_SetColorKey(font->FontSurface,SDL_SRCCOLORKEY|SDL_RLEACCEL, font->bcolor);
+ #endif
+
+ return font;
+}
+
+
+//==================================================================================
+// Loads the font into a new struct
+//==================================================================================
+sge_bmpFont* sge_BF_OpenFont(const char *file, Uint8 flags)
+{
+ sge_bmpFont *font;
+ SDL_Surface *Temp;
+
+ /* load the font bitmap */
+ #ifdef _SGE_HAVE_IMG
+ if(NULL == (Temp = IMG_Load(file))) //We have SDL_Img lib!
+ #else
+ if(NULL == (Temp = SDL_LoadBMP(file))) //We can only load bmp files...
+ #endif
+ {
+ sge_SetError("SGE - Couldn't load font file: %s",file);
+ return NULL;
+ }
+
+ font = sge_BF_CreateFont(Temp,flags|SGE_FLAG8); //SGE_FLAG8 - no need to make a copy of the surface
+
+ return font;
+}
+
+
+//==================================================================================
+// Draws string to surface with the selected font
+// Returns pos. and size of the drawn text
+//==================================================================================
+SDL_Rect sge_BF_textout(SDL_Surface *surface, sge_bmpFont *font, const char *string, Sint16 x, Sint16 y, int length)
+{
+ SDL_Rect ret; ret.x=0;ret.y=0;ret.w=0;ret.h=0;
+
+ if(font==NULL || length==0){return ret;}
+
+ int characters;
+ Sint16 xsrc,xdest,ofs,adv=font->CharWidth;
+ float diff=0;
+
+ /* Valid coords ? */
+ if(surface)
+ if(x>surface->w || y>surface->h)
+ return ret;
+
+ characters = strlen(string);
+
+ xdest=x;
+
+ /* Now draw it */
+ for(int i=0; i<characters; i++)
+ {
+ if(!font->CharPos) /* Fixed width */
+ xsrc = string[i] * font->CharWidth;
+ else{ /* Variable width */
+ if(string[i]==' ' || (string[i]-33)>font->Chars || string[i]<33){
+ xdest += font->CharPos[2]-font->CharPos[1];
+ continue;
+ }
+ ofs = (string[i]-33)*2+1;
+ xsrc = (font->CharPos[ofs]+font->CharPos[ofs-1])/2;
+ //font->CharWidth = (font->CharPos[ofs+2]+font->CharPos[ofs+1])/2-(font->CharPos[ofs]+font->CharPos[ofs-1])/2-1;
+ font->CharWidth = (font->CharPos[ofs+2]+font->CharPos[ofs+1])/2-(font->CharPos[ofs]+font->CharPos[ofs-1])/2;
+ adv = font->CharPos[ofs+1]-font->CharPos[ofs];
+ diff =(font->CharPos[ofs]-font->CharPos[ofs-1])/2.0;
+ }
+
+ if(surface)
+ sge_Blit(font->FontSurface, surface, xsrc,font->yoffs, int(xdest-diff),y, font->CharWidth,font->CharHeight);
+
+ xdest += adv;
+ --length;
+ if (0 == length)
+ {
+ break;
+ }
+ }
+
+ ret.x=x; ret.y=y; ret.w=xdest-x+font->CharWidth; ret.h=font->CharHeight;
+
+ if(surface)
+ sge_UpdateRect(surface, x, y, ret.w, ret.h);
+
+ return ret;
+}
+
+
+//==================================================================================
+// Returns the size (w and h) of the string (if rendered with font)
+//==================================================================================
+SDL_Rect sge_BF_TextSize(sge_bmpFont *font, const char *string, int length)
+{
+ return sge_BF_textout(NULL, font, string, 0, 0, length);
+}
+
+
+//==================================================================================
+// Draws formated text to surface with the selected font
+// Returns pos. and size of the drawn text
+// * just like printf(char *format, ...) *
+//==================================================================================
+SDL_Rect sge_BF_textoutf(SDL_Surface *surface, sge_bmpFont *font, Sint16 x, Sint16 y ,const char *format, ...)
+{
+ char buf[256];
+
+ va_list ap;
+
+ #ifdef __WIN32__
+ va_start((va_list*)ap, format); //Stupid w32 crosscompiler
+ #else
+ va_start(ap, format);
+ #endif
+
+ vsprintf(buf, format, ap);
+ va_end(ap);
+
+ return sge_BF_textout(surface, font, buf, x, y);
+}
+
+
+//==================================================================================
+// Returns the height of the font
+// Returns 0 if the struct was invalid
+//==================================================================================
+Sint16 sge_BF_GetHeight(sge_bmpFont *font)
+{
+ if(font)
+ return font->CharHeight;
+ else
+ return 0;
+}
+
+
+//==================================================================================
+// Returns the width of the font (only fixed width fonts)
+// Returns 0 if the struct was invalid
+//==================================================================================
+Sint16 sge_BF_GetWidth(sge_bmpFont *font)
+{
+ if(font)
+ return font->CharWidth;
+ else
+ return 0;
+}
+
+
+//==================================================================================
+// Removes font from memory
+//==================================================================================
+void sge_BF_CloseFont(sge_bmpFont *font)
+{
+ if(font){
+ SDL_FreeSurface(font->FontSurface);
+
+ if(font->CharPos)
+ delete[] font->CharPos;
+
+ delete font;
+ font=NULL;
+ }
+}
+
+
+//==================================================================================
+// Change the font color
+// Will not work on 'color' fonts!
+// Doesn't like 24bpp
+// slooooow!
+//==================================================================================
+void sge_BF_SetColor(sge_bmpFont *font, Uint8 R, Uint8 G, Uint8 B)
+{
+ if(font==NULL){return;}
+
+ if(!font->FontSurface->format->palette){ //Slow truecolor version
+ Sint16 x,y;
+ Sint16 ypnt;
+ SDL_Surface *surface=font->FontSurface;
+ Uint32 c_keep=font->bcolor;
+
+ Uint32 color=SDL_MapRGB(font->FontSurface->format, R, G, B);
+
+ switch(surface->format->BytesPerPixel){
+ case 1: { /* Assuming 8-bpp */
+ Uint8 *pnt;
+ for(y=0; y<surface->h; y++){
+ ypnt=y*surface->pitch;
+ for(x=0; x<surface->w; x++){
+ pnt=((Uint8 *)surface->pixels + x + ypnt);
+ if(*pnt!=c_keep){*pnt=(Uint8)color;}
+ }
+ }
+ }
+ break;
+
+ case 2: { /* Probably 15-bpp or 16-bpp */
+ Uint16 *pnt;
+ for(y=0; y<surface->h; y++){
+ ypnt=y*surface->pitch/2;
+ for(x=0; x<surface->w; x++){
+ pnt=((Uint16 *)surface->pixels + x + ypnt);
+ if(*pnt!=c_keep){*pnt=(Uint16)color;}
+ }
+ }
+ }
+ break;
+
+ case 3: { /* Slow 24-bpp mode, usually not used */
+ }
+ break;
+
+ case 4: { /* Probably 32-bpp */
+ Uint32 *pnt;
+ for(y=0; y<surface->h; y++){
+ ypnt=y*surface->pitch/4;
+ for(x=0; x<surface->w; x++){
+ pnt=((Uint32 *)surface->pixels + x + ypnt);
+ if(*pnt!=c_keep){*pnt=(Uint32)color;}
+ }
+ }
+ }
+ break;
+ }
+ }else{ //Fast palette version
+ SDL_Color c[2];
+ c[0].r=0; c[1].r=R;
+ c[0].g=0; c[1].g=G;
+ c[0].b=0; c[1].b=B;
+ SDL_SetColors(font->FontSurface, c, 0, 2);
+ }
+}
+
+
+//==================================================================================
+// Insert a element (latin1)
+//==================================================================================
+void insert_char_latin1(char *string, char ch, int pos, int max)
+{
+ if(pos>max || pos<0){return;}
+ else if(pos==max){string[pos]=ch;}
+ else{
+ for(int i=max; i>=pos; i--){
+ string[i+1]=string[i];
+ }
+ string[pos]=ch;
+ }
+}
+
+
+//==================================================================================
+// Delete a element (latin1)
+//==================================================================================
+void delete_char_latin1(char *string, int pos, int max)
+{
+ if(pos>max || pos<0){return;}
+ else if(pos==max){string[pos]=0;}
+ else{
+ for(int i=pos; i<=max-1; i++){
+ string[i]=string[i+1];
+ }
+ string[max]=0;
+ }
+}
+
+
+//==================================================================================
+// BitmapText input
+//==================================================================================
+int sge_BF_input(SDL_Surface *screen,sge_bmpFont *font,char *string, Uint8 flags, int pos,int len,Sint16 x,Sint16 y)
+{
+ if(len<pos || pos<0 || len<0 || font==NULL){return -2;}
+
+ char cur=124;//The character for the cursor - '|'
+ int max; //The strings size
+
+ SDL_Rect ret,tmp;
+
+ SDL_Surface *buffer=NULL;
+ buffer=SDL_DisplayFormat(screen); /* Fixme: Yum! Memory! */
+ if(buffer==NULL){SDL_SetError("SGE - Out of memory");return -3;}
+
+ max=pos;
+ string[pos+1]=0;
+
+ SDL_EnableUNICODE(1);
+
+ /* Init cursor */
+ string[pos]=cur;
+ ret=sge_BF_textout(screen, font, string, x, y);
+
+ SDL_Event event;
+ int quit=0;
+ do{
+ /* Check events */
+ SDL_WaitEvent(&event);
+ if(event.type==SDL_QUIT){quit=-1;}
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_ESCAPE){quit=1;}
+ else if(event.type==SDL_KEYDOWN && (event.key.keysym.sym==SDLK_RETURN || event.key.keysym.sym==SDLK_KP_ENTER)){quit=1;}
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_BACKSPACE){
+ if(pos>0){
+ /* Delete char cursor-1 */
+ delete_char_latin1(string,pos-1,max); pos--; max--;
+
+ sge_Update_OFF();
+ sge_Blit(buffer,screen, ret.x, ret.y, x,y, ret.w, ret.h);
+ tmp=ret;
+ ret=sge_BF_textout(screen, font, string, x, y);
+ sge_Update_ON();
+ sge_UpdateRect(screen, tmp.x, tmp.y, tmp.w, tmp.h);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_RIGHT){
+ if(pos!=max && pos!=len){
+ /* Move cursor right */
+ delete_char_latin1(string,pos,max);pos++;
+ insert_char_latin1(string,cur,pos,max);
+
+ sge_Blit(buffer,screen, ret.x, ret.y, x,y, ret.w, ret.h);
+ ret=sge_BF_textout(screen, font, string, x, y);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_LEFT){
+ if(pos>0){
+ /* Move cursor left */
+ delete_char_latin1(string,pos,max);pos--;
+ insert_char_latin1(string,cur,pos,max);
+
+ sge_Blit(buffer,screen, ret.x, ret.y, x,y, ret.w, ret.h);
+ ret=sge_BF_textout(screen, font, string, x, y);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_DELETE){
+ /* Delete char cursor+1 */
+ if(pos!=max && pos!=len){
+ delete_char_latin1(string,pos+1,max);max--;
+
+ sge_Update_OFF();
+ sge_Blit(buffer,screen, ret.x, ret.y, x,y, ret.w, ret.h);
+ tmp=ret;
+ ret=sge_BF_textout(screen, font, string, x, y);
+ sge_Update_ON();
+ sge_UpdateRect(screen, tmp.x, tmp.y, tmp.w, tmp.h);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.unicode!=0){
+ /* Insert new char */
+ if(max!=len){
+ max++;
+ insert_char_latin1(string, (char)event.key.keysym.unicode, pos,max); pos++;
+
+ sge_Blit(buffer,screen, ret.x, ret.y, x,y, ret.w, ret.h);
+ ret=sge_BF_textout(screen, font, string, x, y);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 40)==-1){quit=-1;}
+ }
+ }
+ }while(quit==0);
+
+ /* Remove the cursor from string */
+ delete_char_latin1(string,pos,max);
+
+ //Remove text/cursor from screen
+ sge_Blit(buffer,screen, ret.x, ret.y, x,y, ret.w, ret.h);
+ if(!(flags&SGE_FLAG2))
+ ret=sge_BF_textout(screen, font, string, x, y);
+ else
+ sge_UpdateRect(screen, x,y, ret.w, ret.h);
+
+ SDL_FreeSurface(buffer);
+
+ if(quit==-1){return -1;} //Waaa! The user killed me!
+ return max;
+}
diff --git a/src/sge_bm_text.h b/src/sge_bm_text.h
new file mode 100644
index 0000000..d7b7fd5
--- /dev/null
+++ b/src/sge_bm_text.h
@@ -0,0 +1,66 @@
+/*
+* SDL Graphics Extension
+* Text/Bitmap font functions (header)
+*
+* Started 990815
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+#ifndef sge_bm_text_H
+#define sge_bm_text_H
+
+#include <SDL/SDL.h>
+#include "sge_internal.h"
+
+/* BF open flags */
+#define SGE_BFTRANSP SGE_FLAG1
+#define SGE_BFSFONT SGE_FLAG2
+#define SGE_BFNOCONVERT SGE_FLAG3
+#define SGE_BFPALETTE SGE_FLAG4
+
+/* Text input flags */
+#define SGE_IBG SGE_FLAG1
+#define SGE_IDEL SGE_FLAG2
+#define SGE_INOKR SGE_FLAG3
+
+/* the bitmap font structure */
+typedef struct{
+ SDL_Surface *FontSurface;
+ Sint16 CharWidth;
+ Sint16 CharHeight;
+ Sint16 *CharPos;
+ Sint16 yoffs;
+ Uint32 bcolor;
+ Sint16 Chars;
+} sge_bmpFont;
+
+
+#ifdef _SGE_C
+extern "C" {
+#endif
+DECLSPEC sge_bmpFont* sge_BF_OpenFont(const char *file, Uint8 flags);
+DECLSPEC void sge_BF_CloseFont(sge_bmpFont *font);
+DECLSPEC void sge_BF_SetColor(sge_bmpFont *font, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC Sint16 sge_BF_GetHeight(sge_bmpFont *font);
+DECLSPEC Sint16 sge_BF_GetWidth(sge_bmpFont *font);
+DECLSPEC SDL_Rect sge_BF_TextSize(sge_bmpFont *font, const char *string, int length=-1);
+
+DECLSPEC SDL_Rect sge_BF_textout(SDL_Surface *surface, sge_bmpFont *font, const char *string, Sint16 x, Sint16 y, int length=-1);
+DECLSPEC SDL_Rect sge_BF_textoutf(SDL_Surface *surface, sge_bmpFont *font, Sint16 x, Sint16 y , const char *format, ...);
+
+DECLSPEC int sge_BF_input(SDL_Surface *screen,sge_bmpFont *font,char *string, Uint8 flags,int pos,int len,Sint16 x,Sint16 y);
+#ifdef _SGE_C
+}
+#endif
+
+
+#endif /* sge_bm_text_H */
diff --git a/src/sge_config.h b/src/sge_config.h
new file mode 100644
index 0000000..3ffd75b
--- /dev/null
+++ b/src/sge_config.h
@@ -0,0 +1,3 @@
+/* SGE Config header (generated automatically) */
+#define SGE_VER 010629
+#define _SGE_HAVE_IMG
diff --git a/src/sge_internal.h b/src/sge_internal.h
new file mode 100644
index 0000000..794ceaf
--- /dev/null
+++ b/src/sge_internal.h
@@ -0,0 +1,151 @@
+/*
+* SDL Graphics Extension
+* SGE internal header
+*
+* Started 000627
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)2000-2001 Anders Lindstr?m
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+#ifndef sge_internal_H
+#define sge_internal_H
+
+/* This header is included in all sge_*.h files */
+
+#include "sge_config.h"
+
+/*
+* C compatibility
+*/
+#ifndef __cplusplus
+ #define sge_C_ONLY
+ #define _SGE_NO_CLASSES
+#endif
+#ifdef _SGE_C
+ #define sge_C_ONLY
+ #define _SGE_NO_CLASSES
+#endif
+
+
+/*
+* This is traditional
+*/
+#ifndef PI
+ #define PI 3.1414926535
+#endif
+
+
+/*
+* Bit flags
+*/
+#define SGE_FLAG0 0x00
+#define SGE_FLAG1 0x01
+#define SGE_FLAG2 0x02
+#define SGE_FLAG3 0x04
+#define SGE_FLAG4 0x08
+#define SGE_FLAG5 0x10
+#define SGE_FLAG6 0x20
+#define SGE_FLAG7 0x40
+#define SGE_FLAG8 0x80
+
+
+/*
+* Define the right alpha values
+* (they were fliped in SDL 1.1.5+)
+*/
+#ifndef SDL_ALPHA_OPAQUE
+ #define SDL_ALPHA_OPAQUE 0
+#endif
+#ifndef SDL_ALPHA_TRANSPARENT
+ #define SDL_ALPHA_TRANSPARENT 255
+#endif
+
+
+/*
+* Older versions of SDL doesn't have SDL_VERSIONNUM
+*/
+#ifndef SDL_VERSIONNUM
+ #define SDL_VERSIONNUM(X, Y, Z) \
+ (X)*1000 + (Y)*100 + (Z)
+#endif
+
+
+/*
+* Older versions of SDL doesn't have SDL_CreateRGBSurface
+*/
+#ifndef SDL_AllocSurface
+ #define SDL_CreateRGBSurface SDL_AllocSurface
+#endif
+
+
+/*
+* Macro to get clipping
+*/
+#if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) >= \
+ SDL_VERSIONNUM(1, 1, 5)
+ #define sge_clip_xmin(pnt) pnt->clip_rect.x
+ #define sge_clip_xmax(pnt) pnt->clip_rect.x + pnt->clip_rect.w-1
+ #define sge_clip_ymin(pnt) pnt->clip_rect.y
+ #define sge_clip_ymax(pnt) pnt->clip_rect.y + pnt->clip_rect.h-1
+#else
+ #define sge_clip_xmin(pnt) pnt->clip_minx
+ #define sge_clip_xmax(pnt) pnt->clip_maxx
+ #define sge_clip_ymin(pnt) pnt->clip_miny
+ #define sge_clip_ymax(pnt) pnt->clip_maxy
+#endif
+
+
+/*
+* Macro to get the smallest bounding box from two (SDL_Rect) rectangles
+*/
+#define sge_RectUnion(dst_rect, rect1, rect2)\
+ dst_rect.x = (rect1.x < rect2.x)? rect1.x:rect2.x;\
+ dst_rect.y = (rect1.y < rect2.y)? rect1.y:rect2.y;\
+ dst_rect.w = (rect1.x + rect1.w > rect2.x + rect2.w)? rect1.x + rect1.w - dst_rect.x : rect2.x + rect2.w - dst_rect.x;\
+ dst_rect.h = (rect1.y + rect1.h > rect2.y + rect2.h)? rect1.y + rect1.h - dst_rect.y : rect2.y + rect2.h - dst_rect.y;
+
+
+/*
+* We need to use alpha sometimes but older versions of SDL doesn't have
+* alpha support.
+*/
+#if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) >= \
+ SDL_VERSIONNUM(1, 1, 5)
+ #define sge_MapRGBA SDL_MapRGBA
+ #define sge_GetRGBA SDL_GetRGBA
+#else
+ #define sge_MapRGBA(fmt, r, g, b, a) SDL_MapRGB(fmt, r, g, b)
+ #define sge_GetRGBA(pixel, fmt, r, g, b, a) SDL_GetRGBA(pixel, fmt, r, g, b)
+#endif
+
+
+/*
+* Some compilers use a special export keyword
+* Thanks to Seung Chan Lim (limsc@maya.com or slim@djslim.com) to pointing this out
+* (From SDL)
+*/
+#ifndef DECLSPEC
+ #ifdef __BEOS__
+ #if defined(__GNUC__)
+ #define DECLSPEC __declspec(dllexport)
+ #else
+ #define DECLSPEC __declspec(export)
+ #endif
+ #else
+ #ifdef WIN32
+ #define DECLSPEC __declspec(dllexport)
+ #else
+ #define DECLSPEC
+ #endif
+ #endif
+#endif
+
+#endif /* sge_internal_H */
diff --git a/src/sge_primitives.cpp b/src/sge_primitives.cpp
new file mode 100644
index 0000000..cd00843
--- /dev/null
+++ b/src/sge_primitives.cpp
@@ -0,0 +1,1660 @@
+/*
+* SDL Graphics Extension
+* Drawing primitives
+*
+* Started 990815 (split from sge_draw 010611)
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+/*
+* Some of this code is taken from the "Introduction to SDL" and
+* John Garrison's PowerPak
+*/
+
+#include <SDL/SDL.h>
+#include <math.h>
+#include <string.h>
+#include <stdarg.h>
+#include "sge_primitives.h"
+#include "sge_surface.h"
+
+
+/* Globals used for sge_Update/sge_Lock (defined in sge_surface) */
+extern Uint8 _sge_update;
+extern Uint8 _sge_lock;
+
+
+/**********************************************************************************/
+/** Line functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// Internal draw horizontal line
+//==================================================================================
+void _HLine(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint32 Color)
+{
+ if(x1>x2){Sint16 tmp=x1; x1=x2; x2=tmp;}
+
+ //Do the clipping
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if(y<Surface->clip_miny || y>Surface->clip_maxy || x1>Surface->clip_maxx || x2<Surface->clip_minx)
+ return;
+ if(x1<Surface->clip_minx)
+ x1=Surface->clip_minx;
+ if(x2>Surface->clip_maxx)
+ x2=Surface->clip_maxx;
+ #endif
+
+ SDL_Rect l;
+ l.x=x1; l.y=y; l.w=x2-x1+1; l.h=1;
+
+ SDL_FillRect(Surface, &l, Color);
+}
+
+//==================================================================================
+// Draw horizontal line
+//==================================================================================
+void sge_HLine(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint32 Color)
+{
+ if(x1>x2){Sint16 tmp=x1; x1=x2; x2=tmp;}
+
+ //Do the clipping
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if(y<Surface->clip_miny || y>Surface->clip_maxy || x1>Surface->clip_maxx || x2<Surface->clip_minx)
+ return;
+ if(x1<Surface->clip_minx)
+ x1=Surface->clip_minx;
+ if(x2>Surface->clip_maxx)
+ x2=Surface->clip_maxx;
+ #endif
+
+ SDL_Rect l;
+ l.x=x1; l.y=y; l.w=x2-x1+1; l.h=1;
+
+ SDL_FillRect(Surface, &l, Color);
+
+ sge_UpdateRect(Surface, x1, y, x2-x1+1, 1);
+}
+
+//==================================================================================
+// Draw horizontal line (RGB)
+//==================================================================================
+void sge_HLine(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_HLine(Surface,x1,x2,y, SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Internal draw horizontal line (alpha)
+//==================================================================================
+void _HLineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint32 Color, Uint8 alpha)
+{
+ Uint8 update = _sge_update;
+ Uint8 lock = _sge_lock;
+ _sge_update = 0;
+ _sge_lock = 0;
+ sge_FilledRectAlpha(Surface, x1,y,x2,y, Color, alpha);
+ _sge_update = update;
+ _sge_lock = lock;
+}
+
+//==================================================================================
+// Draw horizontal line (alpha)
+//==================================================================================
+void sge_HLineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint32 Color, Uint8 alpha)
+{
+ sge_FilledRectAlpha(Surface, x1,y,x2,y, Color, alpha);
+}
+
+//==================================================================================
+// Draw horizontal line (alpha RGB)
+//==================================================================================
+void sge_HLineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_HLineAlpha(Surface,x1,x2,y, SDL_MapRGB(Surface->format, R, G, B), alpha);
+}
+
+
+//==================================================================================
+// Internal draw vertical line
+//==================================================================================
+void _VLine(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint32 Color)
+{
+ if(y1>y2){Sint16 tmp=y1; y1=y2; y2=tmp;}
+
+ //Do the clipping
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if(x<Surface->clip_minx || x>Surface->clip_maxx || y1>Surface->clip_maxy || y2<Surface->clip_miny)
+ return;
+ if(y1<Surface->clip_miny)
+ y1=Surface->clip_miny;
+ if(y2>Surface->clip_maxy)
+ y2=Surface->clip_maxy;
+ #endif
+
+ SDL_Rect l;
+ l.x=x; l.y=y1; l.w=1; l.h=y2-y1+1;
+
+ SDL_FillRect(Surface, &l, Color);
+}
+
+//==================================================================================
+// Draw vertical line
+//==================================================================================
+void sge_VLine(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint32 Color)
+{
+ if(y1>y2){Sint16 tmp=y1; y1=y2; y2=tmp;}
+
+ //Do the clipping
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if(x<Surface->clip_minx || x>Surface->clip_maxx || y1>Surface->clip_maxy || y2<Surface->clip_miny)
+ return;
+ if(y1<Surface->clip_miny)
+ y1=Surface->clip_miny;
+ if(y2>Surface->clip_maxy)
+ y2=Surface->clip_maxy;
+ #endif
+
+ SDL_Rect l;
+ l.x=x; l.y=y1; l.w=1; l.h=y2-y1+1;
+
+ SDL_FillRect(Surface, &l, Color);
+
+ sge_UpdateRect(Surface, x, y1, 1, y2-y1+1);
+}
+
+//==================================================================================
+// Draw vertical line (RGB)
+//==================================================================================
+void sge_VLine(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_VLine(Surface,x,y1,y2, SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Internal draw vertical line (alpha - no update)
+//==================================================================================
+void _VLineAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint32 Color, Uint8 alpha)
+{
+ Uint8 update = _sge_update;
+ Uint8 lock = _sge_lock;
+ _sge_update = 0;
+ _sge_lock = 0;
+ sge_FilledRectAlpha(Surface, x,y1,x,y2, Color, alpha);
+ _sge_update = update;
+ _sge_lock = lock;
+}
+
+//==================================================================================
+// Draw vertical line (alpha)
+//==================================================================================
+void sge_VLineAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint32 Color, Uint8 alpha)
+{
+ sge_FilledRectAlpha(Surface, x,y1,x,y2, Color, alpha);
+}
+
+//==================================================================================
+// Draw vertical line (alpha RGB)
+//==================================================================================
+void sge_VLineAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_VLineAlpha(Surface,x,y1,y2, SDL_MapRGB(Surface->format, R, G, B), alpha);
+}
+
+
+
+//==================================================================================
+// Performs Callback at each line point. (From PowerPak)
+//==================================================================================
+void sge_DoLine(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 Color, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color))
+{
+ Sint16 dx, dy, sdx, sdy, x, y, px, py;
+
+ dx = x2 - x1;
+ dy = y2 - y1;
+
+ sdx = (dx < 0) ? -1 : 1;
+ sdy = (dy < 0) ? -1 : 1;
+
+ dx = sdx * dx + 1;
+ dy = sdy * dy + 1;
+
+ x = y = 0;
+
+ px = x1;
+ py = y1;
+
+ if (dx >= dy){
+ for (x = 0; x < dx; x++){
+ Callback(Surface, px, py, Color);
+
+ y += dy;
+ if (y >= dx){
+ y -= dx;
+ py += sdy;
+ }
+ px += sdx;
+ }
+ }
+ else{
+ for (y = 0; y < dy; y++){
+ Callback(Surface, px, py, Color);
+
+ x += dx;
+ if (x >= dy){
+ x -= dy;
+ px += sdx;
+ }
+ py += sdy;
+ }
+ }
+}
+
+
+//==================================================================================
+// Performs Callback at each line point. (RGB)
+//==================================================================================
+void sge_DoLine(SDL_Surface *Surface, Sint16 X1, Sint16 Y1, Sint16 X2, Sint16 Y2, Uint8 R, Uint8 G, Uint8 B, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color))
+{
+ sge_DoLine(Surface,X1,Y1,X2,Y2, SDL_MapRGB(Surface->format, R, G, B),Callback);
+}
+
+
+//==================================================================================
+// Draws a line
+//==================================================================================
+void _Line(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color)
+{
+ /* Clipping */
+ if(x2<sge_clip_xmin(surface) || x1>sge_clip_xmax(surface) || y2<sge_clip_ymin(surface) || y1>sge_clip_ymax(surface))
+ return;
+ if (x1 < sge_clip_xmin(surface))
+ x1 = sge_clip_xmin(surface);
+ if (x2 > sge_clip_xmax(surface))
+ x2 = sge_clip_xmax(surface);
+ if (y1 < sge_clip_ymin(surface))
+ y1 = sge_clip_ymin(surface);
+ if (y2 > sge_clip_ymax(surface))
+ y2 = sge_clip_ymax(surface);
+
+ Sint16 dx, dy, sdx, sdy, x, y;
+
+ dx = x2 - x1;
+ dy = y2 - y1;
+
+ sdx = (dx < 0) ? -1 : 1;
+ sdy = (dy < 0) ? -1 : 1;
+
+ dx = sdx * dx + 1;
+ dy = sdy * dy + 1;
+
+ x = y = 0;
+
+ Sint16 pixx = surface->format->BytesPerPixel;
+ Sint16 pixy = surface->pitch;
+ Uint8 *pixel = (Uint8*)surface->pixels + y1*pixy + x1*pixx;
+
+ pixx *= sdx;
+ pixy *= sdy;
+
+ if (dx < dy) {
+ Sint32 tmp = dx; dx = dy; dy = Sint16(tmp);
+ tmp = pixx; pixx = pixy; pixy = tmp;
+ }
+
+ switch(surface->format->BytesPerPixel) {
+ case 1: {
+ for(x=0; x < dx; x++) {
+ *pixel = color;
+
+ y += dy;
+ if (y >= dx) {
+ y -= dx;
+ pixel += pixy;
+ }
+ pixel += pixx;
+ }
+ }
+ break;
+
+ case 2: {
+ for(x=0; x < dx; x++) {
+ *(Uint16*)pixel = color;
+
+ y += dy;
+ if (y >= dx) {
+ y -= dx;
+ pixel += pixy;
+ }
+ pixel += pixx;
+ }
+ }
+ break;
+
+ case 3: {
+ Uint8 rshift8 = surface->format->Rshift/8;
+ Uint8 gshift8 = surface->format->Gshift/8;
+ Uint8 bshift8 = surface->format->Bshift/8;
+ Uint8 ashift8 = surface->format->Ashift/8;
+
+ Uint8 R = (color>>surface->format->Rshift)&0xff;
+ Uint8 G = (color>>surface->format->Gshift)&0xff;
+ Uint8 B = (color>>surface->format->Bshift)&0xff;
+ Uint8 A = (color>>surface->format->Ashift)&0xff;
+
+ for(x=0; x < dx; x++) {
+ *(pixel+rshift8) = R;
+ *(pixel+gshift8) = G;
+ *(pixel+bshift8) = B;
+ *(pixel+ashift8) = A;
+
+ y += dy;
+ if (y >= dx) {
+ y -= dx;
+ pixel += pixy;
+ }
+ pixel += pixx;
+ }
+ }
+ break;
+
+ case 4: {
+ for(x=0; x < dx; x++) {
+ *(Uint32*)pixel = color;
+
+ y += dy;
+ if (y >= dx) {
+ y -= dx;
+ pixel += pixy;
+ }
+ pixel += pixx;
+ }
+ }
+ break;
+ }
+}
+
+void sge_Line(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 Color)
+{
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+ }
+
+ /* Draw the line */
+ _Line(Surface, x1,y1, x2,y2, Color);
+
+ /* unlock the display */
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, (x1 < x2)? x1 : x2, (y1 < y2)? y1 : y2, ((x2-x1)<0)? (x1-x2+1) : (x2-x1+1), ((y2-y1)<0)? (y1-y2+1) : (y2-y1+1));
+}
+
+
+//==================================================================================
+// Draws a line (RGB)
+//==================================================================================
+void sge_Line(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_Line(Surface,x1,y1,x2,y2, SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// A quick hack to get alpha working with callbacks
+//==================================================================================
+Uint8 _sge_alpha_hack = 0;
+void callback_alpha_hack(SDL_Surface *surf, Sint16 x, Sint16 y, Uint32 color)
+{
+ _PutPixelAlpha(surf,x,y,color,_sge_alpha_hack);
+}
+
+//==================================================================================
+// Draws a line (alpha)
+//==================================================================================
+void sge_LineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 Color, Uint8 alpha)
+{
+ if (SDL_MUSTLOCK(Surface) && _sge_lock)
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+
+ _sge_alpha_hack = alpha;
+
+ /* Draw the line */
+ sge_DoLine(Surface, x1, y1, x2, y2, Color, callback_alpha_hack);
+
+ /* unlock the display */
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, (x1 < x2)? x1 : x2, (y1 < y2)? y1 : y2, ((x2-x1)<0)? (x1-x2+1) : (x2-x1+1), ((y2-y1)<0)? (y1-y2+1) : (y2-y1+1));
+}
+
+//==================================================================================
+// Draws a line (alpha - RGB)
+//==================================================================================
+void sge_LineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_LineAlpha(Surface,x1,y1,x2,y2, SDL_MapRGB(Surface->format, R, G, B), alpha);
+}
+
+
+
+//==================================================================================
+// Anti-aliased line
+// From SDL_gfxPrimitives written by A. Schiffler (aschiffler@home.com)
+//==================================================================================
+#define AAbits 8
+#define AAlevels 256 /* 2^AAbits */
+void sge_AALineAlpha(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color, Uint8 alpha)
+{
+ Sint32 xx0,yy0,xx1,yy1;
+ Uint32 intshift, erracc=0, erradj;
+ Uint32 erracctmp, wgt, wgtcompmask;
+ Sint16 dx, dy, tmp, xdir, y0p1, x0pxdir;
+
+ /* Keep on working with 32bit numbers */
+ xx0=x1;
+ yy0=y1;
+ xx1=x2;
+ yy1=y2;
+
+ /* Reorder points if required */
+ if (yy0 > yy1) {
+ tmp = yy0; yy0 = yy1; yy1 = tmp;
+ tmp = xx0; xx0 = xx1; xx1 = tmp;
+ }
+
+ /* Calculate distance */
+ dx = xx1 - xx0;
+ dy = yy1 - yy0;
+
+ /* Adjust for negative dx and set xdir */
+ if (dx >= 0) {
+ xdir=1;
+ } else {
+ xdir=-1;
+ dx=(-dx);
+ }
+
+ /* Check for special cases */
+ if (dx==0) {
+ /* Vertical line */
+ sge_VLineAlpha(dst, x1,y1,y2,color,alpha);
+ return;
+ } else if (dy==0) {
+ /* Horizontal line */
+ sge_HLineAlpha(dst, x1,x2,y1,color,alpha);
+ return;
+ } else if (dx==dy) {
+ /* Diagonal line */
+ if(alpha==255)
+ sge_Line(dst,x1,y1,x2,y2,color);
+ else
+ sge_LineAlpha(dst,x1,y1,x2,y2,color,alpha);
+ return;
+ }
+
+ Uint8 a = 255-alpha;
+
+ /* Lock surface */
+ if ( SDL_MUSTLOCK(dst) && _sge_lock )
+ if ( SDL_LockSurface(dst) < 0 )
+ return;
+
+
+ intshift = 32 - AAbits; /* # of bits by which to shift erracc to get intensity level */
+ wgtcompmask = AAlevels - 1; /* Mask used to flip all bits in an intensity weighting */
+
+ if(alpha==255)
+ _PutPixel(dst,x1,y1, color); /* Draw the initial pixel in the foreground color */
+ else
+ _PutPixelAlpha(dst,x1,y1, color, alpha);
+
+ /* x-major or y-major? */
+ if (dy > dx) {
+
+ /* y-major. Calculate 16-bit fixed point fractional part of a pixel that
+ X advances every time Y advances 1 pixel, truncating the result so that
+ we won't overrun the endpoint along the X axis */
+ erradj = ((dx << 16) / dy)<<16;
+
+ /* draw all pixels other than the first and last */
+ x0pxdir=xx0+xdir;
+ while (--dy) {
+ erracctmp = erracc;
+ erracc += erradj;
+ if (erracc <= erracctmp) {
+ /* rollover in error accumulator, x coord advances */
+ xx0=x0pxdir;
+ x0pxdir += xdir;
+ }
+ yy0++; /* y-major so always advance Y */
+
+ /* the AAbits most significant bits of erracc give us the intensity
+ weighting for this pixel, and the complement of the weighting for
+ the paired pixel. */
+ wgt = (erracc >> intshift) & 255;
+
+ tmp = 255-wgt-a;
+ if(tmp<0)
+ tmp=0;
+ _PutPixelAlpha(dst,xx0,yy0,color,Uint8(tmp));
+ tmp = wgt-a;
+ if(tmp<0)
+ tmp=0;
+ _PutPixelAlpha(dst,x0pxdir,yy0,color,Uint8(tmp));
+ }
+ } else {
+
+ /* x-major line. Calculate 16-bit fixed-point fractional part of a pixel
+ that Y advances each time X advances 1 pixel, truncating the result so
+ that we won't overrun the endpoint along the X axis. */
+ erradj = ((dy << 16) / dx)<<16;
+
+ /* draw all pixels other than the first and last */
+ y0p1=yy0+1;
+ while (--dx) {
+
+ erracctmp = erracc;
+ erracc += erradj;
+ if (erracc <= erracctmp) {
+ /* Accumulator turned over, advance y */
+ yy0=y0p1;
+ y0p1++;
+ }
+ xx0 += xdir; /* x-major so always advance X */
+
+ /* the AAbits most significant bits of erracc give us the intensity
+ weighting for this pixel, and the complement of the weighting for
+ the paired pixel. */
+ wgt = (erracc >> intshift) & 255;
+
+ tmp = 255-wgt-a;
+ if(tmp<0)
+ tmp=0;
+ _PutPixelAlpha(dst,xx0,yy0,color,tmp);
+ tmp = wgt-a;
+ if(tmp<0)
+ tmp=0;
+ _PutPixelAlpha(dst,xx0,y0p1,color,tmp);
+ }
+ }
+
+ /* Draw final pixel, always exactly intersected by the line and doesn't
+ need to be weighted. */
+ if(alpha==255)
+ _PutPixel(dst,x2,y2, color);
+ else
+ _PutPixelAlpha(dst,x2,y2, color, alpha);
+
+ /* unlock the display */
+ if (SDL_MUSTLOCK(dst) && _sge_lock) {
+ SDL_UnlockSurface(dst);
+ }
+
+ sge_UpdateRect(dst, (x1 < x2)? x1 : x2, (y1 < y2)? y1 : y2, ((x2-x1)<0)? (x1-x2+1) : (x2-x1+1), ((y2-y1)<0)? (y1-y2+1) : (y2-y1+1));
+}
+
+void sge_AALineAlpha(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 alpha)
+{
+ sge_AALineAlpha(dst,x1,y1,x2,y2,SDL_MapRGB(dst->format, r, g, b),alpha);
+}
+
+void sge_AALine(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color)
+{
+ sge_AALineAlpha(dst, x1,y1, x2,y2, color, 255);
+}
+
+void sge_AALine(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b)
+{
+ sge_AALineAlpha(dst,x1,y1,x2,y2,SDL_MapRGB(dst->format, r, g, b),255);
+}
+
+
+
+/**********************************************************************************/
+/** Figure functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// Draws a rectangle
+//==================================================================================
+void sge_Rect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color)
+{
+ _HLine(Surface,x1,x2,y1,color);
+ _HLine(Surface,x1,x2,y2,color);
+ _VLine(Surface,x1,y1,y2,color);
+ _VLine(Surface,x2,y1,y2,color);
+
+ sge_UpdateRect(Surface, x1, y1, x2-x1, 1);
+ sge_UpdateRect(Surface, x1, y2, x2-x1+1, 1); /* Hmm? */
+ sge_UpdateRect(Surface, x1, y1, 1, y2-y1);
+ sge_UpdateRect(Surface, x2, y1, 1, y2-y1);
+}
+
+//==================================================================================
+// Draws a rectangle (RGB)
+//==================================================================================
+void sge_Rect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_Rect(Surface,x1,y1,x2,y2, SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Draws a rectangle (alpha)
+//==================================================================================
+void sge_RectAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color, Uint8 alpha)
+{
+ if (SDL_MUSTLOCK(Surface) && _sge_lock)
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+
+ _HLineAlpha(Surface,x1,x2,y1,color,alpha);
+ _HLineAlpha(Surface,x1,x2,y2,color,alpha);
+ _VLineAlpha(Surface,x1,y1,y2,color,alpha);
+ _VLineAlpha(Surface,x2,y1,y2,color,alpha);
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, x1, y1, x2-x1, 1);
+ sge_UpdateRect(Surface, x1, y2, x2-x1+1, 1); /* Hmm? */
+ sge_UpdateRect(Surface, x1, y1, 1, y2-y1);
+ sge_UpdateRect(Surface, x2, y1, 1, y2-y1);
+}
+
+//==================================================================================
+// Draws a rectangle (RGB)
+//==================================================================================
+void sge_RectAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_RectAlpha(Surface,x1,y1,x2,y2, SDL_MapRGB(Surface->format, R, G, B), alpha);
+}
+
+
+//==================================================================================
+// Draws a filled rectangle
+//==================================================================================
+void sge_FilledRect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color)
+{
+ Sint16 tmp;
+ if(x1>x2){
+ tmp=x1; x1=x2; x2=tmp;
+ }
+ if(y1>y2){
+ tmp=y1; y1=y2; y2=tmp;
+ }
+
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if(x2<Surface->clip_minx || x1>Surface->clip_maxx || y2<Surface->clip_miny || y1>Surface->clip_maxy)
+ return;
+ if (x1 < Surface->clip_minx)
+ x1=Surface->clip_minx;
+ if (x2 > Surface->clip_maxx)
+ x2=Surface->clip_maxx;
+ if (y1 < Surface->clip_miny)
+ y1=Surface->clip_miny;
+ if (y2 > Surface->clip_maxy)
+ y2=Surface->clip_maxy;
+ #endif
+
+ SDL_Rect area;
+ area.x=x1; area.y=y1;
+ area.w=x2-x1+1; area.h=y2-y1+1;
+
+ SDL_FillRect(Surface,&area,color);
+
+ sge_UpdateRect(Surface, x1, y1, x2-x1+1, y2-y1+1);
+}
+
+//==================================================================================
+// Draws a filled rectangle (RGB)
+//==================================================================================
+void sge_FilledRect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_FilledRect(Surface,x1,y1,x2,y2, SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Draws a filled rectangle (alpha)
+//==================================================================================
+void sge_FilledRectAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color, Uint8 alpha)
+{
+ /*if( alpha == 255 ){
+ sge_FilledRect(surface,x1,y1,x2,y2,color);
+ return;
+ }*/
+
+ /* Fix coords */
+ Sint16 tmp;
+ if(x1>x2){
+ tmp=x1; x1=x2; x2=tmp;
+ }
+ if(y1>y2){
+ tmp=y1; y1=y2; y2=tmp;
+ }
+
+ /* Clipping */
+ if(x2<sge_clip_xmin(surface) || x1>sge_clip_xmax(surface) || y2<sge_clip_ymin(surface) || y1>sge_clip_ymax(surface))
+ return;
+ if (x1 < sge_clip_xmin(surface))
+ x1 = sge_clip_xmin(surface);
+ if (x2 > sge_clip_xmax(surface))
+ x2 = sge_clip_xmax(surface);
+ if (y1 < sge_clip_ymin(surface))
+ y1 = sge_clip_ymin(surface);
+ if (y2 > sge_clip_ymax(surface))
+ y2 = sge_clip_ymax(surface);
+
+ Uint32 Rmask = surface->format->Rmask, Gmask = surface->format->Gmask, Bmask = surface->format->Bmask, Amask = surface->format->Amask;
+ Uint32 R,G,B,A=0;
+ Sint16 x,y;
+
+ if (SDL_MUSTLOCK(surface) && _sge_lock)
+ if (SDL_LockSurface(surface) < 0)
+ return;
+
+ switch (surface->format->BytesPerPixel) {
+ case 1: { /* Assuming 8-bpp */
+ Uint8 *row, *pixel;
+ Uint8 dR, dG, dB;
+
+ Uint8 sR = surface->format->palette->colors[color].r;
+ Uint8 sG = surface->format->palette->colors[color].g;
+ Uint8 sB = surface->format->palette->colors[color].b;
+
+ for(y = y1; y<=y2; y++){
+ row = (Uint8 *)surface->pixels + y*surface->pitch;
+ for(x = x1; x <= x2; x++){
+ pixel = row + x;
+
+ dR = surface->format->palette->colors[*pixel].r;
+ dG = surface->format->palette->colors[*pixel].g;
+ dB = surface->format->palette->colors[*pixel].b;
+
+ dR = dR + ((sR-dR)*alpha >> 8);
+ dG = dG + ((sG-dG)*alpha >> 8);
+ dB = dB + ((sB-dB)*alpha >> 8);
+
+ *pixel = SDL_MapRGB(surface->format, dR, dG, dB);
+ }
+ }
+ }
+ break;
+
+ case 2: { /* Probably 15-bpp or 16-bpp */
+ Uint16 *row, *pixel;
+ Uint32 dR=(color & Rmask),dG=(color & Gmask),dB=(color & Bmask),dA=(color & Amask);
+
+ for(y = y1; y<=y2; y++){
+ row = (Uint16 *)surface->pixels + y*surface->pitch/2;
+ for(x = x1; x <= x2; x++){
+ pixel = row + x;
+
+ R = ((*pixel & Rmask) + (( dR - (*pixel & Rmask) ) * alpha >> 8)) & Rmask;
+ G = ((*pixel & Gmask) + (( dG - (*pixel & Gmask) ) * alpha >> 8)) & Gmask;
+ B = ((*pixel & Bmask) + (( dB - (*pixel & Bmask) ) * alpha >> 8)) & Bmask;
+ if( Amask )
+ A = ((*pixel & Amask) + (( dA - (*pixel & Amask) ) * alpha >> 8)) & Amask;
+
+ *pixel= R | G | B | A;
+ }
+ }
+ }
+ break;
+
+ case 3: { /* Slow 24-bpp mode, usually not used */
+ Uint8 *row,*pix;
+ Uint8 dR, dG, dB, dA;
+ Uint8 rshift8=surface->format->Rshift/8;
+ Uint8 gshift8=surface->format->Gshift/8;
+ Uint8 bshift8=surface->format->Bshift/8;
+ Uint8 ashift8=surface->format->Ashift/8;
+
+ Uint8 sR = (color>>surface->format->Rshift)&0xff;
+ Uint8 sG = (color>>surface->format->Gshift)&0xff;
+ Uint8 sB = (color>>surface->format->Bshift)&0xff;
+ Uint8 sA = (color>>surface->format->Ashift)&0xff;
+
+ for(y = y1; y<=y2; y++){
+ row = (Uint8 *)surface->pixels + y * surface->pitch;
+ for(x = x1; x <= x2; x++){
+ pix = row + x*3;
+
+ dR = *((pix)+rshift8);
+ dG = *((pix)+gshift8);
+ dB = *((pix)+bshift8);
+ dA = *((pix)+ashift8);
+
+ dR = dR + ((sR-dR)*alpha >> 8);
+ dG = dG + ((sG-dG)*alpha >> 8);
+ dB = dB + ((sB-dB)*alpha >> 8);
+ dA = dA + ((sA-dA)*alpha >> 8);
+
+ *((pix)+rshift8) = dR;
+ *((pix)+gshift8) = dG;
+ *((pix)+bshift8) = dB;
+ *((pix)+ashift8) = dA;
+ }
+ }
+
+ }
+ break;
+
+ case 4: { /* Probably 32-bpp */
+ Uint32 *row, *pixel;
+ Uint32 dR=(color & Rmask),dG=(color & Gmask),dB=(color & Bmask),dA=(color & Amask);
+
+ for(y = y1; y<=y2; y++){
+ row = (Uint32 *)surface->pixels + y*surface->pitch/4;
+ for(x = x1; x <= x2; x++){
+ pixel = row + x;
+
+ R = ((*pixel & Rmask) + (( dR - (*pixel & Rmask) ) * alpha >> 8)) & Rmask;
+ G = ((*pixel & Gmask) + (( dG - (*pixel & Gmask) ) * alpha >> 8)) & Gmask;
+ B = ((*pixel & Bmask) + (( dB - (*pixel & Bmask) ) * alpha >> 8)) & Bmask;
+ if( Amask )
+ A = ((*pixel & Amask) + (( dA - (*pixel & Amask) ) * alpha >> 8)) & Amask;
+
+ *pixel= R | G | B | A;
+ }
+ }
+ }
+ break;
+ }
+
+ if (SDL_MUSTLOCK(surface) && _sge_lock) {
+ SDL_UnlockSurface(surface);
+ }
+
+ sge_UpdateRect(surface, x1, y1, x2-x1+1, y2-y1+1);
+}
+
+void sge_FilledRectAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_FilledRectAlpha(Surface,x1,y1,x2,y2, SDL_MapRGB(Surface->format, R, G, B), alpha);
+}
+
+
+//==================================================================================
+// Performs Callback at each ellipse point.
+// (from Allegro)
+//==================================================================================
+void sge_DoEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color) )
+{
+ int ix, iy;
+ int h, i, j, k;
+ int oh, oi, oj, ok;
+
+ if (rx < 1)
+ rx = 1;
+
+ if (ry < 1)
+ ry = 1;
+
+ h = i = j = k = 0xFFFF;
+
+ if (rx > ry) {
+ ix = 0;
+ iy = rx * 64;
+
+ do {
+ oh = h;
+ oi = i;
+ oj = j;
+ ok = k;
+
+ h = (ix + 32) >> 6;
+ i = (iy + 32) >> 6;
+ j = (h * ry) / rx;
+ k = (i * ry) / rx;
+
+ if (((h != oh) || (k != ok)) && (h < oi)) {
+ Callback(Surface, x+h, y+k, color);
+ if (h)
+ Callback(Surface, x-h, y+k, color);
+ if (k) {
+ Callback(Surface, x+h, y-k, color);
+ if (h)
+ Callback(Surface, x-h, y-k, color);
+ }
+ }
+
+ if (((i != oi) || (j != oj)) && (h < i)) {
+ Callback(Surface, x+i, y+j, color);
+ if (i)
+ Callback(Surface, x-i, y+j, color);
+ if (j) {
+ Callback(Surface, x+i, y-j, color);
+ if (i)
+ Callback(Surface, x-i, y-j, color);
+ }
+ }
+
+ ix = ix + iy / rx;
+ iy = iy - ix / rx;
+
+ } while (i > h);
+ }
+ else {
+ ix = 0;
+ iy = ry * 64;
+
+ do {
+ oh = h;
+ oi = i;
+ oj = j;
+ ok = k;
+
+ h = (ix + 32) >> 6;
+ i = (iy + 32) >> 6;
+ j = (h * rx) / ry;
+ k = (i * rx) / ry;
+
+ if (((j != oj) || (i != oi)) && (h < i)) {
+ Callback(Surface, x+j, y+i, color);
+ if (j)
+ Callback(Surface, x-j, y+i, color);
+ if (i) {
+ Callback(Surface, x+j, y-i, color);
+ if (j)
+ Callback(Surface, x-j, y-i, color);
+ }
+ }
+
+ if (((k != ok) || (h != oh)) && (h < oi)) {
+ Callback(Surface, x+k, y+h, color);
+ if (k)
+ Callback(Surface, x-k, y+h, color);
+ if (h) {
+ Callback(Surface, x+k, y-h, color);
+ if (k)
+ Callback(Surface, x-k, y-h, color);
+ }
+ }
+
+ ix = ix + iy / ry;
+ iy = iy - ix / ry;
+
+ } while(i > h);
+ }
+}
+
+
+//==================================================================================
+// Performs Callback at each ellipse point. (RGB)
+//==================================================================================
+void sge_DoEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color) )
+{
+ sge_DoEllipse(Surface,x,y,rx,ry,SDL_MapRGB(Surface->format, R, G, B),Callback);
+}
+
+
+//==================================================================================
+// Draws an ellipse
+//==================================================================================
+void sge_Ellipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color)
+{
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+ }
+
+ sge_DoEllipse(Surface, x, y, rx, ry, color, _PutPixel);
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, x-rx, y-ry, 2*rx+1, 2*ry+1);
+
+}
+
+
+//==================================================================================
+// Draws an ellipse (RGB)
+//==================================================================================
+void sge_Ellipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_Ellipse(Surface,x,y,rx,ry,SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Draws an ellipse (alpha)
+//==================================================================================
+void sge_EllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color, Uint8 alpha)
+{
+ if (SDL_MUSTLOCK(Surface) && _sge_lock)
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+
+ _sge_alpha_hack = alpha;
+ sge_DoEllipse(Surface, x, y, rx, ry, color, callback_alpha_hack);
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, x-rx, y-ry, 2*rx+1, 2*ry+1);
+}
+
+
+//==================================================================================
+// Draws an ellipse (alpha - RGB)
+//==================================================================================
+void sge_EllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_EllipseAlpha(Surface,x,y,rx,ry,SDL_MapRGB(Surface->format, R, G, B),alpha);
+}
+
+
+//==================================================================================
+// Draws a filled ellipse
+//==================================================================================
+void sge_FilledEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color)
+{
+ int ix, iy;
+ int h, i, j, k;
+ int oh, oi, oj, ok;
+
+ if (rx < 1)
+ rx = 1;
+
+ if (ry < 1)
+ ry = 1;
+
+ oh = oi = oj = ok = 0xFFFF;
+
+ if (rx > ry) {
+ ix = 0;
+ iy = rx * 64;
+
+ do {
+ h = (ix + 32) >> 6;
+ i = (iy + 32) >> 6;
+ j = (h * ry) / rx;
+ k = (i * ry) / rx;
+
+ if ((k!=ok) && (k!=oj)) {
+ if (k){
+ _HLine(Surface,x-h,x+h,y-k,color);
+ _HLine(Surface,x-h,x+h,y+k,color);
+ }else
+ _HLine(Surface,x-h,x+h,y,color);
+ ok=k;
+ }
+
+ if ((j!=oj) && (j!=ok) && (k!=j)) {
+ if (j){
+ _HLine(Surface,x-i,x+i,y-j,color);
+ _HLine(Surface,x-i,x+i,y+j,color);
+ }else
+ _HLine(Surface,x-i,x+i,y,color);
+ oj=j;
+ }
+
+ ix = ix + iy / rx;
+ iy = iy - ix / rx;
+
+ } while (i > h);
+ }
+ else {
+ ix = 0;
+ iy = ry * 64;
+
+ do {
+ h = (ix + 32) >> 6;
+ i = (iy + 32) >> 6;
+ j = (h * rx) / ry;
+ k = (i * rx) / ry;
+
+ if ((i!=oi) && (i!=oh)) {
+ if (i){
+ _HLine(Surface,x-j,x+j,y-i,color);
+ _HLine(Surface,x-j,x+j,y+i,color);
+ }else
+ _HLine(Surface,x-j,x+j,y,color);
+ oi=i;
+ }
+
+ if ((h!=oh) && (h!=oi) && (i!=h)) {
+ if (h){
+ _HLine(Surface,x-k,x+k,y-h,color);
+ _HLine(Surface,x-k,x+k,y+h,color);
+ }else
+ _HLine(Surface,x-k,x+k,y,color);
+ oh=h;
+ }
+
+ ix = ix + iy / ry;
+ iy = iy - ix / ry;
+
+ } while(i > h);
+ }
+
+ sge_UpdateRect(Surface, x-rx, y-ry, 2*rx+1, 2*ry+1);
+}
+
+
+//==================================================================================
+// Draws a filled ellipse (RGB)
+//==================================================================================
+void sge_FilledEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_FilledEllipse(Surface,x,y,rx,ry,SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+
+//==================================================================================
+// Draws a filled ellipse (alpha)
+//==================================================================================
+void sge_FilledEllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color, Uint8 alpha)
+{
+ int ix, iy;
+ int h, i, j, k;
+ int oh, oi, oj, ok;
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock)
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+
+ if (rx < 1)
+ rx = 1;
+
+ if (ry < 1)
+ ry = 1;
+
+ oh = oi = oj = ok = 0xFFFF;
+
+ if (rx > ry) {
+ ix = 0;
+ iy = rx * 64;
+
+ do {
+ h = (ix + 32) >> 6;
+ i = (iy + 32) >> 6;
+ j = (h * ry) / rx;
+ k = (i * ry) / rx;
+
+ if ((k!=ok) && (k!=oj)) {
+ if (k){
+ _HLineAlpha(Surface,x-h,x+h,y-k,color,alpha);
+ _HLineAlpha(Surface,x-h,x+h,y+k,color,alpha);
+ }else
+ _HLineAlpha(Surface,x-h,x+h,y,color,alpha);
+ ok=k;
+ }
+
+ if ((j!=oj) && (j!=ok) && (k!=j)) {
+ if (j){
+ _HLineAlpha(Surface,x-i,x+i,y-j,color,alpha);
+ _HLineAlpha(Surface,x-i,x+i,y+j,color,alpha);
+ }else
+ _HLineAlpha(Surface,x-i,x+i,y,color,alpha);
+ oj=j;
+ }
+
+ ix = ix + iy / rx;
+ iy = iy - ix / rx;
+
+ } while (i > h);
+ }
+ else {
+ ix = 0;
+ iy = ry * 64;
+
+ do {
+ h = (ix + 32) >> 6;
+ i = (iy + 32) >> 6;
+ j = (h * rx) / ry;
+ k = (i * rx) / ry;
+
+ if ((i!=oi) && (i!=oh)) {
+ if (i){
+ _HLineAlpha(Surface,x-j,x+j,y-i,color,alpha);
+ _HLineAlpha(Surface,x-j,x+j,y+i,color,alpha);
+ }else
+ _HLineAlpha(Surface,x-j,x+j,y,color,alpha);
+ oi=i;
+ }
+
+ if ((h!=oh) && (h!=oi) && (i!=h)) {
+ if (h){
+ _HLineAlpha(Surface,x-k,x+k,y-h,color,alpha);
+ _HLineAlpha(Surface,x-k,x+k,y+h,color,alpha);
+ }else
+ _HLineAlpha(Surface,x-k,x+k,y,color,alpha);
+ oh=h;
+ }
+
+ ix = ix + iy / ry;
+ iy = iy - ix / ry;
+
+ } while(i > h);
+ }
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, x-rx, y-ry, 2*rx+1, 2*ry+1);
+}
+
+
+//==================================================================================
+// Draws a filled ellipse (alpha - RGB)
+//==================================================================================
+void sge_FilledEllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_FilledEllipseAlpha(Surface,x,y,rx,ry,SDL_MapRGB(Surface->format, R, G, B),alpha);
+}
+
+
+//==================================================================================
+// Performs Callback at each circle point.
+//==================================================================================
+void sge_DoCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color))
+{
+ Sint16 cx = 0;
+ Sint16 cy = r;
+ Sint16 df = 1 - r;
+ Sint16 d_e = 3;
+ Sint16 d_se = -2 * r + 5;
+
+ do {
+ Callback(Surface, x+cx, y+cy, color);
+ Callback(Surface, x-cx, y+cy, color);
+ Callback(Surface, x+cx, y-cy, color);
+ Callback(Surface, x-cx, y-cy, color);
+ Callback(Surface, x+cy, y+cx, color);
+ Callback(Surface, x+cy, y-cx, color);
+ Callback(Surface, x-cy, y+cx, color);
+ Callback(Surface, x-cy, y-cx, color);
+
+ if (df < 0) {
+ df += d_e;
+ d_e += 2;
+ d_se += 2;
+ }
+ else {
+ df += d_se;
+ d_e += 2;
+ d_se += 4;
+ cy--;
+ }
+
+ cx++;
+
+ }while(cx <= cy);
+
+}
+
+
+//==================================================================================
+// Performs Callback at each circle point. (RGB)
+//==================================================================================
+void sge_DoCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color))
+{
+ sge_DoCircle(Surface,x,y,r,SDL_MapRGB(Surface->format, R, G, B),Callback);
+}
+
+
+//==================================================================================
+// Draws a circle
+//==================================================================================
+void sge_Circle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color)
+{
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+ }
+
+ sge_DoCircle(Surface, x, y, r, color, _PutPixel);
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, x-r, y-r, 2*r+1, 2*r+1);
+}
+
+//==================================================================================
+// Draws a circle (RGB)
+//==================================================================================
+void sge_Circle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_Circle(Surface,x,y,r,SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Draws a circle (alpha)
+//==================================================================================
+void sge_CircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color, Uint8 alpha)
+{
+ if (SDL_MUSTLOCK(Surface) && _sge_lock)
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+
+ _sge_alpha_hack = alpha;
+ sge_DoCircle(Surface, x, y, r, color, callback_alpha_hack);
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, x-r, y-r, 2*r+1, 2*r+1);
+}
+
+//==================================================================================
+// Draws a circle (alpha - RGB)
+//==================================================================================
+void sge_CircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_CircleAlpha(Surface,x,y,r,SDL_MapRGB(Surface->format, R, G, B),alpha);
+}
+
+
+//==================================================================================
+// Draws a filled circle
+//==================================================================================
+void sge_FilledCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color)
+{
+ Sint16 cx = 0;
+ Sint16 cy = r;
+ bool draw=true;
+ Sint16 df = 1 - r;
+ Sint16 d_e = 3;
+ Sint16 d_se = -2 * r + 5;
+
+ do {
+ if(draw){
+ _HLine(Surface,x-cx,x+cx,y+cy,color);
+ _HLine(Surface,x-cx,x+cx,y-cy,color);
+ draw=false;
+ }
+ if(cx!=cy){
+ if(cx){
+ _HLine(Surface,x-cy,x+cy,y-cx,color);
+ _HLine(Surface,x-cy,x+cy,y+cx,color);
+ }else
+ _HLine(Surface,x-cy,x+cy,y,color);
+ }
+
+ if (df < 0) {
+ df += d_e;
+ d_e += 2;
+ d_se += 2;
+ }
+ else {
+ df += d_se;
+ d_e += 2;
+ d_se += 4;
+ cy--;
+ draw=true;
+ }
+ cx++;
+ }while(cx <= cy);
+
+ sge_UpdateRect(Surface, x-r, y-r, 2*r+1, 2*r+1);
+}
+
+//==================================================================================
+// Draws a filled circle (RGB)
+//==================================================================================
+void sge_FilledCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_FilledCircle(Surface,x,y,r,SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Draws a filled circle (alpha)
+//==================================================================================
+void sge_FilledCircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color, Uint8 alpha)
+{
+ Sint16 cx = 0;
+ Sint16 cy = r;
+ bool draw=true;
+ Sint16 df = 1 - r;
+ Sint16 d_e = 3;
+ Sint16 d_se = -2 * r + 5;
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock)
+ if (SDL_LockSurface(Surface) < 0)
+ return;
+
+ do {
+ if(draw){
+ _HLineAlpha(Surface,x-cx,x+cx,y+cy,color,alpha);
+ _HLineAlpha(Surface,x-cx,x+cx,y-cy,color,alpha);
+ draw=false;
+ }
+ if(cx!=cy){
+ if(cx){
+ _HLineAlpha(Surface,x-cy,x+cy,y-cx,color,alpha);
+ _HLineAlpha(Surface,x-cy,x+cy,y+cx,color,alpha);
+ }else
+ _HLineAlpha(Surface,x-cy,x+cy,y,color,alpha);
+ }
+
+ if (df < 0) {
+ df += d_e;
+ d_e += 2;
+ d_se += 2;
+ }
+ else {
+ df += d_se;
+ d_e += 2;
+ d_se += 4;
+ cy--;
+ draw=true;
+ }
+ cx++;
+ }while(cx <= cy);
+
+ if (SDL_MUSTLOCK(Surface) && _sge_lock) {
+ SDL_UnlockSurface(Surface);
+ }
+
+ sge_UpdateRect(Surface, x-r, y-r, 2*r+1, 2*r+1);
+}
+
+//==================================================================================
+// Draws a filled circle (alpha - RGB)
+//==================================================================================
+void sge_FilledCircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_FilledCircleAlpha(Surface,x,y,r,SDL_MapRGB(Surface->format, R, G, B),alpha);
+}
+
+
+
+//==================================================================================
+// Draws a bezier line
+//==================================================================================
+/* Macro to do the line... 'function' is the line drawing routine */
+#define DO_BEZIER(function)\
+ /*
+ * Note: I don't think there is any great performance win in translating this to fixed-point integer math,
+ * most of the time is spent in the line drawing routine.
+ */\
+ float x = float(x1), y = float(y1);\
+ float xp = x, yp = y;\
+ float delta;\
+ float dx, d2x, d3x;\
+ float dy, d2y, d3y;\
+ float a, b, c;\
+ int i;\
+ int n = 1;\
+ Sint16 xmax=x1, ymax=y1, xmin=x1, ymin=y1;\
+ \
+ /* compute number of iterations */\
+ if(level < 1)\
+ level=1;\
+ if(level >= 15)\
+ level=15; \
+ while (level-- > 0)\
+ n*= 2;\
+ delta = 1.0 / float(n);\
+ \
+ /* compute finite differences */\
+ /* a, b, c are the coefficient of the polynom in t defining the parametric curve */\
+ /* The computation is done independently for x and y */\
+ a = float(-x1 + 3*x2 - 3*x3 + x4);\
+ b = float(3*x1 - 6*x2 + 3*x3);\
+ c = float(-3*x1 + 3*x2);\
+ \
+ d3x = 6 * a * delta*delta*delta;\
+ d2x = d3x + 2 * b * delta*delta;\
+ dx = a * delta*delta*delta + b * delta*delta + c * delta;\
+ \
+ a = float(-y1 + 3*y2 - 3*y3 + y4);\
+ b = float(3*y1 - 6*y2 + 3*y3);\
+ c = float(-3*y1 + 3*y2);\
+ \
+ d3y = 6 * a * delta*delta*delta;\
+ d2y = d3y + 2 * b * delta*delta;\
+ dy = a * delta*delta*delta + b * delta*delta + c * delta;\
+ \
+ if (SDL_MUSTLOCK(surface) && _sge_lock) {\
+ if (SDL_LockSurface(surface) < 0)\
+ return;\
+ }\
+ \
+ /* iterate */\
+ for (i = 0; i < n; i++) {\
+ x += dx; dx += d2x; d2x += d3x;\
+ y += dy; dy += d2y; d2y += d3y;\
+ if(Sint16(xp) != Sint16(x) || Sint16(yp) != Sint16(y)){\
+ function;\
+ if(_sge_update==1){\
+ xmax= (xmax>Sint16(xp))? xmax : Sint16(xp); ymax= (ymax>Sint16(yp))? ymax : Sint16(yp);\
+ xmin= (xmin<Sint16(xp))? xmin : Sint16(xp); ymin= (ymin<Sint16(yp))? ymin : Sint16(yp);\
+ xmax= (xmax>Sint16(x))? xmax : Sint16(x); ymax= (ymax>Sint16(y))? ymax : Sint16(y);\
+ xmin= (xmin<Sint16(x))? xmin : Sint16(x); ymin= (ymin<Sint16(y))? ymin : Sint16(y);\
+ }\
+ }\
+ xp = x; yp = y;\
+ }\
+ \
+ /* unlock the display */\
+ if (SDL_MUSTLOCK(surface) && _sge_lock) {\
+ SDL_UnlockSurface(surface);\
+ }\
+ \
+ /* Update the area */\
+ sge_UpdateRect(surface, xmin, ymin, xmax-xmin+1, ymax-ymin+1);
+
+//==================================================================================
+// Draws a bezier line
+//==================================================================================
+void sge_Bezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color)
+{
+ DO_BEZIER(_Line(surface, Sint16(xp),Sint16(yp), Sint16(x),Sint16(y), color));
+}
+
+//==================================================================================
+// Draws a bezier line (RGB)
+//==================================================================================
+void sge_Bezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_Bezier(surface,x1,y1,x2,y2,x3,y3,x4,y4,level, SDL_MapRGB(surface->format,R,G,B));
+}
+
+
+//==================================================================================
+// Draws a bezier line (alpha)
+//==================================================================================
+void sge_BezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color, Uint8 alpha)
+{
+ _sge_alpha_hack = alpha;
+
+ DO_BEZIER(sge_DoLine(surface, Sint16(xp),Sint16(yp), Sint16(x),Sint16(y), color, callback_alpha_hack));
+}
+
+//==================================================================================
+// Draws a bezier line (alpha - RGB)
+//==================================================================================
+void sge_BezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_BezierAlpha(surface,x1,y1,x2,y2,x3,y3,x4,y4,level, SDL_MapRGB(surface->format,R,G,B),alpha);
+}
+
+
+//==================================================================================
+// Draws an AA bezier line (alpha)
+//==================================================================================
+void sge_AABezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color, Uint8 alpha)
+{
+ Uint8 update = _sge_update;
+ Uint8 lock = _sge_lock;
+ _sge_update = 0;
+ _sge_lock = 0;
+
+ if (SDL_MUSTLOCK(surface) && lock)
+ if (SDL_LockSurface(surface) < 0)
+ return;
+
+ DO_BEZIER(sge_AALineAlpha(surface, Sint16(xp),Sint16(yp), Sint16(x),Sint16(y), color, alpha));
+
+ if (SDL_MUSTLOCK(surface) && lock) {
+ SDL_UnlockSurface(surface);
+ }
+
+ _sge_update = update;
+ _sge_lock = lock;
+
+ sge_UpdateRect(surface, xmin, ymin, xmax-xmin+1, ymax-ymin+1);
+}
+
+//==================================================================================
+// Draws an AA bezier line (alpha - RGB)
+//==================================================================================
+void sge_AABezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_AABezierAlpha(surface,x1,y1,x2,y2,x3,y3,x4,y4,level, SDL_MapRGB(surface->format,R,G,B),alpha);
+}
+
+
+//==================================================================================
+// Draws an AA bezier line
+//==================================================================================
+void sge_AABezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color)
+{
+ sge_AABezierAlpha(surface, x1,y1, x2,y2, x3,y3, x4,y4, level, color, 255);
+}
+
+//==================================================================================
+// Draws an AA bezier line (RGB)
+//==================================================================================
+void sge_AABezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_AABezierAlpha(surface,x1,y1,x2,y2,x3,y3,x4,y4,level, SDL_MapRGB(surface->format,R,G,B),255);
+}
+
diff --git a/src/sge_primitives.h b/src/sge_primitives.h
new file mode 100644
index 0000000..d81aa64
--- /dev/null
+++ b/src/sge_primitives.h
@@ -0,0 +1,92 @@
+/*
+* SDL Graphics Extension
+* Drawing primitives (header)
+*
+* Started 990815 (split from sge_draw 010611)
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+#ifndef sge_primitives_H
+#define sge_primitives_H
+
+#include <SDL/SDL.h>
+#include "sge_internal.h"
+
+
+#ifdef _SGE_C
+extern "C" {
+#endif
+DECLSPEC void sge_HLine(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint32 Color);
+DECLSPEC void sge_HLineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint32 Color, Uint8 alpha);
+DECLSPEC void sge_VLine(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint32 Color);
+DECLSPEC void sge_VLineAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint32 Color, Uint8 alpha);
+DECLSPEC void sge_DoLine(SDL_Surface *Surface, Sint16 X1, Sint16 Y1, Sint16 X2, Sint16 Y2, Uint32 Color, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color));
+DECLSPEC void sge_Line(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 Color);
+DECLSPEC void sge_LineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 Color, Uint8 alpha);
+DECLSPEC void sge_AALine(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color);
+DECLSPEC void sge_AALineAlpha(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color, Uint8 alpha);
+
+DECLSPEC void sge_Rect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color);
+DECLSPEC void sge_RectAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color, Uint8 alpha);
+DECLSPEC void sge_FilledRect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color);
+DECLSPEC void sge_FilledRectAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color, Uint8 alpha);
+
+DECLSPEC void sge_DoEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color));
+DECLSPEC void sge_Ellipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color);
+DECLSPEC void sge_EllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color, Uint8 Alpha);
+DECLSPEC void sge_FilledEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color);
+DECLSPEC void sge_FilledEllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint32 color, Uint8 alpha);
+DECLSPEC void sge_DoCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color));
+DECLSPEC void sge_Circle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color);
+DECLSPEC void sge_CircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color, Uint8 alpha);
+DECLSPEC void sge_FilledCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color);
+DECLSPEC void sge_FilledCircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint32 color, Uint8 alpha);
+DECLSPEC void sge_Bezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color);
+DECLSPEC void sge_BezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color, Uint8 alpha);
+DECLSPEC void sge_AABezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color);
+DECLSPEC void sge_AABezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint32 color, Uint8 alpha);
+#ifdef _SGE_C
+}
+#endif
+
+#ifndef sge_C_ONLY
+DECLSPEC void sge_HLine(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_HLineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 x2, Sint16 y, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_VLine(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_VLineAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y1, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_DoLine(SDL_Surface *Surface, Sint16 X1, Sint16 Y1, Sint16 X2, Sint16 Y2, Uint8 R, Uint8 G, Uint8 B, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color));
+DECLSPEC void sge_Line(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_LineAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_AALine(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b);
+DECLSPEC void sge_AALineAlpha(SDL_Surface *dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 alpha);
+DECLSPEC void sge_Rect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_RectAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_FilledRect(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_FilledRectAlpha(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_DoEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color));
+DECLSPEC void sge_Ellipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_EllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_FilledEllipse(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_FilledEllipseAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 rx, Sint16 ry, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_DoCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B, void Callback(SDL_Surface *Surf, Sint16 X, Sint16 Y, Uint32 Color));
+DECLSPEC void sge_Circle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_CircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_FilledCircle(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_FilledCircleAlpha(SDL_Surface *Surface, Sint16 x, Sint16 y, Sint16 r, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_Bezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_BezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_AABezier(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_AABezierAlpha(SDL_Surface *surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,Sint16 x3, Sint16 y3, Sint16 x4, Sint16 y4, int level, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+#endif /* sge_C_ONLY */
+
+
+#endif /* sge_primitives_H */
diff --git a/src/sge_surface.cpp b/src/sge_surface.cpp
new file mode 100644
index 0000000..5c77090
--- /dev/null
+++ b/src/sge_surface.cpp
@@ -0,0 +1,883 @@
+/*
+* SDL Graphics Extension
+* Pixel, surface and color functions
+*
+* Started 990815 (split from sge_draw 010611)
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+/*
+* Some of this code is taken from the "Introduction to SDL" and
+* John Garrison's PowerPak
+*/
+
+#include <SDL/SDL.h>
+#include <math.h>
+#include <string.h>
+#include <stdarg.h>
+#include "sge_surface.h"
+
+
+/* Globals used for sge_Update/sge_Lock */
+Uint8 _sge_update=1;
+Uint8 _sge_lock=1;
+
+
+/**********************************************************************************/
+/** Misc. functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// Turns off automatic update (to avoid tearing).
+//==================================================================================
+void sge_Update_OFF(void)
+{
+ _sge_update=0;
+}
+
+//==================================================================================
+// Turns on automatic update (default)
+//==================================================================================
+void sge_Update_ON(void)
+{
+ _sge_update=1;
+}
+
+//==================================================================================
+// Turns off automatic locking of surfaces
+//==================================================================================
+void sge_Lock_OFF(void)
+{
+ _sge_lock=0;
+}
+
+//==================================================================================
+// Turns on automatic locking (default)
+//==================================================================================
+void sge_Lock_ON(void)
+{
+ _sge_lock=1;
+}
+
+//==================================================================================
+// Returns update&locking mode (1-on and 0-off)
+//==================================================================================
+Uint8 sge_getUpdate(void)
+{
+ return _sge_update;
+}
+Uint8 sge_getLock(void)
+{
+ return _sge_lock;
+}
+
+
+//==================================================================================
+// SDL_UpdateRect does nothing if any part of the rectangle is outside the surface
+// --- This version always work
+//==================================================================================
+void sge_UpdateRect(SDL_Surface *screen, Sint16 x, Sint16 y, Uint16 w, Uint16 h)
+{
+ if(_sge_update!=1 || screen != SDL_GetVideoSurface()){return;}
+
+ if(x>=screen->w || y>=screen->h){return;}
+
+ Sint16 a,b;
+
+ a=w; b=h;
+
+
+ if(x < 0){x=0;}
+ if(y < 0){y=0;}
+
+ if(a+x > screen->w){a=screen->w-x;}
+ if(b+y > screen->h){b=screen->h-y;}
+
+ SDL_UpdateRect(screen,x,y,a,b);
+}
+
+
+//==================================================================================
+// Creates a 32bit (8/8/8/8) alpha surface
+// Map colors with sge_MapAlpha() and then use the Uint32 color versions of
+// SGEs routines
+//==================================================================================
+SDL_Surface *sge_CreateAlphaSurface(Uint32 flags, int width, int height)
+{
+ return SDL_CreateRGBSurface(flags,width,height,32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF);
+}
+
+
+//==================================================================================
+// Returns the Uint32 color value for a 32bit (8/8/8/8) alpha surface
+//==================================================================================
+Uint32 sge_MapAlpha(Uint8 R, Uint8 G, Uint8 B, Uint8 A)
+{
+ Uint32 color=0;
+
+ color|=R<<24;
+ color|=G<<16;
+ color|=B<<8;
+ color|=A;
+
+ return color;
+}
+
+
+//==================================================================================
+// Sets an SDL error string
+// Accepts formated argument - like printf()
+// SDL_SetError() also does this, but it does not use standard syntax (why?)
+//==================================================================================
+void sge_SetError(const char *format, ...)
+{
+ char buf[256];
+
+ va_list ap;
+
+ #ifdef __WIN32__
+ va_start((va_list*)ap, format); //Stupid w32 crosscompiler
+ #else
+ va_start(ap, format);
+ #endif
+
+ vsprintf(buf, format, ap);
+ va_end(ap);
+
+ SDL_SetError(buf);
+}
+
+
+
+/**********************************************************************************/
+/** Pixel functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// Fast put pixel
+//==================================================================================
+void _PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color)
+{
+ if(x>=sge_clip_xmin(surface) && x<=sge_clip_xmax(surface) && y>=sge_clip_ymin(surface) && y<=sge_clip_ymax(surface)){
+ switch (surface->format->BytesPerPixel) {
+ case 1: { /* Assuming 8-bpp */
+ *((Uint8 *)surface->pixels + y*surface->pitch + x) = color;
+ }
+ break;
+
+ case 2: { /* Probably 15-bpp or 16-bpp */
+ *((Uint16 *)surface->pixels + y*surface->pitch/2 + x) = color;
+ }
+ break;
+
+ case 3: { /* Slow 24-bpp mode, usually not used */
+ Uint8 *pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3;
+
+ /* Gack - slow, but endian correct */
+ *(pix+surface->format->Rshift/8) = color>>surface->format->Rshift;
+ *(pix+surface->format->Gshift/8) = color>>surface->format->Gshift;
+ *(pix+surface->format->Bshift/8) = color>>surface->format->Bshift;
+ *(pix+surface->format->Ashift/8) = color>>surface->format->Ashift;
+ }
+ break;
+
+ case 4: { /* Probably 32-bpp */
+ *((Uint32 *)surface->pixels + y*surface->pitch/4 + x) = color;
+ }
+ break;
+ }
+ }
+
+}
+
+
+//==================================================================================
+// Fast put pixel (RGB)
+//==================================================================================
+void _PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B)
+{
+ _PutPixel(surface,x,y, SDL_MapRGB(surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Fastest put pixel functions (don't mess up indata, thank you)
+//==================================================================================
+void _PutPixel8(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color)
+{
+ *((Uint8 *)surface->pixels + y*surface->pitch + x) = color;
+}
+void _PutPixel16(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color)
+{
+ *((Uint16 *)surface->pixels + y*surface->pitch/2 + x) = color;
+}
+void _PutPixel24(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color)
+{
+ Uint8 *pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3;
+
+ /* Gack - slow, but endian correct */
+ *(pix+surface->format->Rshift/8) = color>>surface->format->Rshift;
+ *(pix+surface->format->Gshift/8) = color>>surface->format->Gshift;
+ *(pix+surface->format->Bshift/8) = color>>surface->format->Bshift;
+ *(pix+surface->format->Ashift/8) = color>>surface->format->Ashift;
+}
+void _PutPixel32(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color)
+{
+ *((Uint32 *)surface->pixels + y*surface->pitch/4 + x) = color;
+}
+void _PutPixelX(SDL_Surface *dest,Sint16 x,Sint16 y,Uint32 color)
+{
+ switch ( dest->format->BytesPerPixel ) {
+ case 1:
+ *((Uint8 *)dest->pixels + y*dest->pitch + x) = color;
+ break;
+ case 2:
+ *((Uint16 *)dest->pixels + y*dest->pitch/2 + x) = color;
+ break;
+ case 3:
+ _PutPixel24(dest,x,y,color);
+ break;
+ case 4:
+ *((Uint32 *)dest->pixels + y*dest->pitch/4 + x) = color;
+ break;
+ }
+}
+
+
+//==================================================================================
+// Safe put pixel
+//==================================================================================
+void sge_PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color)
+{
+
+ if ( SDL_MUSTLOCK(surface) && _sge_lock ) {
+ if ( SDL_LockSurface(surface) < 0 ) {
+ return;
+ }
+ }
+
+ _PutPixel(surface, x, y, color);
+
+ if ( SDL_MUSTLOCK(surface) && _sge_lock ) {
+ SDL_UnlockSurface(surface);
+ }
+
+ if(_sge_update!=1){return;}
+ sge_UpdateRect(surface, x, y, 1, 1);
+}
+
+
+//==================================================================================
+// Safe put pixel (RGB)
+//==================================================================================
+void sge_PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_PutPixel(surface,x,y, SDL_MapRGB(surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Calculate y pitch offset
+// (the y pitch offset is constant for the same y coord and surface)
+//==================================================================================
+Sint32 sge_CalcYPitch(SDL_Surface *dest,Sint16 y)
+{
+ if(y>=sge_clip_ymin(dest) && y<=sge_clip_ymax(dest)){
+ switch ( dest->format->BytesPerPixel ) {
+ case 1:
+ return y*dest->pitch;
+ break;
+ case 2:
+ return y*dest->pitch/2;
+ break;
+ case 3:
+ return y*dest->pitch;
+ break;
+ case 4:
+ return y*dest->pitch/4;
+ break;
+ }
+ }
+
+ return -1;
+}
+
+
+//==================================================================================
+// Put pixel with precalculated y pitch offset
+//==================================================================================
+void sge_pPutPixel(SDL_Surface *surface, Sint16 x, Sint32 ypitch, Uint32 color)
+{
+ if(x>=sge_clip_xmin(surface) && x<=sge_clip_xmax(surface) && ypitch>=0){
+ switch (surface->format->BytesPerPixel) {
+ case 1: { /* Assuming 8-bpp */
+ *((Uint8 *)surface->pixels + ypitch + x) = color;
+ }
+ break;
+
+ case 2: { /* Probably 15-bpp or 16-bpp */
+ *((Uint16 *)surface->pixels + ypitch + x) = color;
+ }
+ break;
+
+ case 3: { /* Slow 24-bpp mode, usually not used */
+ /* Gack - slow, but endian correct */
+ Uint8 *pix = (Uint8 *)surface->pixels + ypitch + x*3;
+
+ *(pix+surface->format->Rshift/8) = color>>surface->format->Rshift;
+ *(pix+surface->format->Gshift/8) = color>>surface->format->Gshift;
+ *(pix+surface->format->Bshift/8) = color>>surface->format->Bshift;
+ *(pix+surface->format->Ashift/8) = color>>surface->format->Ashift;
+ }
+ break;
+
+ case 4: { /* Probably 32-bpp */
+ *((Uint32 *)surface->pixels + ypitch + x) = color;
+ }
+ break;
+ }
+ }
+}
+
+
+//==================================================================================
+// Get pixel
+//==================================================================================
+Uint32 sge_GetPixel(SDL_Surface *surface, Sint16 x, Sint16 y)
+{
+ switch (surface->format->BytesPerPixel) {
+ case 1: { /* Assuming 8-bpp */
+ return *((Uint8 *)surface->pixels + y*surface->pitch + x);
+ }
+ break;
+
+ case 2: { /* Probably 15-bpp or 16-bpp */
+ return *((Uint16 *)surface->pixels + y*surface->pitch/2 + x);
+ }
+ break;
+
+ case 3: { /* Slow 24-bpp mode, usually not used */
+ Uint8 *pix;
+ int shift;
+ Uint32 color=0;
+
+ pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3;
+ shift = surface->format->Rshift;
+ color = *(pix+shift/8)<<shift;
+ shift = surface->format->Gshift;
+ color|= *(pix+shift/8)<<shift;
+ shift = surface->format->Bshift;
+ color|= *(pix+shift/8)<<shift;
+ shift = surface->format->Ashift;
+ color|= *(pix+shift/8)<<shift;
+ return color;
+ }
+ break;
+
+ case 4: { /* Probably 32-bpp */
+ return *((Uint32 *)surface->pixels + y*surface->pitch/4 + x);
+ }
+ break;
+ }
+ return 0;
+}
+
+
+//==================================================================================
+// Put pixel with alpha blending
+//==================================================================================
+void _PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color, Uint8 alpha)
+{
+ if(x>=sge_clip_xmin(surface) && x<=sge_clip_xmax(surface) && y>=sge_clip_ymin(surface) && y<=sge_clip_ymax(surface)){
+ Uint32 Rmask = surface->format->Rmask, Gmask = surface->format->Gmask, Bmask = surface->format->Bmask, Amask = surface->format->Amask;
+ Uint32 R,G,B,A=0;
+
+ switch (surface->format->BytesPerPixel) {
+ case 1: { /* Assuming 8-bpp */
+ if( alpha == 255 ){
+ *((Uint8 *)surface->pixels + y*surface->pitch + x) = color;
+ }else{
+ Uint8 *pixel = (Uint8 *)surface->pixels + y*surface->pitch + x;
+
+ Uint8 dR = surface->format->palette->colors[*pixel].r;
+ Uint8 dG = surface->format->palette->colors[*pixel].g;
+ Uint8 dB = surface->format->palette->colors[*pixel].b;
+ Uint8 sR = surface->format->palette->colors[color].r;
+ Uint8 sG = surface->format->palette->colors[color].g;
+ Uint8 sB = surface->format->palette->colors[color].b;
+
+ dR = dR + ((sR-dR)*alpha >> 8);
+ dG = dG + ((sG-dG)*alpha >> 8);
+ dB = dB + ((sB-dB)*alpha >> 8);
+
+ *pixel = SDL_MapRGB(surface->format, dR, dG, dB);
+ }
+ }
+ break;
+
+ case 2: { /* Probably 15-bpp or 16-bpp */
+ if( alpha == 255 ){
+ *((Uint16 *)surface->pixels + y*surface->pitch/2 + x) = color;
+ }else{
+ Uint16 *pixel = (Uint16 *)surface->pixels + y*surface->pitch/2 + x;
+ Uint32 dc = *pixel;
+
+ R = ((dc & Rmask) + (( (color & Rmask) - (dc & Rmask) ) * alpha >> 8)) & Rmask;
+ G = ((dc & Gmask) + (( (color & Gmask) - (dc & Gmask) ) * alpha >> 8)) & Gmask;
+ B = ((dc & Bmask) + (( (color & Bmask) - (dc & Bmask) ) * alpha >> 8)) & Bmask;
+ if( Amask )
+ A = ((dc & Amask) + (( (color & Amask) - (dc & Amask) ) * alpha >> 8)) & Amask;
+
+ *pixel= R | G | B | A;
+ }
+ }
+ break;
+
+ case 3: { /* Slow 24-bpp mode, usually not used */
+ Uint8 *pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3;
+ Uint8 rshift8=surface->format->Rshift/8;
+ Uint8 gshift8=surface->format->Gshift/8;
+ Uint8 bshift8=surface->format->Bshift/8;
+ Uint8 ashift8=surface->format->Ashift/8;
+
+
+ if( alpha == 255 ){
+ *(pix+rshift8) = color>>surface->format->Rshift;
+ *(pix+gshift8) = color>>surface->format->Gshift;
+ *(pix+bshift8) = color>>surface->format->Bshift;
+ *(pix+ashift8) = color>>surface->format->Ashift;
+ }else{
+ Uint8 dR, dG, dB, dA=0;
+ Uint8 sR, sG, sB, sA=0;
+
+ pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3;
+
+ dR = *((pix)+rshift8);
+ dG = *((pix)+gshift8);
+ dB = *((pix)+bshift8);
+ dA = *((pix)+ashift8);
+
+ sR = (color>>surface->format->Rshift)&0xff;
+ sG = (color>>surface->format->Gshift)&0xff;
+ sB = (color>>surface->format->Bshift)&0xff;
+ sA = (color>>surface->format->Ashift)&0xff;
+
+ dR = dR + ((sR-dR)*alpha >> 8);
+ dG = dG + ((sG-dG)*alpha >> 8);
+ dB = dB + ((sB-dB)*alpha >> 8);
+ dA = dA + ((sA-dA)*alpha >> 8);
+
+ *((pix)+rshift8) = dR;
+ *((pix)+gshift8) = dG;
+ *((pix)+bshift8) = dB;
+ *((pix)+ashift8) = dA;
+ }
+ }
+ break;
+
+ case 4: { /* Probably 32-bpp */
+ if( alpha == 255 ){
+ *((Uint32 *)surface->pixels + y*surface->pitch/4 + x) = color;
+ }else{
+ Uint32 *pixel = (Uint32 *)surface->pixels + y*surface->pitch/4 + x;
+ Uint32 dc = *pixel;
+
+ R = ((dc & Rmask) + (( (color & Rmask) - (dc & Rmask) ) * alpha >> 8)) & Rmask;
+ G = ((dc & Gmask) + (( (color & Gmask) - (dc & Gmask) ) * alpha >> 8)) & Gmask;
+ B = ((dc & Bmask) + (( (color & Bmask) - (dc & Bmask) ) * alpha >> 8)) & Bmask;
+ if( Amask )
+ A = ((dc & Amask) + (( (color & Amask) - (dc & Amask) ) * alpha >> 8)) & Amask;
+
+ *pixel = R | G | B | A;
+ }
+ }
+ break;
+ }
+ }
+}
+
+void sge_PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color, Uint8 alpha)
+{
+ if ( SDL_MUSTLOCK(surface) && _sge_lock )
+ if ( SDL_LockSurface(surface) < 0 )
+ return;
+
+ _PutPixelAlpha(surface,x,y,color,alpha);
+
+ /* unlock the display */
+ if (SDL_MUSTLOCK(surface) && _sge_lock) {
+ SDL_UnlockSurface(surface);
+ }
+
+ if(_sge_update!=1){return;}
+ sge_UpdateRect(surface, x, y, 1, 1);
+}
+
+
+void _PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ _PutPixelAlpha(surface,x,y, SDL_MapRGB(surface->format, R, G, B),alpha);
+}
+void sge_PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha)
+{
+ sge_PutPixelAlpha(surface,x,y, SDL_MapRGB(surface->format, R, G, B), alpha);
+}
+
+
+
+/**********************************************************************************/
+/** Block functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// The sge_write_block* functions copies the given block (a surface line) directly
+// to the surface. This is *much* faster then using the put pixel functions to
+// update a line. The block consist of Surface->w (the width of the surface) numbers
+// of color values. Note the difference in byte size for the block elements for
+// different color dephts. 24 bpp is slow and not included!
+//==================================================================================
+void sge_write_block8(SDL_Surface *Surface, Uint8 *block, Sint16 y)
+{
+ memcpy( (Uint8 *)Surface->pixels + y*Surface->pitch, block, sizeof(Uint8)*Surface->w );
+}
+void sge_write_block16(SDL_Surface *Surface, Uint16 *block, Sint16 y)
+{
+ memcpy( (Uint16 *)Surface->pixels + y*Surface->pitch/2, block, sizeof(Uint16)*Surface->w );
+}
+void sge_write_block32(SDL_Surface *Surface, Uint32 *block, Sint16 y)
+{
+ memcpy( (Uint32 *)Surface->pixels + y*Surface->pitch/4, block, sizeof(Uint32)*Surface->w );
+}
+
+
+//==================================================================================
+// ...and get
+//==================================================================================
+void sge_read_block8(SDL_Surface *Surface, Uint8 *block, Sint16 y)
+{
+ memcpy( block,(Uint8 *)Surface->pixels + y*Surface->pitch, sizeof(Uint8)*Surface->w );
+}
+void sge_read_block16(SDL_Surface *Surface, Uint16 *block, Sint16 y)
+{
+ memcpy( block,(Uint16 *)Surface->pixels + y*Surface->pitch/2, sizeof(Uint16)*Surface->w );
+}
+void sge_read_block32(SDL_Surface *Surface, Uint32 *block, Sint16 y)
+{
+ memcpy( block,(Uint32 *)Surface->pixels + y*Surface->pitch/4, sizeof(Uint32)*Surface->w );
+}
+
+
+
+/**********************************************************************************/
+/** Blitting/surface functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// Clear surface to color
+//==================================================================================
+void sge_ClearSurface(SDL_Surface *Surface, Uint32 color)
+{
+
+ SDL_FillRect(Surface,NULL, color);
+
+ if(_sge_update!=1){return;}
+ SDL_UpdateRect(Surface, 0,0,0,0);
+}
+
+
+//==================================================================================
+// Clear surface to color (RGB)
+//==================================================================================
+void sge_ClearSurface(SDL_Surface *Surface, Uint8 R, Uint8 G, Uint8 B)
+{
+ sge_ClearSurface(Surface,SDL_MapRGB(Surface->format, R, G, B));
+}
+
+
+//==================================================================================
+// Blit from one surface to another
+// Warning! Alpha and color key is lost (=0) on Src surface
+//==================================================================================
+int sge_BlitTransparent(SDL_Surface *Src, SDL_Surface *Dest, Sint16 SrcX, Sint16 SrcY, Sint16 DestX, Sint16 DestY, Sint16 W, Sint16 H, Uint32 Clear, Uint8 Alpha)
+{
+ SDL_Rect src, dest;
+ int ret;
+
+ /* Dest clipping */
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ int flag=0;
+ if (DestX < Dest->clip_minx){
+ SrcX += Dest->clip_minx-DestX;
+ W -= Dest->clip_minx-DestX-1;
+ DestX=Dest->clip_minx;
+ }
+ if (DestY < Dest->clip_miny){
+ SrcY +=Dest->clip_miny-DestY;
+ H -= Dest->clip_miny-DestY-1;
+ DestY=Dest->clip_miny;
+ }
+ if ((DestX + W) > Dest->clip_maxx){
+ W = W - ((DestX + W) - Dest->clip_maxx)+1;
+ if(W<=0){SDL_SetError("SGE - Blit error");return -1;}
+ }
+ if ((DestY + H) > Dest->clip_maxy){
+ H = H - ((DestY + H) - Dest->clip_maxy)+1;
+ if(H<=0){SDL_SetError("SGE - Blit error");return -1;}
+ }
+ #endif
+
+ /* Initialize our rectangles */
+ src.x = SrcX;
+ src.y = SrcY;
+ src.w = W;
+ src.h = H;
+
+ dest.x = DestX;
+ dest.y = DestY;
+ dest.w = W;
+ dest.h = H;
+
+ /* We don't care about src clipping, only dest! */
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if ( (Src->flags & SDL_SRCCLIPPING) == SDL_SRCCLIPPING){
+ Src->flags &= ~SDL_SRCCLIPPING; flag=1;
+ }
+ #endif
+
+ /* Set the color to be transparent */
+ SDL_SetColorKey(Src, SDL_SRCCOLORKEY, Clear);
+
+ /* Set the alpha value */
+ SDL_SetAlpha(Src, SDL_SRCALPHA, Alpha);
+
+ /* Blit */
+ ret=SDL_BlitSurface(Src, &src, Dest, &dest);
+
+ /* Set the correct flag */
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if (flag==1){
+ Src->flags |= SDL_SRCCLIPPING;
+ }
+ #endif
+
+ /* Set normal levels */
+ SDL_SetAlpha(Src,0,0);
+ SDL_SetColorKey(Src,0,0);
+
+ return ret;
+}
+
+
+//==================================================================================
+// Blit from one surface to another (not touching alpha or color key -
+// use SDL_SetColorKey and SDL_SetAlpha)
+//==================================================================================
+int sge_Blit(SDL_Surface *Src, SDL_Surface *Dest, Sint16 SrcX, Sint16 SrcY, Sint16 DestX, Sint16 DestY, Sint16 W, Sint16 H)
+{
+ SDL_Rect src, dest;
+ int ret;
+
+ /* Dest clipping */
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ int flag=0;
+ if (DestX < Dest->clip_minx){
+ SrcX += Dest->clip_minx-DestX;
+ W -= Dest->clip_minx-DestX -1;
+ DestX=Dest->clip_minx;
+ }
+ if (DestY < Dest->clip_miny){
+ SrcY +=Dest->clip_miny-DestY;
+ H -= Dest->clip_miny-DestY -1;
+ DestY=Dest->clip_miny;
+ }
+ if ((DestX + W) > Dest->clip_maxx){
+ W = W - ((DestX + W) - Dest->clip_maxx)+1;
+ if(W<=0){SDL_SetError("SGE - Blit error");return -1;}
+ }
+ if ((DestY + H) > Dest->clip_maxy){
+ H = H - ((DestY + H) - Dest->clip_maxy)+1;
+ if(H<=0){SDL_SetError("SGE - Blit error");return -1;}
+ }
+ #endif
+
+ /* Initialize our rectangles */
+ src.x = SrcX;
+ src.y = SrcY;
+ src.w = W;
+ src.h = H;
+
+ dest.x = DestX;
+ dest.y = DestY;
+ dest.w = W;
+ dest.h = H;
+
+ /* We don't care about src clipping, only dest! */
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if ( (Src->flags & SDL_SRCCLIPPING) == SDL_SRCCLIPPING){
+ Src->flags &= ~SDL_SRCCLIPPING; flag=1;
+ }
+ #endif
+
+ /* Blit */
+ ret=SDL_BlitSurface(Src, &src, Dest, &dest);
+
+ /* Set the correct flag */
+ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) < \
+ SDL_VERSIONNUM(1, 1, 5)
+ if (flag==1){
+ Src->flags |= SDL_SRCCLIPPING;
+ }
+ #endif
+
+ return ret;
+}
+
+
+//==================================================================================
+// Copies a surface to a new...
+//==================================================================================
+SDL_Surface *sge_copy_surface(SDL_Surface *src)
+{
+ return SDL_ConvertSurface(src, src->format,SDL_SWSURFACE);
+}
+
+
+
+
+/**********************************************************************************/
+/** Palette functions **/
+/**********************************************************************************/
+//==================================================================================
+// Fill in a palette entry with R, G, B componenets
+//==================================================================================
+SDL_Color sge_FillPaletteEntry(Uint8 R, Uint8 G, Uint8 B)
+{
+ SDL_Color color;
+
+ color.r = R;
+ color.g = G;
+ color.b = B;
+
+ return color;
+}
+
+
+//==================================================================================
+// Get the RGB of a color value
+// Needed in those dark days before SDL 1.0
+//==================================================================================
+SDL_Color sge_GetRGB(SDL_Surface *Surface, Uint32 Color)
+{
+ SDL_Color rgb;
+ SDL_GetRGB(Color, Surface->format, &(rgb.r), &(rgb.g), &(rgb.b));
+
+ return(rgb);
+}
+
+
+//==================================================================================
+// Fades from (sR,sG,sB) to (dR,dG,dB), puts result in ctab[start] to ctab[stop]
+//==================================================================================
+void sge_Fader(SDL_Surface *Surface, Uint8 sR,Uint8 sG,Uint8 sB, Uint8 dR,Uint8 dG,Uint8 dB,Uint32 *ctab,int start, int stop)
+{
+ // (sR,sG,sB) and (dR,dG,dB) are two points in space (the RGB cube).
+
+ /* The vector for the straight line */
+ int v[3];
+ v[0]=dR-sR; v[1]=dG-sG; v[2]=dB-sB;
+
+ /* Ref. point */
+ int x0=sR, y0=sG, z0=sB;
+
+ // The line's equation is:
+ // x= x0 + v[0] * t
+ // y= y0 + v[1] * t
+ // z= z0 + v[2] * t
+ //
+ // (x,y,z) will travel between the two points when t goes from 0 to 1.
+
+ int i=start;
+ double step=1.0/((stop+1)-start);
+
+ for(double t=0.0; t<=1.0 && i<=stop ; t+=step){
+ ctab[i++]=SDL_MapRGB(Surface->format, (Uint8)(x0+v[0]*t), (Uint8)(y0+v[1]*t), (Uint8)(z0+v[2]*t) );
+ }
+}
+
+
+//==================================================================================
+// Fades from (sR,sG,sB,sA) to (dR,dG,dB,dA), puts result in ctab[start] to ctab[stop]
+//==================================================================================
+void sge_AlphaFader(Uint8 sR,Uint8 sG,Uint8 sB,Uint8 sA, Uint8 dR,Uint8 dG,Uint8 dB,Uint8 dA, Uint32 *ctab,int start, int stop)
+{
+ // (sR,sG,sB,sA) and (dR,dG,dB,dA) are two points in hyperspace (the RGBA hypercube).
+
+ /* The vector for the straight line */
+ int v[4];
+ v[0]=dR-sR; v[1]=dG-sG; v[2]=dB-sB; v[3]=dA-sA;
+
+ /* Ref. point */
+ int x0=sR, y0=sG, z0=sB, w0=sA;
+
+ // The line's equation is:
+ // x= x0 + v[0] * t
+ // y= y0 + v[1] * t
+ // z= z0 + v[2] * t
+ // w= w0 + v[3] * t
+ //
+ // (x,y,z,w) will travel between the two points when t goes from 0 to 1.
+
+ int i=start;
+ double step=1.0/((stop+1)-start);
+
+ for(double t=0.0; t<=1.0 && i<=stop ; t+=step)
+ ctab[i++]=sge_MapAlpha((Uint8)(x0+v[0]*t), (Uint8)(y0+v[1]*t), (Uint8)(z0+v[2]*t), (Uint8)(w0+v[3]*t));
+
+}
+
+
+//==================================================================================
+// Copies a nice rainbow palette to the color table (ctab[start] to ctab[stop]).
+// You must also set the intensity of the palette (0-bright 255-dark)
+//==================================================================================
+void sge_SetupRainbowPalette(SDL_Surface *Surface,Uint32 *ctab,int intensity, int start, int stop)
+{
+ int slice=(int)((stop-start)/6);
+
+ /* Red-Yellow */
+ sge_Fader(Surface, 255,intensity,intensity, 255,255,intensity, ctab, start,slice);
+ /* Yellow-Green */
+ sge_Fader(Surface, 255,255,intensity, intensity,255,intensity, ctab, slice+1, 2*slice);
+ /* Green-Turquoise blue */
+ sge_Fader(Surface, intensity,255,intensity, intensity,255,255, ctab, 2*slice+1, 3*slice);
+ /* Turquoise blue-Blue */
+ sge_Fader(Surface, intensity,255,255, intensity,intensity,255, ctab, 3*slice+1, 4*slice);
+ /* Blue-Purple */
+ sge_Fader(Surface, intensity,intensity,255, 255,intensity,255, ctab, 4*slice+1, 5*slice);
+ /* Purple-Red */
+ sge_Fader(Surface, 255,intensity,255, 255,intensity,intensity, ctab, 5*slice+1, stop);
+}
+
+
+//==================================================================================
+// Copies a B&W palette to the color table (ctab[start] to ctab[stop]).
+//==================================================================================
+void sge_SetupBWPalette(SDL_Surface *Surface,Uint32 *ctab,int start, int stop)
+{
+ sge_Fader(Surface, 0,0,0, 255,255,255, ctab,start,stop);
+}
+
diff --git a/src/sge_surface.h b/src/sge_surface.h
new file mode 100644
index 0000000..4b5c9cd
--- /dev/null
+++ b/src/sge_surface.h
@@ -0,0 +1,97 @@
+/*
+* SDL Graphics Extension
+* Pixel, surface and color functions (header)
+*
+* Started 990815 (split from sge_draw 010611)
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+#ifndef sge_surface_H
+#define sge_surface_H
+
+#include <SDL/SDL.h>
+#include "sge_internal.h"
+
+
+/*
+* Obsolete function names
+*/
+#define sge_copy_sblock8 sge_write_block8
+#define sge_copy_sblock16 sge_write_block16
+#define sge_copy_sblock32 sge_write_block32
+#define sge_get_sblock8 sge_read_block8
+#define sge_get_sblock16 sge_read_block16
+#define sge_get_sblock32 sge_read_block32
+
+
+#ifdef _SGE_C
+extern "C" {
+#endif
+DECLSPEC void sge_Update_OFF(void);
+DECLSPEC void sge_Update_ON(void);
+DECLSPEC void sge_Lock_OFF(void);
+DECLSPEC void sge_Lock_ON(void);
+DECLSPEC Uint8 sge_getUpdate(void);
+DECLSPEC Uint8 sge_getLock(void);
+DECLSPEC void sge_UpdateRect(SDL_Surface *screen, Sint16 x, Sint16 y, Uint16 w, Uint16 h);
+DECLSPEC SDL_Surface *sge_CreateAlphaSurface(Uint32 flags, int width, int height);
+DECLSPEC Uint32 sge_MapAlpha(Uint8 R, Uint8 G, Uint8 B, Uint8 A);
+DECLSPEC void sge_SetError(const char *format, ...);
+
+DECLSPEC void _PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
+DECLSPEC void _PutPixel8(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
+DECLSPEC void _PutPixel16(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
+DECLSPEC void _PutPixel24(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
+DECLSPEC void _PutPixel32(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
+DECLSPEC void _PutPixelX(SDL_Surface *dest,Sint16 x,Sint16 y,Uint32 color);
+
+DECLSPEC Sint32 sge_CalcYPitch(SDL_Surface *dest,Sint16 y);
+DECLSPEC void sge_pPutPixel(SDL_Surface *surface, Sint16 x, Sint32 ypitch, Uint32 color);
+
+DECLSPEC void sge_PutPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color);
+DECLSPEC Uint32 sge_GetPixel(SDL_Surface *surface, Sint16 x, Sint16 y);
+
+DECLSPEC void _PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color, Uint8 alpha);
+DECLSPEC void sge_PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color, Uint8 alpha);
+
+DECLSPEC void sge_write_block8(SDL_Surface *Surface, Uint8 *block, Sint16 y);
+DECLSPEC void sge_write_block16(SDL_Surface *Surface, Uint16 *block, Sint16 y);
+DECLSPEC void sge_write_block32(SDL_Surface *Surface, Uint32 *block, Sint16 y);
+DECLSPEC void sge_read_block8(SDL_Surface *Surface, Uint8 *block, Sint16 y);
+DECLSPEC void sge_read_block16(SDL_Surface *Surface, Uint16 *block, Sint16 y);
+DECLSPEC void sge_read_block32(SDL_Surface *Surface, Uint32 *block, Sint16 y);
+
+DECLSPEC void sge_ClearSurface(SDL_Surface *Surface, Uint32 color);
+DECLSPEC int sge_BlitTransparent(SDL_Surface *Src, SDL_Surface *Dest, Sint16 SrcX, Sint16 SrcY, Sint16 DestX, Sint16 DestY, Sint16 W, Sint16 H, Uint32 Clear, Uint8 Alpha);
+DECLSPEC int sge_Blit(SDL_Surface *Src, SDL_Surface *Dest, Sint16 SrcX, Sint16 SrcY, Sint16 DestX, Sint16 DestY, Sint16 W, Sint16 H);
+DECLSPEC SDL_Surface *sge_copy_surface(SDL_Surface *src);
+
+DECLSPEC SDL_Color sge_GetRGB(SDL_Surface *Surface, Uint32 Color);
+DECLSPEC SDL_Color sge_FillPaletteEntry (Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_Fader(SDL_Surface *Surface, Uint8 sR,Uint8 sG,Uint8 sB, Uint8 dR,Uint8 dG,Uint8 dB,Uint32 *ctab,int start, int stop);
+DECLSPEC void sge_AlphaFader(Uint8 sR,Uint8 sG,Uint8 sB,Uint8 sA, Uint8 dR,Uint8 dG,Uint8 dB,Uint8 dA, Uint32 *ctab,int start, int stop);
+DECLSPEC void sge_SetupRainbowPalette(SDL_Surface *Surface,Uint32 *ctab,int intensity, int start, int stop);
+DECLSPEC void sge_SetupBWPalette(SDL_Surface *Surface,Uint32 *ctab,int start, int stop);
+#ifdef _SGE_C
+}
+#endif
+
+#ifndef sge_C_ONLY
+DECLSPEC void _PutPixel(SDL_Surface *screen, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void sge_PutPixel(SDL_Surface *screen, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B);
+DECLSPEC void _PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_PutPixelAlpha(SDL_Surface *surface, Sint16 x, Sint16 y, Uint8 R, Uint8 G, Uint8 B, Uint8 alpha);
+DECLSPEC void sge_ClearSurface(SDL_Surface *Surface, Uint8 R, Uint8 G, Uint8 B);
+#endif /* sge_C_ONLY */
+
+
+#endif /* sge_surface_H */
diff --git a/src/sge_tt_text.cpp b/src/sge_tt_text.cpp
new file mode 100644
index 0000000..0b2ba5b
--- /dev/null
+++ b/src/sge_tt_text.cpp
@@ -0,0 +1,1469 @@
+/*
+* SDL Graphics Extension
+* Text/TrueType font functions
+*
+* Started 990815
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*
+* Uses the excellent FreeType 2 library, available at:
+* http://www.freetype.org/
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+/*
+* Most of this code is taken from the SDL ttf lib by Sam Lantinga
+* <slouken@devolution.com>
+*/
+
+
+#include <SDL/SDL.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <memory.h>
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+#include "sge_surface.h"
+#include "sge_primitives.h"
+#include "sge_tt_text.h"
+
+#ifndef _SGE_NOTTF
+#include <freetype/freetype.h>
+#include <freetype/ftoutln.h>
+#include <freetype/ttnameid.h>
+
+/* The structure used to hold glyph information (cached) */
+struct glyph {
+ int stored;
+ FT_UInt index;
+ //FT_Bitmap bitmap;
+ FT_Bitmap pixmap;
+ int minx;
+ int maxx;
+ int miny;
+ int maxy;
+ int yoffset;
+ int advance;
+ Uint16 cached;
+};
+
+/* the truetype font structure */
+struct _sge_TTFont{
+ FT_Face face;
+
+ /* Font metrics */
+ int height;
+ int ascent;
+ int descent;
+ int lineskip;
+
+ /* The font style */
+ Uint8 style;
+
+ /* Extra width in glyph bounds for text styles */
+ int glyph_overhang;
+ float glyph_italics;
+
+ /* Information in the font for underlining */
+ int underline_offset;
+ int underline_height;
+
+ /* For now, support Latin-1 character set caching */
+ glyph *current;
+ glyph cache[256];
+ glyph scratch;
+};
+
+
+/* Macro to convert a character to a Unicode value -- assume already Unicode */
+//Should really make a proper convert algorithm someday
+#define UNICODE(c) c
+
+/* FIXME: Right now we assume the gray-scale renderer Freetype is using
+ supports 256 shades of gray, but we should instead key off of num_grays
+ in the result FT_Bitmap after the FT_Render_Glyph() call. */
+#define NUM_GRAYS 256
+
+/* Handy routines for converting from fixed point */
+#define FT_FLOOR(X) ((X & -64) / 64)
+#define FT_CEIL(X) (((X + 63) & -64) / 64)
+
+#define CACHED_METRICS 0x10
+#define CACHED_BITMAP 0x01
+#define CACHED_PIXMAP 0x02
+
+/* The FreeType font engine/library */
+static FT_Library _sge_library;
+static int _sge_TTF_initialized = 0;
+
+Uint8 _sge_TTF_AA=1; //Rendering mode: 0-OFF, 1-AA, 2-Alpha
+
+
+/**********************************************************************************/
+/** Open/misc font functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// Turns TTF AntiAliasing On/Off or alpha (nice but slow) (Default: On)
+//==================================================================================
+void sge_TTF_AAOff(void)
+{
+ _sge_TTF_AA=0;
+}
+void sge_TTF_AAOn(void)
+{
+ _sge_TTF_AA=1;
+}
+void sge_TTF_AA_Alpha(void)
+{
+ _sge_TTF_AA=2;
+}
+
+
+//==================================================================================
+// Closes the ttf engine, done by exit
+//==================================================================================
+void sge_TTF_Quit(void)
+{
+ if ( _sge_TTF_initialized ) {
+ FT_Done_FreeType( _sge_library );
+ }
+ _sge_TTF_initialized = 0;
+}
+
+
+//==================================================================================
+// Starts the ttf engine, must be called first
+//==================================================================================
+int sge_TTF_Init(void)
+{
+ FT_Error error;
+
+ error = FT_Init_FreeType( &_sge_library );
+ if ( error ) {
+ SDL_SetError("SGE - Couldn't init FreeType engine");
+ return(-1);
+ } else {
+ _sge_TTF_initialized = 1;
+ }
+ atexit(sge_TTF_Quit); //dont't trust the user...
+ return(0);
+}
+
+
+//==================================================================================
+// Some helper functions
+//==================================================================================
+void Flush_Glyph(glyph *glyph)
+{
+ glyph->stored = 0;
+ glyph->index = 0;
+ //if( glyph->bitmap.buffer ) {
+ // free( glyph->bitmap.buffer );
+ // glyph->bitmap.buffer = 0;
+ //}
+ if( glyph->pixmap.buffer ) {
+ free( glyph->pixmap.buffer );
+ glyph->pixmap.buffer = 0;
+ }
+ glyph->cached = 0;
+}
+
+void Flush_Cache(sge_TTFont *font)
+{
+ int i;
+ int size = sizeof( font->cache ) / sizeof( font->cache[0] );
+
+ for( i = 0; i < size; ++i ) {
+ if( font->cache[i].cached ) {
+ Flush_Glyph( &font->cache[i] );
+ }
+
+ }
+ if( font->scratch.cached ) {
+ Flush_Glyph( &font->scratch );
+ }
+}
+
+
+//==================================================================================
+// Remove font from memory
+//==================================================================================
+void sge_TTF_CloseFont(sge_TTFont *font)
+{
+ Flush_Cache( font );
+ FT_Done_Face( font->face );
+ free( font );
+}
+
+
+//==================================================================================
+// Open the TT font file and returns the font with pt size
+//==================================================================================
+sge_TTFont *sge_TTF_OpenFont(const char *file, int ptsize)
+{
+ sge_TTFont *font;
+ FT_Error error;
+ FT_Face face;
+ FT_Fixed scale;
+
+ font = (sge_TTFont *)malloc(sizeof(*font));
+ if ( font == NULL ) {
+ SDL_SetError("SGE - Out of memory");
+ return(NULL);
+ }
+ memset(font, 0, sizeof(*font));
+
+ /* Open the font and create ancillary data */
+ error = FT_New_Face( _sge_library, file, 0, &font->face );
+ if ( error ) {
+ sge_SetError("SGE - Couldn't load font file: %s",file);
+ free(font);
+ return(NULL);
+ }
+ face = font->face;
+
+ /* Make sure that our font face is scalable (global metrics) */
+ if ( ! FT_IS_SCALABLE(face) ) {
+ sge_SetError("SGE - Font face is not scalable: %s",file);
+ sge_TTF_CloseFont( font );
+ return NULL;
+ }
+
+ /* Set the character size and use 96 DPI */
+ error = FT_Set_Char_Size( font->face, 0, ptsize * 64, 96, 96 );
+ //error = FT_Set_Pixel_Sizes( font->face, 0, ptsize );
+ if( error ) {
+ sge_SetError("SGE - Couldn't set font size: %s",file);
+ sge_TTF_CloseFont( font );
+ return NULL;
+ }
+
+ /* Get the scalable font metrics for this font */
+ scale = face->size->metrics.y_scale;
+ font->ascent = FT_CEIL(FT_MulFix(face->bbox.yMax, scale));
+ font->descent = FT_CEIL(FT_MulFix(face->bbox.yMin, scale));
+ font->height = font->ascent - font->descent + /* baseline */ 1;
+ font->lineskip = FT_CEIL(FT_MulFix(face->height, scale));
+ font->underline_offset = FT_FLOOR(FT_MulFix(face->underline_position, scale));
+ font->underline_height = FT_FLOOR(FT_MulFix(face->underline_thickness, scale));
+ if ( font->underline_height < 1 ) {
+ font->underline_height = 1;
+ }
+
+ /* Set the default font style */
+ font->style = SGE_TTF_NORMAL;
+ font->glyph_overhang = face->size->metrics.y_ppem / 10;
+ /* x offset = cos(((90.0-12)/360)*2*M_PI), or 12 degree angle */
+ font->glyph_italics = 0.207f;
+ font->glyph_italics *= font->height;
+
+ return font;
+}
+
+
+//==================================================================================
+// Load a glyph
+//==================================================================================
+FT_Error Load_Glyph(sge_TTFont *font, Uint16 ch, glyph *cached, int want )
+{
+ FT_Face face;
+ FT_Error error;
+ FT_GlyphSlot glyph;
+ FT_Glyph_Metrics* metrics;
+ FT_Outline* outline;
+
+ //assert( font );
+ //assert( font->face );
+
+ face = font->face;
+
+ /* Load the glyph */
+ if ( ! cached->index ) {
+ cached->index = FT_Get_Char_Index( face, ch );
+ }
+ error = FT_Load_Glyph( face, cached->index, FT_LOAD_DEFAULT );
+ if( error ) {
+ return error;
+ }
+
+ /* Get our glyph shortcuts */
+ glyph = face->glyph;
+ metrics = &glyph->metrics;
+ outline = &glyph->outline;
+
+ /* Get the glyph metrics if desired */
+ if ( (want & CACHED_METRICS) && !(cached->stored & CACHED_METRICS) ) {
+ /* Get the bounding box */
+ cached->minx = FT_FLOOR(metrics->horiBearingX);
+ cached->maxx = cached->minx + FT_CEIL(metrics->width);
+ cached->maxy = FT_FLOOR(metrics->horiBearingY);
+ cached->miny = cached->maxy - FT_CEIL(metrics->height);
+ cached->yoffset = font->ascent - cached->maxy;
+ cached->advance = FT_CEIL(metrics->horiAdvance);
+
+ /* Adjust for bold and italic text */
+ if ( font->style & SGE_TTF_BOLD ) {
+ cached->maxx += font->glyph_overhang;
+ }
+ if ( font->style & SGE_TTF_ITALIC ) {
+ cached->maxx += (int)ceil(font->glyph_italics);
+ }
+ cached->stored |= CACHED_METRICS;
+ }
+
+ if ( ((want & CACHED_BITMAP) && !(cached->stored & CACHED_BITMAP)) ||
+ ((want & CACHED_PIXMAP) && !(cached->stored & CACHED_PIXMAP)) ) {
+ //int mono = (want & CACHED_BITMAP);
+ int i;
+ FT_Bitmap* src;
+ FT_Bitmap* dst;
+
+ /* Handle the italic style */
+ if( font->style & SGE_TTF_ITALIC ) {
+ FT_Matrix shear;
+
+ shear.xx = 1 << 16;
+ shear.xy = (int) ( font->glyph_italics * ( 1 << 16 ) ) / font->height;
+ shear.yx = 0;
+ shear.yy = 1 << 16;
+
+ FT_Outline_Transform( outline, &shear );
+ }
+
+ /* Render the glyph */
+ //if ( mono ) {
+ // error = FT_Render_Glyph( glyph, ft_render_mode_mono );
+ //} else {
+ error = FT_Render_Glyph( glyph, ft_render_mode_normal );
+ //}
+ if( error ) {
+ return error;
+ }
+
+ /* Copy over information to cache */
+ src = &glyph->bitmap;
+ //if ( mono ) {
+ // dst = &cached->bitmap;
+ //} else {
+ dst = &cached->pixmap;
+ //}
+ memcpy( dst, src, sizeof( *dst ) );
+ //if ( mono ) {
+ // dst->pitch *= 8;
+ //}
+
+ /* Adjust for bold and italic text */
+ if( font->style & SGE_TTF_BOLD ) {
+ int bump = font->glyph_overhang;
+ dst->pitch += bump;
+ dst->width += bump;
+ }
+ if( font->style & SGE_TTF_ITALIC ) {
+ int bump = (int)ceil(font->glyph_italics);
+ dst->pitch += bump;
+ dst->width += bump;
+ }
+
+ dst->buffer = (unsigned char *)malloc( dst->pitch * dst->rows );
+ if( !dst->buffer ) {
+ return FT_Err_Out_Of_Memory;
+ }
+ memset( dst->buffer, 0, dst->pitch * dst->rows );
+
+ for( i = 0; i < src->rows; i++ ) {
+ int soffset = i * src->pitch;
+ int doffset = i * dst->pitch;
+ /*if ( mono ) {
+ unsigned char *srcp = src->buffer + soffset;
+ unsigned char *dstp = dst->buffer + doffset;
+ int j;
+ for ( j = 0; j < src->width; j += 8 ) {
+ unsigned char ch = *srcp++;
+ *dstp++ = (ch&0x80) >> 7;
+ ch <<= 1;
+ *dstp++ = (ch&0x80) >> 7;
+ ch <<= 1;
+ *dstp++ = (ch&0x80) >> 7;
+ ch <<= 1;
+ *dstp++ = (ch&0x80) >> 7;
+ ch <<= 1;
+ *dstp++ = (ch&0x80) >> 7;
+ ch <<= 1;
+ *dstp++ = (ch&0x80) >> 7;
+ ch <<= 1;
+ *dstp++ = (ch&0x80) >> 7;
+ ch <<= 1;
+ *dstp++ = (ch&0x80) >> 7;
+ }
+ } else {*/
+ memcpy(dst->buffer+doffset,
+ src->buffer+soffset, src->pitch);
+ //}
+ }
+
+ /* Handle the bold style */
+ if ( font->style & SGE_TTF_BOLD ) {
+ int row;
+ int col;
+ int offset;
+ int pixel;
+ Uint8* pixmap;
+
+ /* The pixmap is a little hard, we have to add and clamp */
+ for( row = dst->rows - 1; row >= 0; --row ) {
+ pixmap = (Uint8*) dst->buffer + row * dst->pitch;
+ for( offset=1; offset <= font->glyph_overhang; ++offset ) {
+ for( col = dst->width - 1; col > 0; --col ) {
+ pixel = (pixmap[col] + pixmap[col-1]);
+ if( pixel > NUM_GRAYS - 1 ) {
+ pixel = NUM_GRAYS - 1;
+ }
+ pixmap[col] = (Uint8) pixel;
+ }
+ }
+ }
+ }
+
+ /* Mark that we rendered this format */
+ //if ( mono ) {
+ // cached->stored |= CACHED_BITMAP;
+ //} else {
+ cached->stored |= CACHED_PIXMAP;
+ //}
+ }
+
+ /* We're done, mark this glyph cached */
+ cached->cached = ch;
+
+ return 0;
+}
+
+
+//==================================================================================
+// Find glyph
+//==================================================================================
+FT_Error Find_Glyph(sge_TTFont *font, Uint16 ch, int want)
+{
+ int retval = 0;
+
+ if( ch < 256 ) {
+ font->current = &font->cache[ch];
+ } else {
+ if ( font->scratch.cached != ch ) {
+ Flush_Glyph( &font->scratch );
+ }
+ font->current = &font->scratch;
+ }
+ if ( (font->current->stored & want) != want ) {
+ retval = Load_Glyph( font, ch, font->current, want );
+ }
+ return retval;
+}
+
+
+//==================================================================================
+// Change the size of font
+//==================================================================================
+int sge_TTF_SetFontSize(sge_TTFont *font, int ptsize)
+{
+ FT_Error error;
+ FT_Fixed scale;
+ FT_Face face;
+
+ /* Set the character size and use 96 DPI */
+ error = FT_Set_Char_Size( font->face, 0, ptsize * 64, 96, 96 );
+ //error = FT_Set_Pixel_Sizes( font->face, 0, ptsize );
+ if( error ) {
+ sge_SetError("SGE - Couldn't set font size");
+ sge_TTF_CloseFont( font );
+ return -1;
+ }
+
+ Flush_Cache(font);
+ face = font->face;
+
+ /* Get the scalable font metrics for this font */
+ scale = face->size->metrics.y_scale;
+ font->ascent = FT_CEIL(FT_MulFix(face->bbox.yMax, scale));
+ font->descent = FT_CEIL(FT_MulFix(face->bbox.yMin, scale));
+ font->height = font->ascent - font->descent + /* baseline */ 1;
+ font->lineskip = FT_CEIL(FT_MulFix(face->height, scale));
+ font->underline_offset = FT_FLOOR(FT_MulFix(face->underline_position, scale));
+ font->underline_height = FT_FLOOR(FT_MulFix(face->underline_thickness, scale));
+ if ( font->underline_height < 1 ) {
+ font->underline_height = 1;
+ }
+
+ /* Set the default font style */
+ //font->style = SGE_TTF_NORMAL;
+ font->glyph_overhang = face->size->metrics.y_ppem / 10;
+ /* x offset = cos(((90.0-12)/360)*2*M_PI), or 12 degree angle */
+ font->glyph_italics = 0.207f;
+ font->glyph_italics *= font->height;
+
+ return 0;
+}
+
+
+//==================================================================================
+// Get font geometrics
+//==================================================================================
+int sge_TTF_FontHeight(sge_TTFont *font)
+{
+ return(font->height);
+}
+int sge_TTF_FontAscent(sge_TTFont *font)
+{
+ return(font->ascent);
+}
+int sge_TTF_FontDescent(sge_TTFont *font)
+{
+ return(font->descent);
+}
+int sge_TTF_FontLineSkip(sge_TTFont *font)
+{
+ return(font->lineskip);
+}
+int sge_TTF_GlyphMetrics(sge_TTFont *font, Uint16 ch, int* minx, int* maxx, int* miny, int* maxy, int* advance)
+{
+ FT_Error error;
+
+ error = Find_Glyph(font, ch, CACHED_METRICS);
+
+ if ( error ) {
+ return -1;
+ }
+
+ if ( minx ) {
+ *minx = font->current->minx;
+ }
+ if ( maxx ) {
+ *maxx = font->current->maxx;
+ }
+ if ( miny ) {
+ *miny = font->current->miny;
+ }
+ if ( maxy ) {
+ *maxy = font->current->maxy;
+ }
+ if ( advance ) {
+ *advance = font->current->advance;
+ }
+ return 0;
+}
+
+
+//==================================================================================
+// Set font style
+//==================================================================================
+void sge_TTF_SetFontStyle(sge_TTFont *font, Uint8 style)
+{
+ font->style = style;
+ Flush_Cache(font);
+}
+
+
+//==================================================================================
+// Get font style
+//==================================================================================
+Uint8 sge_TTF_GetFontStyle(sge_TTFont *font)
+{
+ return(font->style);
+}
+#endif /* _SGE_NOTTF */
+
+
+//==================================================================================
+// Convert the Latin-1 text to UNICODE
+//==================================================================================
+Uint16 *ASCII_to_UNICODE(Uint16 *unicode, const char *text, int len)
+{
+ int i;
+
+ for ( i=0; i < len; ++i ) {
+ unicode[i] = ((const unsigned char *)text)[i];
+ }
+ unicode[i] = 0;
+
+ return unicode;
+}
+
+Uint16 *sge_Latin1_Uni(const char *text)
+{
+ Uint16 *unicode_text;
+ int i, unicode_len;
+
+ /* Copy the Latin-1 text to a UNICODE text buffer */
+ unicode_len = strlen(text);
+ unicode_text = (Uint16 *)malloc((unicode_len+1)*(sizeof *unicode_text));
+ if ( unicode_text == NULL ) {
+ SDL_SetError("SGE - Out of memory");
+ return(NULL);
+ }
+ for ( i=0; i < unicode_len; ++i ) {
+ unicode_text[i] = ((const unsigned char *)text)[i];
+ }
+ unicode_text[i] = 0;
+
+ return(unicode_text);
+}
+
+//==================================================================================
+// Convert the UTF-8 text to UNICODE
+//==================================================================================
+Uint16 *UTF8_to_UNICODE(Uint16 *unicode, const char *utf8, int len)
+{
+ int i, j;
+ Uint16 ch;
+
+ for ( i=0, j=0; i < len; ++i, ++j ) {
+ ch = ((const unsigned char *)utf8)[i];
+ if ( ch >= 0xF0 ) {
+ ch = (Uint16)(utf8[i]&0x07) << 18;
+ ch |= (Uint16)(utf8[++i]&0x3F) << 12;
+ ch |= (Uint16)(utf8[++i]&0x3F) << 6;
+ ch |= (Uint16)(utf8[++i]&0x3F);
+ } else
+ if ( ch >= 0xE0 ) {
+ ch = (Uint16)(utf8[i]&0x3F) << 12;
+ ch |= (Uint16)(utf8[++i]&0x3F) << 6;
+ ch |= (Uint16)(utf8[++i]&0x3F);
+ } else
+ if ( ch >= 0xC0 ) {
+ ch = (Uint16)(utf8[i]&0x3F) << 6;
+ ch |= (Uint16)(utf8[++i]&0x3F);
+ }
+ unicode[j] = ch;
+ }
+ unicode[j] = 0;
+
+ return unicode;
+}
+
+Uint16 *sge_UTF8_Uni(const char *text)
+{
+ Uint16 *unicode_text;
+ int unicode_len;
+
+ /* Copy the UTF-8 text to a UNICODE text buffer */
+ unicode_len = strlen(text);
+ unicode_text = (Uint16 *)malloc((unicode_len+1)*(sizeof *unicode_text));
+ if ( unicode_text == NULL ) {
+ SDL_SetError("SGE - Out of memory");
+ return(NULL);
+ }
+
+ return UTF8_to_UNICODE(unicode_text, text, unicode_len);
+}
+
+#ifndef _SGE_NOTTF
+//==================================================================================
+// Get the width of the text with the given font
+//==================================================================================
+SDL_Rect sge_TTF_TextSizeUNI(sge_TTFont *font, const Uint16 *text)
+{
+ SDL_Rect ret; ret.x=0; ret.y=0, ret.w=0, ret.h=0;
+ const Uint16 *ch;
+ int x, z;
+ int minx, maxx;
+ int miny, maxy;
+ glyph *glyph;
+ FT_Error error;
+
+ /* Initialize everything to 0 */
+ if ( ! _sge_TTF_initialized ) {
+ return ret;
+ }
+
+ minx = miny = 0;
+ maxx = maxy = 0;
+
+ /* Load each character and sum it's bounding box */
+ x= 0;
+ for ( ch=text; *ch; ++ch ) {
+ error = Find_Glyph(font, *ch, CACHED_METRICS);
+ if ( error ) {
+ return ret;
+ }
+ glyph = font->current;
+
+ z = x + glyph->minx;
+ if ( minx > z ) {
+ minx = z;
+ }
+ if ( font->style & SGE_TTF_BOLD ) {
+ x += font->glyph_overhang;
+ }
+ if ( glyph->advance > glyph->maxx ) {
+ z = x + glyph->advance;
+ } else {
+ z = x + glyph->maxx;
+ }
+ if ( maxx < z ) {
+ maxx = z;
+ }
+ x += glyph->advance;
+
+ if ( glyph->miny < miny ) {
+ miny = glyph->miny;
+ }
+ if ( glyph->maxy > maxy ) {
+ maxy = glyph->maxy;
+ }
+ }
+
+ /* Fill the bounds rectangle */
+ ret.w = (maxx - minx);
+ //ret.h = (maxy - miny); /* This is correct, but breaks many applications */
+ ret.h = font->height;
+
+ return ret;
+}
+
+SDL_Rect sge_TTF_TextSize(sge_TTFont *font, const char *text)
+{
+ SDL_Rect ret; ret.x=ret.y=ret.w=ret.y=0;
+ Uint16 *unicode_text;
+ int unicode_len;
+
+ /* Copy the Latin-1 text to a UNICODE text buffer */
+ unicode_len = strlen(text);
+ unicode_text = (Uint16 *)malloc((unicode_len+1)*(sizeof *unicode_text));
+ if ( unicode_text == NULL ) {
+ SDL_SetError("SGE - Out of memory");
+ return ret;
+ }
+ ASCII_to_UNICODE(unicode_text, text, unicode_len);
+
+ /* Render the new text */
+ ret = sge_TTF_TextSizeUNI(font, unicode_text);
+
+ /* Free the text buffer and return */
+ free(unicode_text);
+
+ return ret;
+}
+
+
+
+/**********************************************************************************/
+/** TTF output functions **/
+/**********************************************************************************/
+
+//==================================================================================
+// TT Render (unicode)
+// Returns an 8bit or 32bit(8/8/8/8-alpha) surface with TT text
+//==================================================================================
+SDL_Surface *sge_TTF_RenderUNICODE(sge_TTFont *font,const Uint16 *text, SDL_Color fg, SDL_Color bg)
+{
+ int xstart, width;
+ int w, h;
+ SDL_Surface *textbuf;
+ SDL_Palette *palette;
+ int index;
+ int rdiff, gdiff, bdiff;
+ const Uint16 *ch;
+ Uint8 *src, *dst;
+ Uint32 *dst32;
+ Uint32 alpha=0;
+ Uint32 pixel=0;
+ Uint32 Rmask=0, Gmask=0, Bmask=0, Amask=0;
+ int row, col;
+ FT_Error error;
+
+ /* Get the dimensions of the text surface */
+ SDL_Rect ret=sge_TTF_TextSizeUNI(font, text);
+ w=ret.w; h=ret.h;
+ if ( !w ) {
+ SDL_SetError("SGE - Text has zero width");
+ return(NULL);
+ }
+
+ /* Create the target surface */
+ width = w;
+ if(_sge_TTF_AA!=2) /* Allocate an 8-bit pixmap */
+ textbuf = SDL_AllocSurface(SDL_SWSURFACE, w, h, 8, 0, 0, 0, 0);
+ else{ /* Allocate an 32-bit alpha pixmap */
+ if ( SDL_BYTEORDER == SDL_LIL_ENDIAN ) {
+ Rmask = 0x000000FF;
+ Gmask = 0x0000FF00;
+ Bmask = 0x00FF0000;
+ Amask = 0xFF000000;
+ } else {
+ Rmask = 0xFF000000;
+ Gmask = 0x00FF0000;
+ Bmask = 0x0000FF00;
+ Amask = 0x000000FF;
+ }
+ textbuf = SDL_AllocSurface(SDL_SWSURFACE, w, h, 32, Rmask, Gmask, Bmask, Amask);
+ }
+
+ if ( textbuf == NULL ) {
+ SDL_SetError("SGE - Out of memory");
+ return(NULL);
+ }
+
+
+ /* Setup our colors */
+ switch(_sge_TTF_AA){
+
+ case 0:{ /* No fancy antialiasing or alpha component */
+ palette = textbuf->format->palette;
+
+ palette->colors[0].r = bg.r;
+ palette->colors[0].g = bg.g;
+ palette->colors[0].b = bg.b;
+ palette->colors[1].r = fg.r;
+ palette->colors[1].g = fg.g;
+ palette->colors[1].b = fg.b;
+ }
+ break;
+
+ case 1:{ /* Fill the palette with NUM_GRAYS levels of shading from bg to fg */
+ palette = textbuf->format->palette;
+
+ rdiff = fg.r - bg.r;
+ gdiff = fg.g - bg.g;
+ bdiff = fg.b - bg.b;
+ for ( index=0; index< NUM_GRAYS; ++index ) {
+ palette->colors[index].r = bg.r + (index*rdiff)/(NUM_GRAYS-1);
+ palette->colors[index].g = bg.g + (index*gdiff)/(NUM_GRAYS-1);
+ palette->colors[index].b = bg.b + (index*bdiff)/(NUM_GRAYS-1);
+ }
+ }
+ break;
+
+ case 2:{ /* Alpha component magic */
+ sge_ClearSurface(textbuf, SDL_MapRGBA(textbuf->format, bg.r,bg.g,bg.b,SDL_ALPHA_TRANSPARENT));
+ //pixel = (fg.r<<16)|(fg.g<<8)|fg.b;
+ pixel = (fg.b<<16)|(fg.g<<8)|fg.r;
+ }
+ break;
+ }
+
+
+ /* Load and render each character */
+ xstart = 0;
+ for ( ch=text; *ch; ++ch ) {
+ error = Find_Glyph(font, *ch, CACHED_METRICS|CACHED_PIXMAP);
+
+ if ( ! error ) {
+ w = font->current->pixmap.width;
+ src = (Uint8 *)font->current->pixmap.buffer;
+ for ( row = 0; row < font->current->pixmap.rows; ++row ) {
+ dst = (Uint8 *)textbuf->pixels + (row + font->current->yoffset)* textbuf->pitch + xstart + font->current->minx;
+
+ switch(_sge_TTF_AA){
+
+ case 0:{ /* Normal */
+ src = font->current->pixmap.buffer + row * font->current->pixmap.pitch;
+ for ( col=w; col>0; --col ) {
+ *dst++ |= (*src++<NUM_GRAYS/2)? 0:1;
+ }
+ }
+ break;
+ case 1:{ /* Antialiasing */
+ src = font->current->pixmap.buffer + row * font->current->pixmap.pitch;
+ for ( col=w; col>0; --col ) {
+ *dst++ |= *src++;
+ }
+ }
+ break;
+
+ case 2:{ /* Alpha */
+ dst32 = (Uint32 *)textbuf->pixels + (row + font->current->yoffset)* textbuf->pitch/4 + xstart + font->current->minx;
+ for ( col=w; col>0; --col ) {
+ alpha = *src++;
+ *dst32++ |= pixel | (alpha << 24);
+ }
+ }
+ break;
+ }
+ }
+
+ xstart += font->current->advance;
+ if ( font->style & SGE_TTF_BOLD ) {
+ xstart += font->glyph_overhang;
+ }
+ }
+ }
+
+ /* Handle the underline style */
+ if ( font->style & SGE_TTF_UNDERLINE ) {
+ int row_offset;
+
+ row_offset = font->ascent - font->underline_offset - 1;
+ if ( row_offset > textbuf->h ) {
+ row_offset = (textbuf->h-1) - font->underline_height;
+ }
+
+ if(_sge_TTF_AA==0){
+ dst = (Uint8 *)textbuf->pixels + row_offset * textbuf->pitch;
+ for ( row=font->underline_height; row>0; --row ) {
+ memset(dst, 1, textbuf->w );
+ dst += textbuf->pitch;
+ }
+ }else if(_sge_TTF_AA==1){
+ dst = (Uint8 *)textbuf->pixels + row_offset * textbuf->pitch;
+ for ( row=font->underline_height; row>0; --row ) {
+ memset(dst, NUM_GRAYS - 1, textbuf->w );
+ dst += textbuf->pitch;
+ }
+ }else{
+ pixel |= Amask;
+ dst32 = (Uint32 *)textbuf->pixels+row_offset*textbuf->pitch/4;
+ for ( row=font->underline_height; row>0; --row ) {
+ for ( col=0; col < textbuf->w; ++col ) {
+ dst32[col] = pixel;
+ }
+ dst32 += textbuf->pitch/4;
+ }
+ }
+ }
+ return(textbuf);
+}
+
+
+//==================================================================================
+// Renders the Unicode string to TrueType on surface, with the color fcolor.
+// bcolor is the target color for the antialiasing.
+// Alpha sets the transparency of the text (255-solid, 0-max).
+//==================================================================================
+SDL_Rect sge_tt_textout_UNI(SDL_Surface *Surface, sge_TTFont *font, const Uint16 *uni, Sint16 x, Sint16 y, Uint32 fcolor, Uint32 bcolor, int Alpha)
+{
+ SDL_Rect ret; ret.x=0; ret.y=0; ret.w=0; ret.h=0;
+
+ SDL_Color temp;
+ SDL_Surface *text;
+
+ text=sge_TTF_RenderUNICODE(font,uni,sge_GetRGB(Surface,fcolor),sge_GetRGB(Surface,bcolor));
+ if(text==NULL){return ret;}
+
+ /* Align the surface text to the baseline */
+ Uint16 ascent=font->ascent;
+
+ temp=sge_GetRGB(Surface,bcolor);
+ sge_BlitTransparent(text,Surface,0,0,x,y-ascent,text->w,text->h,SDL_MapRGB(text->format,temp.r,temp.g,temp.b),Alpha);
+ sge_UpdateRect(Surface,x,y-ascent,text->w,text->h);
+
+ ret.x=x; ret.y=y-ascent; ret.w=text->w; ret.h=text->h;
+
+ SDL_FreeSurface(text);
+ return ret;
+}
+
+
+//==================================================================================
+// Renders the Unicode string to TrueType on surface, with the color fcolor.
+// bcolor is the target color for the antialiasing.
+// Alpha sets the transparency of the text (0-solid, 255-max). (RGB)
+//==================================================================================
+SDL_Rect sge_tt_textout_UNI(SDL_Surface *Surface, sge_TTFont *font, const Uint16 *uni, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha)
+{
+ SDL_Rect ret; ret.x=0; ret.y=0; ret.w=0; ret.h=0;
+ SDL_Surface *text;
+
+ text=sge_TTF_RenderUNICODE(font,uni,sge_FillPaletteEntry(fR,fG,fB),sge_FillPaletteEntry(bR,bG,bB));
+ if(text==NULL){return ret;}
+
+ /* Align the surface text to the baseline */
+ Uint16 ascent=font->ascent;
+
+ sge_BlitTransparent(text,Surface,0,0,x,y-ascent,text->w,text->h,SDL_MapRGB(text->format,bR,bG,bB),Alpha);
+
+ sge_UpdateRect(Surface,x,y-ascent,text->w,text->h);
+
+ ret.x=x; ret.y=y-ascent; ret.w=text->w; ret.h=text->h;
+
+ SDL_FreeSurface(text);
+ return ret;
+}
+
+
+//==================================================================================
+// Renders the Latin-1 string to TrueType on surface, with the color fcolor.
+// bcolor is the target color for the antialiasing.
+// Alpha sets the transparency of the text (0-solid, 255-max).
+//==================================================================================
+SDL_Rect sge_tt_textout(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint32 fcolor, Uint32 bcolor, int Alpha)
+{
+ SDL_Rect ret;
+ Uint16 *uni;
+
+ uni=sge_Latin1_Uni(string);
+
+ ret=sge_tt_textout_UNI(Surface,font,uni,x,y,fcolor,bcolor,Alpha);
+ free(uni);
+
+ return ret;
+}
+
+//==================================================================================
+// Renders the Latin-1 string to TrueType on surface, with the color fcolor.
+// bcolor is the target color for the antialiasing.
+// Alpha sets the transparency of the text (0-solid, 255-max). (RGB)
+//==================================================================================
+SDL_Rect sge_tt_textout(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha)
+{
+ SDL_Rect ret;
+ Uint16 *uni;
+
+ uni=sge_Latin1_Uni(string);
+
+ ret=sge_tt_textout_UNI(Surface,font,uni,x,y, fR,fG,fB, bR,bG,bB, Alpha);
+ free(uni);
+
+ return ret;
+}
+
+
+//==================================================================================
+// Renders the UTF-8 string to TrueType on surface, with the color fcolor.
+// bcolor is the target color for the antialiasing.
+// Alpha sets the transparency of the text (0-solid, 255-max).
+//==================================================================================
+SDL_Rect sge_tt_textout_UTF8(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint32 fcolor, Uint32 bcolor, int Alpha)
+{
+ SDL_Rect ret;
+ Uint16 *uni;
+
+ uni=sge_UTF8_Uni(string);
+
+ ret=sge_tt_textout_UNI(Surface,font,uni,x,y,fcolor,bcolor,Alpha);
+ free(uni);
+
+ return ret;
+}
+
+//==================================================================================
+// Renders the UTF-8 string to TrueType on surface, with the color fcolor.
+// bcolor is the target color for the antialiasing.
+// Alpha sets the transparency of the text (0-solid, 255-max). (RGB)
+//==================================================================================
+SDL_Rect sge_tt_textout_UTF8(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha)
+{
+ SDL_Rect ret;
+ Uint16 *uni;
+
+ uni=sge_UTF8_Uni(string);
+
+ ret=sge_tt_textout_UNI(Surface,font,uni,x,y, fR,fG,fB, bR,bG,bB, Alpha);
+ free(uni);
+
+ return ret;
+}
+
+
+//==================================================================================
+// Renders the formatet Latin-1 string to TrueType on surface, with the color fcolor.
+// bcolor is the target color for the antialiasing.
+// Alpha sets the transparency of the text (0-solid, 255-max). (RGB ONLY)
+// * just like printf(char *format,...) *
+//==================================================================================
+SDL_Rect sge_tt_textoutf(SDL_Surface *Surface, sge_TTFont *font, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha ,const char *format,...)
+{
+ char buf[256];
+
+ va_list ap;
+
+ #ifdef __WIN32__
+ va_start((va_list*)ap, format); //Stupid win32 crosscompiler
+ #else
+ va_start(ap, format);
+ #endif
+
+ vsprintf(buf, format, ap);
+ va_end(ap);
+
+ return sge_tt_textout(Surface, font, buf, x,y, fR,fG,fB, bR,bG,bB, Alpha);
+}
+
+
+
+
+/**********************************************************************************/
+/** TTF 'input' functions **/
+/**********************************************************************************/
+
+// First some internel functions for TTF input
+
+//==================================================================================
+// Fast update function for TTF input
+//
+// type=0 - in ret smaller then out ret
+// type=1 - in ret bigger then out ret
+// type=3 - safe
+//==================================================================================
+SDL_Rect fast_update(SDL_Surface *Surface,SDL_Surface *buffer,SDL_Rect ret, int type,sge_TTFont *font,Uint16 *string, Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol,int Alpha)
+{
+ if(type==0){
+ sge_Update_OFF();
+ sge_FilledRect(Surface, ret.x, ret.y, ret.x+ret.w, ret.y+ret.h, bcol);
+ ret=sge_tt_textout_UNI(Surface,font,string, x,y, fcol, bcol, 0);
+ sge_Update_ON();
+ sge_UpdateRect(Surface, ret.x, ret.y, ret.w, ret.h);
+ }
+ else if(type==1){
+ SDL_Rect temp;
+
+ sge_Update_OFF();
+ sge_FilledRect(Surface, ret.x, ret.y, ret.x+ret.w, ret.y+ret.h, bcol);
+ temp=sge_tt_textout_UNI(Surface,font,string, x,y, fcol, bcol, 0);
+ sge_Update_ON();
+ sge_UpdateRect(Surface, ret.x, ret.y, ret.w, ret.h);
+ ret=temp;
+ }
+ else{
+ SDL_Rect temp;
+
+ sge_Update_OFF();
+ sge_FilledRect(Surface, ret.x, ret.y, ret.x+ret.w, ret.y+ret.h, bcol);
+ temp=sge_tt_textout_UNI(Surface,font,string, x,y, fcol, bcol, 0);
+ sge_Update_ON();
+ if(ret.w>=temp.w){
+ sge_UpdateRect(Surface, ret.x, ret.y, ret.w, ret.h);
+ }
+ else{
+ sge_UpdateRect(Surface, temp.x, temp.y, temp.w, temp.h);
+ }
+ ret=temp;
+ }
+ return ret;
+}
+
+//==================================================================================
+// Update function for TTF input that preserve background
+//
+// type=0 - in ret smaller then out ret
+// type=1 - in ret bigger then out ret
+// type=3 - safe
+//==================================================================================
+SDL_Rect nice_update(SDL_Surface *Surface,SDL_Surface *buffer,SDL_Rect ret, int type,sge_TTFont *font,Uint16 *string, Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol, int Alpha)
+{
+ if(type==0){
+ sge_Update_OFF();
+ sge_Blit(buffer,Surface, ret.x, ret.y, ret.x, ret.y, ret.w, ret.h);
+ ret=sge_tt_textout_UNI(Surface,font,string, x,y, fcol, bcol, Alpha);
+ sge_Update_ON();
+ sge_UpdateRect(Surface, ret.x, ret.y, ret.w, ret.h);
+ }
+ else if(type==1){
+ SDL_Rect temp;
+
+ sge_Update_OFF();
+ sge_Blit(buffer,Surface, ret.x, ret.y, ret.x, ret.y, ret.w, ret.h);
+ temp=sge_tt_textout_UNI(Surface,font,string, x,y, fcol, bcol, Alpha);
+ sge_Update_ON();
+ sge_UpdateRect(Surface, ret.x, ret.y, ret.w, ret.h);
+ ret=temp;
+ }
+ else{
+ SDL_Rect temp;
+
+ sge_Update_OFF();
+ sge_Blit(buffer,Surface, ret.x, ret.y, ret.x, ret.y, ret.w, ret.h);
+ temp=sge_tt_textout_UNI(Surface,font,string, x,y, fcol, bcol, Alpha);
+ sge_Update_ON();
+ if(ret.w>=temp.w){
+ sge_UpdateRect(Surface, ret.x, ret.y, ret.w, ret.h);
+ }
+ else{
+ sge_UpdateRect(Surface, temp.x, temp.y, temp.w, temp.h);
+ }
+ ret=temp;
+ }
+
+ return ret;
+}
+#endif /* _SGE_NOTTF */
+
+
+//==================================================================================
+// Handle keyrepeats
+//==================================================================================
+int keyrepeat(SDL_Event *event, int wait)
+{
+ int keydown=1,c=0,ret=0;
+ SDL_Event ev;
+
+ do{
+ if(SDL_PollEvent(&ev)==1){
+ if(ev.type==SDL_QUIT){ret=-1;keydown=0;}
+ if(ev.type==SDL_KEYUP || ev.type==SDL_KEYDOWN){ //Keyrepeat cancelled
+ keydown=0;
+ if(ev.type==SDL_KEYDOWN){
+ SDL_PeepEvents(&ev,1, SDL_ADDEVENT, 0); //Return the newly pressed key to the event queue
+ }
+ }
+ }
+ SDL_Delay(10);
+ c++;
+ if(c>wait && keydown==1){ //trigers keyrepeat
+ ret=1;
+ SDL_PeepEvents(event,1, SDL_ADDEVENT, 0); //Return the old key to the event queue
+ keydown=0;
+ }
+ }while(keydown==1);
+
+ return ret;
+}
+
+
+//==================================================================================
+// Insert a element
+//==================================================================================
+void insert_char(Uint16 *string, Uint16 ch, int pos, int max)
+{
+ if(pos>max || pos<0){return;}
+ else if(pos==max){string[pos]=ch;}
+ else{
+ for(int i=max; i>=pos; i--){
+ string[i+1]=string[i];
+ }
+ string[pos]=ch;
+ }
+}
+
+
+//==================================================================================
+// Delete a element
+//==================================================================================
+void delete_char(Uint16 *string, int pos, int max)
+{
+ if(pos>max || pos<0){return;}
+ else if(pos==max){string[pos]=0;}
+ else{
+ for(int i=pos; i<=max-1; i++){
+ string[i]=string[i+1];
+ }
+ string[max]=0;
+ }
+}
+
+
+#ifndef _SGE_NOTTF
+// These functions handle keyboard input and shows the result on screen. The text
+// can be edited with [Backspace], [Delete], [Left arrow] and [Right arrow].
+// Text input is terminated when [Return] or [Enter] is pressed, or if a quit event
+// is recived.
+// The sge_tt_input functions puts the result in 'string'.
+//
+// Flags: SGE_IBG - Keeps background, else bye bye background
+// SGE_IDEL - Delete text on exit
+// SGE_INOKR - No keyrepeat
+// (use OR | to give more than one)
+//
+// If you want a 'default' text you can copy it to string before call and set pos to
+// the first empty element in string - ex. "Hello" => pos=5. If not - zero.
+// len is the max numbers of chars editable - ex. if you set the default text to "100"
+// and only want 3 digits out, set len to 3. string should have atleast len+1 elements
+// allocated
+// This is *not* a fast, optimized function - but it gets the job done...
+
+// Return:
+// Zero or above - the lenght of the string
+// -1 recieved a quit event (the lenght is lost)
+// -2 invalid indata
+// -3 out of memory
+
+//==================================================================================
+// Text input UNICODE (the core)
+//==================================================================================
+int sge_tt_input_UNI(SDL_Surface *screen,sge_TTFont *font,Uint16 *string, Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol, int Alpha)
+{
+ if(len<pos || pos<0 || len<0){return -2;}
+
+ Uint16 cur=124;//The charactar for the cursor - '|'
+ int max; //The strings size
+
+ /* Set update function */
+ SDL_Rect (*_update)(SDL_Surface *screen,SDL_Surface *buffer,SDL_Rect ret, int type,sge_TTFont *font,Uint16 *string, Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol, int Alpha);
+ SDL_Surface *buffer;
+
+ if(flags&SGE_FLAG1){ /* Keep background? */
+ _update=nice_update;
+ buffer=SDL_DisplayFormat(screen); /* Fixme: Yum! Memory! */
+ if(buffer==NULL){SDL_SetError("SGE - Out of memory");return -3;}
+ }
+ else{ /* nope */
+ _update=fast_update;
+ buffer=NULL;
+ Alpha=0;
+ }
+
+ SDL_Rect ret;
+
+ max=pos;
+ string[pos+1]=0;
+
+ SDL_EnableUNICODE(1);
+
+ /* Init cursor */
+ string[pos]=cur;
+ ret=sge_tt_textout_UNI(screen,font,string, x,y, fcol, bcol, Alpha);
+
+ SDL_Event event;
+ int quit=0;
+ do{
+ /* Check events */
+ SDL_WaitEvent(&event);
+ if(event.type==SDL_QUIT){quit=-1;}
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_ESCAPE){quit=1;}
+ else if(event.type==SDL_KEYDOWN && (event.key.keysym.sym==SDLK_RETURN || event.key.keysym.sym==SDLK_KP_ENTER)){quit=1;}
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_BACKSPACE){
+ if(pos>0){
+ /* Delete char cursor-1 */
+ delete_char(string,pos-1,max); pos--; max--;
+
+ ret=_update(screen,buffer,ret,1,font,string, x,y, fcol, bcol, Alpha);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_RIGHT){
+ if(pos!=max && pos!=len){
+ /* Move cursor right */
+ delete_char(string,pos,max);pos++;
+ insert_char(string,cur,pos,max);
+
+ ret=_update(screen,buffer,ret,3,font,string, x,y, fcol, bcol, Alpha);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_LEFT){
+ if(pos>0){
+ /* Move cursor left */
+ delete_char(string,pos,max);pos--;
+ insert_char(string,cur,pos,max);
+
+ ret=_update(screen,buffer,ret,3,font,string, x,y, fcol, bcol, Alpha);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.sym==SDLK_DELETE){
+ /* Delete char cursor+1 */
+ if(pos!=max && pos!=len){
+ delete_char(string,pos+1,max);max--;
+
+ ret=_update(screen,buffer,ret,1,font,string, x,y, fcol, bcol, Alpha);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 20)==-1){quit=-1;}
+ }
+ }
+ else if(event.type==SDL_KEYDOWN && event.key.keysym.unicode!=0){
+ /* Insert new char */
+ if(max!=len){
+ max++;
+ insert_char(string, event.key.keysym.unicode, pos,max); pos++;
+
+ ret=_update(screen,buffer,ret,0,font,string, x,y, fcol, bcol, Alpha);
+
+ /* Handle keyrepeat */
+ if(!(flags&SGE_FLAG3))
+ if(keyrepeat(&event, 40)==-1){quit=-1;}
+ }
+ }
+ }while(quit==0);
+
+ /* Remove the cursor from string */
+ delete_char(string,pos,max);
+
+ if(flags&SGE_FLAG2){ //Remove the text
+ if(flags&SGE_FLAG1){
+ sge_Blit(buffer,screen, ret.x, ret.y, ret.x, ret.y, ret.w, ret.h);
+ sge_UpdateRect(screen, ret.x, ret.y, ret.w, ret.h);
+ }
+ else{
+ sge_FilledRect(screen,ret.x, ret.y, ret.x+ret.w, ret.y+ret.h,bcol);
+ }
+ }
+ else{ //Draw text without cursor
+ ret=_update(screen,buffer,ret,1,font,string, x,y, fcol, bcol, Alpha);
+ }
+
+
+ if(flags&SGE_FLAG1){SDL_FreeSurface(buffer);}
+
+ if(quit==-1){return -1;} //Waaa! The user killed me!
+ return max;
+}
+
+
+//==================================================================================
+// Text input UNICODE (RGB)
+//==================================================================================
+int sge_tt_input_UNI(SDL_Surface *screen,sge_TTFont *font,Uint16 *string,Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR,Uint8 bG,Uint8 bB, int Alpha)
+{
+ return sge_tt_input_UNI(screen,font,string,flags,pos,len,x,y,SDL_MapRGB(screen->format, fR,fG,fB),SDL_MapRGB(screen->format, bR,bG,bB),Alpha);
+}
+
+
+//==================================================================================
+// Text input Latin1
+//
+// Will fail miserable if ret<0!
+//==================================================================================
+int sge_tt_input(SDL_Surface *screen,sge_TTFont *font,char *string,Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol, int Alpha)
+{
+ if(len<pos || pos<0 || len<0){return -2;}
+
+ #ifndef __GNUC__
+ Uint16 *uni=new Uint16[len+2]; //ANSI C++
+ #else
+ Uint16 uni[len+2];
+ #endif
+
+ int ret;
+
+ int i;
+ if(pos!=0){
+ for(i=0; i<pos; i++){ //Convert Latin1 => Uni
+ uni[i]=(unsigned char)string[i];
+ }
+ }
+ uni[pos]=0;
+
+ ret=sge_tt_input_UNI(screen,font,uni,flags,pos,len,x,y,fcol,bcol,Alpha);
+
+ memset(string,0,sizeof(char)*(pos+1));
+ if(ret>0){
+ for( i=0; i<=ret; i++){ //Convert Uni => Latin1
+ string[i] = (char)uni[i];
+ }
+ }
+
+ #ifndef __GNUC__
+ delete[] uni;
+ #endif
+
+ return ret;
+}
+
+
+//==================================================================================
+// Text input Latin1 (RGB)
+//==================================================================================
+int sge_tt_input(SDL_Surface *screen,sge_TTFont *font,char *string,Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR,Uint8 bG,Uint8 bB, int Alpha)
+{
+ return sge_tt_input(screen,font,string,flags,pos,len,x,y,SDL_MapRGB(screen->format, fR,fG,fB),SDL_MapRGB(screen->format, bR,bG,bB),Alpha);
+}
+#endif /* _SGE_NOTTF */
diff --git a/src/sge_tt_text.h b/src/sge_tt_text.h
new file mode 100644
index 0000000..b6d3150
--- /dev/null
+++ b/src/sge_tt_text.h
@@ -0,0 +1,101 @@
+/*
+* SDL Graphics Extension
+* Text/TrueType functions (header)
+*
+* Started 990815
+*
+* License: LGPL v2+ (see the file LICENSE)
+* (c)1999-2001 Anders Lindstr?m
+*
+* Uses the excellent FreeType 2 library, available at:
+* http://www.freetype.org/
+*/
+
+/*********************************************************************
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ *********************************************************************/
+
+#ifndef sge_tt_text_H
+#define sge_tt_text_H
+
+#include <SDL/SDL.h>
+#include "sge_internal.h"
+
+/* Text input flags */
+#define SGE_IBG SGE_FLAG1
+#define SGE_IDEL SGE_FLAG2
+#define SGE_INOKR SGE_FLAG3
+
+#ifndef _SGE_NOTTF
+/* the truetype font structure */
+typedef struct _sge_TTFont sge_TTFont;
+
+/* Font style */
+#define SGE_TTF_NORMAL SGE_FLAG0
+#define SGE_TTF_BOLD SGE_FLAG1
+#define SGE_TTF_ITALIC SGE_FLAG2
+#define SGE_TTF_UNDERLINE SGE_FLAG3
+#endif /* _SGE_NOTTF */
+
+#ifdef _SGE_C
+extern "C" {
+#endif
+#ifndef _SGE_NOTTF
+DECLSPEC void sge_TTF_AAOff(void);
+DECLSPEC void sge_TTF_AAOn(void);
+DECLSPEC void sge_TTF_AA_Alpha(void);
+
+DECLSPEC int sge_TTF_Init(void);
+DECLSPEC sge_TTFont *sge_TTF_OpenFont(const char *file, int ptsize);
+DECLSPEC int sge_TTF_SetFontSize(sge_TTFont *font, int ptsize);
+
+DECLSPEC int sge_TTF_FontHeight(sge_TTFont *font);
+DECLSPEC int sge_TTF_FontAscent(sge_TTFont *font);
+DECLSPEC int sge_TTF_FontDescent(sge_TTFont *font);
+DECLSPEC int sge_TTF_FontLineSkip(sge_TTFont *font);
+
+DECLSPEC void sge_TTF_SetFontStyle(sge_TTFont *font, Uint8 style);
+DECLSPEC Uint8 sge_TTF_GetFontStyle(sge_TTFont *font);
+
+DECLSPEC void sge_TTF_CloseFont(sge_TTFont *font);
+
+DECLSPEC SDL_Rect sge_TTF_TextSizeUNI(sge_TTFont *font, const Uint16 *text);
+DECLSPEC SDL_Rect sge_TTF_TextSize(sge_TTFont *Font, const char *Text);
+
+DECLSPEC SDL_Rect sge_tt_textout(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint32 fcolor, Uint32 bcolor, int Alpha);
+DECLSPEC SDL_Rect sge_tt_textout_UTF8(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint32 fcolor, Uint32 bcolor, int Alpha);
+DECLSPEC SDL_Rect sge_tt_textout_UNI(SDL_Surface *Surface, sge_TTFont *font, const Uint16 *uni, Sint16 x, Sint16 y, Uint32 fcolor, Uint32 bcolor, int Alpha);
+
+DECLSPEC SDL_Rect sge_tt_textoutf(SDL_Surface *Surface, sge_TTFont *font, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha , const char *format,...);
+
+DECLSPEC int sge_tt_input_UNI(SDL_Surface *screen,sge_TTFont *font,Uint16 *string,Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol, int Alpha);
+DECLSPEC int sge_tt_input(SDL_Surface *screen,sge_TTFont *font,char *string,Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol, int Alpha);
+
+DECLSPEC SDL_Surface *sge_TTF_RenderUNICODE(sge_TTFont *font,const Uint16 *text, SDL_Color fg, SDL_Color bg);
+DECLSPEC SDL_Rect fast_update(SDL_Surface *Surface,SDL_Surface *buffer,SDL_Rect ret, int type,sge_TTFont *font,Uint16 *string, Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol,int Alpha);
+DECLSPEC SDL_Rect nice_update(SDL_Surface *Surface,SDL_Surface *buffer,SDL_Rect ret, int type,sge_TTFont *font,Uint16 *string, Sint16 x,Sint16 y, Uint32 fcol, Uint32 bcol, int Alpha);
+#endif /* _SGE_NOTTF */
+
+DECLSPEC int keyrepeat(SDL_Event *event, int wait);
+DECLSPEC void insert_char(Uint16 *string, Uint16 ch, int pos, int max);
+DECLSPEC void delete_char(Uint16 *string, int pos, int max);
+DECLSPEC Uint16 *sge_Latin1_Uni(const char *text);
+#ifdef _SGE_C
+}
+#endif
+
+
+#ifndef sge_C_ONLY
+#ifndef _SGE_NOTTF
+DECLSPEC SDL_Rect sge_tt_textout(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha);
+DECLSPEC SDL_Rect sge_tt_textout_UTF8(SDL_Surface *Surface, sge_TTFont *font, const char *string, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha);
+DECLSPEC SDL_Rect sge_tt_textout_UNI(SDL_Surface *Surface, sge_TTFont *font, const Uint16 *uni, Sint16 x, Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR, Uint8 bG, Uint8 bB, int Alpha);
+DECLSPEC int sge_tt_input_UNI(SDL_Surface *screen,sge_TTFont *font,Uint16 *string,Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR,Uint8 bG,Uint8 bB, int Alpha);
+DECLSPEC int sge_tt_input(SDL_Surface *screen,sge_TTFont *font,char *string,Uint8 flags, int pos,int len,Sint16 x,Sint16 y, Uint8 fR, Uint8 fG, Uint8 fB, Uint8 bR,Uint8 bG,Uint8 bB, int Alpha);
+#endif /* _SGE_NOTTF */
+#endif /* sge_C_ONLY */
+
+#endif /* sge_tt_text_H */
diff --git a/stamp-h.in b/stamp-h.in
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/stamp-h.in
@@ -0,0 +1 @@
+timestamp

File Metadata

Mime Type
text/x-diff
Expires
Wed, Feb 4, 2:16 PM (1 h, 57 m ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
f7/ea/a069d251e53949dc6b0168736ca0
Default Alt Text
(1 MB)

Event Timeline